diff options
Diffstat (limited to 'modules_v2')
526 files changed, 54725 insertions, 0 deletions
diff --git a/modules_v2/GEDFact_assistant/CENS_ctrl.php b/modules_v2/GEDFact_assistant/CENS_ctrl.php new file mode 100644 index 0000000000..1ae9801075 --- /dev/null +++ b/modules_v2/GEDFact_assistant/CENS_ctrl.php @@ -0,0 +1,56 @@ +<?php +/** + * GEDFact page + * + * GEDFact Census information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Census Assistant + * @version $Id$ + */ + +$controller = new WT_Controller_Individual(); +$controller->init(); + +global $USE_THUMBS_MAIN, $tabno; +global $linkToID; +global $SEARCH_SPIDER, $GOOGLEMAP_PH_CONTROLS; + + global $WT_IMAGES, $SHOW_AGE_DIFF; + global $GEDCOM, $ABBREVIATE_CHART_LABELS; + global $show_full; + global $famid; + + $summary=$controller->indi->format_first_major_fact(WT_EVENTS_BIRT, 2); + if (!($controller->indi->isDead())) { + // If alive display age + $bdate=$controller->indi->getBirthDate(); + $age = WT_Date::GetAgeGedcom($bdate); + if ($age!="") + $summary.= "<span class=\"label\">".WT_I18N::translate('Age').":</span><span class=\"field\"> ".get_age_at_event($age, true)."</span>"; + } + $summary.=$controller->indi->format_first_major_fact(WT_EVENTS_DEAT, 2); + + $controller->census_assistant(); + +// print_footer(); diff --git a/modules_v2/GEDFact_assistant/MEDIA_ctrl.php b/modules_v2/GEDFact_assistant/MEDIA_ctrl.php new file mode 100644 index 0000000000..16d7220e26 --- /dev/null +++ b/modules_v2/GEDFact_assistant/MEDIA_ctrl.php @@ -0,0 +1,60 @@ +<?php +/** + * GEDFact page + * + * GEDFact information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + */ + +$controller = new WT_Controller_Individual(); +$controller->init(); +echo '<link href="'.WT_MODULES_DIR.'GEDFact_assistant/css/gf_styles.css" rel="stylesheet" type="text/css" media="screen" />'; + +global $USE_THUMBS_MAIN, $tabno; +global $linkToID; +global $SEARCH_SPIDER, $GOOGLEMAP_PH_CONTROLS; + + global $WT_IMAGES, $SHOW_AGE_DIFF; + global $GEDCOM, $ABBREVIATE_CHART_LABELS; + global $show_full; + global $famid, $censyear, $censdate; + +// print_simple_header("Census"); + + $summary=$controller->indi->format_first_major_fact(WT_EVENTS_BIRT, 2); + if (!($controller->indi->isDead())) { + // If alive display age + $bdate=$controller->indi->getBirthDate(); + $age = WT_Date::GetAgeGedcom($bdate); + //if ($age!="") { + //$summary.= "<span class=\"label\">".WT_I18N::translate('Age').":</span><span class=\"field\"> ".get_age_at_event($age, true)."</span>"; + //} + } + $summary.=$controller->indi->format_first_major_fact(WT_EVENTS_DEAT, 2); + + $controller->medialink_assistant(); + +// print_footer(); diff --git a/modules_v2/GEDFact_assistant/_CENS/addnoteaction_assisted.php b/modules_v2/GEDFact_assistant/_CENS/addnoteaction_assisted.php new file mode 100644 index 0000000000..d5828efc89 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/addnoteaction_assisted.php @@ -0,0 +1,142 @@ +<?php +/** +* Include for GEDFact Assistant - Census. +* +* webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView +* Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* @package webtrees + * @subpackage GEDFact_assistant +* @version $Id$ +*/ + +// This file is required by the addnoteaction_assisted function in edit_interface.php + +//------------------------------------------------------------------------------ +//-- create a shared note record from the incoming variables + + if (WT_DEBUG) { + phpinfo(INFO_VARIABLES); + } + $newgedrec = "0 @XREF@ NOTE\n"; + + if (isset($_REQUEST['EVEN'])) $EVEN = $_REQUEST['EVEN']; + if (!empty($EVEN) && count($EVEN)>0) { + $newgedrec .= "1 DATA\n"; + $newgedrec .= "2 EVEN ".implode(",", $EVEN)."\n"; + if (!empty($EVEN_DATE)) $newgedrec .= "3 DATE ".$EVEN_DATE."\n"; + if (!empty($EVEN_PLAC)) $newgedrec .= "3 PLAC ".$EVEN_PLAC."\n"; + if (!empty($AGNC)) $newgedrec .= "2 AGNC ".$AGNC."\n"; + } + if (isset($_REQUEST['ABBR'])) $ABBR = $_REQUEST['ABBR']; + if (isset($_REQUEST['TITL'])) $TITL = $_REQUEST['TITL']; + if (isset($_REQUEST['DATE'])) $DATE = $_REQUEST['DATE']; + if (isset($_REQUEST['NOTE'])) $NOTE = $_REQUEST['NOTE']; + if (isset($_REQUEST['_HEB'])) $_HEB = $_REQUEST['_HEB']; + if (isset($_REQUEST['ROMN'])) $ROMN = $_REQUEST['ROMN']; + if (isset($_REQUEST['AUTH'])) $AUTH = $_REQUEST['AUTH']; + if (isset($_REQUEST['PUBL'])) $PUBL = $_REQUEST['PUBL']; + if (isset($_REQUEST['REPO'])) $REPO = $_REQUEST['REPO']; + if (isset($_REQUEST['CALN'])) $CALN = $_REQUEST['CALN']; + + if (isset($_REQUEST['pid_array'])) $pid_array = $_REQUEST['pid_array']; + if (isset($_REQUEST['pid'])) $pid = $_REQUEST['pid']; + + global $pid; + + if (!empty($NOTE)) { + $newlines = preg_split("/\r?\n/", $NOTE, -1); + for ($k=0; $k<count($newlines); $k++) { + if ($k==0 && count($newlines)>1) { + $newgedrec = "0 @XREF@ NOTE $newlines[$k]\n"; + } else if ($k==0) { + $newgedrec = "0 @XREF@ NOTE $newlines[$k]\n1 CONT\n"; + } else { + $newgedrec .= "1 CONT $newlines[$k]\n"; + } + } + } + + if (!empty($ABBR)) $newgedrec .= "1 ABBR $ABBR\n"; + if (!empty($TITL)) { + // $newgedrec .= "1 TITL $TITL\n"; + // $newgedrec .= "2 DATE $DATE\n"; + if (!empty($_HEB)) $newgedrec .= "2 _HEB $_HEB\n"; + if (!empty($ROMN)) $newgedrec .= "2 ROMN $ROMN\n"; + } + if (!empty($AUTH)) $newgedrec .= "1 AUTH $AUTH\n"; + if (!empty($PUBL)) { + $newlines = preg_split("/\r?\n/", $PUBL, -1, PREG_SPLIT_NO_EMPTY); + foreach ($newlines as $k=>$line) { + if ($k==0) { + $newgedrec .= "1 PUBL $line\n"; + } else { + $newgedrec .= "2 CONT $line\n"; + } + } + } + if (!empty($NOTE)) { + //$newgedrec .= "1 NOTE @$NOTE@\n"; + if (!empty($CALN)) $newgedrec .= "2 CALN $CALN\n"; + } + if (WT_DEBUG) { + echo "<pre>$newgedrec</pre>"; + } + // $xref = "Test"; + if ($pid_array != '') { + $xref = append_gedrec($newgedrec, WT_GED_ID); + } else { + $xref="none"; + echo "<br /><br /><br />"; + echo "<div class=indent> No individuals entered, close and try again </div>"; + echo "<br /><br /><br />"; + } + + if ($xref != "none") { + echo "<br /><br />\n".WT_I18N::translate('New Shared Note created successfully.')." (".$xref.")<br /><br />"; + echo "<br /><br />"; + echo " The Census event (when saved) will be linked to Indi id's: ". $pid_array; + echo "<br /><br />"; + echo "<br /><br />"; + echo " <a href=\"javascript://NOTE $xref\" onclick=\"openerpasteid('$xref'); return false;\">".WT_I18N::translate('Paste the following ID into your editing fields to reference the newly created record ')." <b>$xref</b></a>\n"; + echo "<br /><br /><br /><br />"; + + ?> + <script> + if (parent.opener.document.getElementById("pids_array_edit") == null || parent.opener.document.getElementById("pids_array_edit") == 'undefined') { + //alert ("EDIT NOT HERE"); + } else { + //alert("WE ARE EDITING an EVENT"); + //alert(parent.opener.document.editform.pids_array_edit.value); + parent.opener.document.editform.pids_array_edit.value="<?php echo $pid_array; ?>"; + //alert(parent.opener.document.editform.pids_array_edit.value); + } + if (parent.opener.document.getElementById("pids_array_add") == null || parent.opener.document.getElementById("pids_array_add") == 'undefined') { + //alert ("ADD NOT HERE"); + } else { + //alert("WE ARE ADDING an EVENT"); + //alert(parent.opener.document.addform.pids_array_add.value); + parent.opener.document.addform.pids_array_add.value="<?php echo $pid_array; ?>"; + //alert(parent.opener.document.addform.pids_array_add.value); + } + </script> + <?php + echo "<br /><br /><br /><br />"; + } diff --git a/modules_v2/GEDFact_assistant/_CENS/census_1_ctrl.php b/modules_v2/GEDFact_assistant/_CENS/census_1_ctrl.php new file mode 100644 index 0000000000..dd09c90c00 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/census_1_ctrl.php @@ -0,0 +1,122 @@ +<?php +// Census Assistant Control module for webtrees +// +// Census information about an individual +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + + if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +global $summary, $censyear, $censdate; + +$pid = safe_get('pid'); + +$censdate = new WT_Date("31 MAR 1901"); +$censyear = $censdate->date1->y; + +$ctry = "UK"; +// $married = WT_Date::Compare($censdate, $marrdate); + +// === Set $married to "Not married as we only want the Birth name here" === +$married=-1; + +$person=WT_Person::getInstance($pid); +// var_dump($person->getAllNames()); +$nam = $person->getAllNames(); +if (PrintReady($person->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($person->getDeathYear()); } +if (PrintReady($person->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($person->getBirthYear()); } +$fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; +$fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); +$fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); +$wholename = $fulln; + +$currpid=$pid; + +echo '<script src="', WT_MODULES_DIR, 'GEDFact_assistant/_CENS/js/dynamicoptionlist.js" type="text/javascript"></script>'; +echo '<script src="', WT_MODULES_DIR, 'GEDFact_assistant/_CENS/js/date.js" type="text/javascript"></script>'; + +echo WT_JS_START; +echo "var TheCenYear = opener.document.getElementById('setyear').value;"; +echo "var TheCenCtry = opener.document.getElementById('setctry').value;"; +echo WT_JS_END; + + + // Header of assistant window ===================================================== + echo "<div class=\"cens_header\">"; + echo "<div class=\"cens_header_left\">"; + echo WT_I18N::translate('Head of Household:'); + echo " " . $wholename . " (" . $pid . ")"; + echo "</div>"; + if ($summary) { + echo "<div class=\"cens_header_right\"/>". $summary. "</div>"; + } + echo "</div>"; + + + //-- Census & Source Information Area ============================================= + echo "<div class=\" cens_container\">"; + echo "<span >"; + require WT_ROOT.WT_MODULES_DIR.'GEDFact_assistant/_CENS/census_2_source_input.php'; + echo "</span>"; + //-- Proposed Census Text Area ================================================ + echo "<span>"; + require WT_ROOT.WT_MODULES_DIR.'GEDFact_assistant/_CENS/census_4_text.php'; + echo "</span>"; + echo "</div>"; + + //-- Search and Add Family Members Area ========================================== + echo "<div class=\"optionbox cens_search\" style=\"overflow:-moz-scrollbars-horizontal;overflow-x:hidden;overflow-y:scroll;\">"; + ?><!--[if lte IE 7]><style>.cens_search{margin-top:-0.7em;}</style><![EndIf]--><?php + require WT_ROOT.WT_MODULES_DIR.'GEDFact_assistant/_CENS/census_3_search_add.php'; + echo "</div>"; + + //-- Census Text Input Area ======================================================= + ?> + <div class="optionbox cens_textinput"> + <div class="cens_textinput_left"> + <input type="button" value="<?php echo WT_I18N::translate('Add/Insert Blank Row'); ?>" onclick="insertRowToTable('', '', '', '', '', '', '', '', 'Age', '', '', '', '', '', '');" /> + </div> + <div class="cens_textinput_right"> + <?php echo WT_I18N::translate('Add'); ?><br> + <input type="radio" name="totallyrad" value="0" checked="checked" /> + </div> + <?php + + //-- Census Add Rows Area ========================================================= + echo "<div class=\"cens_addrows\">"; + require WT_ROOT.WT_MODULES_DIR.'GEDFact_assistant/_CENS/census_5_input.php'; + echo "</div>"; + ?> + </div> + + +<script> + +</script> + +<script type="text/javascript"> + window.onLoad = initDynamicOptionLists(); +</script> diff --git a/modules_v2/GEDFact_assistant/_CENS/census_2_source_input.php b/modules_v2/GEDFact_assistant/_CENS/census_2_source_input.php new file mode 100644 index 0000000000..3307b33ee9 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/census_2_source_input.php @@ -0,0 +1,1044 @@ +<?php +/** + * Census Assistant Control module for webtrees + * + * Census and Souce Input Area File File + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2007 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + * @author Brian Holland + */ +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} +global $TEXT_DIRECTION; +?> + +<script> + function getCenDate(cenyear) { + // Calculate census date from the census year selected + // UK CENSUS DATES + if (cenyear == 1841) { var cendate = new Date(1841, 5, 06); // 06 JUN 1841 + } else if (cenyear == 1851) { var cendate = new Date(1851, 2, 30); // 30 MAR 1851 + } else if (cenyear == 1861) { var cendate = new Date(1861, 3, 07); // 07 APR 1861 + } else if (cenyear == 1871) { var cendate = new Date(1871, 3, 02); // 02 APR 1871 + } else if (cenyear == 1881) { var cendate = new Date(1881, 3, 03); // 03 APR 1881 + } else if (cenyear == 1891) { var cendate = new Date(1891, 3, 05); // 05 APR 1891 + } else if (cenyear == 1901) { var cendate = new Date(1901, 2, 31); // 31 MAR 1901 + } else if (cenyear == 1911) { var cendate = new Date(1911, 3, 02); // 02 APR 1911 + } else if (cenyear == 1921) { var cendate = new Date(1921, 3, 02); // 02 APR 1921 // For Test Purposes + } else if (cenyear == 1931) { var cendate = new Date(1931, 3, 02); // 02 APR 1931 // For Test Purposes + // USA CENSUS DATES + } else if (cenyear == 1790) { var cendate = new Date(1790, 7, 02); // 02 AUG 1790 + } else if (cenyear == 1800) { var cendate = new Date(1800, 7, 04); // 04 AUG 1800 + } else if (cenyear == 1810) { var cendate = new Date(1810, 7, 06); // 06 AUG 1810 + } else if (cenyear == 1820) { var cendate = new Date(1820, 7, 07); // 07 AUG 1820 + } else if (cenyear == 1830) { var cendate = new Date(1830, 5, 01); // 01 JUN 1830 + } else if (cenyear == 1840) { var cendate = new Date(1840, 5, 01); // 01 JUN 1840 + } else if (cenyear == 1850) { var cendate = new Date(1850, 5, 01); // 01 JUN 1850 + } else if (cenyear == 1860) { var cendate = new Date(1860, 5, 01); // 01 JUN 1860 + } else if (cenyear == 1870) { var cendate = new Date(1870, 5, 01); // 01 JUN 1870 + } else if (cenyear == 1880) { var cendate = new Date(1880, 5, 01); // 01 JUN 1880 + } else if (cenyear == 1890) { var cendate = new Date(1890, 5, 01); // 01 JUN 1890 + } else if (cenyear == 1900) { var cendate = new Date(1900, 5, 01); // 01 JUN 1900 + } else if (cenyear == 1910) { var cendate = new Date(1910, 3, 15); // 15 APR 1910 + } else if (cenyear == 1920) { var cendate = new Date(1920, 0, 01); // 01 JAN 1920 + } else if (cenyear == 1930) { var cendate = new Date(1930, 3, 01); // 01 APR 1930 + } else if (cenyear == 1940) { var cendate = new Date(1940, 3, 01); // 01 APR 1940 + // Default Date + } else { + var cendate = new Date(1901, 2, 31); + } + return cendate; + } + + function getPrevCenDate(cenyear) { + // UK PREVIOUS CENSUS DATES + if (prevcenyear == 1841) { var prevcendate = new Date(1841, 5, 06); // 06 JUN 1841 + } else if (prevcenyear == 1951) { var prevcendate = new Date(1851, 2, 30); // 30 MAR 1851 + } else if (prevcenyear == 1861) { var prevcendate = new Date(1861, 3, 07); // 07 APR 1861 + } else if (prevcenyear == 1871) { var prevcendate = new Date(1871, 3, 02); // 02 APR 1871 + } else if (prevcenyear == 1881) { var prevcendate = new Date(1881, 3, 03); // 03 APR 1881 + } else if (prevcenyear == 1891) { var prevcendate = new Date(1891, 3, 05); // 05 APR 1891 + } else if (prevcenyear == 1901) { var prevcendate = new Date(1901, 2, 31); // 31 MAR 1901 + } else if (prevcenyear == 1911) { var prevcendate = new Date(1911, 3, 02); // 02 APR 1911 + } else if (trevcenyear == 1921) { var prevcendate = new Date(1921, 3, 02); // 02 APR 1921 // For Test Purposes + } else if (prevcenyear == 1931) { var prevcendate = new Date(1931, 3, 02); // 02 APR 1931 // For Test Purposes + // USA PREVIOUS CENSUS DATES + } else if (prevcenyear == 1790) { var prevcendate = new Date(1790, 7, 02); // 02 AUG 1790 + } else if (prevcenyear == 1800) { var prevcendate = new Date(1800, 7, 04); // 04 AUG 1800 + } else if (prevcenyear == 1810) { var prevcendate = new Date(1810, 7, 06); // 06 AUG 1810 + } else if (prevcenyear == 1820) { var prevcendate = new Date(1820, 7, 07); // 07 AUG 1820 + } else if (prevcenyear == 1830) { var prevcendate = new Date(1830, 5, 01); // 01 JUN 1830 + } else if (prevcenyear == 1840) { var prevcendate = new Date(1840, 5, 01); // 01 JUN 1840 + } else if (prevcenyear == 1850) { var prevcendate = new Date(1850, 5, 01); // 01 JUN 1850 + } else if (prevcenyear == 1860) { var prevcendate = new Date(1860, 5, 01); // 01 JUN 1860 + } else if (prevcenyear == 1870) { var prevcendate = new Date(1870, 5, 01); // 01 JUN 1870 + } else if (prevcenyear == 1880) { var prevcendate = new Date(1880, 5, 01); // 01 JUN 1880 + } else if (prevcenyear == 1890) { var prevcendate = new Date(1890, 5, 01); // 01 JUN 1890 + } else if (prevcenyear == 1900) { var prevcendate = new Date(1900, 5, 01); // 01 JUN 1900 + } else if (prevcenyear == 1910) { var prevcendate = new Date(1910, 3, 15); // 15 APR 1910 + } else if (prevcenyear == 1920) { var prevcendate = new Date(1920, 0, 01); // 01 JAN 1920 + } else if (prevcenyear == 1930) { var prevcendate = new Date(1930, 3, 01); // 01 APR 1930 + } else if (prevcenyear == 1940) { var prevcendate = new Date(1940, 3, 01); // 01 APR 1940 + // Default Date + } else { + var prevcendate = new Date(1901, 2, 31); + } + return prevcendate; + } + + function findSource(field) { + pastefield = field; + findwin = window.open('find.php?type=source', '_blank', 'left=50,top=50,width=600,height=500,resizable=1,scrollbars=1'); + return false; + } + function openerpasteid(id) { + window.opener.paste_id(id); + window.close(); + } + + function paste_id(value) { + pastefield.value = value; + } + + function paste_char(value,lang,mag) { + pastefield.value += value; + language_filter = lang; + magnify = mag; + } + + function edit_close(newurl) { + if (newurl) + window.opener.location=newurl; + else + if (window.opener.showchanges) + window.opener.showchanges(); + window.close(); + } + + function changeCtry() { + // Change Year field Colour ---------------------------------------------- + if (document.getElementById('censYear').value=="") { + document.getElementById('censYear').style.backgroundColor = "#ffaaaa"; + } else { + document.getElementById('censYear').style.backgroundColor = "#ffffff"; + } + return; + } + + function changeYear(cenyear) { + + var cenctry=document.getElementById('censCtry').value; + // alert("Set Date is in the "+TheCenCtry+" --- "+"Now in "+cenctry); + + var tbl = document.getElementById('tblSample'); + if (tbl.rows.length==0) { + create_header(); + } + // Change Date field ----------------------------------------------------- + var cendate = getCenDate(cenyear); + var cdate = cendate.format("dd NNN yyyy"); + document.getElementById('censDate').value = cdate; + // Change Year field Colour ---------------------------------------------- + if (document.getElementById('censYear').value=="") { + document.getElementById('censYear').style.backgroundColor = "#ffaaaa"; + } else { + document.getElementById('censYear').style.backgroundColor = "#ffffff"; + } + changeAge(cenyear); + changeCols(cenyear); + changeMC(cenyear); + changeChBorn(cenyear) + preview(); + + // Toggle Countries when the preset UK Cens Date has been been used ------------- + if (TheCenCtry=="UK") { + if (cenyear!=TheCenYear && cenctry!=TheCenCtry) { + // alert('IN THE USA'); + censyear = new DynamicOptionList(); + censyear.addDependentFields("censCtry","censYear"); + censyear.forValue("UK").addOptions("", "1841", "1851", "1861", "1871", "1881", "1891", "1901", "1911", "1921", "1931"); + censyear.forValue("USA").addOptions("", "1790", "1800", "1810", "1820", "1830", "1840", "1850", "1860", "1870", "1880", "1890", "1900", "1910", "1920", "1930", cenyear); + censyear.forValue("UK").setDefaultOptions(""); + censyear.forValue("USA").setDefaultOptions(cenyear); + initDynamicOptionLists(); + TheCenYear=''; + } + if (TheCenYear=='' && cenctry==TheCenCtry) { + // alert('IN THE UK'); + censyear = new DynamicOptionList(); + censyear.addDependentFields("censCtry","censYear"); + censyear.forValue("UK").addOptions("", "1841", "1851", "1861", "1871", "1881", "1891", "1901", "1911", "1921", "1931", cenyear); + censyear.forValue("USA").addOptions("", "1790", "1800", "1810", "1820", "1830", "1840", "1850", "1860", "1870", "1880", "1890", "1900", "1910", "1920", "1930"); + censyear.forValue("UK").setDefaultOptions(cenyear); + censyear.forValue("USA").setDefaultOptions(""); + initDynamicOptionLists(); + TheCenYear=''; + } + } + // Toggle Countries when the preset US Cens Date has been been used ------------- + if (TheCenCtry=="USA") { + if (cenyear!=TheCenYear && cenctry!=TheCenCtry) { + // alert('NOW IN THE UK'); + censyear = new DynamicOptionList(); + censyear.addDependentFields("censCtry","censYear"); + censyear.forValue("UK").addOptions("", "1841", "1851", "1861", "1871", "1881", "1891", "1901", "1911", "1921", "1931", cenyear); + censyear.forValue("USA").addOptions("", "1790", "1800", "1810", "1820", "1830", "1840", "1850", "1860", "1870", "1880", "1890", "1900", "1910", "1920", "1930"); + censyear.forValue("UK").setDefaultOptions(cenyear); + censyear.forValue("USA").setDefaultOptions(""); + initDynamicOptionLists(); + TheCenYear=''; + } + if (TheCenYear=='' && cenctry==TheCenCtry) { + // alert('NOW IN THE USA'); + censyear = new DynamicOptionList(); + censyear.addDependentFields("censCtry","censYear"); + censyear.forValue("UK").addOptions("", "1841", "1851", "1861", "1871", "1881", "1891", "1901", "1911", "1921", "1931"); + censyear.forValue("USA").addOptions("", "1790", "1800", "1810", "1820", "1830", "1840", "1850", "1860", "1870", "1880", "1890", "1900", "1910", "1920", "1930", cenyear); + censyear.forValue("UK").setDefaultOptions(""); + censyear.forValue("USA").setDefaultOptions(cenyear); + initDynamicOptionLists(); + TheCenYear=''; + } + } + + + } + + // Change Marital Condition and Years Married based on Census Year ====================== + function changeMC(cenyear) { + var cendate = getCenDate(cenyear); + // Get Married Date from Input Fields and re-calculate Marital Condition ============ + var tbl = document.getElementById('tblSample'); + for (var i=1; i<tbl.rows.length; i++) { // start at i=1 because we need to avoid header + var tr = tbl.rows[i]; + for (var j=2; j<tr.cells.length; j++) { + if (j!=4 && j!=15) { + // 4 and 15 are the marital condition columns (fields) + // therefore miss out all cols except these marital condition cols + continue; + } else { + var marrcond = (tr.cells[j].childNodes[0].value); + var dob = (tr.cells[11].childNodes[0].value); // DOB Birth date in Julian Format + var yrsmarr = (tr.cells[16].childNodes[0].value); // Years married + var agemarr = (tr.cells[20].childNodes[0].value); // Age at 1st marriage + var dom = (tr.cells[69].childNodes[0].value); // DOM Marriage date in Julian format + var fullnam = (tr.cells[70].childNodes[0].value); // Full Name + var marrnam = (tr.cells[71].childNodes[0].value); // Married Name + var dod = (tr.cells[72].childNodes[0].value); // DOD Death date in Julian format + + var one_day = 1000*60*60*24; + var one_month = (365.26*one_day)/12; + var one_year = 365.26*one_day; + + // Date of Birth (dob) - passed as Julian Date String + if (dob>1721060) { + IJD = Math.floor(dob); + L = Math.floor(IJD + 68569); + N = Math.floor(4 * L / 146097); + L = L - Math.floor((146097*N + 3)/4); + I = Math.floor(4000*(L + 1)/1461001); + L = L - Math.floor(1461 * I / 4) + 31; + J = Math.floor(80 * L / 2447); + K = L - Math.floor(2447 * J / 80); + L = Math.floor(J/11); + J = J + 2 - 12*L; + I = 100*(N - 49) + I + L; + dob = (I+', '+J+', '+K); + } + // Create Date of Birth object from passed string dob + var jsdob = Date.parseString(dob, 'y, M, d'); + + // Date of Marriage (dom) - passed as Julian Date String + if (dom>1721060) { + IJD = Math.floor(dom); + L = Math.floor(IJD + 68569); + N = Math.floor(4 * L / 146097); + L = L - Math.floor((146097*N + 3)/4); + I = Math.floor(4000*(L + 1)/1461001); + L = L - Math.floor(1461 * I / 4) + 31; + J = Math.floor(80 * L / 2447); + K = L - Math.floor(2447 * J / 80); + L = Math.floor(J/11); + J = J + 2 - 12*L; + I = 100*(N - 49) + I + L; + dom = (I+', '+J+', '+K); + } + // Create Date of Marriage object from passed string dom + var jsdom = Date.parseString(dom, 'y, M, d'); + + // Date of Death (dod) - passed as Julian Date String + if (dod>1721060) { + IJD = Math.floor(dod); + L = Math.floor(IJD + 68569); + N = Math.floor(4 * L / 146097); + L = L - Math.floor((146097*N + 3)/4); + I = Math.floor(4000*(L + 1)/1461001); + L = L - Math.floor(1461 * I / 4) + 31; + J = Math.floor(80 * L / 2447); + K = L - Math.floor(2447 * J / 80); + L = Math.floor(J/11); + J = J + 2 - 12*L; + I = 100*(N - 49) + I + L; + dod = (I+', '+J+', '+K); + } + // Create Date of Marriage object from passed string dom + var jsdod = Date.parseString(dod, 'y, M, d'); + + if (cendate > jsdom) { + yrsmarr = Math.floor((cendate-jsdom)/one_year); + agemarr = Math.floor((jsdom-jsdob)/one_year); + marrcond = "M"; + // if married in census year, use "<1" as "under 1" --- + if (yrsmarr == 0) { + yrsmarr = "<1"; + } + } else { + yrsmarr = "-"; + agemarr = "-"; + marrcond = "S"; + } + } + + tr.cells[j].childNodes[0].value = marrcond; + tr.cells[16].childNodes[0].value = yrsmarr; + + //-- If single and USA 1930, set Years married to "-" ------------------ + if (marrcond=="S" && cenyear=="1930") { + tr.cells[20].childNodes[0].value = "-"; + } + //-- If married or widowed set name to married name -------------------- + if (marrcond=="M" || marrcond=="W") { + tr.cells[2].childNodes[0].value = marrnam; + } + //-- If single or unmarried set name to birth (full) name -------------- + if (marrcond=="S" || marrcond=="U") { + tr.cells[2].childNodes[0].value = fullnam; + } + + var age = (tr.cells[7].childNodes[0].value); // Age + + } + } + } + + function changeChBorn(cenyear) { + var cendate = getCenDate(cenyear); + // Get Children born Array from Input Fields and re-calculate Born Alive Died Condition ============ + var tbl = document.getElementById('tblSample'); + for (var i=1; i<tbl.rows.length; i++) { // start at i=1 because we need to avoid header + var tr = tbl.rows[i]; + for (var j=2; j<tr.cells.length; j++) { + if (j!=73) { + // 73 is the Chil born array column + // therefore miss out all cols except this column's cells + continue; + } else { + // Calculate Children Born, Living, Died -------------------------- + var chilBLD = (tr.cells[73].childNodes[0].value); + chBLDarray = chilBLD.split('::'); + var cdat = calculateJD(cendate); + // Variables to be used --------- + var ChilBorn = chBLDarray.length; + //var ChilLivg = "-"; + //var ChilDied = "-"; + var chBLD = new Array(); + var x; + var ALIVE=0; + var DEAD=0; + var NOTBORN=0; + for (x = 0; x<ChilBorn; x++) { + chBLD[x] = new Array(); // This declares each column in turn + chBLDarray2 = chBLDarray[x].split(', '); + var y; + for (y = 0; y<chBLDarray2.length; y++) { + chBLD[x][y] = chBLDarray2[y]; + if (y==2 && (cdat>(chBLD[x][1]) && chBLD[x][1]!=0) && (chBLD[x][2]==0 || cdat<(chBLD[x][2]))) { + ALIVE=ALIVE+1; + } else if (y==2 && cdat>(chBLD[x][2]) && (chBLD[x][2])!=0) { + DEAD=DEAD+1; + } else if (y==2) { + NOTBORN=NOTBORN+1; + } + } + } + var BORN = ALIVE+DEAD; + if (BORN == 0) { + tr.cells[17].childNodes[0].value = "-"; // BORN + tr.cells[18].childNodes[0].value = "-"; // ALIVE + tr.cells[19].childNodes[0].value = "-"; // DEAD + } else { + tr.cells[17].childNodes[0].value = BORN; // BORN + tr.cells[18].childNodes[0].value = ALIVE; // ALIVE + tr.cells[19].childNodes[0].value = DEAD; // DEAD + } + if (ALIVE == 0) { + tr.cells[18].childNodes[0].value = "-"; // ALIVE + } + if (DEAD == 0) { + tr.cells[19].childNodes[0].value = "-"; // DEAD + } + } + } + } + } + + // Change Age based on Census Year ===================================================== + function changeAge(cenyear) { + var base1901 = "<?php echo $censyear; ?>"; + var prevyr = document.getElementById('prevYear'); + if (prevyr.value !="") { + var prevcenyear=prevyr.value; + } else { + // alert("cenyear = "+cenyear+" ... prevcenyear = base_"+base1901); + } + + var cendate = getCenDate(cenyear); + + var one_day = 1000*60*60*24; + var one_month = (365.26*one_day)/12; + var one_year = 365.26*one_day; + + // Get Age from Input Fields and re-calculate ======================================= + var tbl = document.getElementById('tblSample'); + + for (var i=1; i<tbl.rows.length; i++) { // start at i=1 because we need to avoid header + var tr = tbl.rows[i]; + for (var j=2; j<tr.cells.length; j++) { + if (j!=7 && j!=12) { + // miss out all cols except age cols + continue; + } else if (tr.cells[j].childNodes[0].value=="") { + tr.cells[j].childNodes[0].value=null + } else { + // Calculate Birth Year ======================================= + var bage = (tr.cells[68].childNodes[0].value); + // If valid Julian date used, then use this instead ----------- + if (bage>1721060) { + var IJD = Math.floor(bage); + var L = Math.floor(IJD + 68569); + var N = Math.floor(4 * L / 146097); + L = L - Math.floor((146097*N + 3)/4); + var I = Math.floor(4000*(L + 1)/1461001); + L = L - Math.floor(1461 * I / 4) + 31; + var J = Math.floor(80 * L / 2447); + var K = L - Math.floor(2447 * J / 80); + L = Math.floor(J/11); + J = J + 2 - 12*L; + I = 100*(N - 49) + I + L; + bage = (I+', '+J+', '+K); + } + // Calculate Death Year ======================================= + var dage = (tr.cells[72].childNodes[0].value); + // If valid Julian date used, then use this instead ----------- + if (dage>1721060) { + var IJD = Math.floor(dage); + var L = Math.floor(IJD + 68569); + var N = Math.floor(4 * L / 146097); + L = L - Math.floor((146097*N + 3)/4); + var I = Math.floor(4000*(L + 1)/1461001); + L = L - Math.floor(1461 * I / 4) + 31; + var J = Math.floor(80 * L / 2447); + var K = L - Math.floor(2447 * J / 80); + L = Math.floor(J/11); + J = J + 2 - 12*L; + I = 100*(N - 49) + I + L; + dage = (I+', '+J+', '+K); + } + + // Caculate Age (or if Dead) on the selected Census Date =================== + var bage2 = Date.parseString(bage, 'y, M, d'); + var dage2 = Date.parseString(dage, 'y, M, d'); + + if (cendate > dage2) { + newage = "-"; + } else if (bage2 != "Invalid Date") { + var newage = (cendate-bage2); + if (Math.floor(newage/one_year) < 0) { + newage = "-"; + } else if (Math.floor(newage/one_year) > 0) { + newage = Math.floor(newage/one_year); + } else if (Math.floor(newage/one_day) > 31) { + newage = Math.floor(newage/one_month)+"m"; + } else if (Math.floor(newage/one_day) < 31) { + newage = Math.floor(newage/one_day)+"d"; + } else if (Math.floor(newage/one_day) < 0) { + newage = "-"; + } else { + newage = "nn"; + } + if (newage == "nn") { + newage = Math.floor(cendate-bage2/one_year); + } + } else { + newage = "-"; + } + tr.cells[j].childNodes[0].value=newage; + + // Highlight in Pink the Name field and Age fields for any person not born or who died before census date ----- + if (newage != "-") { + tr.cells[2].childNodes[0].style.background = '#ffffff'; + tr.cells[7].childNodes[0].style.background = '#ffffff'; + tr.cells[12].childNodes[0].style.background = '#ffffff'; + } else { + // alert(tr.cells[2].childNodes[0].value+" - Not Born Yet"); + tr.cells[2].childNodes[0].style.background = '#ffaaaa'; + tr.cells[7].childNodes[0].style.background = '#ffaaaa'; + tr.cells[12].childNodes[0].style.background = '#ffaaaa'; + } + + } + } + } + var cens_ctry_a = document.getElementById('censCtry'); + var cens_ctry = cens_ctry_a.value; + document.getElementById('Titl').value = '<?php echo WT_I18N::translate('Census transcript'),' - ',$wholename, ' - ', WT_I18N::translate('Household'); ?>'; + var prev = document.getElementById('prevYear'); + prev.value = cenyear; + } + + // Add or Remove columns =========================== + function changeCols(cenyear) { + var cens_ctry = document.getElementById('censCtry').value; + + var cols_0 = document.getElementsByName('col_0'); + var cols_1 = document.getElementsByName('col_1'); + var cols_2 = document.getElementsByName('col_2'); + var cols_3 = document.getElementsByName('col_3'); + var cols_4 = document.getElementsByName('col_4'); + var cols_5 = document.getElementsByName('col_5'); + var cols_6 = document.getElementsByName('col_6'); + var cols_7 = document.getElementsByName('col_7'); + var cols_8 = document.getElementsByName('col_8'); + var cols_9 = document.getElementsByName('col_9'); + var cols_10 = document.getElementsByName('col_10'); + var cols_11 = document.getElementsByName('col_11'); + var cols_12 = document.getElementsByName('col_12'); + var cols_13 = document.getElementsByName('col_13'); + var cols_14 = document.getElementsByName('col_14'); + var cols_15 = document.getElementsByName('col_15'); + var cols_16 = document.getElementsByName('col_16'); + var cols_17 = document.getElementsByName('col_17'); + var cols_18 = document.getElementsByName('col_18'); + var cols_19 = document.getElementsByName('col_19'); + var cols_20 = document.getElementsByName('col_20'); + var cols_21 = document.getElementsByName('col_21'); + var cols_22 = document.getElementsByName('col_22'); + var cols_23 = document.getElementsByName('col_23'); + var cols_24 = document.getElementsByName('col_24'); + var cols_25 = document.getElementsByName('col_25'); + var cols_26 = document.getElementsByName('col_26'); + var cols_27 = document.getElementsByName('col_27'); + var cols_28 = document.getElementsByName('col_28'); + var cols_29 = document.getElementsByName('col_29'); + var cols_30 = document.getElementsByName('col_30'); + var cols_31 = document.getElementsByName('col_31'); + var cols_32 = document.getElementsByName('col_32'); + var cols_33 = document.getElementsByName('col_33'); + var cols_34 = document.getElementsByName('col_34'); + var cols_35 = document.getElementsByName('col_35'); + var cols_36 = document.getElementsByName('col_36'); + var cols_37 = document.getElementsByName('col_37'); + var cols_38 = document.getElementsByName('col_38'); + var cols_39 = document.getElementsByName('col_39'); + var cols_40 = document.getElementsByName('col_40'); + var cols_41 = document.getElementsByName('col_41'); + var cols_42 = document.getElementsByName('col_42'); + var cols_43 = document.getElementsByName('col_43'); + var cols_44 = document.getElementsByName('col_44'); + var cols_45 = document.getElementsByName('col_45'); + var cols_46 = document.getElementsByName('col_46'); + var cols_47 = document.getElementsByName('col_47'); + var cols_48 = document.getElementsByName('col_48'); + var cols_49 = document.getElementsByName('col_49'); + var cols_50 = document.getElementsByName('col_50'); + var cols_51 = document.getElementsByName('col_51'); + var cols_52 = document.getElementsByName('col_52'); + var cols_53 = document.getElementsByName('col_53'); + var cols_54 = document.getElementsByName('col_54'); + var cols_55 = document.getElementsByName('col_55'); + var cols_56 = document.getElementsByName('col_56'); + var cols_57 = document.getElementsByName('col_57'); + var cols_58 = document.getElementsByName('col_58'); + var cols_59 = document.getElementsByName('col_59'); + var cols_60 = document.getElementsByName('col_60'); + var cols_61 = document.getElementsByName('col_61'); + var cols_62 = document.getElementsByName('col_62'); + var cols_63 = document.getElementsByName('col_63'); + var cols_64 = document.getElementsByName('col_64'); + var cols_65 = document.getElementsByName('col_65'); + var cols_66 = document.getElementsByName('col_66'); + var cols_67 = document.getElementsByName('col_67'); + // var cols_68 = document.getElementsByName('col_68'); + + + var flip_3 = "none"; + var flip_4 = "none"; + var flip_5 = "none"; + var flip_6 = "none"; + var flip_7 = "none"; + var flip_8 = "none"; + var flip_9 = "none"; + var flip_10 = "none"; + var flip_11 = "none"; + var flip_12 = "none"; + var flip_13 = "none"; + var flip_14 = "none"; + var flip_15 = "none"; + var flip_16 = "none"; + var flip_17 = "none"; + var flip_18 = "none"; + var flip_19 = "none"; + var flip_20 = "none"; + var flip_21 = "none"; + var flip_22 = "none"; + var flip_23 = "none"; + var flip_24 = "none"; + var flip_25 = "none"; + var flip_26 = "none"; + var flip_27 = "none"; + var flip_28 = "none"; + var flip_29 = "none"; + var flip_30 = "none"; + var flip_31 = "none"; + var flip_32 = "none"; + var flip_33 = "none"; + var flip_34 = "none"; + var flip_35 = "none"; + var flip_36 = "none"; + var flip_37 = "none"; + var flip_38 = "none"; + var flip_39 = "none"; + var flip_40 = "none"; + var flip_41 = "none"; + var flip_42 = "none"; + var flip_43 = "none"; + var flip_44 = "none"; + var flip_45 = "none"; + var flip_46 = "none"; + var flip_47 = "none"; + var flip_48 = "none"; + var flip_49 = "none"; + var flip_50 = "none"; + var flip_51 = "none"; + var flip_52 = "none"; + var flip_53 = "none"; + var flip_54 = "none"; + var flip_55 = "none"; + var flip_56 = "none"; + var flip_57 = "none"; + var flip_58 = "none"; + var flip_59 = "none"; + var flip_60 = "none"; + var flip_61 = "none"; + var flip_62 = "none"; + var flip_63 = "none"; + var flip_64 = "none"; + var flip_65 = "none"; + var flip_66 = "none"; + var flip_67 = "none"; + // var flip_68 = "none"; + + if (cens_ctry=="UK") { + + if (cenyear=="1911" || cenyear=="1921" || cenyear=="1931") { + flip_3 = ""; + flip_4 = ""; + flip_7 = ""; + flip_9 = ""; + flip_16 = ""; + flip_17 = ""; + flip_18 = ""; + flip_19 = ""; + flip_35 = ""; + flip_37 = ""; + flip_38 = ""; + flip_42 = ""; + flip_50 = ""; + flip_63 = ""; + } else + if (cenyear=="1901") { + flip_3 = ""; + flip_4 = ""; + flip_7 = ""; + flip_9 = ""; + flip_35 = ""; + flip_38 = ""; + flip_42 = ""; + flip_50 = ""; + flip_63 = ""; + } else + if (cenyear=="1891") { + flip_3 = ""; + flip_4 = ""; + flip_7 = ""; + flip_9 = ""; + flip_35 = ""; + flip_39 = ""; + flip_40 = ""; + flip_43 = ""; + flip_50 = ""; + flip_63 = ""; + } else + if (cenyear=="1881" || cenyear=="1871" || cenyear=="1861" || cenyear=="1851") { + flip_3 = ""; + flip_4 = ""; + flip_7 = ""; + flip_9 = ""; + flip_35 = ""; + flip_50 = ""; + flip_63 = ""; + } else + if (cenyear=="1841") { + flip_7 = ""; + flip_9 = ""; + flip_35 = ""; + flip_52 = ""; + flip_53 = ""; + } + + } else if (cens_ctry=="USA") { + if (cenyear=="1930") { + flip_3 = ""; + flip_6 = ""; + flip_9 = ""; + flip_10 = ""; + flip_12 = ""; + flip_15 = ""; + flip_20 = ""; + flip_46 = ""; + flip_51 = ""; + flip_54 = ""; + flip_55 = ""; + flip_56 = ""; + flip_57 = ""; + flip_58 = ""; + flip_59 = ""; + flip_60 = ""; + flip_61 = ""; + flip_62 = ""; + flip_65 = ""; + flip_66 = ""; + } else + if (cenyear=="1920") { + flip_3 = ""; + flip_5 = ""; + flip_9 = ""; + flip_10 = ""; + flip_12 = ""; + flip_15 = ""; + flip_31 = ""; + flip_32 = ""; + flip_33 = ""; + flip_46 = ""; + flip_51 = ""; + flip_54 = ""; + flip_55 = ""; + flip_56 = ""; + flip_59 = ""; + flip_60 = ""; + flip_61 = ""; + flip_62 = ""; + } else + if (cenyear=="1910") { + flip_3 = ""; + flip_9 = ""; + flip_10 = ""; + flip_12 = ""; + flip_15 = ""; + flip_16 = ""; + flip_17 = ""; + flip_18 = ""; + //flip_22 = ""; + flip_27 = ""; + flip_28 = ""; + flip_29 = ""; + //flip_30 = ""; + flip_31 = ""; + flip_32 = ""; + flip_34 = ""; + flip_35 = ""; + flip_37 = ""; + flip_38 = ""; + flip_43 = ""; + flip_44 = ""; + flip_46 = ""; + flip_49 = ""; + flip_65 = ""; + flip_67 = ""; + } else + if (cenyear=="1900") { + flip_3 = ""; + flip_8 = ""; + flip_9 = ""; + flip_11 = ""; + flip_12 = ""; + flip_15 = ""; + flip_16 = ""; + flip_17 = ""; + flip_18 = ""; + //flip_22 = ""; + flip_27 = ""; + flip_28 = ""; + flip_29 = ""; + flip_30 = ""; + flip_31 = ""; + flip_32 = ""; + flip_35 = ""; + flip_45 = ""; + flip_46 = ""; + flip_48 = ""; + flip_49 = ""; + } else + if (cenyear=="1890") { + flip_3 = ""; + flip_8 = ""; + flip_9 = ""; + //flip_11 = ""; + flip_12 = ""; + flip_15 = ""; + flip_16 = ""; + flip_17 = ""; + flip_18 = ""; + //flip_22 = ""; + flip_27 = ""; + flip_28 = ""; + flip_29 = ""; + flip_30 = ""; + flip_32 = ""; + flip_35 = ""; + flip_38 = ""; + flip_41 = ""; + flip_46 = ""; + flip_48 = ""; + flip_64 = ""; + } else + if (cenyear=="1880") { + flip_8 = ""; + flip_9 = ""; + flip_12 = ""; + flip_13 = ""; + flip_14 = ""; + flip_15 = ""; + flip_16 = ""; + flip_35 = ""; + flip_36 = ""; + //flip_42 = ""; + flip_45 = ""; + flip_47= ""; + flip_48 = ""; + flip_51 = ""; + flip_54= ""; + flip_55 = ""; + } else + if (cenyear=="1870" ) { + flip_7 = ""; + flip_9 = ""; + flip_10 = ""; + flip_21 = ""; + flip_22 = ""; + flip_23 = ""; + flip_24 = ""; + flip_25 = ""; + flip_26 = ""; + flip_47 = ""; + flip_63 = ""; + } else + if (cenyear=="1860" || cenyear=="1850") { + flip_7 = ""; + flip_9 = ""; + flip_10 = ""; + flip_21 = ""; + flip_22 = ""; + flip_23 = ""; + flip_26 = ""; + flip_47 = ""; + flip_63 = ""; + } + + } + + // Hide or show =============== + for (var i=0; i<cols_0.length; i++) { + cols_3[i].style.display = flip_3; + cols_4[i].style.display = flip_4; + cols_5[i].style.display = flip_5; + cols_6[i].style.display = flip_6; + cols_7[i].style.display = flip_7; + cols_8[i].style.display = flip_8; + cols_9[i].style.display = flip_9; + cols_10[i].style.display = flip_10; + cols_11[i].style.display = flip_11; + cols_12[i].style.display = flip_12; + cols_13[i].style.display = flip_13; + cols_14[i].style.display = flip_14; + cols_15[i].style.display = flip_15; + cols_16[i].style.display = flip_16; + cols_17[i].style.display = flip_17; + cols_18[i].style.display = flip_18; + cols_19[i].style.display = flip_19; + cols_20[i].style.display = flip_20; + cols_21[i].style.display = flip_21; + cols_22[i].style.display = flip_22; + cols_23[i].style.display = flip_23; + cols_24[i].style.display = flip_24; + cols_25[i].style.display = flip_25; + cols_26[i].style.display = flip_26; + cols_27[i].style.display = flip_27; + cols_28[i].style.display = flip_28; + cols_29[i].style.display = flip_29; + cols_30[i].style.display = flip_30; + cols_31[i].style.display = flip_31; + cols_32[i].style.display = flip_32; + cols_33[i].style.display = flip_33; + cols_34[i].style.display = flip_34; + cols_35[i].style.display = flip_35; + cols_36[i].style.display = flip_36; + cols_37[i].style.display = flip_37; + cols_38[i].style.display = flip_38; + cols_39[i].style.display = flip_39; + cols_40[i].style.display = flip_40; + cols_41[i].style.display = flip_41; + cols_42[i].style.display = flip_42; + cols_43[i].style.display = flip_43; + cols_44[i].style.display = flip_44; + cols_45[i].style.display = flip_45; + cols_46[i].style.display = flip_46; + cols_47[i].style.display = flip_47; + cols_48[i].style.display = flip_48; + cols_49[i].style.display = flip_49; + cols_50[i].style.display = flip_50; + cols_51[i].style.display = flip_51; + cols_52[i].style.display = flip_52; + cols_53[i].style.display = flip_53; + cols_54[i].style.display = flip_54; + cols_55[i].style.display = flip_55; + cols_56[i].style.display = flip_56; + cols_57[i].style.display = flip_57; + cols_58[i].style.display = flip_58; + cols_59[i].style.display = flip_59; + cols_60[i].style.display = flip_60; + cols_61[i].style.display = flip_61; + cols_62[i].style.display = flip_62; + cols_63[i].style.display = flip_63; + cols_64[i].style.display = flip_64; + cols_65[i].style.display = flip_65; + cols_66[i].style.display = flip_66; + cols_67[i].style.display = flip_67; + //cols_68[i].style.display = flip_68; + } + } + +</script> + +<div class="optionbox cens_sour"> + <div class="cens_sour_country"> + <span><?php echo WT_I18N::translate('Country'); ?><br /></span> + <select id="censCtry" name="censCtry" > + <option id="UKOPT" name="UKOPT" value="UK">UK</option> + <option id="USOPT" name="USOPT" value="USA">USA</option> + </select> + + <script type="text/javascript"> + if (TheCenYear=='') { + var censyear = new DynamicOptionList(); + censyear.addDependentFields("censCtry","censYear"); + censyear.forValue("UK").addOptions( "", "1841", "1851", "1861", "1871", "1881", "1891", "1901", "1911", "1921", "1931"); + censyear.forValue("USA").addOptions( "", "1790", "1800", "1810", "1820", "1830", "1840", "1850", "1860", "1870", "1880", "1890", "1900", "1910", "1920", "1930"); + censyear.forValue("UK").setDefaultOptions(""); + censyear.forValue("USA").setDefaultOptions(""); + } + else if (TheCenYear!='' && TheCenCtry=='UK') { + var censyear = new DynamicOptionList(); + censyear.addDependentFields("censCtry","censYear"); + censyear.forValue("UK").addOptions( "", "1841", "1851", "1861", "1871", "1881", "1891", "1901", "1911", "1921", "1931", TheCenYear); + censyear.forValue("USA").addOptions( "", "1790", "1800", "1810", "1820", "1830", "1840", "1850", "1860", "1870", "1880", "1890", "1900", "1910", "1920", "1930"); + censyear.forValue("UK").setDefaultOptions(TheCenYear); + censyear.forValue("USA").setDefaultOptions(""); + document.getElementById("UKOPT").selected = true; + document.getElementById("USOPT").selected = false; + } + else if (TheCenYear!='' && TheCenCtry=='USA') { + var censyear = new DynamicOptionList(); + censyear.addDependentFields("censCtry","censYear"); + censyear.forValue("UK").addOptions( "", "1841", "1851", "1861", "1871", "1881", "1891", "1901", "1911", "1921", "1931"); + censyear.forValue("USA").addOptions( "", "1790", "1800", "1810", "1820", "1830", "1840", "1850", "1860", "1870", "1880", "1890", "1900", "1910", "1920", "1930", TheCenYear); + censyear.forValue("UK").setDefaultOptions(""); + censyear.forValue("USA").setDefaultOptions(TheCenYear); + document.getElementById("UKOPT").selected = false; + document.getElementById("USOPT").selected = true; + } + </script> + + <div> + <table><tr><td nowrap="nowrap"> + <br /> + <?php + // echo " ".WT_I18N::translate('Date').": "; + echo "<font size=2>"; + // Input renamed as type=hidden to hide the date field ----- // + // Note Input field is still required ---------------------- // + ?> + <input type="hidden" style="width:6em; background:#bbddff;" id="censDate" name="censDate" type="text" value="<?php echo ""; ?>" READONLY/> + </font> + </td></tr></table> + </div> + + + </div> + + <div class="cens_sour_year"> + <span><?php echo WT_I18N::translate('Year'); ?><br /></span> + <select style = "background:#ffaaaa;"; + onchange = "if (this.options[this.selectedIndex].value!='') { + changeYear(this.options[this.selectedIndex].value); + }" + id="censYear" name="censYear"> + </select> + <input type="hidden" id="prevYear" name="prevYear" value="" /> + </div> + + <div class="cens_sour_scs"> + <div class="cens_sour_1"> + <div class="cens_sour_2"><?php echo WT_I18N::translate('Title'); ?></div> + <script type="text/javascript"> + document.writeln('<input id="Titl" name="Titl" type="text" value="<?php echo WT_I18N::translate('Census transcript'),' - ',$wholename, ' - ', WT_I18N::translate('Household'); ?>" />'); + </script> + </div> + <div class="cens_sour_1"> + <div class="cens_sour_2"><?php echo translate_fact('PAGE'); ?></div> + <input id="citation" name="citation" type="text" value="<?php echo ""; ?>" /> + </div> + <div class="cens_sour_1"> + <div class="cens_sour_2"><?php echo WT_I18N::translate('Place'); ?></div> + <input id="locality" name="locality" type="text" value="<?php echo ""; ?>" /> + </div> + <div class="cens_sour_1"> + <div class="cens_sour_2"><?php echo WT_I18N::translate('Notes'); ?></div> + <input id="notes" name="notes" type="text" value="<?php echo ""; ?>" /> + </div> + </div> +</div> diff --git a/modules_v2/GEDFact_assistant/_CENS/census_3_find.php b/modules_v2/GEDFact_assistant/_CENS/census_3_find.php new file mode 100644 index 0000000000..7dfa616c0c --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/census_3_find.php @@ -0,0 +1,1100 @@ +<?php +/** + * Facility for Census assistant that will allow a user to search for a person + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @version $Id$ + */ + +global $MEDIA_DIRECTORY, $MEDIA_DIRECTORY_LEVELS, $TEXT_DIRECTION, $ABBREVIATE_CHART_LABELS; + +$type =safe_GET('type', WT_REGEX_ALPHA, 'indi'); +$filter =safe_GET('filter'); +$action =safe_GET('action'); +$callback =safe_GET('callback', WT_REGEX_NOSCRIPT, 'paste_id'); +$create =safe_GET('create'); +$media =safe_GET('media'); +$external_links =safe_GET('external_links'); +$directory =safe_GET('directory', WT_REGEX_NOSCRIPT, $MEDIA_DIRECTORY); +$multiple =safe_GET_bool('multiple'); +$showthumb =safe_GET_bool('showthumb'); +$all =safe_GET_bool('all'); +$subclick =safe_GET('subclick'); +$choose =safe_GET('choose', WT_REGEX_NOSCRIPT, '0all'); +$level =safe_GET('level', WT_REGEX_INTEGER, 0); +$language_filter=safe_GET('language_filter'); +$magnify =safe_GET_bool('magnify'); +$qs =safe_GET('tags'); + + + +// Retrives the currently selected tags in the opener window (reading curTags value of the query string) +// $preselDefault will be set to the array of DEFAULT preselected tags +// $preselCustom will be set to the array of CUSTOM preselected tags +function getPreselectedTags(&$preselDefault, &$preselCustom) { + global $FACTS, $qs; + $all = strlen($qs) ? explode(',', strtoupper($qs)) : array(); + $preselDefault = array(); + $preselCustom = array(); + foreach ($all as $one) { + if (array_key_exists($one, $FACTS)) { + $preselDefault[] = $one; + } else { + $preselCustom[] = $one; + } + } +} + +if ($showthumb) { + $thumbget='&showthumb=true'; +} else { + $thumbget=''; +} + +if ($subclick=='all') { + $all=true; +} + +$embed = substr($choose, 0, 1)=="1"; +$chooseType = substr($choose, 1); +if ($chooseType!="media" && $chooseType!="0file") { + $chooseType = "all"; +} + +//-- force the thumbnail directory to have the same layout as the media directory +//-- Dots and slashes should be escaped for the preg_replace +$srch = "/".addcslashes($MEDIA_DIRECTORY, '/.')."/"; +$repl = addcslashes($MEDIA_DIRECTORY."thumbs/", '/.'); +$thumbdir = stripcslashes(preg_replace($srch, $repl, $directory)); + +//-- prevent script from accessing an area outside of the media directory +//-- and keep level consistency +if (($level < 0) || ($level > $MEDIA_DIRECTORY_LEVELS)) { + $directory = $MEDIA_DIRECTORY; + $level = 0; +} elseif (preg_match("'^$MEDIA_DIRECTORY'", $directory)==0) { + $directory = $MEDIA_DIRECTORY; + $level = 0; +} +// End variables for find media + +// Variables for Find Special Character +if (empty($language_filter)) { + if (!empty($_SESSION["language_filter"])) { + $language_filter=$_SESSION["language_filter"]; + } else { + $language_filter=WT_LOCALE; + } +} +require WT_ROOT.'includes/specialchars.php'; +// End variables for Find Special Character + +switch ($type) { +case "indi": + print_simple_header(WT_I18N::translate('Find individual ID')); + break; +case "fam": + print_simple_header(WT_I18N::translate('Find Family List')); + break; +case "media": + print_simple_header(WT_I18N::translate('Find media')); + $action="filter"; + break; +case "place": + print_simple_header(WT_I18N::translate('Find Place')); + $action="filter"; + break; +case "repo": + print_simple_header(WT_I18N::translate('Repositories')); + $action="filter"; + break; +case "note": + print_simple_header(WT_I18N::translate('Find Shared Note')); + $action="filter"; + break; +case "source": + print_simple_header(WT_I18N::translate('Find Source')); + $action="filter"; + break; +case "specialchar": + print_simple_header(WT_I18N::translate('Find Special Characters')); + $action="filter"; + break; +case "facts": + print_simple_header(WT_I18N::translate('Find fact tags')); + echo + WT_JS_START, + 'jQuery(document).ready(function(){ initPickFact(); });', + WT_JS_END; + break; +} + +echo WT_JS_START; +?> + + function pasterow(id, nam, mnam, label, gend, cond, dom, dob, dod, occu, age, birthpl, fbirthpl, mbirthpl, chilBLD) { + window.opener.insertRowToTable(id, nam, mnam, label, gend, cond, dom, dob, dod, occu, age, birthpl, fbirthpl, mbirthpl, chilBLD); + <?php if (!$multiple) echo "window.close();"; ?> + } + + function pasteid(id, name, thumb) { + if (thumb) { + window.opener.<?php echo $callback; ?>(id, name, thumb); + <?php if (!$multiple) echo "window.close();"; ?> + } else { + // GEDFact_assistant ======================== + if (window.opener.document.getElementById('addlinkQueue')) { + window.opener.insertRowToTable(id, name); + // Check if Indi, Fam or source =================== + /* + if (id.match("I")=="I") { + var win01 = window.opener.window.open('edit_interface.php?action=addmedia_links¬eid=newnote&pid='+id, 'win01', 'top=50, left=600, width=420, height=650, resizable=1, scrollbars=1'); + if (window.focus) {win01.focus();} + } else if (id.match("F")=="F") { + // TODO --- alert('Opening Navigator with family id entered will come later'); + } + */ + } + window.opener.<?php echo $callback; ?>(id); + if (window.opener.pastename) window.opener.pastename(name); + <?php if (!$multiple) echo "window.close();"; ?> + } + } + var language_filter; + function paste_char(selected_char, language_filter, magnify) { + window.opener.paste_char(selected_char, language_filter, magnify); + return false; + } + function setMagnify() { + document.filterspecialchar.magnify.value = '<?php echo !$magnify; ?>'; + document.filterspecialchar.submit(); + } + function checknames(frm) { + if (document.forms[0].subclick) button = document.forms[0].subclick.value; + else button = ""; + if (frm.filter.value.length<2&button!="all") { + alert("<?php echo WT_I18N::translate('Please enter more than one character'); ?>"); + frm.filter.focus(); + return false; + } + if (button=="all") { + frm.filter.value = ""; + } + return true; + } +<?php +echo WT_JS_END; + +$options = array(); +$options["option"][]= "findindi"; +$options["option"][]= "findfam"; +$options["option"][]= "findmedia"; +$options["option"][]= "findplace"; +$options["option"][]= "findrepo"; +$options["option"][]= "findnote"; +$options["option"][]= "findsource"; +$options["option"][]= "findspecialchar"; +$options["option"][]= "findfact"; +$options["form"][]= "formindi"; +$options["form"][]= "formfam"; +$options["form"][]= "formmedia"; +$options["form"][]= "formplace"; +$options["form"][]= "formrepo"; +$options["form"][]= "formnote"; +$options["form"][]= "formsource"; +$options["form"][]= "formspecialchar"; + +echo "<div align=\"center\">"; +echo "<table class=\"list_table $TEXT_DIRECTION width90\" border=\"0\">"; +echo "<tr><td style=\"padding: 10px;\" valign=\"top\" class=\"facts_label03 width90\">"; // start column for find text header + +switch ($type) { +case "indi": + echo WT_I18N::translate('Find individual ID'); + break; +case "fam": + echo WT_I18N::translate('Find Family List'); + break; +case "media": + echo WT_I18N::translate('Find media'); + break; +case "place": + echo WT_I18N::translate('Find Place'); + break; +case "repo": + echo WT_I18N::translate('Repositories'); + break; +case "note": + echo WT_I18N::translate('Find Shared Note'); + break; +case "source": + echo WT_I18N::translate('Find Source'); + break; +case "specialchar": + echo WT_I18N::translate('Find Special Characters'); + break; +case "facts": + echo WT_I18N::translate('Find fact tags'); + break; +} + +echo "</td>"; // close column for find text header + +// start column for find options +echo "</tr><tr><td class=\"list_value\" style=\"padding: 5px;\">"; + +// Show indi and hide the rest +if ($type == "indi") { + echo "<div align=\"center\">"; + echo "<form name=\"filterindi\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"indi\" />"; + echo "<input type=\"hidden\" name=\"multiple\" value=\"$multiple\" />"; +/* + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Name contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" value=\"", WT_I18N::translate('Filter'), "\" /><br />"; + echo "</td></tr></table>"; +*/ + echo "</form></div>"; +} + +// Show fam and hide the rest +if ($type == "fam") { + echo "<div align=\"center\">"; + echo "<form name=\"filterfam\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"fam\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"multiple\" value=\"$multiple\" />"; + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Name contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" value=\"", WT_I18N::translate('Filter'), "\" /><br />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show media and hide the rest +if ($type == "media" && $MULTI_MEDIA) { + echo "<div align=\"center\">"; + echo "<form name=\"filtermedia\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"choose\" value=\"", $choose, "\" />"; + echo "<input type=\"hidden\" name=\"directory\" value=\"", $directory, "\" />"; + echo "<input type=\"hidden\" name=\"thumbdir\" value=\"", $thumbdir, "\" />"; + echo "<input type=\"hidden\" name=\"level\" value=\"", $level, "\" />"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"media\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Media contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo help_link('simple_filter'); + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" wstyle=\"padding: 5px;\">"; + echo "<input type=\"checkbox\" name=\"showthumb\" value=\"true\""; + if ($showthumb) echo "checked=\"checked\""; + echo "onclick=\"javascript: this.form.submit();\" />", WT_I18N::translate('Show thumbnails'); + echo help_link('show_thumb'); + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show place and hide the rest +if ($type == "place") { + echo "<div align=\"center\">"; + echo "<form name=\"filterplace\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"place\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Place contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show repo and hide the rest +if ($type == "repo") { + echo "<div align=\"center\">"; + echo "<form name=\"filterrepo\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"repo\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Repository contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show Shared Notes and hide the rest +if ($type == "note") { + echo "<div align=\"center\">"; + echo "<form name=\"filternote\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"note\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Shared Note contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show source and hide the rest +if ($type == "source") { + echo "<div align=\"center\">"; + echo "<form name=\"filtersource\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"source\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Source contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show specialchar and hide the rest +if ($type == "specialchar") { + echo "<div align=\"center\">"; + echo "<form name=\"filterspecialchar\" method=\"get\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"specialchar\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"magnify\" value=\"", $magnify, "\" />"; + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label\" style=\"padding: 5px;\">"; + echo "<select id=\"language_filter\" name=\"language_filter\" onchange=\"submit();\">"; + echo "<option value=\"\">", WT_I18N::translate('Change language'), "</option>"; + $language_options = ""; + foreach ($specialchar_languages as $key=>$value) { + $language_options.= "<option value=\"$key\">$value</option>"; + } + $language_options = str_replace("\"$language_filter\"", "\"$language_filter\" selected", $language_options); + echo $language_options; + echo "</select><br /><a href=\"javascript:;\" onclick=\"setMagnify()\">", WT_I18N::translate('Magnify'), "</a>"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show facts +if ($type == "facts") { + echo "<div align=\"center\">"; + echo "<form name=\"filterfacts\" method=\"get\" action=\"find.php\" >"; + echo "<input type=\"hidden\" name=\"type\" value=\"facts\" />"; + echo "<input type=\"hidden\" name=\"tags\" value=\"$qs\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label $TEXT_DIRECTION\" style=\"padding: 5px; font-weight: normal; white-space: normal;\">"; + getPreselectedTags($preselDefault, $preselCustom); + ?> + <?php echo WT_JS_START; ?> + // A class representing a default tag + function DefaultTag(id, name, selected) { + this.Id=id; + this.Name=name; + this.LowerName=name.toLowerCase(); + this._counter=DefaultTag.prototype._newCounter++; + this.selected=!!selected; + } + DefaultTag.prototype= { + _newCounter:0 + ,view:function() { + var row=document.createElement("tr"),cell,o; + row.appendChild(cell=document.createElement("td")); + o=null; + if (document.all) { + //Old IEs handle the creation of a checkbox already checked, as far as I know, only in this way + try { + o=document.createElement("<input type='checkbox' id='tag"+this._counter+"' "+(this.selected?"checked='checked'":"")+" />"); + } catch(e) { + o=null; + } + } + if (!o) { + o=document.createElement("input"); + o.setAttribute("id","tag"+this._counter); + o.setAttribute("type","checkbox"); + if (this.selected) o.setAttribute("checked", "checked"); + } + o.DefaultTag=this; + o.ParentRow=row; + o.onclick=function() { + this.DefaultTag.selected=!!this.checked; + this.ParentRow.className=this.DefaultTag.selected?"sel":"unsel"; + Lister.recount(); + }; + cell.appendChild(o); + row.appendChild(cell=document.createElement("th")); + cell.appendChild(o=document.createElement("label")); + o.htmlFor="tag"+this._counter; + o.appendChild(document.createTextNode(this.Id)); + row.appendChild(cell=document.createElement("td")); + cell.appendChild(document.createTextNode(this.Name)); + TheList.appendChild(row); + row.className=this.selected?"sel":"unsel"; + } + }; + // Some global variable + var DefaultTags=null /*The list of the default tag*/, TheList=null /* The body of the table that will show the default tabs */; + + // A single-instance class that manage the populating of the table + var Lister= { + _curFilter:null + ,_timer:null + ,clear:function() { + var n=TheList.childNodes.length; + while (n) TheList.removeChild(TheList.childNodes[--n]); + } + ,_clearTimer:function() { + if (this._timer!=null) { + clearTimeout(this._timer); + this._timer=null; + } + } + ,askRefresh:function() { + this._clearTimer(); + this._timer=setTimeout("Lister.refreshNow()",200); + } + ,refreshNow:function(force) { + this._clearTimer(); + var s=document.getElementById("tbxFilter").value.toLowerCase().replace(/\s+/g," ").replace(/^ | $/g,""),k; + if (force||(typeof(this._curFilter)!="string")||(this._curFilter!=s)) { + this._curFilter=s; + this.clear(); + for (k=0;k<DefaultTags.length;k++) { + if (DefaultTags[k].LowerName.indexOf(this._curFilter)>=0) DefaultTags[k].view(); + } + } + } + ,recount:function() { + var k,n=0; + for (k=0;k<DefaultTags.length;k++) + if (DefaultTags[k].selected) + n++; + document.getElementById("layCurSelectedCount").innerHTML=n.toString(); + } + ,showSelected:function() { + this._clearTimer(); + this.clear(); + for (var k=0;k<DefaultTags.length;k++) { + if (DefaultTags[k].selected) + DefaultTags[k].view(); + } + } + }; + + function initPickFact() { + var n,i,j,tmp,preselectedDefaultTags="\x01<?php foreach ($preselDefault as $p) echo addslashes($p), '\\x01'; ?>"; + + DefaultTags=[<?php + $firstFact=TRUE; + foreach ($FACTS as $factId => $factName) { + if (preg_match('/^_?[A-Z0-9]+$/', $factId, $matches)) { + if ($firstFact) $firstFact=FALSE; + else echo ','; + echo 'new DefaultTag("'.addslashes($factId).'","'.addslashes($factName).'",preselectedDefaultTags.indexOf("\\x01'.addslashes($factId).'\\x01")>=0)'; + } + } + ?>]; + //Sort defined tags alphabetically by name + n=DefaultTags.length + for (i=0;i<(n-1);i++) { + for (j=(i+1);j<n;j++) { + if (DefaultTags[i].LowerName>DefaultTags[j].LowerName) { + tmp=DefaultTags[i]; + DefaultTags[i]=DefaultTags[j]; + DefaultTags[j]=tmp; + } + } + } + TheList=document.getElementById("tbDefinedTags"); + i=document.getElementById("tbxFilter"); + i.onkeypress=i.onchange=i.onkeyup=function() { + Lister.askRefresh(); + }; + Lister.recount(); + Lister.refreshNow(); + document.getElementById("btnOk").disabled=false; + } + function DoOK() { + var result=[],k,linearResult,custom; + for (k=0;k<DefaultTags.length;k++) { + if (DefaultTags[k].selected) result.push(DefaultTags[k].Id); + } + linearResult="\x01"+result.join("\x01")+"\x01"; + custom=document.getElementById("tbxCustom").value.toUpperCase().replace(/\s/g,"").split(","); + for (k=0;k<custom.length;k++) { + if (linearResult.indexOf("\x01"+custom[k]+"\x01")<0) { + linearResult+=custom[k]+"\x01"; + result.push(custom[k]); + } + } + result = result.join(",") + if (result.substring(result.length-1, result.length)==',') { + result = result.substring(0, result.length-1); + } + pasteid(result); + window.close(); + return false; + } + <?php echo WT_JS_END; ?> + <div id="layDefinedTags"><table id="tabDefinedTags"> + <thead><tr> + <th> </th> + <th><?php echo WT_I18N::translate('Tag'); ?></th> + <th><?php echo WT_I18N::translate('Description'); ?></th> + </tr></thead> + <tbody id="tbDefinedTags"> + </tbody> + </table></div> + + <table id="tabDefinedTagsShow"><tbody><tr> + <td><a href="#" onclick="Lister.showSelected();return false"><?php echo WT_I18N::translate('Show only selected tags'); ?> (<span id="layCurSelectedCount"></span>)</a></td> + <td><a href="#" onclick="Lister.refreshNow(true);return false"><?php echo WT_I18N::translate('Show all tags'); ?></a></td> + </tr></tbody></table> + + <table id="tabFilterAndCustom"><tbody> + <tr><td><?php echo WT_I18N::translate('Filter'); ?>:</td><td><input type="text" id="tbxFilter" /></td></tr> + <tr><td><?php echo WT_I18N::translate('Custom tags'); ?>:</td><td><input type="text" id="tbxCustom" value="<?php echo addslashes(implode(',', $preselCustom)); ?>" /></td></tr> + <td><td></tbody></table> + + <table id="tabAction"><tbody><tr> + <td><button id="btnOk" disabled="disabled" onclick="if (!this.disabled)DoOK();"><?php echo WT_I18N::translate('Accept'); ?></button></td> + <td><button onclick="window.close();return false"><?php echo WT_I18N::translate('Cancel'); ?></button></td> + <tr></tbody></table> + <?php + echo "</td></tr></table>"; + echo "</form></div>"; +} +// end column for find options +echo "</td></tr>"; +echo "</table>"; // Close table with find options + +echo "<br />"; +echo "<a href=\"javascript:;\" onclick=\"if (window.opener.showchanges) window.opener.showchanges(); window.close();\">", WT_I18N::translate('Close Window'), "</a><br />"; +echo "<br />"; + +if ($action=="filter") { + $filter = trim($filter); + $filter_array=explode(' ', preg_replace('/ {2,}/', ' ', $filter)); + + // Output Individual fot GEDFact Assistant ====================== + if ($type == "indi") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr>"; + $myindilist=search_indis_names($filter_array, array(WT_GED_ID), 'AND'); + if ($myindilist) { + echo "<td class=\"list_value_wrap $TEXT_DIRECTION\"><ul>"; + usort($myindilist, array('WT_GedcomRecord', 'Compare')); + foreach ($myindilist as $indi ) { + // echo $indi->format_list('li', true); + + $nam = $indi->getAllNames(); + $wholename = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace('"', '\'', $fulln); // Replace double quotes + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $fulmn = str_replace('"', '\'', $fulmn); // Replace double quotes + $fulmn = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulmn); + $fulmn = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulmn); + $marn = $nam[1]['surname']; + } else { + $fulmn = $fulln; + } + + //-- Build Indi Parents Family to get FBP and MBP ----------- + foreach ($indi->getChildFamilies() as $family) { + $father = $family->getHusband(); + $mother = $family->getWife(); + if (!is_null($father)) { + $FBP = $father->getBirthPlace(); + } + if (!is_null($mother)) { + $MBP = $mother->getBirthPlace(); + } + } + if (!isset($FBP)) { $FBP = "UNK, UNK, UNK, UNK"; } + if (!isset($MBP)) { $MBP = "UNK, UNK, UNK, UNK"; } + + //-- Build Indi Spouse Family to get marriage Date ---------- + foreach ($indi->getSpouseFamilies() as $family) { + $marrdate = $family->getMarriageDate(); + $marrdate = ($marrdate->minJD()+$marrdate->maxJD())/2; // Julian + $children = $family->getChildren(); + } + if (!isset($marrdate)) { $marrdate = ""; } + + //-- Get Children's Name, DOB, DOD -------------------------- + if (isset($children)) { + $chBLDarray = Array(); + foreach ($children as $key=>$child) { + $chnam = $child->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace('"', "", $chfulln); // Must remove quotes completely here + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); // Child's Full Name + $chdob = ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + if (!isset($chdob)) { $chdob = ""; } + $chdod = ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + if (!isset($chdod)) { $chdod = ""; } + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + if (isset($chBLDarray) && $indi->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + } else { + $chBLDarray = ''; + } + + echo "<li>"; + // ============================================================================================================================== + // NOTES = is equivalent to= function pasterow(id, nam, mnam, label, gend, cond, dom, dob, age, dod, occu, birthpl, fbirthpl, mbirthpl, chilBLD) { + // ============================================================================================================================== + echo "<a href=\"javascript:;\" onclick=\"window.opener.insertRowToTable("; + echo "'".$indi->getXref()."', "; // id - Indi Id + echo "'".addslashes(strip_tags($fulln))."', "; // nam - Name + echo "'".addslashes(strip_tags($fulmn))."', "; // mnam - Married Name + echo "'-', "; // label - Relation to Head of Household + echo "'".$indi->getSex()."', "; // gend - Sex + echo "'S', "; // cond - Marital Condition + echo "'".$marrdate."', "; // dom - Date of Marriage + echo "'".(($indi->getBirthDate()->minJD() + $indi->getBirthDate()->maxJD())/2)."' ,"; // dob - Date of Birth + echo "'".(1901-$indi->getbirthyear())."' ,"; // ~age~ - Census Date minus YOB (Preliminary) + echo "'".(($indi->getDeathDate()->minJD() + $indi->getDeathDate()->maxJD())/2)."' ,"; // dod - Date of Death + echo "'', "; // occu - Occupation + echo "'".$indi->getbirthplace()."', "; // birthpl - Birthplace + echo "'".$FBP."', "; // fbirthpl - Father's Birthplace + echo "'".$MBP."', "; // mbirthpl - Mother's Birthplace + echo "'".$chBLDarray."'"; // chilBLD - Array of Children (name, birthdate, deathdate) + echo ");"; + echo "return false;\">"; + echo "<b>".$indi->getFullName()."</b> "; // Name Link + + if ($ABBREVIATE_CHART_LABELS) { + $born=abbreviate_fact('BIRT'); + } else { + $born=translate_fact('BIRT'); + } + + echo "</span><br><span class=\"list_item\">", $born, " ", $indi->getbirthyear(), " ", $indi->getbirthplace(), "</span>"; + echo "</a>"; + echo "</li>"; + + echo "<hr />"; + + } + echo '</ul></td></tr><tr><td class="list_label">', WT_I18N::translate('Total individuals'), ' ', count($myindilist), '</tr></td>'; + } else { + echo "<td class=\"list_value_wrap\">"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + echo "</table>"; + } + + // Output Family + if ($type == "fam") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr>"; + // Get the famrecs with hits on names from the family table + // Get the famrecs with hits in the gedcom record from the family table + $myfamlist = wt_array_merge( + search_fams_names($filter_array, array(WT_GED_ID), 'AND'), + search_fams($filter_array, array(WT_GED_ID), 'AND', true) + ); + if ($myfamlist) { + $curged = $GEDCOM; + echo "<td class=\"list_value_wrap $TEXT_DIRECTION\"><ul>"; + usort($myfamlist, array('WT_GedcomRecord', 'Compare')); + foreach ($myfamlist as $family) { + echo $family->format_list('li', true); + } + echo '</ul></td></tr><tr><td class="list_label">', WT_I18N::translate('Total families'), ' ', count($myfamlist), '</tr></td>'; + } else { + echo "<td class=\"list_value_wrap\">"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + echo "</table>"; + } + + // Output Media + if ($type == "media") { + global $dirs; + + $medialist = get_medialist(true, $directory); + + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\">"; + // Show link to previous folder + if ($level>0) { + $levels = explode("/", $directory); + $pdir = ""; + for ($i=0; $i<count($levels)-2; $i++) $pdir.=$levels[$i]."/"; + $levels = explode("/", $thumbdir); + $pthumb = ""; + for ($i=0; $i<count($levels)-2; $i++) $pthumb.=$levels[$i]."/"; + $uplink = "<a href=\"find.php?directory={$pdir}&thumbdir={$pthumb}&level=".($level-1)."{$thumbget}&type=media&choose={$choose}\"> <-- <span dir=\"ltr\">".$pdir."</span> </a><br />"; + } + + // Start of media directory table + echo "<table class=\"list_table $TEXT_DIRECTION width90\">"; + + // Tell the user where he is + echo "<tr>"; + echo "<td class=\"topbottombar\" colspan=\"2\">"; + echo WT_I18N::translate('Current directory'); + echo "<br />"; + echo substr($directory, 0, -1); + echo "</td>"; + echo "</tr>"; + + // display the directory list + if (count($dirs) || $level) { + sort($dirs); + if ($level) { + echo "<tr><td class=\"list_value $TEXT_DIRECTION\" colspan=\"2\">"; + echo $uplink, "</td></tr>"; + } + echo "<tr><td class=\"descriptionbox $TEXT_DIRECTION\" colspan=\"2\">"; + echo "<a href=\"find.php?directory={$directory}&thumbdir=".str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY."thumbs/", $directory)."&level={$level}{$thumbget}&external_links=http&type=media&choose={$choose}\">", WT_I18N::translate('External objects'), "</a>"; + echo "</td></tr>"; + foreach ($dirs as $indexval => $dir) { + echo "<tr><td class=\"list_value $TEXT_DIRECTION\" colspan=\"2\">"; + echo "<a href=\"find.php?directory={$directory}{$dir}/&thumbdir={$directory}{$dir}/&level=".($level+1)."{$thumbget}&type=media&choose={$choose}\"><span dir=\"ltr\">", $dir, "</span></a>"; + echo "</td></tr>"; + } + } + echo "<tr><td class=\"descriptionbox $TEXT_DIRECTION\" colspan=\"2\"></td></tr>"; + + /** + * This action generates a thumbnail for the file + * + * @name $create->thumbnail + */ + if ($create=="thumbnail") { + $filename = $_REQUEST["file"]; + generate_thumbnail($directory.$filename, $thumbdir.$filename); + } + + echo "<br />"; + + // display the images TODO x across if lots of files?? + if (count($medialist) > 0) { + foreach ($medialist as $indexval => $media) { + + // Check if the media belongs to the current folder + preg_match_all("/\//", $media["FILE"], $hits); + $ct = count($hits[0]); + + if (($ct <= $level+1 && $external_links != "http" && !isFileExternal($media["FILE"])) || (isFileExternal($media["FILE"]) && $external_links == "http")) { + // simple filter to reduce the number of items to view + $isvalid = filterMedia($media, $filter, 'http'); + if ($isvalid && $chooseType!="all") { + if ($chooseType=="0file" && !empty($media["XREF"])) $isvalid = false; // skip linked media files + if ($chooseType=="media" && empty($media["XREF"])) $isvalid = false; // skip unlinked media files + } + if ($isvalid) { + if ($media["EXISTS"] && media_filesize($media["FILE"]) != 0) { + $imgsize = findImageSize($media["FILE"]); + $imgwidth = $imgsize[0]+40; + $imgheight = $imgsize[1]+150; + } + else { + $imgwidth = 0; + $imgheight = 0; + } + + echo "<tr>"; + + //-- thumbnail field + if ($showthumb) { + echo "<td class=\"list_value $TEXT_DIRECTION width10\">"; + if (isset($media["THUMB"])) echo "<a href=\"javascript:;\" onclick=\"return openImage('", rawurlencode($media["FILE"]), "', $imgwidth, $imgheight);\"><img src=\"", filename_decode($media["THUMB"]), "\" border=\"0\" width=\"50\" alt=\"\" /></a>"; + else echo " "; + } + + //-- name and size field + echo "<td class=\"list_value $TEXT_DIRECTION\">"; + if ($media["TITL"] != "") { + echo "<b>", PrintReady($media["TITL"]), "</b> "; + if ($TEXT_DIRECTION=="rtl") echo getRLM(); + echo "(", $media["XREF"], ")"; + if ($TEXT_DIRECTION=="rtl") echo getRLM(); + echo "<br />"; + } + if (!$embed) { + echo "<a href=\"javascript:;\" onclick=\"pasteid('", addslashes($media["FILE"]), "');\"><span dir=\"ltr\">", $media["FILE"], "</span></a> -- "; + } + else echo "<a href=\"javascript:;\" onclick=\"pasteid('", $media["XREF"], "', '", addslashes($media["TITL"]), "', '", addslashes($media["THUMB"]), "');\"><span dir=\"ltr\">", $media["FILE"], "</span></a> -- "; + echo "<a href=\"javascript:;\" onclick=\"return openImage('", rawurlencode($media["FILE"]), "', $imgwidth, $imgheight);\">", WT_I18N::translate('View'), "</a><br />"; + if (!$media["EXISTS"] && !isFileExternal($media["FILE"])) echo $media["FILE"], "<br /><span class=\"error\">", WT_I18N::translate('The filename entered does not exist.'), "</span><br />"; + else if (!isFileExternal($media["FILE"]) && !empty($imgsize[0])) { + echo "<br /><sub> ", WT_I18N::translate('Image Dimensions'), " -- ", $imgsize[0], "x", $imgsize[1], "</sub><br />"; + } + if ($media["LINKED"]) { + echo WT_I18N::translate('This media object is linked to the following:'), "<br />"; + foreach ($media["LINKS"] as $indi => $type_record) { + if ($type_record!='INDI' && $type_record!='FAM' && $type_record!='SOUR' && $type_record!='OBJE') continue; + $record=WT_GedcomRecord::getInstance($indi); + echo '<br /><a href="', $record->getHtmlUrl(), '">'; + switch($type_record) { + case 'INDI': + echo WT_I18N::translate('View Person'), ' - '; + break; + case 'FAM': + echo WT_I18N::translate('View Family'), ' - '; + break; + case 'SOUR': + echo WT_I18N::translate('View Source'), ' - '; + break; + case 'OBJE': + echo WT_I18N::translate('View Object'), ' - '; + break; + } + echo PrintReady($record->getFullName()), '</a>'; + } + } else { + echo WT_I18N::translate('This media object is not linked to any GEDCOM record.'); + } + echo "</td>"; + } + } + } + } + else { + echo "<tr><td class=\"list_value_wrap\">"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + echo "</table>"; + } + + // Output Places + if ($type == "place") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr>"; + $placelist = array(); + if ($all || $filter) { + $placelist=find_place_list($filter); + $ctplace = count($placelist); + if ($ctplace>0) { + $revplacelist = array(); + foreach ($placelist as $indexval => $place) { + $levels = explode(',', $place); // -- split the place into comma seperated values + $levels = array_reverse($levels); // -- reverse the array so that we get the top level first + $placetext = ""; + $j=0; + foreach ($levels as $indexval => $level) { + if ($j>0) $placetext .= ", "; + $placetext .= trim($level); + $j++; + } + $revplacelist[] = $placetext; + } + uasort($revplacelist, "utf8_strcasecmp"); + echo "<td class=\"list_value_wrap $TEXT_DIRECTION\"><ul>"; + foreach ($revplacelist as $place) { + echo "<li><a href=\"javascript:;\" onclick=\"pasteid('", str_replace(array("'", '"'), array("\'", '"'), $place), "');\">", PrintReady($place), "</a></li>"; + } + echo "</ul></td></tr>"; + echo "<tr><td class=\"list_label\">", WT_I18N::translate('Places found'), " ", $ctplace; + echo "</td></tr>"; + } + else { + echo "<tr><td class=\"list_value_wrap $TEXT_DIRECTION\"><ul>"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + } + echo "</table>"; + } + + // Output Repositories + if ($type == "repo") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr>"; + $repo_list = get_repo_list(WT_GED_ID); + if ($repo_list) { + echo "<td class=\"list_value_wrap\"><ul>"; + foreach ($repo_list as $repo) { + echo '<li><a href="', $repo->getHtmlUrl(), '" onclick="pasteid(\'', $repo->getXref(), '\');"><span class="list_item">', $repo->getListName(),'</span></a></li>'; + } + echo "</ul></td></tr>"; + echo "<tr><td class=\"list_label\">", WT_I18N::translate('Repositories found'), " ", count($repo_list); + echo "</td></tr>"; + } + else { + echo "<tr><td class=\"list_value_wrap\">"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + echo "</table>"; + } + + // Output Shared Notes + if ($type=="note") { + echo '<table class="tabs_table ', $TEXT_DIRECTION, ' width90">'; + if ($filter) { + $mynotelist = search_notes($filter_array, array(WT_GED_ID), 'AND', true); + } else { + $mynotelist = get_note_list(WT_GED_ID); + } + if ($mynotelist) { + usort($mynotelist, array('WT_GedcomRecord', 'Compare')); + echo '<tr><td class="list_value_wrap"><ul>'; + foreach ($mynotelist as $note) { + echo '<li><a href="', $note->getHtmlUrl(), '" onclick="pasteid(\'', $note->getXref(), '\');"><span class="list_item">', $note->getListName(),'</span></a></li>'; + } + echo '</ul></td></tr><tr><td class="list_label">', WT_I18N::translate('Shared Notes found'), ' ', count($mynotelist), '</td></tr>'; + } + else { + echo '<tr><td class="list_value_wrap">', WT_I18N::translate('No results found.'), '</td></tr>'; + } + echo '</table>'; + } + + // Output Sources + if ($type=="source") { + echo '<table class="tabs_table ', $TEXT_DIRECTION, ' width90">'; + if ($filter) { + $mysourcelist = search_sources($filter_array, array(WT_GED_ID), 'AND', true); + } else { + $mysourcelist = get_source_list(WT_GED_ID); + } + if ($mysourcelist) { + usort($mysourcelist, array('WT_GedcomRecord', 'Compare')); + echo '<tr><td class="list_value_wrap"><ul>'; + foreach ($mysourcelist as $source) { + echo '<li><a href="', $source->getHtmlUrl(), '" onclick="pasteid(\'', $source->getXref(), '\');"><span class="list_item">', $source->getListName(),'</span></a></li>'; + } + echo '</ul></td></tr><tr><td class="list_label">', WT_I18N::translate('Total Sources'), ' ', count($mysourcelist), '</td></tr>'; + } + else { + echo '<tr><td class="list_value_wrap">', WT_I18N::translate('No results found.'), '</td></tr>'; + } + echo '</table>'; + } + + // Output Special Characters + if ($type == "specialchar") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr><td class=\"list_value center wrap\" dir=\"$TEXT_DIRECTION\"><br/>"; + // lower case special characters + if ($magnify) { + echo '<span class="largechars">'; + } + foreach ($lcspecialchars as $key=>$value) { + $value = str_replace("'", "\'", $value); + echo "<a href=\"javascript:;\" onclick=\"return paste_char('$value', '$language_filter', '$magnify');\">"; + echo $key; + echo "</span></a> "; + } + if ($magnify) { + echo '<span class="largechars">'; + } + echo '<br/><br/>'; + //upper case special characters + if ($magnify) { + echo '<span class="largechars">'; + } + foreach ($ucspecialchars as $key=>$value) { + $value = str_replace("'", "\'", $value); + echo "<a href=\"javascript:;\" onclick=\"return paste_char('$value', '$language_filter', '$magnify');\">"; + echo $key; + echo "</span></a> "; + } + if ($magnify) { + echo '<span class="largechars">'; + } + echo '<br/><br/>'; + // other special characters (not letters) + if ($magnify) { + echo '<span class="largechars">'; + } + foreach ($otherspecialchars as $key=>$value) { + $value = str_replace("'", "\'", $value); + echo "<a href=\"javascript:;\" onclick=\"return paste_char('$value', '$language_filter', '$magnify');\">"; + echo $key; + echo "</span></a> "; + } + if ($magnify) { + echo '<span class="largechars">'; + } + echo '<br/><br/></td></tr></table>'; + } +} +echo "</div>"; // Close div that centers table + +// Set focus to the input field +if ($type!='facts') echo WT_JS_START, 'document.filter', $type, '.filter.focus();', WT_JS_END; + +print_simple_footer(); diff --git a/modules_v2/GEDFact_assistant/_CENS/census_3_search_add.php b/modules_v2/GEDFact_assistant/_CENS/census_3_search_add.php new file mode 100644 index 0000000000..d93f2312db --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/census_3_search_add.php @@ -0,0 +1,2283 @@ +<?php +/** + * Census Assistant Control module for webtrees + * + * Census Search and Add Area File + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2007 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @version $Id$ + * @author Brian Holland + */ +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} +?> + + + <table id="navenclose" class="optionbox" width="100%"> + <?php + + //-- Search Function ------------------------------------------------------------ + ?> + <tr> + <td align="center" class="descriptionbox"><font size=1><?php echo WT_I18N::translate('Add people'); ?></font></td> + </tr> + <tr> + <td class="optionbox" > + <script> + function findindi(persid) { + var findInput = document.getElementById('personid'); + txt = findInput.value; + if (txt=="") { + alert("<?php echo WT_I18N::translate('You must enter a name'); ?>"); + } else { + var win02 = window.open( + "module.php?mod=GEDFact_assistant&mod_action=_CENS/census_3_find&callback=paste_id&action=filter&type=indi&multiple=&filter="+txt, "win02", "resizable=1, menubar=0, scrollbars=1, top=180, left=600, HEIGHT=400, WIDTH=450 "); + if (window.focus) {win02.focus();} + } + } + </script> + <?php + echo "<input id=personid type=\"text\" size=\"20\" STYLE=\"color: #000000;\" value=\"\" />"; + echo "<a href=\"javascript: onclick=findindi()\">" ; + echo " <font size=\"2\"> ".WT_I18N::translate('Search')."</font>"; + echo '</a>'; + ?> + </td> + </tr> + <tr> + <td style="border: 0px solid transparent;"> + <br /> + </td> + </tr> + + <?php + //-- Add Family Members to Census ------------------------------------------- + global $WT_IMAGES, $spouselinks, $parentlinks, $DeathYr, $BirthYr, $TEXT_DIRECTION; + ?> + + <tr> + <td align="center" style="border: 0px solid transparent;"> + <table width="100%" class="fact_table" cellspacing="0" border="0"> + <tr> + <td align="center" colspan=3 class="descriptionbox"> + <font size=1> + <?php + // Header text with "Head" button ================================================= + $headImg = "<img class=\"headimg vmiddle\" src=\"".$WT_IMAGES["button_head"]."\" />"; + $headImg2 = "<img class=\"headimg2 vmiddle\" src=\"".$WT_IMAGES["button_head"]."\" alt=\"".WT_I18N::translate('Click to choose person as Head of family.')."\" title=\"".WT_I18N::translate('Click to choose person as Head of family.')."\" />"; + global $tempStringHead; + $tempStringHead = PrintReady($headImg); + echo WT_I18N::translate('Click %s to choose person as Head of family.', $tempStringHead); + ?> + </font> + </td> + </tr> + + <tr> + <td> + <font size=1><br /></font> + </td> + </tr> + + <?php + + //-- Parents Family --------------------------------------------------- + + //-- Build Parents Family -------------------------------------- + $personcount=0; + $families = $this->indi->getChildFamilies(); + foreach ($families as $famid=>$family) { + $label = $this->indi->getChildFamilyLabel($family); + $people = $this->buildFamilyList($family, "parents"); + $marrdate = $family->getMarriageDate(); + + //-- Get Parents Children's Name, DOB, DOD -------------------------- + if (isset($people["children"])) { + $chBLDarray = Array(); + foreach ($people["children"] as $child) { + $chnam = $child->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = addslashes($chfulln); // Child's Full Name + $chdob = ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + //-- Parents Husband ------------------- + $styleadd = ""; + if (isset($people["husb"])) { + + //-- Parents Husbands Parents -------------------------------------- + $gparent=WT_Person::getInstance($people["husb"]->getXref()); + $fams = $gparent->getChildFamilies(); + foreach ($fams as $famid=>$family) { + if (!is_null($family)) { + $phusb = $family->getHusband($gparent); + $pwife = $family->getWife($gparent); + } + if ($phusb) { $HusbFBP = $phusb->getBirthPlace(); } + if ($pwife) { $HusbMBP = $pwife->getBirthPlace(); } + } + + //-- Parents Husbands Details -------------------------------------- + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["husb"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$nam[$i]['surname']; + } + } + $menu = new WT_Menu($people["husb"]->getLabel()); + $slabel = print_pedigree_person_nav2($people["husb"]->getXref(), 2, 0, $personcount++, $people["husb"]->getLabel(), $censdate); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + + ?> + <tr> + <td align="left" class="linkcell optionbox" width="25%"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value" style="text-decoration:none;" > + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addnewnote_assisted&noteid=newnote&pid=".$people["husb"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" nowrap="nowrap"> + <font size=1> + <?php + if (($people["husb"]->canDisplayDetails())) { + ?> + <a href='javaScript:insertRowToTable("<?php + echo PrintReady($people["husb"]->getXref()) ; // pid = PID + ?>", "<?php + echo addslashes($fulln); // nam = Full Name + ?>", "<?php + if (isset($fulmn)) { + echo addslashes($fulln); // mnam = Full Married Name + } else { + echo addslashes($fulln); // mnam = Full Name + } + ?>", "<?php + echo PrintReady($people["husb"]->getLabel()); // label = Relationship + ?>", "<?php + echo PrintReady($people["husb"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + if ($marrdate) { + echo ($marrdate->minJD()+$marrdate->maxJD())/2; // dom = Date of Marriage (Julian) + } + ?>", "<?php + echo ($people["husb"]->getBirthDate()->minJD()+$people["husb"]->getBirthDate()->maxJD())/2; // dob = Date of Birth (Julian) + ?>", "<?php + echo PrintReady($censyear-$people["husb"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo ($people["husb"]->getDeathDate()->minJD()+$people["husb"]->getDeathDate()->maxJD())/2; // dod = Date of Death (Julian) + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["husb"]->getBirthPlace()); // birthpl = Husband Place of Birth + ?>", "<?php + if (isset($HusbFBP)) { + echo PrintReady($HusbFBP); // fbirthpl = Husband Father's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // fbirthpl = Husband Father's Place of Birth Not known + } + ?>", "<?php + if (isset($HusbMBP)) { + echo PrintReady($HusbMBP); // mbirthpl = Husband Mother's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // mbirthpl = Husband Mother's Place of Birth Not known + } + ?>", "<?php + if (isset($chBLDarray) && $people["husb"]->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + echo PrintReady($chBLDarray); // Array of Children (name, birthdate, deathdate) + } else { + echo PrintReady(''); + } + ?>");'> + <?php + echo PrintReady($people["husb"]->getFullName()); // Full Name (Link) + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + + //-- Parents Wife --------------------------------------------------------- + if (isset($people["wife"])) { + + //-- Parents Wifes Parent Family --------------------------- + $gparent=WT_Person::getInstance($people["wife"]->getXref()); + $fams = $gparent->getChildFamilies(); + foreach ($fams as $famid=>$family) { + if (!is_null($family)) { + $phusb = $family->getHusband($gparent); + $pwife = $family->getWife($gparent); + } + if ($phusb) { $WifeFBP = $phusb->getBirthPlace(); } + if ($pwife) { $WifeMBP = $pwife->getBirthPlace(); } + } + + //-- Wifes Details -------------------------------------- + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["wife"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + $husbnam = null; + // Get wifes married name if available + if (isset($people["husb"])) { + $husbnams = $people["husb"]->getAllNames(); + if ($husbnams[0]['surname']=="@N.N." || $husbnams[0]['surname']=="") { + // if Husband or his name is not known then use wifes birth name + $husbnam = $nam[0]['surname']; + } else { + $husbnam = $husbnams[0]['surname']; + } + } + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$husbnam; + } + } + $menu = new WT_Menu($people["wife"]->getLabel()); + $slabel = print_pedigree_person_nav2($people["wife"]->getXref(), 2, 0, $personcount++, $people["wife"]->getLabel(), $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td align="left" class="linkcell optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addnewnote_assisted&noteid=newnote&pid=".$people["wife"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" nowrap="nowrap"> + <font size=1> + <?php + if (($people["wife"]->canDisplayDetails())) { + ?> + <a href='javaScript:insertRowToTable("<?php + echo $people["wife"]->getXref() ; // pid = PID + ?>", "<?php + echo addslashes($fulln); // nam = Full Name + ?>", "<?php + if (isset($fulmn)) { + echo addslashes($fulmn); // mnam = Full Married Name + } else { + echo addslashes($fulln); // mnam = Full Name + } + ?>", "<?php + echo PrintReady($people["wife"]->getLabel()); // label = Relationship + ?>", "<?php + echo PrintReady($people["wife"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0 && isset($nam[1])) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + if ($marrdate) { + echo ($marrdate->minJD()+$marrdate->maxJD())/2; // dom = Date of Marriage (Julian) + } + ?>", "<?php + echo ($people["wife"]->getBirthDate()->minJD()+$people["wife"]->getBirthDate()->maxJD())/2; // dob = Date of Birth (Julian) + ?>", "<?php + echo PrintReady($censyear-$people["wife"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo ($people["wife"]->getDeathDate()->minJD()+$people["wife"]->getDeathDate()->maxJD())/2; // dod = Date of Death (Julian) + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["wife"]->getBirthPlace()); // birthpl = Wife Place of Birth + ?>", "<?php + if (isset($WifeFBP)) { + echo PrintReady($WifeFBP); // fbirthpl = Wife Father's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // fbirthpl = Wife Father's Place of Birth Not known + } + ?>", "<?php + if (isset($WifeMBP)) { + echo PrintReady($WifeMBP); // mbirthpl = Wife Mother's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // mbirthpl = Wife Mother's Place of Birth Not known + } + ?>", "<?php + if (isset($chBLDarray) && $people["wife"]->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + echo PrintReady($chBLDarray); // Array of Children (name, birthdate, deathdate) + } else { + echo PrintReady(''); + } + ?>");'> + <?php + echo PrintReady($people["wife"]->getFullName()); // Full Name (Link) + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + + //-- Parents Children ------------------- + if (isset($people["children"])) { + + //-- Parent's Children's Details -------------------------------------- + $elderdate = $family->getMarriageDate(); + foreach ($people["children"] as $child) { + + // Get Child's Children's Name DOB DOD ---- + $chBLDarray=Array(); + foreach ($child->getSpouseFamilies() as $childfamily) { + $chchildren = $childfamily->getChildren(); + foreach ($chchildren as $chchild) { + $chnam = $chchild->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = addslashes($chfulln); // Child's Full Name// Child's Full Name + $chdob = ($chchild->getBirthDate()->minJD()+$chchild->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($chchild->getDeathDate()->minJD()+$chchild->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + // Get child's marriage status ---- + $married=""; + $marrdate=""; + foreach ($child->getSpouseFamilies() as $childfamily) { + $marrdate=$childfamily->getMarriageDate(); + $married = WT_Date::Compare($censdate, $marrdate); + } + $nam = $child->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + $chfulmn=null; + $chnam = $child->getAllNames(); + for ($i=0; $i<count($nam); $i++) { + if ($chnam[$i]['type']=='_MARNM') { + $chfulmn = rtrim($chnam[$i]['givn'],'*')." ".$chnam[$i]['surname']; + } + } + + $menu = new WT_Menu($child->getLabel()); + $slabel = print_pedigree_person_nav2($child->getXref(), 2, 0, $personcount++, $child->getLabel(), $censyear); + $slabel .= $spouselinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + + if ($child->getXref()==$pid) { + //Only print Head of Family in Immediate Family Block + } else { + ?> + <tr> + <td align="left" class="linkcell optionbox"> + <font size=1> + <?php + if ($child->getXref()==$pid) { + echo $child->getLabel(); + } else { + echo $menu->getMenu(); + } + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addnewnote_assisted&noteid=newnote&pid=".$child->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" nowrap="nowrap"> + <font size=1> + <?php + if (($child->canDisplayDetails())) { + ?> + <a href='javaScript:insertRowToTable("<?php + echo $child->getXref(); // pid = PID + ?>", "<?php + echo addslashes($fulln); // nam = Full Name + ?>", "<?php + if (isset($chfulmn)) { + echo addslashes($chfulmn); // mnam = Full Married Name + } else { + echo addslashes($fulln); // mnam = Full Name + } + ?>", "<?php + if ($child->getXref()==$pid) { + echo "Head"; // label = Head + } else { + echo PrintReady($child->getLabel()); // label = Relationship + } + ?>", "<?php + echo PrintReady($child->getSex()); // gend = Gender + ?>", "<?php + if ($married>0) { + echo "M"; // cond = Condition (Married) + } else if ($married<0 || ($married=="0") ) { + echo "S"; // cond = Condition (Single) + } else { + echo ""; // cond = Condition (Not Known) + } + ?>", "<?php + if ($marrdate) { + echo ($marrdate->minJD()+$marrdate->maxJD())/2; // dom = Date of Marriage (Julian) + } + ?>", "<?php + echo ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // dob = Date of Birth (Julian) + ?>", "<?php + echo PrintReady($censyear-$child->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // dod = Date of Death (Julian) + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($child->getBirthPlace()); // birthpl = Child Place of Birt + ?>", "<?php + if (isset($people["husb"])) { + echo PrintReady($people["husb"]->getBirthPlace()); // fbirthpl = Child Father's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // fbirthpl = Child Father's Place of Birth Not known + } + ?>", "<?php + if (isset($people["wife"])) { + echo PrintReady($people["wife"]->getBirthPlace()); // mbirthpl = Child Mother's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // mbirthpl = Child Mother's Place of Birth Not known + } + ?>", "<?php + if (isset($chBLDarray) && $child->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + echo PrintReady($chBLDarray); // Array of Children (name, birthdate, deathdate) + } else { + echo PrintReady(''); + } + ?>");'> + <?php + echo PrintReady($child->getFullName()); // Full Name (Link) + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + } + $elderdate = $child->getBirthDate(false); + } + } + + //-- Step families --------------------------------------------------------- + + //-- Build step families --------------------------------------------------- + foreach ($this->indi->getChildStepFamilies() as $famid=>$family) { + $label = $this->indi->getStepFamilyLabel($family); + $people = $this->buildFamilyList($family, "step-parents"); + if ($people) { + echo "<tr><td><br /></td><td></td></tr>"; + } + $marrdate = $family->getMarriageDate(); + + //-- Get Children's Name, DOB, DOD -------------------------- + if (isset($people["children"])) { + $chBLDarray = Array(); + foreach ($people["children"] as $child) { + $chnam = $child->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = addslashes($chfulln); // Child's Full Name + $chdob = ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + // Step Husband ----------------------------- + $styleadd = ""; + $elderdate = ""; + if (isset($people["husb"])) { + + //-- Step Husbands Parent Family -------------------------------------- + $gparent=WT_Person::getInstance($people["husb"]->getXref()); + $fams = $gparent->getChildFamilies(); + foreach ($fams as $famid=>$family) { + if (!is_null($family)) { + $phusb = $family->getHusband($gparent); + $pwife = $family->getWife($gparent); + } + if ($phusb) { $HusbFBP = $phusb->getBirthPlace(); } + if ($pwife) { $HusbMBP = $pwife->getBirthPlace(); } + } + + //-- Step Husbands Details -------------------------------------- + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["husb"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$nam[$i]['surname']; + } + } + $menu = new WT_Menu(); + if ($people["husb"]->getLabel() == ".") { + $menu->addLabel(WT_I18N::translate('Step-Father')); + } else { + $menu->addLabel($people["husb"]->getLabel()); + } + $slabel = print_pedigree_person_nav2($people["husb"]->getXref(), 2, 0, $personcount++, $people["husb"]->getLabel(), $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + if (PrintReady($people["husb"]->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($people["husb"]->getDeathYear()); } + if (PrintReady($people["husb"]->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($people["husb"]->getBirthYear()); } + ?> + <tr> + <td align="left" class="linkcell optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addnewnote_assisted&noteid=newnote&pid=".$people["husb"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" nowrap="nowrap"> + <font size=1> + <?php + if (($people["husb"]->canDisplayDetails())) { + ?> + <a href='javaScript:insertRowToTable("<?php + echo PrintReady($people["husb"]->getXref()); // pid = PID + ?>", "<?php + echo addslashes($fulln); // nam = Full Name + ?>", "<?php + if (isset($fulmn)) { + echo addslashes($fulln); // mnam = Full Married Name + } else { + echo addslashes($fulln); // mnam = Full Name + } + ?>", "<?php + if ($people["husb"]->getLabel() == ".") { + echo PrintReady(WT_I18N::translate('Step-Father')); // label = Relationship + } else { + echo PrintReady($people["husb"]->getLabel()); // label = Relationship + } + ?>", "<?php + echo PrintReady($people["husb"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + if ($marrdate) { + echo ($marrdate->minJD()+$marrdate->maxJD())/2; // dom = Date of Marriage (Julian) + } + ?>", "<?php + echo ($people["husb"]->getBirthDate()->minJD()+$people["husb"]->getBirthDate()->maxJD())/2; // dob = Date of Birth (Julian) + ?>", "<?php + echo PrintReady($censyear-$people["husb"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo ($people["husb"]->getDeathDate()->minJD()+$people["husb"]->getDeathDate()->maxJD())/2; // dod = Date of Death (Julian) + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["husb"]->getBirthPlace()); // birthpl = Step Husband Place of Birth + ?>", "<?php + if (isset($HusbFBP)) { + echo PrintReady($HusbFBP); // fbirthpl = Step Husband Father's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // fbirthpl = Step Husband Father's Place of Birth Not known + } + ?>", "<?php + if (isset($HusbMBP)) { + echo PrintReady($HusbMBP); // mbirthpl = Step Husband Mother's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // mbirthpl = Step Husband Mother's Place of Birth Not known + } + ?>", "<?php + if (isset($chBLDarray) && $people["husb"]->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + echo PrintReady($chBLDarray); // Array of Children (name, birthdate, deathdate) + } else { + echo PrintReady(''); + } + ?>");'> + <?php + echo PrintReady($people["husb"]->getFullName()); // Full Name (Link) + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + $elderdate = $people["husb"]->getBirthDate(false); + } + + // Step Wife ------------------- + $styleadd = ""; + if (isset($people["wife"])) { + + //-- Step Wifes Parent Family -------------------------------------- + $gparent=WT_Person::getInstance($people["wife"]->getXref()); + $fams = $gparent->getChildFamilies(); + foreach ($fams as $famid=>$family) { + if (!is_null($family)) { + $phusb = $family->getHusband($gparent); + $pwife = $family->getWife($gparent); + } + if ($phusb) { $WifeFBP = $phusb->getBirthPlace(); } + if ($pwife) { $WifeMBP = $pwife->getBirthPlace(); } + } + + //-- Step Wifes Details -------------------------------------- + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["wife"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + $husbnam = null; + // Get wifes married name if available + if (isset($people["husb"])) { + $husbnams = $people["husb"]->getAllNames(); + if ($husbnams[0]['surname']=="@N.N." || $husbnams[0]['surname']=="") { + // if Husband or his name is not known then use wifes birth name + $husbnam = $nam[0]['surname']; + } else { + $husbnam = $husbnams[0]['surname']; + } + } + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$husbnam; + } + } + $menu = new WT_Menu(); + if ($people["wife"]->getLabel() == ".") { + $menu->addLabel(WT_I18N::translate('Step-Mother')); + } else { + $menu->addLabel($people["wife"]->getLabel()); + } + $slabel = print_pedigree_person_nav2($people["wife"]->getXref(), 2, 0, $personcount++, $people["wife"]->getLabel(), $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + if (PrintReady($people["wife"]->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($people["wife"]->getDeathYear()); } + if (PrintReady($people["wife"]->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($people["wife"]->getBirthYear()); } + ?> + <tr> + <td align="left" class="linkcell optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addnewnote_assisted&noteid=newnote&pid=".$people["wife"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" nowrap="nowrap"> + <font size=1> + <?php + if (($people["wife"]->canDisplayDetails())) { + ?> + <a href='javaScript:insertRowToTable("<?php + echo PrintReady($people["wife"]->getXref()) ; // pid = PID + ?>", "<?php + echo addslashes($fulln); // nam = Full Name + ?>", "<?php + if (isset($fulmn)) { + echo addslashes($fulmn); // mnam = Full Married Name + } else { + echo addslashes($fulln); // mnam = Full Name + } + ?>", "<?php + if ($people["wife"]->getLabel() == ".") { + echo PrintReady(WT_I18N::translate('Step-Mother')); // label = Relationship + } else { + echo PrintReady($people["wife"]->getLabel()); // label = Relationship + } + ?>", "<?php + echo PrintReady($people["wife"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0 && isset($nam[1])) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + if ($marrdate) { + echo ($marrdate->minJD()+$marrdate->maxJD())/2; // dom = Date of Marriage (Julian) + } + ?>", "<?php + echo ($people["wife"]->getBirthDate()->minJD()+$people["wife"]->getBirthDate()->maxJD())/2; // dob = Date of Birth (Julian) + ?>", "<?php + echo PrintReady($censyear-$people["wife"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo ($people["wife"]->getDeathDate()->minJD()+$people["wife"]->getDeathDate()->maxJD())/2; // dod = Date of Death (Julian) + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["wife"]->getBirthPlace()); // birthpl = Step Wife Place of Birth + ?>", "<?php + if (isset($WifeFBP)) { + echo PrintReady($WifeFBP); // fbirthpl = Step Wife Father's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // fbirthpl = Step Wife Father's Place of Birth Not known + } + ?>", "<?php + if (isset($WifeMBP)) { + echo PrintReady($WifeMBP); // mbirthpl = Step Wife Mother's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // mbirthpl = Step Wife Mother's Place of Birth Not known + } + ?>", "<?php + if (isset($chBLDarray) && $people["wife"]->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + echo PrintReady($chBLDarray); // Array of Children (name, birthdate, deathdate) + } else { + echo PrintReady(''); + } + ?>");'> + <?php + echo PrintReady($people["wife"]->getFullName()); // Full Name (Link) + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + + // Step Children --------------------- + $styleadd = ""; + if (isset($people["children"])) { + $elderdate = $family->getMarriageDate(); + foreach ($people["children"] as $child) { + + // Get Child's Children + $chBLDarray=Array(); + foreach ($child->getSpouseFamilies() as $childfamily) { + $chchildren = $childfamily->getChildren(); + foreach ($chchildren as $chchild) { + $chnam = $chchild->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = addslashes($chfulln); // Child's Full Name + $chdob = ($chchild->getBirthDate()->minJD()+$chchild->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($chchild->getDeathDate()->minJD()+$chchild->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + $nam = $child->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + $chfulmn=null; + $chnam = $child->getAllNames(); + for ($i=0; $i<count($nam); $i++) { + if ($chnam[$i]['type']=='_MARNM') { + $chfulmn = rtrim($chnam[$i]['givn'],'*')." ".$chnam[$i]['surname']; + } + } + $menu = new WT_Menu($child->getLabel()); + $slabel = print_pedigree_person_nav2($child->getXref(), 2, 0, $personcount++, $child->getLabel(), $censyear); + $slabel .= $spouselinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + if (PrintReady($child->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($child->getDeathYear()); } + if (PrintReady($child->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($child->getBirthYear()); } + ?> + <tr> + <td align="left" class="linkcell optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addnewnote_assisted&noteid=newnote&pid=".$child->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" nowrap="nowrap"> + <font size=1> + <?php + if (($child->canDisplayDetails())) { + ?> + <a href='javaScript:insertRowToTable("<?php + echo PrintReady($child->getXref()) ; // pid = PID + ?>", "<?php + echo addslashes($fulln); // nam = Full Name + ?>", "<?php + if (isset($chfulmn)) { + echo addslashes($chfulmn); // mnam = Full Married Name + } else { + echo addslashes($fulln); // mnam = Full Name + } + ?>", "<?php + echo PrintReady($child->getLabel()); // label = Relationship + ?>", "<?php + echo PrintReady($child->getSex()); // gend = Gender + ?>", "<?php + echo ""; // cond = Condition (Married or Single) + ?>", "<?php + if ($marrdate) { + echo ($marrdate->minJD()+$marrdate->maxJD())/2; // dom = Date of Marriage (Julian) + } + ?>", "<?php + echo ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // dob = Date of Birth (Julian) + ?>", "<?php + echo PrintReady($censyear-$child->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // dod = Date of Death (Julian) + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($child->getBirthPlace()); // birthpl = Child Place of Birth + ?>", "<?php + if (isset($people["husb"])) { + echo PrintReady($people["husb"]->getBirthPlace()); // fbirthpl = Child Father's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // fbirthpl = Child Father's Place of Birth Not known + } + ?>", "<?php + if (isset($people["wife"])) { + echo PrintReady($people["wife"]->getBirthPlace()); // mbirthpl = Child Mother's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // mbirthpl = Child Mother's Place of Birth Not known + } + ?>", "<?php + if (isset($chBLDarray) && $child->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + echo PrintReady($chBLDarray); // Array of Children (name, birthdate, deathdate) + } else { + echo PrintReady(''); + } + ?>");'> + <?php + echo PrintReady($child->getFullName()); // Full Name (Link) + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + //$elderdate = $child->getBirthDate(false); + } + } + } + + echo "<tr><td><font size=1><br /></font></td></tr>"; + + //-- Build Spouse Family --------------------------------------------------- + $families = $this->indi->getSpouseFamilies(); + //$personcount = 0; + foreach ($families as $family) { + $people = $this->buildFamilyList($family, "spouse"); + if ($this->indi->equals($people["husb"])) { + $spousetag = 'WIFE'; + } else { + $spousetag = 'HUSB'; + } + $marrdate = $family->getMarriageDate(); + + //-- Get Children's Name, DOB, DOD -------------------------- + if (isset($people["children"])) { + $chBLDarray = Array(); + foreach ($people["children"] as $child) { + $chnam = $child->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = addslashes($chfulln); // Child's Full Name + $chdob = ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + //-- Spouse Husband --------------------------------------------------- + if (isset($people["husb"])) { + + //-- Spouse Husbands Parents -------------------------------------- + $gparent=WT_Person::getInstance($people["husb"]->getXref()); + $fams = $gparent->getChildFamilies(); + foreach ($fams as $family) { + if (!is_null($family)) { + $phusb = $family->getHusband($gparent); + $pwife = $family->getWife($gparent); + } + if ($phusb) { $HusbFBP = $phusb->getBirthPlace(); } + if ($pwife) { $HusbMBP = $pwife->getBirthPlace(); } + } + + //-- Spouse Husbands Details -------------------------------------- + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["husb"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$nam[$i]['surname']; + } + } + $menu = new WT_Menu($people["husb"]->getLabel()); + $slabel = print_pedigree_person_nav2($people["husb"]->getXref(), 2, 0, $personcount++, $people["husb"]->getLabel(), $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + if (PrintReady($people["husb"]->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($people["husb"]->getDeathYear()); } + if (PrintReady($people["husb"]->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($people["husb"]->getBirthYear()); } + ?> + <tr class="fact_value"> + <td align="left" nowrap="nowrap" class="linkcell optionbox<?php echo $styleadd; ?>"> + <font size=1> + <?php + if ($people["husb"]->getXref()==$pid) { + echo " " .($people["husb"]->getLabel()); + } else { + echo $menu->getMenu(); + } + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addnewnote_assisted&noteid=newnote&pid=".$people["husb"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" nowrap="nowrap"> + <font size=1> + <?php + if (($people["husb"]->canDisplayDetails())) { + ?> + <a href='javaScript:insertRowToTable("<?php + echo $people["husb"]->getXref() ; // pid = PID + ?>", "<?php + echo addslashes($fulln); // nam = Full Name + ?>", "<?php + if (isset($fulmn)) { + echo addslashes($fulln); // mnam = Full Married Name + } else { + echo addslashes($fulln); // mnam = Full Name + } + ?>", "<?php + if ($people["husb"]->getXref()==$pid) { + echo "Head"; // label = Relationship + } else { + echo $people["husb"]->getLabel(); // label = Relationship + } + ?>", "<?php + echo PrintReady($people["husb"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + if ($marrdate) { + echo ($marrdate->minJD()+$marrdate->maxJD())/2; // dom = Date of Marriage (Julian) + } + ?>", "<?php + echo ($people["husb"]->getBirthDate()->minJD()+$people["husb"]->getBirthDate()->maxJD())/2; // dob = Date of Birth (Julian) + ?>", "<?php + echo PrintReady($censyear-$people["husb"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo ($people["husb"]->getDeathDate()->minJD()+$people["husb"]->getDeathDate()->maxJD())/2; // dod = Date of Death (Julian) + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["husb"]->getBirthPlace()); // birthpl = Husband Place of Birth + ?>", "<?php + if (isset($HusbFBP)) { + echo PrintReady($HusbFBP); // fbirthpl = Husband Father's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // fbirthpl = Husband Father's Place of Birth Not known + } + ?>", "<?php + if (isset($HusbMBP)) { + echo PrintReady($HusbMBP); // mbirthpl = Husband Mother's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // mbirthpl = Husband Mother's Place of Birth Not known + } + ?>", "<?php + if (isset($chBLDarray) && $people["husb"]->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + echo PrintReady($chBLDarray); // Array of Children (name, birthdate, deathdate) + } else { + echo PrintReady(''); + } + ?>");'> + <?php + echo PrintReady($people["husb"]->getFullName()); // Full Name (Link) + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + <tr> + <?php + } + + //-- Spouse Wife ----------------------------------------------------- + if (isset($people["wife"])) { + + //-- Spouse Wifes Parents -------------------------------------- + $gparent=WT_Person::getInstance($people["wife"]->getXref()); + $fams = $gparent->getChildFamilies(); + foreach ($fams as $family) { + if (!is_null($family)) { + $husb = $family->getHusband($gparent); + $wife = $family->getWife($gparent); + } + if ($husb) { $WifeFBP = $husb->getBirthPlace(); } + if ($wife) { $WifeMBP = $wife->getBirthPlace(); } + } + + //-- Spouse Wifes Details -------------------------------------- + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["wife"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + //$fulln = str_replace('"', '\"', $fulln); + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + $husbnam = null; + // Get wifes married name if available + if (isset($people["husb"])) { + $husbnams = $people["husb"]->getAllNames(); + if ($husbnams[0]['surname']=="@N.N." || $husbnams[0]['surname']=="") { + // if Husband or his name is not known then use wifes birth name + $husbnam = $nam[0]['surname']; + } else { + $husbnam = $husbnams[0]['surname']; + } + } + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$husbnam; + } + } + $menu = new WT_Menu($people["wife"]->getLabel()); + $slabel = print_pedigree_person_nav2($people["wife"]->getXref(), 2, 0, $personcount++, $people["wife"]->getLabel(), $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + if (PrintReady($people["wife"]->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($people["wife"]->getDeathYear()); } + if (PrintReady($people["wife"]->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($people["wife"]->getBirthYear()); } + ?> + <tr> + <td align="left" nowrap="nowrap" class="linkcell optionbox<?php echo $styleadd; ?>"> + <font size=1> + <?php + if ($people["wife"]->getXref()==$pid) { + echo " " .($people["wife"]->getLabel()); + } else { + echo $menu->getMenu(); + } + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addnewnote_assisted&noteid=newnote&pid=".$people["wife"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" nowrap="nowrap"> + <font size=1> + <?php + if (($people["wife"]->canDisplayDetails())) { + ?> + <a href='javaScript:insertRowToTable("<?php + echo $people["wife"]->getXref() ; // pid = PID + ?>", "<?php + echo addslashes($fulln); // nam = Full Name + ?>", "<?php + if (isset($fulmn)) { + echo addslashes($fulmn); // mnam = Full Married Name + } else { + echo addslashes($fulln); // mnam = Full Name + } + ?>", "<?php + if ($people["wife"]->getXref()==$pid) { + echo "Head"; // label = Head + } else { + echo PrintReady($people["wife"]->getLabel()); // label = Relationship + } + ?>", "<?php + echo PrintReady($people["wife"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0 && isset($nam[1])) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + if ($marrdate) { + echo ($marrdate->minJD()+$marrdate->maxJD())/2; // dom = Date of Marriage (Julian) + } + ?>", "<?php + echo ($people["wife"]->getBirthDate()->minJD()+$people["wife"]->getBirthDate()->maxJD())/2; // dob = Date of Birth (Julian) + ?>", "<?php + echo PrintReady($censyear-$people["wife"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo ($people["wife"]->getDeathDate()->minJD()+$people["wife"]->getDeathDate()->maxJD())/2; // dod = Date of Death (Julian) + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["wife"]->getBirthPlace()); // birthpl = Wife Place of Birth + ?>", "<?php + if (isset($WifeFBP)) { + echo PrintReady($WifeFBP); // fbirthpl = Wife Father's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // fbirthpl = Wife Father's Place of Birth Not known + } + ?>", "<?php + if (isset($WifeMBP)) { + echo PrintReady($WifeMBP); // mbirthpl = Wife Mother's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // mbirthpl = Wife Mother's Place of Birth Not known + } + ?>", "<?php + if (isset($chBLDarray) && $people["wife"]->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + echo PrintReady($chBLDarray); // Array of Children (name, birthdate, deathdate) + } else { + echo PrintReady(''); + } + ?>");'> + <?php + echo PrintReady($people["wife"]->getFullName()); // Full Name (Link) + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + <tr> <?php + } + + // Spouse Children + foreach ($people["children"] as $child) { + + // Get Spouse child's marriage status + $married=""; + $marrdate=""; + foreach ($child->getSpouseFamilies() as $childfamily) { + $marrdate=$childfamily->getMarriageDate(); + $married = WT_Date::Compare($censdate, $marrdate); + } + + // Get Child's Children + $chBLDarray=Array(); + foreach ($child->getSpouseFamilies() as $childfamily) { + $chchildren = $childfamily->getChildren(); + foreach ($chchildren as $chchild) { + $chnam = $chchild->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = addslashes($chfulln); // Child's Full Name// Child's Full Name + $chdob = ($chchild->getBirthDate()->minJD()+$chchild->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($chchild->getDeathDate()->minJD()+$chchild->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + // Get Spouse child's details + $nam = $child->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + $chfulmn=null; + $chnam = $child->getAllNames(); + for ($i=0; $i<count($nam); $i++) { + if ($chnam[$i]['type']=='_MARNM') { + $chfulmn = rtrim($chnam[$i]['givn'],'*')." ".$chnam[$i]['surname']; + } + } + $menu = new WT_Menu($child->getLabel()); + $slabel = print_pedigree_person_nav2($child->getXref(), 2, 0, $personcount++, $child->getLabel(), $censyear); + $slabel .= $spouselinks; + $submenu = new WT_Menu($slabel); + $menu->addSubmenu($submenu); + ?> + <tr> + <td align="left" class="linkcell optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addnewnote_assisted&noteid=newnote&pid=".$child->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" nowrap="nowrap"> + <font size=1> + <?php + if (($child->canDisplayDetails())) { + ?> + <a href='javaScript:insertRowToTable("<?php + echo $child->getXref() ; // pid = PID + ?>", "<?php + echo addslashes($fulln); // nam = Full Name + ?>", "<?php + if (isset($chfulmn)) { + echo addslashes($chfulmn); // mnam = Full Married Name + } else { + echo addslashes($fulln); // mnam = Full Name + } + ?>", "<?php + echo PrintReady($child->getLabel()); // label = Relationship + ?>", "<?php + echo PrintReady($child->getSex()); // gend = Gender + ?>", "<?php + if ($married>0) { + echo "M"; // cond = Condition (Married) + } else if ($married<0 || ($married=="0") ) { + echo "S"; // cond = Condition (Single) + } else { + echo ""; // cond = Condition (Not Known) + } + ?>", "<?php + if ($marrdate) { + echo ($marrdate->minJD()+$marrdate->maxJD())/2; // dom = Date of Marriage (Julian) + } + ?>", "<?php + echo ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // dob = Date of Birth (Julian) + ?>", "<?php + echo PrintReady($censyear-$child->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // dod = Date of Death (Julian) + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($child->getBirthPlace()); // birthpl = Child Place of Birth + ?>", "<?php + if (isset($people["husb"])) { + echo PrintReady($people["husb"]->getBirthPlace()); // fbirthpl = Child Father's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // fbirthpl = Child Father's Place of Birth Not known + } + ?>", "<?php + if (isset($people["wife"])) { + echo PrintReady($people["wife"]->getBirthPlace()); // mbirthpl = Child Mother's Place of Birth + } else { + echo PrintReady('UNK, UNK, UNK, UNK'); // mbirthpl = Child Mother's Place of Birth Not known + } + ?>", "<?php + if (isset($chBLDarray) && $child->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + echo PrintReady($chBLDarray); // Array of Children (name, birthdate, deathdate) + } else { + echo PrintReady(''); + } + ?>");'> + <?php + echo PrintReady($child->getFullName()); // Full Name (Link) + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + + echo "<tr><td><font size=1><br /></font></td></tr>"; + } + ?> + + </table> + <br /><br /><br /> </td> + </tr> + </table> + +<?php +// ================================================================== +require_once 'includes/functions/functions_charts.php'; +/** + * print the information for an individual chart box + * + * find and print a given individuals information for a pedigree chart + * @param string $pid the Gedcom Xref ID of the to print + * @param int $style the style to print the box in, 1 for smaller boxes, 2 for larger boxes + * @param boolean $show_famlink set to true to show the icons for the popup links and the zoomboxes + * @param int $count on some charts it is important to keep a count of how many boxes were printed + */ + +function print_pedigree_person_nav2($pid, $style=1, $count=0, $personcount="1", $currpid, $censyear) { + global $HIDE_LIVE_PEOPLE, $SHOW_LIVING_NAMES, $ZOOM_BOXES, $LINK_ICONS, $SCRIPT_NAME; + global $MULTI_MEDIA, $SHOW_HIGHLIGHT_IMAGES, $bwidth, $bheight, $PEDIGREE_FULL_DETAILS, $SHOW_PEDIGREE_PLACES; + global $TEXT_DIRECTION, $DEFAULT_PEDIGREE_GENERATIONS, $OLD_PGENS, $talloffset, $PEDIGREE_LAYOUT, $MEDIA_DIRECTORY; + global $WT_IMAGES, $ABBREVIATE_CHART_LABELS, $USE_MEDIA_VIEWER; + global $chart_style, $box_width, $generations, $show_spouse, $show_full; + global $CHART_BOX_TAGS, $SHOW_LDS_AT_GLANCE, $PEDIGREE_SHOW_GENDER; + global $SEARCH_SPIDER; + + global $spouselinks, $parentlinks, $step_parentlinks, $persons, $person_step, $person_parent, $tabno, $spousetag; + global $natdad, $natmom, $censyear, $censdate; + // global $pHusbFBP, $pHusbMBP, $pWifeFBP, $pWifeMBP; + // global $phusb, $pwife, $pwhusb, $pwwife; + + if ($style != 2) $style=1; + if (empty($show_full)) $show_full = 0; + if (empty($PEDIGREE_FULL_DETAILS)) $PEDIGREE_FULL_DETAILS = 0; + + if (!isset($OLD_PGENS)) $OLD_PGENS = $DEFAULT_PEDIGREE_GENERATIONS; + if (!isset($talloffset)) $talloffset = $PEDIGREE_LAYOUT; + + $person=WT_Person::getInstance($pid); + if ($pid==false || empty($person)) { + $spouselinks = false; + $parentlinks = false; + $step_parentlinks = false; + } + + $tmp=array('M'=>'','F'=>'F', 'U'=>'NN'); + $isF=$tmp[$person->getSex()]; + $spouselinks = ""; + $parentlinks = ""; + $step_parentlinks = ""; + $disp=$person->canDisplayDetails(); + + if ($person->canDisplayName()) { + if (empty($SEARCH_SPIDER)) { + if ($LINK_ICONS!="disabled") { + //-- draw a box for the family popup + + if ($TEXT_DIRECTION=="rtl") { + $spouselinks .= "<table class=\"rtlnav person_box$isF\"><tr><td align=\"right\" style=\"font-size:10px;font-weight:normal;\" class=\"name2\" nowrap=\"nowrap\">"; + $spouselinks .= "<b>" . WT_I18N::translate('Family') . "</b> (" .$person->getFullName(). ")<br />"; + $parentlinks .= "<table class=\"rtlnav person_box$isF\"><tr><td align=\"right\" style=\"font-size:10px;font-weight:normal;\" class=\"name2\" nowrap=\"nowrap\">"; + $parentlinks .= "<b>" . WT_I18N::translate('Parents') . "</b> (" .$person->getFullName(). ")<br />"; + $step_parentlinks .= "<table class=\"rtlnav person_box$isF\"><tr><td align=\"right\" style=\"font-size:10px;font-weight:normal;\" class=\"name2\" nowrap=\"nowrap\">"; + $step_parentlinks .= "<b>" . WT_I18N::translate('Parents') . "</b> (" .$person->getFullName(). ")<br />"; + } else { + $spouselinks .= "<table class=\"ltrnav person_box$isF\"><tr><td align=\"left\" style=\"font-size:10px;font-weight:normal;\" class=\"name2\" nowrap=\"nowrap\">"; + $spouselinks .= "<b>" . WT_I18N::translate('Family') . "</b> (" .$person->getFullName(). ")<br />"; + $parentlinks .= "<table class=\"ltrnav person_box$isF\"><tr><td align=\"left\" style=\"font-size:10px;font-weight:normal;\" class=\"name2\" nowrap=\"nowrap\">"; + $parentlinks .= "<b>" . WT_I18N::translate('Parents') . "</b> (" .$person->getFullName(). ")<br />"; + $step_parentlinks .= "<table class=\"ltrnav person_box$isF\"><tr><td align=\"left\" style=\"font-size:10px;font-weight:normal;\" class=\"name2\" nowrap=\"nowrap\">"; + $step_parentlinks .= "<b>" . WT_I18N::translate('Parents') . "</b> (" .$person->getFullName(). ")<br />"; + } + + $persons = ""; + $person_parent = ""; + $person_step = ""; + + //-- Parent families -------------------------------------- + $fams = $person->getChildFamilies(); + foreach ($fams as $family) { + $marrdate = $family->getMarriageDate(); + $married = WT_Date::Compare($censdate, $marrdate); + + if (!is_null($family)) { + $husb = $family->getHusband($person); + $wife = $family->getWife($person); + $children = $family->getChildren(); + $num = count($children); + $marrdate = $family->getMarriageDate(); + + //-- Get Parent Children's Name, DOB, DOD -------------------------- + if (isset($children)) { + $chBLDarray = Array(); + foreach ($children as $child) { + $chnam = $child->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace('"', "", $chfulln); // Must remove quotes completely here + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); // Child's Full Name + $chdob = ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + //-- Parent Husband ------------------------------ + if ($husb || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($husb) { + //-- Parent Husbands Parents ---------------------- + $gparent=WT_Person::getInstance($husb->getXref()); + $parfams = $gparent->getChildFamilies(); + foreach ($parfams as $pfamily) { + if (!is_null($pfamily)) { + $phusb = $pfamily->getHusband($gparent); + $pwife = $pfamily->getWife($gparent); + } + if ($phusb) { $pHusbFBP = $phusb->getBirthPlace(); } + if ($pwife) { $pHusbMBP = $pwife->getBirthPlace(); } + } + //-- Parent Husbands Details ---------------------- + $person_parent="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$husb->getXref(); + } else { + $title = $husb->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$husb->getXref(); + if ($husb->canDisplayName()) { + $nam = $husb->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surn']; + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$nam[$i]['surname']; + } + } + $parentlinks .= "<a class=\"linka\" href=\"javascript:insertRowToTable("; + $parentlinks .= "'".PrintReady($husb->getXref())."',"; // pid = PID + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // nam = Name + if (isset($fulmn)) { + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // mnam = Full Married Name + } else { + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // mnam = Full Name + } + if ($currpid=="Wife" || $currpid=="Husband") { + $parentlinks .= "'Father in Law',"; // label = 1st Gen Male Relationship + } else { + $parentlinks .= "'Grand-Father',"; // label = 2st Gen Male Relationship + } + $parentlinks .= "'".PrintReady($husb->getSex())."',"; // sex = Gender + $parentlinks .= "''".","; // cond = Condition (Married etc) + if ($marrdate) { + $parentlinks .= "'".(($marrdate->minJD()+$marrdate->maxJD())/2)."',"; // dom = Date of Marriage (Julian) + } + $parentlinks .= "'".(($husb->getBirthDate()->minJD()+$husb->getBirthDate()->maxJD())/2)."',"; // dob = Date of Birth + if ($husb->getbirthyear()>=1) { + $parentlinks .= "'".PrintReady($censyear-$husb->getbirthyear())."',"; // age = Census Year - Year of Birth + } else { + $parentlinks .= "''".","; // age = Undefined + } + $parentlinks .= "'".(($husb->getDeathDate()->minJD()+$husb->getDeathDate()->maxJD())/2)."',"; // dod = Date of Death + $parentlinks .= "''".","; // occu = Occupation + $parentlinks .= "'".PrintReady($husb->getBirthPlace())."'".","; // birthpl = Individuals Birthplace + if (isset($pHusbFBP)) { + $parentlinks .= "'".$pHusbFBP."'".","; // fbirthpl = Fathers Birthplace + } else { + $parentlinks .= "'UNK, UNK, UNK, UNK'".","; // fbirthpl = Fathers Birthplace + } + if (isset($pHusbMBP)) { + $parentlinks .= "'".$pHusbMBP."'".","; // mbirthpl = Mothers Birthplace + } else { + $parentlinks .= "'UNK, UNK, UNK, UNK'".","; // mbirthpl = Mothers Birthplace + } + if (isset($chBLDarray) && $husb->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + $parentlinks .= "'".$chBLDarray."'"; // Array of Children (name, birthdate, deathdate) + } else { + $parentlinks .= "''"; + } + $parentlinks .= ");\">"; + $parentlinks .= PrintReady($husb->getFullName()); // Full Name (Link) + $parentlinks .= "</a>"; + } else { + $parentlinks .= WT_I18N::translate('Private'); + } + $natdad = "yes"; + } + } + + //-- Parent Wife ------------------------------ + if ($wife || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($wife) { + //-- Parent Wifes Parents ---------------------- + $gparent=WT_Person::getInstance($wife->getXref()); + $parfams = $gparent->getChildFamilies(); + foreach ($parfams as $pfamily) { + if (!is_null($pfamily)) { + $pwhusb = $pfamily->getHusband($gparent); + $pwwife = $pfamily->getWife($gparent); + } + if ($pwhusb) { $pWifeFBP = $pwhusb->getBirthPlace(); } + if ($pwwife) { $pWifeMBP = $pwwife->getBirthPlace(); } + } + //-- Parent Wifes Details ---------------------- + $person_parent="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$wife->getXref(); + } else { + $title = $wife->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$wife->getXref(); + if ($wife->canDisplayName()) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $wife->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + $husbnam = null; + + // Get wifes married name if available + if (isset($husb)) { + $husbnams = $husb->getAllNames(); + if ($husbnams[0]['surname']=="@N.N." || $husbnams[0]['surname']=="") { + // Husband or his name is not known + } else { + $husbnam = $husb->getAllNames(); + } + } + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$nam[$i]['surname']; + } + } + + $parentlinks .= "<a class=\"linka\" href=\"javascript:insertRowToTable("; + $parentlinks .= "'".PrintReady($wife->getXref())."',"; // pid = PID + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // nam = Name + if (isset($fulmn)) { + $parentlinks .= "'".addslashes(strip_tags($fulmn))."',"; // mnam = Full Married Name + } else { + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // mnam = Full Name + } + if ($currpid=="Wife" || $currpid=="Husband") { + $parentlinks .= "'Mother in Law',"; // label = 1st Gen Female Relationship + } else { + $parentlinks .= "'Grand-Mother',"; // label = 2st Gen Female Relationship + } + $parentlinks .= "'".PrintReady($wife->getSex())."',"; // sex = Gender + $parentlinks .= "''".","; // cond = Condition (Married etc) + if ($marrdate) { + $parentlinks .= "'".(($marrdate->minJD()+$marrdate->maxJD())/2)."',"; // dom = Date of Marriage (Julian) + } + $parentlinks .= "'".(($wife->getBirthDate()->minJD()+$wife->getBirthDate()->maxJD())/2)."',"; // dob = Date of Birth + if ($wife->getbirthyear()>=1) { + $parentlinks .= "'".PrintReady($censyear-$wife->getbirthyear())."',"; // age = Census Year - Year of Birth + } else { + $parentlinks .= "''".","; // age = Undefined + } + $parentlinks .= "'".(($wife->getDeathDate()->minJD()+$wife->getDeathDate()->maxJD())/2)."',"; // dod = Date of Death + $parentlinks .= "''".","; // occu = Occupation + $parentlinks .= "'".PrintReady($wife->getBirthPlace())."'".","; // birthpl = Individuals Birthplace + if (isset($pWifeFBP)) { + $parentlinks .= "'".$pWifeFBP."'".","; // fbirthpl = Fathers Birthplace + } else { + $parentlinks .= "'UNK, UNK, UNK, UNK'".","; // fbirthpl = Fathers Birthplace Not Known + } + if (isset($pWifeMBP)) { + $parentlinks .= "'".$pWifeMBP."'".","; // mbirthpl = Mothers Birthplace + } else { + $parentlinks .= "'UNK, UNK, UNK, UNK'".","; // mbirthpl = Mothers Birthplace Not Known + } + if (isset($chBLDarray) && $wife->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + $parentlinks .= "'".$chBLDarray."'"; // Array of Children (name, birthdate, deathdate) + } else { + $parentlinks .= "''"; + } + $parentlinks .= ");\">"; + $parentlinks .= PrintReady($wife->getFullName()); // Full Name (Link) + $parentlinks .= "</a>"; + } else { + $parentlinks .= WT_I18N::translate('Private'); + } + $natmom = "yes"; + } + } + } + } + + //-- Step families ----------------------------------------- + $fams = $person->getChildStepFamilies(); + foreach ($fams as $family) { + $marrdate = $family->getMarriageDate(); + $married = WT_Date::Compare($censdate, $marrdate); + if (!is_null($family)) { + $husb = $family->getHusband($person); + $wife = $family->getWife($person); + $children = $family->getChildren(); + $num = count($children); + $marrdate = $family->getMarriageDate(); + + //-- Get StepParent's Children's Name, DOB, DOD -------------------------- + if (isset($children)) { + $chBLDarray = Array(); + foreach ($children as $child) { + $chnam = $child->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace('"', "", $chfulln); // Must remove quotes completely here + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); // Child's Full Name + $chdob = ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + //-- Step Husband -------------------------------------- + if ($natdad == "yes") { + } else { + if (($husb || $num>0) && $husb->getLabel() != ".") { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($husb) { + //-- Step Husbands Parents ----------------------------- + $gparent=WT_Person::getInstance($husb->getXref()); + $parfams = $gparent->getChildFamilies(); + foreach ($parfams as $pfamily) { + if (!is_null($pfamily)) { + $phusb = $pfamily->getHusband($gparent); + $pwife = $pfamily->getWife($gparent); + } + if ($phusb) { $pHusbFBP = $phusb->getBirthPlace(); } + if ($pwife) { $pHusbMBP = $pwife->getBirthPlace(); } + } + //-- Step Husband Details ------------------------------ + $person_step="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$husb->getXref(); + } else { + $title = $husb->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$husb->getXref(); + if ($husb->canDisplayName()) { + $nam = $husb->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + //$fulln = strip_tags($husb->getFullName()); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$nam[$i]['surname']; + } + } + $parentlinks .= "<a class=\"linka\" href=\"javascript:insertRowToTable("; + $parentlinks .= "'".PrintReady($husb->getXref())."',"; // pid = PID + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // nam = Name + if (isset($fulmn)) { + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // mnam = Full Married Name + } else { + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // mnam = Full Name + } + if ($currpid=="Wife" || $currpid=="Husband") { + $parentlinks .= "'Step Father-in-Law',"; // label = 1st Gen Male Relationship + } else { + $parentlinks .= "'Step Grand-Father',"; // label = 2st Gen Male Relationship + } + $parentlinks .= "'".PrintReady($husb->getSex())."',"; // sex = Gender + $parentlinks .= "''".","; // cond = Condition (Married etc) + if ($marrdate) { + $parentlinks .= "'".(($marrdate->minJD()+$marrdate->maxJD())/2)."',"; // dom = Date of Marriage (Julian) + } + $parentlinks .= "'".(($husb->getBirthDate()->minJD()+$husb->getBirthDate()->maxJD())/2)."',"; // dob = Date of Birth + if ($husb->getbirthyear()>=1) { + $parentlinks .= "'".PrintReady($censyear-$husb->getbirthyear())."',"; // age = Census Year - Year of Birth + } else { + $parentlinks .= "''".","; // age = Undefined + } + $parentlinks .= "'".(($husb->getDeathDate()->minJD()+$husb->getDeathDate()->maxJD())/2)."',"; // dod = Date of Death + $parentlinks .= "''".","; // occu = Occupation + $parentlinks .= "'".PrintReady($husb->getBirthPlace())."'".","; // birthpl = Individuals Birthplace + if (isset($pHusbFBP)) { + $parentlinks .= "'".$pHusbFBP."'".","; // fbirthpl = Fathers Birthplace + } else { + $parentlinks .= "'UNK, UNK, UNK, UNK'".","; // fbirthpl = Fathers Birthplace + } + if (isset($pHusbMBP)) { + $parentlinks .= "'".$pHusbMBP."'".","; // mbirthpl = Mothers Birthplace + } else { + $parentlinks .= "'UNK, UNK, UNK, UNK'".","; // mbirthpl = Mothers Birthplace + } + if (isset($chBLDarray) && $husb->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + $parentlinks .= "'".$chBLDarray."'"; // Array of Children (name, birthdate, deathdate) + } else { + $parentlinks .= "''"; + } + $parentlinks .= ");\">"; + $parentlinks .= PrintReady($husb->getFullName()); // Full Name (Link) + $parentlinks .= "</a>"; + } else { + $parentlinks .= WT_I18N::translate('Private'); + } + } + } + } + + //-- Step Wife ---------------------------------------- + if ($natmom == "yes") { + } else { + if ($wife || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($wife) { + //-- Step Wifes Parents --------------------------- + $gparent=WT_Person::getInstance($wife->getXref()); + $parfams = $gparent->getChildFamilies(); + foreach ($parfams as $pfamily) { + if (!is_null($pfamily)) { + $pwhusb = $pfamily->getHusband($gparent); + $pwwife = $pfamily->getWife($gparent); + } + if ($pwhusb) { $pWifeFBP = $pwhusb->getBirthPlace(); } + if ($pwwife) { $pWifeMBP = $pwwife->getBirthPlace(); } + } + //-- Step Wife Details ------------------------------ + $person_step="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$wife->getXref(); + } else { + $title = $wife->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$wife->getXref(); + if ($wife->canDisplayName()) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $wife->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + //$fulln = strip_tags($wife->getFullName()); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + $husbnam = null; + + // Get wifes married name if available + if (isset($husb)) { + $husbnams = $husb->getAllNames(); + if ($husbnams[0]['surname']=="@N.N." || $husbnams[0]['surname']=="") { + // Husband or his name is not known + } else { + $husbnam = $husb->getAllNames(); + } + } + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM') { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$nam[$i]['surname']; + } + } + + $parentlinks .= "<a class=\"linka\" href=\"javascript:insertRowToTable("; + $parentlinks .= "'".PrintReady($wife->getXref())."',"; // pid = PID + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // nam = Name + if (isset($fulmn)) { + $parentlinks .= "'".addslashes(strip_tags($fulmn))."',"; // mnam = Full Married Name + } else { + $parentlinks .= "'".addslashes(strip_tags($fulln))."',"; // mnam = Full Name + } + if ($currpid=="Wife" || $currpid=="Husband") { + $parentlinks .= "'Step Mother-in-Law',"; // label = 1st Gen Female Relationship + } else { + $parentlinks .= "'Step Grand-Mother',"; // label = 2st Gen Female Relationship + } + $parentlinks .= "'".PrintReady($wife->getSex())."',"; // sex = Gender + $parentlinks .= "''".","; // cond = Condition (Married etc) + if ($marrdate) { + $parentlinks .= "'".(($marrdate->minJD()+$marrdate->maxJD())/2)."',"; // dom = Date of Marriage (Julian) + } + $parentlinks .= "'".(($wife->getBirthDate()->minJD()+$wife->getBirthDate()->maxJD())/2)."',"; // dob = Date of Birth + if ($wife->getbirthyear()>=1) { + $parentlinks .= "'".PrintReady($censyear-$wife->getbirthyear())."',"; // age = Census Year - Year of Birth + } else { + $parentlinks .= "''".","; // age = Undefined + } + $parentlinks .= "'".(($wife->getDeathDate()->minJD()+$wife->getDeathDate()->maxJD())/2)."',"; // dod = Date of Death + $parentlinks .= "''".","; // occu = Occupation + $parentlinks .= "'".PrintReady($wife->getBirthPlace())."'".","; // birthpl = Individuals Birthplace + if (isset($pWifeFBP)) { + $parentlinks .= "'".$pWifeFBP."'".","; // fbirthpl = Fathers Birthplace + } else { + $parentlinks .= "'UNK, UNK, UNK, UNK'".","; // fbirthpl = Fathers Birthplace Not Known + } + if (isset($pWifeMBP)) { + $parentlinks .= "'".$pWifeMBP."'".","; // mbirthpl = Mothers Birthplace + } else { + $parentlinks .= "'UNK, UNK, UNK, UNK'".","; // mbirthpl = Mothers Birthplace Not Known + } + if (isset($chBLDarray) && $wife->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + $parentlinks .= "'".$chBLDarray."'"; // Array of Children (name, birthdate, deathdate) + } else { + $parentlinks .= "''"; + } + $parentlinks .= ");\">"; + $parentlinks .= PrintReady($wife->getFullName()); // Full Name (Link) + $parentlinks .= "</a>"; + } else { + $parentlinks .= WT_I18N::translate('Private'); + } + } + } + } + } + } + + // Spouse Families ------------------------------------------ + $fams = $person->getSpouseFamilies(); + foreach ($fams as $family) { + if (!is_null($family)) { + $spouse = $family->getSpouse($person); + $children = $family->getChildren(); + $num = count($children); + $marrdate = $family->getMarriageDate(); + $married = WT_Date::Compare($censdate, $marrdate); + $is_wife = $family->getWife(); + + //-- Get Spouse's Children's Name, DOB, DOD -------------------------- + if (isset($children)) { + $chBLDarray = Array(); + foreach ($children as $child) { + $chnam = $child->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace('"', "", $chfulln); // Must remove quotes completely here + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); // Child's Full Name + $chdob = ($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + //-- Spouse ----------------------------------------- + if ($spouse || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($spouse) { + + //-- Spouse Parents ----------------------------- + $gparent=WT_Person::getInstance($spouse->getXref()); + $spousefams = $gparent->getChildFamilies(); + foreach ($spousefams as $pfamily) { + if (!is_null($pfamily)) { + $phusb = $pfamily->getHusband($gparent); + $pwife = $pfamily->getWife($gparent); + } + if ($phusb) { $pSpouseFBP = $phusb->getBirthPlace(); } + if ($pwife) { $pSpouseMBP = $pwife->getBirthPlace(); } + } + + //-- Spouse Details ----------------------------- + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$spouse->getXref(); + } else { + $title = $spouse->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$spouse->getXref(); + if ($spouse->canDisplayName()) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $spouse->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + + // If spouse is a wife, then get her married name or default to her birth name + for ($i=0; $i<count($nam); $i++) { + if ($nam[$i]['type']=='_MARNM' && $is_wife) { + $fulmn = rtrim($nam[$i]['givn'],'*')." ".$nam[$i]['surname']; + } else { + $fulmn = $fulln; + } + } + + $spouselinks .= "<a href=\"javascript:insertRowToTable("; + $spouselinks .= "'".PrintReady($spouse->getXref())."',"; // pid = PID + $spouselinks .= "'".addslashes(strip_tags($fulln))."',"; // nam = Name + if (isset($fulmn)) { + $spouselinks .= "'".addslashes(strip_tags($fulmn))."',"; // mnam = Full Married Name + } else { + $spouselinks .= "'".addslashes(strip_tags($fulln))."',"; // mnam = Full Name + } + if ($currpid=="Son" || $currpid=="Daughter") { + if ($spouse->getSex()=="M") { + $spouselinks .= "'Son in Law',"; // label = Male Relationship + } else { + $spouselinks .= "'Daughter in Law',"; // label = Female Relationship + } + } else { + if ($spouse->getSex()=="M") { + $spouselinks .= "'Brother in Law',"; // label = Male Relationship + } else { + $spouselinks .= "'Sister in Law',"; // label = Female Relationship + } + } + $spouselinks .= "'".PrintReady($spouse->getSex())."',"; // sex = Gender + $spouselinks .= "''".","; // cond = Condition (Married etc) + if ($marrdate) { + $spouselinks .= "'".(($marrdate->minJD()+$marrdate->maxJD())/2)."',"; // dom = Date of Marriage (Julian) + } + $spouselinks .= "'".(($spouse->getBirthDate()->minJD()+$spouse->getBirthDate()->maxJD())/2)."',"; // dob = Date of Birth + if ($spouse->getbirthyear()>=1) { + $spouselinks .= "'".PrintReady($censyear-$spouse->getbirthyear())."',"; // age = Census Year - Year of Birth + } else { + $spouselinks .= "''".","; // age = Undefined + } + $spouselinks .= "'".(($spouse->getDeathDate()->minJD()+$spouse->getDeathDate()->maxJD())/2)."',"; // dod = Date of Death + $spouselinks .= "''".","; // occu = Occupation + $spouselinks .= "'".PrintReady($spouse->getBirthPlace())."'".","; // birthpl = Individuals Birthplace + if (isset($pSpouseFBP)) { + $spouselinks .= "'".$pSpouseFBP."'".","; // fbirthpl = Fathers Birthplace + } else { + $spouselinks .= "'UNK, UNK, UNK, UNK'".","; // fbirthpl = Fathers Birthplace Not Known + } + if (isset($pSpouseMBP)) { + $spouselinks .= "'".$pSpouseMBP."'".","; // mbirthpl = Mothers Birthplace + } else { + $spouselinks .= "'UNK, UNK, UNK, UNK'".","; // mbirthpl = Mothers Birthplace Not Known + } + if (isset($chBLDarray) && $spouse->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + $spouselinks .= "'".$chBLDarray."'"; // Array of Children (name, birthdate, deathdate) + } else { + $spouselinks .= "''"; + } + $spouselinks .= ");\">"; + $spouselinks .= PrintReady($spouse->getFullName()); // Full Name (Link) + $spouselinks .= "</a>"; + } else { + $spouselinks .= WT_I18N::translate('Private'); + } + $spouselinks .= "</a>"; + if ($spouse->getFullName() != "") { + $persons = "Yes"; + } + } + } + + // Children ------------------------------------- + $spouselinks .= "<ul class=\"clist ".$TEXT_DIRECTION."\">"; + foreach ($children as $c=>$child) { + $cpid = $child->getXref(); + if ($child) { + $persons="Yes"; + + //-- Childs Parents --------------------- + $gparent=WT_Person::getInstance($child->getXref()); + $fams = $gparent->getChildFamilies(); + $chfams = $gparent->getSpouseFamilies(); + foreach ($fams as $family) { + if (!is_null($family)) { + $husb = $family->getHusband($gparent); + $wife = $family->getWife($gparent); + } + if ($husb) { $ChildFBP = $husb->getBirthPlace(); } + if ($wife) { $ChildMBP = $wife->getBirthPlace(); } + } + + // Get Child's Children + $chBLDarray=Array(); + foreach ($child->getSpouseFamilies() as $childfamily) { + $chchildren = $childfamily->getChildren(); + foreach ($chchildren as $chchild) { + $chnam = $chchild->getAllNames(); + $chfulln = rtrim($chnam[0]['givn'],'*')." ".$chnam[0]['surname']; + $chfulln = str_replace('"', "", $chfulln); // Must remove quotes completely here + $chfulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $chfulln); + $chfulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $chfulln); // Child's Full Name + $chdob = ($chchild->getBirthDate()->minJD()+$chchild->getBirthDate()->maxJD())/2; // Child's Date of Birth (Julian) + $chdod = ($chchild->getDeathDate()->minJD()+$chchild->getDeathDate()->maxJD())/2; // Child's Date of Death (Julian) + $chBLD = ($chfulln.", ".$chdob.", ".$chdod); + array_push($chBLDarray, $chBLD); + } + } + + // Get Childs marriage status ------------ + $married=""; + $marrdate=""; + $chhusbnam=null; + foreach ($child->getSpouseFamilies() as $childfamily) { + $marrdate=$childfamily->getMarriageDate(); + $married = WT_Date::Compare($censdate, $marrdate); + if ($childfamily->getHusband()) { + $chhusbnam = $childfamily->getHusband()->getAllNames(); + } + } + // Childs Details ------------------------- + $title = WT_I18N::translate('Individual information').": ".$cpid; + $spouselinks .= "<li>"; + if ($child->canDisplayName()) { + $nam = $child->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $fulln = str_replace("@N.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $fulln = str_replace("@P.N.", "(".WT_I18N::translate('unknown').")", $fulln); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + $husbnam = null; + + // Get childs married name if available + $chfulmn=null; + $chnam = $child->getAllNames(); + if ($chhusbnam[0]['surname']=="@N.N." || $chhusbnam[0]['surname']=="") { + // if Husband or his name is not known then use wifes birth name + $husbnam = $nam[0]['surname']; + } else { + $husbnam = $chhusbnam[0]['surname']; + } + for ($i=0; $i<count($nam); $i++) { + if ($chnam[$i]['type']=='_MARNM') { + $chfulmn = rtrim($chnam[$i]['givn'],'*')." ".$husbnam; + } + } + + $spouselinks .= "<a href=\"javascript:insertRowToTable("; + $spouselinks .= "'".PrintReady($child->getXref())."',"; // pid = PID + $spouselinks .= "'".addslashes(strip_tags($fulln))."',"; // nam = Name + if (isset($chfulmn)) { + $spouselinks .= "'".addslashes(strip_tags($chfulmn))."',"; // mnam = Full Married Name + } else { + $spouselinks .= "'".addslashes(strip_tags($fulln))."',"; // mnam = Full Name + } + if ($currpid=="Son" || $currpid=="Daughter") { + if ($child->getSex()=="M") { + $spouselinks .= "'Grand-Son',"; // label = Male Relationship + } else { + $spouselinks .= "'Grand-Daughter',"; // label = Female Relationship + } + } else { + if ($child->getSex()=="M") { + $spouselinks .= "'Nephew',"; // label = Male Relationship + } else { + $spouselinks .= "'Niece',"; // label = Female Relationship + } + } + $spouselinks .= "'".PrintReady($child->getSex())."',"; // sex = Gender + $spouselinks .= "''".","; // cond = Condition (Married etc) + if ($marrdate) { + $spouselinks .= "'".(($marrdate->minJD()+$marrdate->maxJD())/2)."',"; // dom = Date of Marriage (Julian) + } else { + $spouselinks .= "'nm'".","; + } + $spouselinks .= "'".(($child->getBirthDate()->minJD()+$child->getBirthDate()->maxJD())/2)."',"; // dob = Date of Birth + if ($child->getbirthyear()>=1) { + $spouselinks .= "'".PrintReady($censyear-$child->getbirthyear())."',"; // age = Census Year - Year of Birth + } else { + $spouselinks .= "''".","; // age = Undefined + } + $spouselinks .= "'".(($child->getDeathDate()->minJD()+$child->getDeathDate()->maxJD())/2)."',"; // dod = Date of Death + $spouselinks .= "''".","; // occu = Occupation + $spouselinks .= "'".PrintReady($child->getBirthPlace())."'".","; // birthpl = Individuals Birthplace + if (isset($ChildFBP)) { + $spouselinks .= "'".$ChildFBP."'".","; // fbirthpl = Fathers Birthplace + } else { + $spouselinks .= "'UNK, UNK, UNK, UNK'".","; // fbirthpl = Fathers Birthplace Not Known + } + if (isset($ChildMBP)) { + $spouselinks .= "'".$ChildMBP."'".","; // mbirthpl = Mothers Birthplace + } else { + $spouselinks .= "'UNK, UNK, UNK, UNK'".","; // mbirthpl = Mothers Birthplace Not Known + } + if (isset($chBLDarray) && $child->getSex()=="F") { + $chBLDarray = implode("::", $chBLDarray); + $spouselinks .= "'".$chBLDarray."'"; // Array of Children (name, birthdate, deathdate) + } else { + $spouselinks .= "''"; + } + $spouselinks .= ");\">"; + $spouselinks .= PrintReady($child->getFullName()); // Full Name (Link) + $spouselinks .= "</a>"; + $spouselinks .= "</li>"; + } else { + $spouselinks .= WT_I18N::translate('Private'); + } + } + } + $spouselinks .= "</ul>"; + } + } + if ($persons != "Yes") { + $spouselinks .= "(" . WT_I18N::translate('none') . ")</td></tr></table>"; + } else { + $spouselinks .= "</td></tr></table>"; + } + + if ($person_parent != "Yes") { + $parentlinks .= "(" . WT_I18N::translate_c('unknown family', 'unknown') . ")</td></tr></table>"; + } else { + $parentlinks .= "</td></tr></table>"; + } + + if ($person_step != "Yes") { + $step_parentlinks .= "(" . WT_I18N::translate_c('unknown family', 'unknown') . ")</td></tr></table>"; + } else { + $step_parentlinks .= "</td></tr></table>"; + } + } + } + } +} diff --git a/modules_v2/GEDFact_assistant/_CENS/census_4_text.php b/modules_v2/GEDFact_assistant/_CENS/census_4_text.php new file mode 100644 index 0000000000..6526f871e9 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/census_4_text.php @@ -0,0 +1,69 @@ +<?php +/** + * Census Assistant Control module for webtrees + * + * Census Proposed Text Area File + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2007 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + * @author Brian Holland + */ +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} +global $theme_name; +?> + +<script> +function help_window2(frm) { + var aWindow = window.open('http://wiki.phpgedview.net/en/index.php?title=GedFactAssistant_module#Sub-module:_Census_Assistant', 'HelpWindow', + 'scrollbars=yes,menubar=no,resizable=yes,location=no,toolbar=no,width=900,height=700'); + aWindow.focus(); + // set the target to the blank window + frm.target = 'TableAddRow2NewWindow'; +} +</script> + +<!-- ---- The proposed Census Text -------- --> +<div class="optionbox cens_text"> +<!--[if IE]><style>.cens_text{margin-top:-1.3em;}</style><![EndIf]--> + <span><input type="button" value="<?php echo WT_I18N::translate('Help'); ?>" onclick="javascript: help_window2(this.form)" /></span> + <span><?php echo WT_I18N::translate('Click "Preview" to copy Edit Input Fields'); ?></span> + <span><input type="button" value="<?php echo WT_I18N::translate('Preview'); ?>" onclick="preview();" /></span> + <span><b><?php echo WT_I18N::translate('Proposed Census Text '); ?></b></span> + <span><input type="submit" value="<?php echo WT_I18N::translate('Save'); ?>" onclick="caSave();" /></span> + <br /><br /> + <span class="descriptionbox width15 nowrap <?php $TEXT_DIRECTION; ?>"> + <?php + echo WT_I18N::translate('Shared note'), help_link('SHARED_NOTE'); + ?> + </span> + <div class="optionbox"> + <textarea wrap="off" name="NOTE" id="NOTE"></textarea><br /> + <center> + <?php print_specialchar_link("NOTE",true); ?> + </center> + </div> +</div> diff --git a/modules_v2/GEDFact_assistant/_CENS/census_5_input.php b/modules_v2/GEDFact_assistant/_CENS/census_5_input.php new file mode 100644 index 0000000000..88221c427f --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/census_5_input.php @@ -0,0 +1,40 @@ +<?php +/** + * Census Assistant Control module for webtrees + * + * Census input table area + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + */ +require WT_ROOT.WT_MODULES_DIR.'GEDFact_assistant/_CENS/js/census_5_input.js.php'; + +?> + +<div class="cens_data"> + <table id="tblSample" cellpadding=0> + <thead></thead> + <tbody></tbody> + </table> +</div> diff --git a/modules_v2/GEDFact_assistant/_CENS/census_asst_date.php b/modules_v2/GEDFact_assistant/_CENS/census_asst_date.php new file mode 100644 index 0000000000..6a636182ae --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/census_asst_date.php @@ -0,0 +1,79 @@ +<?php +/** + * Census Assistant Control module for webtrees + * + * Census information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ +*/ +?> + + <script> + function addDate(theCensDate) { + var ddate = theCensDate.split(', '); + document.getElementById('setctry').value = ddate[3]; + document.getElementById('setyear').value = ddate[0]; + cal_setDateField('<?php echo $element_id; ?>', parseInt(ddate[0]), parseInt(ddate[1]), parseInt(ddate[2])); return false; + } + function pasteAsstDate(setcy, setyr) { + document.getElementById(setcy+setyr).selected = true; + addDate(document.getElementById('selcensdate').options[document.getElementById('selcensdate').selectedIndex].value); + } + </script> + + <select id="selcensdate" name="selcensdate" onchange = "if (this.options[this.selectedIndex].value!='') { + addDate(this.options[this.selectedIndex].value); + }"> + <option id="defdate" name="defdate" value='' SELECTED><?php echo WT_I18N::translate('Census date'); ?></option> + <option value=""></option> + <option id="UK1911" name="UK1911" class="UK" value='1911, 3, 02, UK'>UK 1911</option> + <option id="UK1901" name="UK1901" class="UK" value="1901, 2, 31, UK">UK 1901</option> + <option id="UK1891" name="UK1891" class="UK" value="1891, 3, 05, UK">UK 1891</option> + <option id="UK1881" name="UK1881" class="UK" value="1881, 3, 03, UK">UK 1881</option> + <option id="UK1871" name="UK1871" class="UK" value="1871, 3, 02, UK">UK 1871</option> + <option id="UK1861" name="UK1861" class="UK" value="1861, 3, 07, UK">UK 1861</option> + <option id="UK1851" name="UK1851" class="UK" value="1851, 2, 30, UK">UK 1851</option> + <option id="UK1841" name="UK1841" class="UK" value="1841, 5, 06, UK">UK 1841</option> + <option value=""></option> + <option id="USA1930" name="USA1930" class="USA" value="1930, 3, 01, USA">US 1930</option> + <option id="USA1920" name="USA1920" class="USA" value="1920, 0, 01, USA">US 1920</option> + <option id="USA1910" name="USA1910" class="USA" value="1910, 3, 15, USA">US 1910</option> + <option id="USA1900" name="USA1900" class="USA" value="1900, 5, 01, USA">US 1900</option> + <option id="USA1890" name="USA1890" class="USA" value="1890, 5, 01, USA">US 1890</option> + <option id="USA1880" name="USA1880" class="USA" value="1880, 5, 01, USA">US 1880</option> + <option id="USA1870" name="USA1870" class="USA" value="1870, 5, 01, USA">US 1870</option> + <option id="USA1860" name="USA1860" class="USA" value="1860, 5, 01, USA">US 1860</option> + <option id="USA1850" name="USA1850" class="USA" value="1850, 5, 01, USA">US 1850</option> + <option id="USA1840" name="USA1840" class="USA" value="1840, 5, 01, USA">US 1840</option> + <option id="USA1830" name="USA1830" class="USA" value="1830, 5, 01, USA">US 1830</option> + <option id="USA1820" name="USA1820" class="USA" value="1820, 7, 07, USA">US 1820</option> + <option id="USA1810" name="USA1810" class="USA" value="1810, 7, 06, USA">US 1810</option> + <option id="USA1800" name="USA1800" class="USA" value="1800, 7, 04, USA">US 1800</option> + <option id="USA1790" name="USA1790" class="USA" value="1790, 7, 02, USA">US 1790</option> + <option value=""></option> + </select> + + <input type="hidden" id="setctry" name="setctry" value="" /> + <input type="hidden" id="setyear" name="setyear" value="" /> diff --git a/modules_v2/GEDFact_assistant/_CENS/census_asst_help.php b/modules_v2/GEDFact_assistant/_CENS/census_asst_help.php new file mode 100644 index 0000000000..fb6f03564c --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/census_asst_help.php @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html <?php echo WT_I18N::html_markup(); ?>> +<head> +<title>Help window</title> +<script type="text/javascript"> +/* + <!-- + function printToPage() + { + var pos; + var searchStr = window.location.search; + var searchArray = searchStr.substring(1,searchStr.length).split('&'); + var htmlOutput = ''; + for (var i=0; i<searchArray.length; i++) { + htmlOutput += searchArray[i] + '<br />'; + } + return(htmlOutput); + } + //--> +*/ +</script> +</head> + +<body> +<b>Census Assistant - Help window</b> +<br /><br /> +Here will be the help for the Census Assistant window: +<p> +<script type="text/javascript"> +<!-- +document.write(printToPage()); +//--> +</script> +</p> +</body> +</html> diff --git a/modules_v2/GEDFact_assistant/_CENS/census_note_decode.php b/modules_v2/GEDFact_assistant/_CENS/census_note_decode.php new file mode 100644 index 0000000000..2aca6192a9 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/census_note_decode.php @@ -0,0 +1,99 @@ +<?php +/** + * Census Assistant Control module for webtrees + * + * Census Shared Note Decode for a formatted file + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + */ + + $text = "xCxAx<table cellpadding=\"0\"><tr><td>" . $text; + $text = str_replace("<br />.start_formatted_area.<br />", "</td></tr></table><table cellpadding=\"0\"><tr><td class=\"notecell\"> ", $text); + + // -- Create View Header Tooltip explanations (Use embolden) ----------- + $text = str_replace(".b.".'Name', "<span class=\"note2\" alt=\"".'Full Name or Married name if married'."\" title=\"".'Full Name or Married name if married'."\"> <b>".'Name'."</span>", $text); + $text = str_replace(".b.".'Relation', "<span class=\"note1\" alt=\"".'Relationship to Head of Household'."\" title=\"".'Relationship to Head of Household'."\"> <b>".'Relation'."</span>", $text); + $text = str_replace(".b.".'Assets', "<span class=\"note1\" alt=\"".'Assets = Owned,Rented - Value,Rent - Radio - Farm'."\" title=\"".'Assets = Owned,Rented - Value,Rent - Radio - Farm'."\"> <b>".'Assets'."</span>", $text); + $text = str_replace(".b.".'Sex', "<span class=\"note1\" alt=\"".'Male or Female'."\" title=\"".'Male or Female'."\"> <b>".'Sex'."</span>", $text); + $text = str_replace(".b.".'Race', "<span class=\"note1\" alt=\"".'Race or Color - Black, White, Mulatto, Asian, Indian, Chinese etc'."\" title=\"".'Race or Color - Black, White, Mulatto, Asian, Indian, Chinese etc'."\"> <b>".'Race'."</span>", $text); + $text = str_replace(".b.".'Age', "<span class=\"note1\" alt=\"".'Age at last birthday'."\" title=\"".'Age at last birthday'."\"> <b>".'Age'."</span>", $text); + $text = str_replace(".b.".'MC', "<span class=\"note1\" alt=\"".'Marital Condition - Married, Single, Unmarried, Widowed or Divorced'."\" title=\"".'Marital Condition - Married, Single, Unmarried, Widowed or Divorced'."\"> <b>".'MC'."</span>", $text); + $text = str_replace(".b.".'DOB', "<span class=\"note1\" alt=\"".'Date of Birth'."\" title=\"".'Date of Birth'."\"> <b>".'DOB'."</span>", $text); + $text = str_replace(".b.".'Bmth', "<span class=\"note1\" alt=\"".'Month of birth - If born within Census year'."\" title=\"".'Month of birth - If born within Census year'."\"> <b>".'Bmth'."</span>", $text); + $text = str_replace(".b.".'YrsM', "<span class=\"note1\" alt=\"".'Years Married, or Y if married in Census Year'."\" title=\"".'Years Married, or Y if married in Census Year'."\"> <b>".'YrsM'."</span>", $text); + $text = str_replace(".b.".'ChB', "<span class=\"note1\" alt=\"".'Children born alive'."\" title=\"".'Children born alive'."\"> <b>".'ChB'."</span>", $text); + $text = str_replace(".b.".'ChL', "<span class=\"note1\" alt=\"".'Children still living'."\" title=\"".'Children still living'."\"> <b>".'ChL'."</span>", $text); + $text = str_replace(".b.".'ChD', "<span class=\"note1\" alt=\"".'Children who have died'."\" title=\"".'Children who have died'."\"> <b>".'ChD'."</span>", $text); + $text = str_replace(".b.".'AgM', "<span class=\"note1\" alt=\"".'Age at first marriage'."\" title=\"".'Age at first marriage'."\"> <b>".'AgM'."</span>", $text); + $text = str_replace(".b.".'Occupation', "<span class=\"note1\" alt=\"".'Occupation'."\" title=\"".'Occupation'."\"> <b>".'Occupation'."</span>", $text); + $text = str_replace(".b.".'Birthplace', "<span class=\"note1\" alt=\"".'Birthplace (Full format)'."\" title=\"".'Birthplace (Full format)'."\"><b>".'Birthplace'."</span>", $text); + $text = str_replace(".b.".'BP', "<span class=\"note1\" alt=\"".'Birthplace - (Chapman format)'."\" title=\"".'Birthplace - (Chapman format)'."\"> <b>".'BP'."</span>", $text); + $text = str_replace(".b.".'FBP', "<span class=\"note1\" alt=\"".WT_I18N::translate('Father\'s Birthplace - (Chapman format)')."\" title=\"".WT_I18N::translate('Father\'s Birthplace - (Chapman format)')."\"> <b>".'FBP'."</span>", $text); + $text = str_replace(".b.".'MBP', "<span class=\"note1\" alt=\"".WT_I18N::translate('Mother\'s Birthplace - (Chapman format)')."\" title=\"".WT_I18N::translate('Mother\'s Birthplace - (Chapman format)')."\"> <b>".'MBP'."</span>", $text); + $text = str_replace(".b.".'NL', "<span class=\"note1\" alt=\"".'If Foreign Born - Native Language'."\" title=\"".'If Foreign Born - Native Language'."\"> <b>".'NL'."</span>", $text); + $text = str_replace(".b.".'YUS', "<span class=\"note1\" alt=\"".'If Foreign Born - Years in the USA'."\" title=\"".'If Foreign Born - Years in the USA'."\"> <b>".'YUS'."</span>", $text); + $text = str_replace(".b.".'YOI', "<span class=\"note1\" alt=\"".'If Foreign Born - Year of Immigration'."\" title=\"".'If Foreign Born - Year of Immigration'."\"> <b>".'YOI'."</span>", $text); + $text = str_replace(".b.".'N/A', "<span class=\"note1\" alt=\"".'If Foreign Born - Naturalized, Alien'."\" title=\"".'If Foreign Born - Naturalized, Alien'."\"> <b>".'N/A'."</span>", $text); + $text = str_replace(".b.".'YON', "<span class=\"note1\" alt=\"".'If Foreign Born - Year of Naturalization'."\" title=\"".'If Foreign Born - Year of Naturalization'."\"> <b>".'YON'."</span>", $text); + $text = str_replace(".b.".'EngL', "<span class=\"note1\" alt=\"".'English spoken?, if not, Native Language'."\" title=\"".'English spoken?, if not, Native Language'."\"> <b>".'EngL'."</span>", $text); + $text = str_replace(".b.".'Health', "<span class=\"note1\" alt=\"".'Health - 1.Blind, 2.Deaf&Dumb, 3.Idiotic, 4.Insane, 5.Disabled etc'."\" title=\"".'Health - 1.Blind, 2.Deaf&Dumb, 3.Idiotic, 4.Insane, 5.Disabled etc'."\"><b>".'Health'."</span>", $text); + $text = str_replace(".b.".'Industry', "<span class=\"note1\" alt=\"".'Industry'."\" title=\"".'Industry'."\"> <b>".'Industry'."</span>", $text); + $text = str_replace(".b.".'Employ', "<span class=\"note1\" alt=\"".'Employment'."\" title=\"".'Employment'."\"> <b>".'Employ'."</span>", $text); + $text = str_replace(".b.".'EmR', "<span class=\"note1\" alt=\"".'Employer?'."\" title=\"".'Employer?'."\"> <b>".'EmR'."</span>", $text); + $text = str_replace(".b.".'EmD', "<span class=\"note1\" alt=\"".'Employed?'."\" title=\"".'Employed?'."\"> <b>".'EmD'."</span>", $text); + $text = str_replace(".b.".'WH', "<span class=\"note1\" alt=\"".'Working at Home?'."\" title=\"".'Working at Home?'."\"> <b>".'WH'."</span>", $text); + $text = str_replace(".b.".'EmN', "<span class=\"note1\" alt=\"".'Unemployed?'."\" title=\"".'Unemployed?'."\"> <b>".'EmN'."</span>", $text); + $text = str_replace(".b.".'Edu', "<span class=\"note1\" alt=\"".'Education - At School, Can Read, Can Write'."\" title=\"".'Education - At School, Can Read, Can Write'."\"> <b>".'Edu'."</span>", $text); + $text = str_replace(".b.".'Eng?', "<span class=\"note1\" alt=\"".'English spoken?'."\" title=\"".'English spoken?'."\"> <b>".'Eng?'."</span>", $text); + $text = str_replace(".b.".'BIC', "<span class=\"note1\" alt=\"".'Born in County'."\" title=\"".'Born in County'."\"> <b>".'BIC'."</span>", $text); + $text = str_replace(".b.".'BOE', "<span class=\"note1\" alt=\"".'Born outside England'."\" title=\"".'Born outside England'."\"> <b>".'BOE'."</span>", $text); + $text = str_replace(".b.".'Lang', "<span class=\"note1\" alt=\"".'If Foreign Born - Native Language'."\" title=\"".'If Foreign Born - Native Language'."\"> <b>".'Lang'."</span>", $text); + $text = str_replace(".b.".'Infirm', "<span class=\"note1\" alt=\"".'Infirmaties - 1.Deaf&Dumb, 2.Blind, 3.Lunatic, 4.Imbecile/feeble-minded'."\" title=\"".'Infirmaties - 1.Deaf&Dumb, 2.Blind, 3.Lunatic, 4.Imbecile/feeble-minded'."\"><b>".'Infirm'."</span>", $text); + $text = str_replace(".b.".'Vet', "<span class=\"note1\" alt=\"".'War Veteran?'."\" title=\"".'War Veteran?'."\"> <b>".'Vet'."</span>", $text); + + $text = str_replace(".b.".'Ten', "<span class=\"note1\" alt=\"".'Tenure - Owned/Rented, (if owned)Free/Morgaged'."\" title=\"".'Tenure - Owned/Rented, (if owned)Free/Morgaged'."\"> <b>".'Ten'."</span>", $text); + $text = str_replace(".b.".'Par', "<span class=\"note1\" alt=\"".'Parentage - Father if foreign born, Mother if foreign born'."\" title=\"".'Parentage - Father if foreign born, Mother if foreign born'."\"> <b>".'Par'."</span>", $text); + $text = str_replace(".b.".'Mmth', "<span class=\"note1\" alt=\"".'Month of marriage - If married during Census Year'."\" title=\"".'Month of marriage - If married during Census Year'."\"> <b>".'Mmth'."</span>", $text); + $text = str_replace(".b.".'MnsE', "<span class=\"note1\" alt=\"".'Months employed during Census Year'."\" title=\"".'Months employed during Census Year'."\"> <b>".'MnsE'."</span>", $text); + $text = str_replace(".b.".'WksU', "<span class=\"note1\" alt=\"".'Weeks unemployed during Census Year'."\" title=\"".'Weeks unemployed during Census Year'."\"> <b>".'WksU'."</span>", $text); + $text = str_replace(".b.".'MnsU', "<span class=\"note1\" alt=\"".'Months unemployed during Census Year'."\" title=\"".'Months unemployed during Census Year'."\"> <b>".'MnsU'."</span>", $text); + $text = str_replace(".b.".'Edu', "<span class=\"note1\" alt=\"".'Education - xxx - At School, Cannot Read, Cannot Write'."\" title=\"".'Education - xxx - At School, Cannot Read, Cannot Write'."\"><b>".'Edu'."</span>", $text); + $text = str_replace(".b.".'Home', "<span class=\"note1\" alt=\"".'Home Ownership - Owned/Rented-Free/Mortgaged-Farm/House-Farm Schedule number'."\" title=\"".'Home Ownership - Owned/Rented-Free/Mortgaged-Farm/House-Farm Schedule number'."\"> <b>".'Home'."</span>", $text); + $text = str_replace(".b.".'Situ', "<span class=\"note1\" alt=\"".'Situation - Disease, Infirmaty, Convict, Pauper etc'."\" title=\"".'Situation - Disease, Infirmaty, Convict, Pauper etc'."\"> <b>".'Situ'."</span>", $text); + $text = str_replace(".b.".'War', "<span class=\"note1\" alt=\"".'War or Expedition'."\" title=\"".'War or Expedition'."\"> <b>".'War'."</span>", $text); + $text = str_replace(".b.".'Infirm', "<span class=\"note1\" alt=\"".'Infirmaties - Whether blind, Whether Deaf and Dumb'."\" title=\"".'Infirmaties - Whether blind, Whether Deaf and Dumb'."\"> <b>".'Infirm'."</span>", $text); + + + // Regular Field Highlighting (Use embolden) ------------ + $text = str_replace(".b.", "<b>", $text); + + // Replace "pipe" with </td><td> ------------------------ + $text = str_replace("|", " </td><td class=\"notecell\">", $text); + + $text = str_replace(".end_formatted_area.<br />", "</td></tr></table><table cellpadding=\"0\"><tr><td>", $text); + $text = str_replace("<br />", "</td></tr><tr><td class=\"notecell\"> ", $text); + $text = $text . "</td></tr></table>"; + $text = str_replace("xCxAx", $centitl."<br />", $text); + $text = str_replace("Notes:", "<b>Notes:</b>", $text); diff --git a/modules_v2/GEDFact_assistant/_CENS/js/census_5_input.js.php b/modules_v2/GEDFact_assistant/_CENS/js/census_5_input.js.php new file mode 100644 index 0000000000..4175c4fc48 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/js/census_5_input.js.php @@ -0,0 +1,2613 @@ +<?php +/** + * Census Assistant Control module for webtrees + * + * Census information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + */ + +// modified from tabledeleterow.js version 1.2 2006-02-21 +// mredkj.com + +// CONFIG notes. Below are some comments that point to where this script can be customized. +// Note: Make sure to include a <tbody></tbody> in your table's HTML + +echo '<script src="', WT_MODULES_DIR, 'GEDFact_assistant/_CENS/js/chapman_codes.js" type="text/javascript"></script>'; +?> +<script> + +//Load Language variables for Edit header and tooltip ============================ +var HeaderName = 'Name'; +var TTEditName = 'Full Name or Married name if married'; +var HeaderRela = 'Relation'; +var TTEditRela = 'Relationship to Head of Household - Head, Wife, Son etc'; +var HeaderMCond = 'MC'; +var TTEditMCond = 'Marital Condition - M,S,U,W,D - Married, Single, Unmarried, Widowed or Divorced'; +var HeaderAsset = 'Assets'; +var TTEditAsset = 'Assets = O,R - value,rent - Y,N,R - Y,N,F = Owned,Rented - Value,Rent - Radio - Farm'; +var HeaderAge = 'Age'; +var TTEditAge = 'Age at last birthday'; +var HeaderRace = 'Race'; +var TTEditRace = 'Race or Color - B.W,M,A,I,C - Black, White, Mulatto, Asian, Indian, Chinese etc'; +var HeaderSex = 'Sex'; +var TTEditSex = 'Male(M) or Female(F)'; +var HeaderYOB = 'DOB'; +var TTEditYOB = 'Date of Birth - mmm yyyy'; +var HeaderBmth = 'Bmth'; +var TTEditBmth = 'If born within Census year - mmm - Month of birth'; +var HeaderYrsM = 'YrsM'; +var TTEditYrsM = 'Years Married or if married in Census Year - yy or Y'; +var HeaderChilB = 'ChB'; +var TTEditChilB = 'Children born alive - nn'; +var HeaderChilL = 'ChL'; +var TTEditChilL = 'Children still living - nn'; +var HeaderChilD = 'ChD'; +var TTEditChilD = 'Children who have died - nn'; +var HeaderAgeM = 'AgM'; +var TTEditAgeM = 'Age at first marriage - yy'; +var HeaderOccu = 'Occupation'; +var TTEditOccu = 'Occupation'; +var HeaderBplace = 'Birthplace'; // Full format +var TTEditBplace = 'Birthplace (Full format)'; // Full format +var HeaderBP = 'BP'; // Chapman format +var TTEditBP = 'Birthplace - xx or xxx - State/Country (Chapman format)'; // Chapman format +var HeaderFBP = 'FBP'; // Chapman format +var TTEditFBP = 'Father\'s Birthplace - xx or xxx - State or Country (Chapman format)'; // Chapman format +var HeaderMBP = 'MBP'; // Chapman format +var TTEditMBP = 'Mother\'s Birthplace - xx or xxx - State or Country (Chapman format)'; // Chapman format +var HeaderNL = 'NL'; +var TTEditNL = 'If Foreign Born - Native Language'; +var HeaderHealth = 'Health'; +var TTEditHealth = 'Health - 12345 = 1.Blind, 2.Deaf&Dumb, 3.Idiotic, 4.Insane, 5.Disabled etc'; +var HeaderYrsUS = 'YUS'; +var TTEditYrsUS = 'If Foreign Born - yy -Years in the USA'; +var HeaderYOI = 'YOI'; +var TTEditYOI = 'If Foreign Born - yyyy - Year of Immigration'; +var HeaderNA = 'N/A'; +var TTEditNA = 'If Foreign Born - N,A - Naturalized, Alien'; +var HeaderYON = 'YON'; +var TTEditYON = 'If Foreign Born - yyyy - Year of Naturalization'; +var HeaderEngL = 'EngL'; +var TTEditEngL = 'English spoken?, if not, Native Language'; +var HeaderEng = 'Eng?'; +var TTEditEng = 'English spoken? - Y/N'; +var HeaderInd = 'Industry'; +var TTEditInd = 'Industry'; +var HeaderEmp = 'Employ'; +var TTEditEmp = 'Employment - Yes, No, Worker, Employer etc'; +var HeaderEmR = 'EmR'; +var TTEditEmR = 'Employer? - Y/N'; +var HeaderEmD = 'EmD'; +var TTEditEmD = 'Employed? - Y/N'; +var HeaderEmH = 'WH'; +var TTEditEmH = 'Working at Home? - Y/N'; +var HeaderEmN = 'EmN'; +var TTEditEmN = 'UnEmployed? - Y/N'; +var HeaderEduc = 'Edu'; +var TTEditEduc = 'Education - xxx - At School? Y/N, Can Read? Y/N, Can Write? Y/N'; +var HeaderBIC = 'BIC'; +var TTEditBIC = 'Born in County - Y/N - (UK 1841 only)'; +var HeaderBOE = 'BOE'; +var TTEditBOE = 'Born outside England - SCO,IRE,WAL,FOReign - (UK 1841 only)'; +var HeaderInfirm = 'Infirm'; +var TTEditInfirm = 'Infirmaties - 1234 - 1.Deaf&Dumb, 2.Blind, 3.Lunatic, 4.Imbecile/feeble-minded'; +var HeaderVet = 'Vet'; +var TTEditVet = 'War Veteran? - Y/N'; +var HeaderTenure = 'Ten'; +var TTEditTenure = 'Tenure - xx - Owned/Rented, (if owned)Free/Mortgaged - eg OM, or R-, or OF'; +var HeaderParent = 'Par'; +var TTEditParent = 'Parentage - xx = Father if foreign born Y/N/-, Mother if foreign born Y/N/- = eg YY, YN, NY, or -'; +var HeaderMmth = 'Mmth'; +var TTEditMmth = 'Marriage month - mmm = If married within Census year - Month of marriage'; +var HeaderMnse = 'MnsE'; +var TTEditMnse = 'Months Employed - xx = Months employed during Census Year'; +var HeaderWksu = 'WksU'; +var TTEditWksu = 'Weeks Unemployed - xx = Weeks unemployed during Census Year'; +var HeaderMnsu = 'MnsU'; +var TTEditMnsu = 'Months Unemployed - xx = Months unemployed during Census Year'; +var HeaderHome = 'Home'; +var TTEditHome = 'Home Ownership - x-x-x-xxxx = O/R-F/M-F/H-#### = Owned/Rented-Free/Mortgaged-Farm/House-Farm Schedule number'; +var HeaderSitu = 'Situ'; +var TTEditSitu = 'Situation - 3 parameters - Diseases, Infimaties, Convict/Pauper etc'; +var HeaderWar = 'War'; +var TTEditWar = 'War or Expedition'; +var HeaderInfirm1910 = 'Infirm'; +var TTEditInfirm1910 = 'Infirmaties - xx = Whether blind (both eyes) Y/N, Whether Deaf and Dumb Y/N'; +var HeaderEducpre1890 = 'Edu'; +var TTEditEducpre1890 = 'Education - xxx = At School, Cannot Read, Cannot Write = eg x--, xxx, or -xx etc'; + +var HeaderLang = 'Lang'; +var TTEditLang = 'If Foreign Born - Native Language'; + +// Load Edit Table variables ===================================================== +var INPUT_NAME_PREFIX = 'InputCell_'; // this is being set via script +var RADIO_NAME = "totallyrad"; // this is being set via script +var TABLE_NAME = 'tblSample'; // this should be named in the HTML +var ROW_BASE = 0; // first number (for display) +var hasLoaded = false; + + +// Load Other variables ======================================================= +var NoteCtry = document.getElementById('censCtry'); +var NoteYear = document.getElementById('censYear'); +var NoteTitl = document.getElementById('Titl'); + +// Functions ================================================================== +function caSave() { + preview(); + pastedate(); +} + +function pastedate() { + window.opener.pasteAsstDate(document.getElementById('censCtry').value, document.getElementById('censYear').value); +} + +function preview() { + NoteCtry = document.getElementById('censCtry'); + NoteYear = document.getElementById('censYear'); + Citation = document.getElementById('citation'); + Locality = document.getElementById('locality'); + Notes = document.getElementById('notes'); + + str = NoteYear.value + " " + NoteCtry.value + " " + NoteTitl.value; + str += "\n"; + if (Citation.value!="" && Citation.value!=null) { + str += Citation.value + "\n"; + } + if (Locality.value!="" && Locality.value!=null) { + str += Locality.value + "\n"; + } + str += "\n"; + str += ".start_formatted_area."; + + iid = ""; + + var tbl = document.getElementById('tblSample'); + + + for (var i=0; i<tbl.rows.length; i++) { + var tr = tbl.rows[i]; + var strRow = ''; + + var pidList = ''; + + // --------------------------------------------- + + // Extract Indi id's from created list -------------------------------------- + for (var y=1; y<tr.cells.length-3; y++) { + if (y>=2 && y<=73) { + continue; + } else { + if (i!=0) { + // pidList += '\'' + (pidList==''?'':' ') + tr.cells[1].childNodes[0].value + '\''; + pidList += (pidList==''?'':' ') + tr.cells[1].childNodes[0].value; + } + } + } + + // Extract required columns for display based on Country and Year ----------- + if (NoteCtry.value=="UK") { + // UK 1911 or 1921 or 1931 =============== + if (NoteYear.value=="1911" || NoteYear.value=="1921" || NoteYear.value=="1931") { + for (var j=2; j<tr.cells.length-3; j++) { + if (j==5 || j==6 || j==8 || (j>=10 && j<=15) || (j>=20 && j<=34) || j==36 || (j>=39 && j<=41) || (j>=43 && j<=49) || (j>=51 && j<=62) || (j>=64 && j<=73) ) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + // UK 1901 =============== + } else if (NoteYear.value=="1901") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if (j==5 || j==6 || j==8 || (j>=10 && j<=34) || j==36 || j==37 || (j>=39 && j<=41) || (j>=43 && j<=49) || (j>=51 && j<=62) || (j>=64 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + // UK 1891 =============== + } else if (NoteYear.value=="1891") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if (j==5 || j==6 || j==8 || (j>=10 && j<=34) || (j>=36 && j<=38) || j==41 || j==42 || (j>=44 && j<=49) || (j>=51 && j<=62) || (j>=64 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + // UK 1951-1881 ============ + } else if (NoteYear.value=="1851" || NoteYear.value=="1861" || NoteYear.value=="1871" || NoteYear.value=="1881") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if (j==5 || j==6 || j==8 || (j>=10 && j<=34) || (j>=36 && j<=49) || (j>=51 && j<=62) || (j>=64 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + // UK 1841 =============== + } else if (NoteYear.value=="1841") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if ((j>=3 && j<=6) || j==8 || (j>=10 && j<=34) || (j>=36 && j<=51) || (j>=54 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + } + + } else if (NoteCtry.value=="USA") { + // USA 1930 =============== + if (NoteYear.value=="1930") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if (j==4 || j==5 || j==7 || j==8 || j==11 || j==13 || j==14 || (j>=16 && j<=19) || (j>=21 && j<=45) || (j>=47 && j<=50) || j==52 || j==53 || j==63 || j==64 || j>=67 && j<=73) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + } + + // USA 1920 =============== + else if (NoteYear.value=="1920") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if (j==4 || (j>=6 && j<=8) || j==11 || j==13 || j==14 || (j>=16 && j<=30) || (j>=34 && j<=45) || (j>=47 && j<=50) || j==52 || j==53 || j==57 || j==58 || (j>=63 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + } + + // USA 1910 =============== + else if (NoteYear.value=="1910") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if ((j>=4 && j<=8) || j==11 || j==13 || j==14 || (j>=19 && j<=26) || j==30 || j==33 || j==36 || (j>=39 && j<=42) || j==45 || j==47 || j==48 || (j>=50 && j<=64) || j==66 || j>=68 && j<=73) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + } + // USA 1900 =============== + else if (NoteYear.value=="1900") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if ((j>=4 && j<=7) || j==10 || j==13 || j==14 || (j>=19 && j<=26) || j==33 || j==34 || (j>=36 && j<=44) || j==47 || (j>=50 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + } + // USA 1890 =============== + else if (NoteYear.value=="1890") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if ((j>=4 && j<=7) || j==10 || j==11 || j==13 || j==14 || (j>=19 && j<=26) || j==31 || j==33 || j==34 || j==36 || j==37 || j==39 || j==40 || (j>=42 && j<=45) || j==47 || (j>=49 && j<=63) || (j>=65 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + } + // USA 1880 =============== + else if (NoteYear.value=="1880") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if ((j>=3 && j<=7) || j==10 || j==11 || (j>=17 && j<=34) || (j>=37 && j<=44) || (j>=40 && j<=42) || j==46 || j==49 || j==50 || j==52 || j==53 || (j>=56 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + } + // USA 1870 =============== + else if (NoteYear.value=="1870") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if ((j>=3 && j<=6) || j==8 || (j>=11 && j<=20) || (j>=27 && j<=46) || (j>=48 && j<=62) || (j>=64 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + } + // USA 1860 or 1850 =============== + else if (NoteYear.value=="1860" || NoteYear.value=="1850") { + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if ((j>=3 && j<=6) || j==8 || (j>=11 && j<=20) || j==24 || j==25 || (j>=27 && j<=46) || (j>=48 && j<=62) || (j>=64 && j<=73)) { + continue; + } else { + if (i==0) { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].id; + } else { + strRow += (strRow==''?'':'|') + tr.cells[j].childNodes[0].value; + } + } + } + } + + } else { + // Other country stuff + } + + str += (str==''?'':'\n') + strRow; + if (i!=0) { + iid += (iid==''?'':'') + pidList + ', '; + } + + // Reset/Check the Pink Highlighting of the Name field and Age fields for any person not born ------------------ + for (var j=2; j<tr.cells.length-3; j++) { // == j=2 means miss out cols 0 and 1 (# and pid), cells.length-3 means miss out del, ins and item # + if (i==0) { + // Do nothing as this is the header row. + } else { + if (tr.cells[7].childNodes[0].value != "-" || tr.cells[12].childNodes[0].value != "-") { + tr.cells[2].childNodes[0].style.background = '#ffffff'; + tr.cells[7].childNodes[0].style.background = '#ffffff'; + tr.cells[12].childNodes[0].style.background = '#ffffff'; + } else { + // alert(tr.cells[2].childNodes[0].value+" - Not Born Yet"); + tr.cells[2].childNodes[0].style.background = '#ffaaaa'; + tr.cells[7].childNodes[0].style.background = '#ffaaaa'; + tr.cells[12].childNodes[0].style.background = '#ffaaaa'; + } + } + } + + } + + //-- TODO -- Check for corrected ages --- Sill to fix manual entry for override of values -------------------- + //changeAge(NoteYear.value); + + // --- Debug only - alert indi id's found -------- + //if (i!=0) { + //alert(iid); + //} + + var mem = document.getElementById('NOTE'); + if (Notes.value!="" && Notes.value!=null) { + mem.value = str + "\n.end_formatted_area.\n\nNotes:\n"+Notes.value; + } else { + mem.value = str + "\n.end_formatted_area.\n"; + } + + // ---- Create an array of Indi id's ---------- + var mem21 = document.getElementById('pid_array'); + mem21.value = iid.slice(0, -2); + +} // ---- end function preview() ----- + + +window.onload=fillInRows; + +// fillInRows - can be used to pre-load a table with a header, row, or rows +function fillInRows() { + hasLoaded = true; + // create_header(); + // insertRowToTable(); + // addRowToTable(); + if (TheCenYear!='') { + changeYear(TheCenYear); + } +} + +// myRowObject - an object for storing information about the table rows +function myRowObject( zero, one, two, three, four, five, six, seven, eight, nine, + ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, + twenty, twentyone, twentytwo, twentythree, twentyfour, twentyfive, twentysix, twentyseven, twentyeight, twentynine, + thirty, thirtyone, thirtytwo, thirtythree, thirtyfour, thirtyfive, thirtysix, thirtyseven, thirtyeight, thirtynine, + forty, fortyone, fortytwo, fortythree, fortyfour, fortyfive, fortysix, fortyseven, fortyeight, fortynine, + fifty, fiftyone, fiftytwo, fiftythree, fiftyfour, fiftyfive, fiftysix, fiftyseven, fiftyeight, fiftynine, + sixty, sixtyone, sixtytwo, sixtythree, sixtyfour, sixtyfive, sixtysix, sixtyseven, sixtyeight, sixtynine, + seventy, seventyone, seventytwo, seventythree, + cb, ra, index2 + ) +{ + + this.zero = zero; // text object + this.one = one; // input text object + this.two = two; // input text object + this.three = three; // input text object + this.four = four; // input text object + this.five = five; // input text object + this.six = six; // input text object + this.seven = seven; // input text object + this.eight = eight; // input text object + this.nine = nine; // input text object + this.ten = ten; // input text object + this.eleven = eleven; // input text object + this.twelve = twelve; // input text object + this.thirteen = thirteen; // input text object + this.fourteen = fourteen; // input text object + this.fifteen = fifteen; // input text object + this.sixteen = sixteen; // input text object + this.seventeen = seventeen; // input text object + this.eighteen = eighteen; // input text object + this.nineteen = nineteen; // input text object + this.twenty = twenty; // input text object + this.twentyone = twentyone; // input text object + this.twentytwo = twentytwo; // input text object + this.twentythree = twentythree; // input text object + this.twentyfour = twentyfour; // input text object + this.twentyfive = twentyfive; // input text object + this.twentysix = twentysix; // input text object + this.twentyseven = twentyseven; // input text object + this.twentyeight = twentyeight; // input text object + this.twentynine = twentynine; // input text object + this.thirty = thirty; // input text object + this.thirtyone = thirtyone; // input text object + this.thirtytwo = thirtytwo; // input text object + this.thirtythree = thirtythree; // input text object + this.thirtyfour = thirtyfour; // input text object + this.thirtyfive = thirtyfive; // input text object + this.thirtysix = thirtysix; // input text object + this.thirtyseven = thirtyseven; // input text object + this.thirtyeight = thirtyeight; // input text object + this.thirtynine = thirtynine; // input text object + this.forty = forty; // input text object + this.fortyone = fortyone; // input text object + this.fortytwo = fortytwo; // input text object + this.fortythree = fortythree; // input text object + this.fortyfour = fortyfour; // input text object + this.fortyfive = fortyfive; // input text object + this.fortysix = fortysix; // input text object + this.fortyseven = fortyseven; // input text object + this.fortyeight = fortyeight; // input text object + this.fortynine = fortynine; // input text object + this.fifty = fifty; // input text object + this.fiftyone = fiftyone; // input text object + this.fiftytwo = fiftytwo; // input text object + this.fiftythree = fiftythree; // input text object + this.fiftyfour = fiftyfour; // input text object + this.fiftyfive = fiftyfive; // input text object + this.fiftysix = fiftysix; // input text object + this.fiftyseven = fiftyseven; // input text object + this.fiftyeight = fiftyeight; // input text object + this.fiftynine = fiftynine; // input text object + this.sixty = sixty; // input text object + this.sixtyone = sixtyone; // input text object + this.sixtytwo = sixtytwo; // input text object + this.sixtythree = sixtythree; // input text object + this.sixtyfour = sixtyfour; // input text object + this.sixtyfive = sixtyfive; // input text object + this.sixtysix = sixtysix; // input text object + this.sixtyseven = sixtyseven; // input text object + this.sixtyeight = sixtyeight; // input text object + this.sixtynine = sixtynine; // input text object + this.seventy = seventy; // input text object + this.seventyone = seventyone; // input text object + this.seventytwo = seventytwo; // input text object + this.seventythree = seventythree; // input text object + + this.cb = cb; // input checkbox object + this.ra = ra; // input radio object + this.index2 = index2; // text object +} + +function create_header() { + addRowToTable(); +} + +// insertRowToTable - inserts a row into the table (and reorders) +function insertRowToTable(pid, nam, mnam, label, gend, cond, dom, dob, age, dod, occu, birthpl, fbirthpl, mbirthpl, chilBLD) { + + if (hasLoaded) { + + // calculate marriage status ----------------------- + var cenyr = document.getElementById('censYear').value; + + var tbl = document.getElementById(TABLE_NAME); + var rowToInsertAt = tbl.tBodies[0].rows.length; + for (var i=1; i<tbl.tBodies[0].rows.length; i++) { // i set to 1 to avoid header row of number 0 + if (tbl.tBodies[0].rows[i].myRow && tbl.tBodies[0].rows[i].myRow.ra.getAttribute('type') == 'radio' && tbl.tBodies[0].rows[i].myRow.ra.checked) { + rowToInsertAt = i; + break; + } + } + + addRowToTable(rowToInsertAt, pid, nam, mnam, label, gend, cond, dom, dob, age, dod, occu, birthpl, fbirthpl, mbirthpl, chilBLD); + + reorderRows(tbl, rowToInsertAt); + currcenyear = document.getElementById('censYear').value; + + changeCols(currcenyear); + changeMC(currcenyear); + changeAge(currcenyear); + preview(); + + } +} + +// addRowToTable - Inserts at row 'num', or appends to the end if no arguments are passed in. Don't pass in empty strings. +function addRowToTable(num, pid, nam, mnam, label, gend, cond, dom, dob, age2, dod, occu, birthpl, fbirthpl, mbirthpl, chilBLD, cb, ra) { + + // Check if Census year filled in ------------- + // var cctry = document.getElementById('censCtry').value; + var cyear = document.getElementById('censYear').value; + if (cyear!="choose") { + cyear=cyear; + } else { + alert ("You must choose a Census year first") + return; + } + + if (num==0) { + var birthpl = ''; + var fbirthpl = ''; + var mbirthpl = ''; + } + + // Calculate various Dates and Places for input =========================== + currcenyear = document.getElementById('censYear').value; + currcenctry = document.getElementById('censCtry').value; + if (num>0) { + + + // Calculate Children Born, Living, Died -------------------------- + var chBLDarray = chilBLD.split('::'); + var cendat = getCenDate(currcenyear); + var cdat = calculateJD(cendat); + // Variables to be used --------- + var ChilBorn = chBLDarray.length; + var ChilLivg = "-"; + var ChilDied = "-"; + var chBLD = new Array(); + var x; + var ALIVE=0; + var DEAD=0; + var NOTBORN=0; + for (x = 0; x<ChilBorn; x++) { + chBLD[x] = new Array(); // This declares each column in turn + chBLDarray2 = chBLDarray[x].split(', '); + var y; + for (y = 0; y<chBLDarray2.length; y++) { + chBLD[x][y] = chBLDarray2[y]; + if (y==2 && (cdat>(chBLD[x][1]) && chBLD[x][1]!=0) && (chBLD[x][2]==0 || cdat<(chBLD[x][2]))) { + ALIVE=ALIVE+1; + } else if (y==2 && cdat>(chBLD[x][2]) && (chBLD[x][2])!=0) { + DEAD=DEAD+1; + } else if (y==2) { + NOTBORN=NOTBORN+1; + } + } + } + var BORN = ALIVE+DEAD; + if (BORN == 0) { + BORN = "-"; + ALIVE = "-"; + DEAD = "-"; + } + if (ALIVE == 0) { + ALIVE = "-"; + } + if (DEAD == 0) { + DEAD = "-"; + } + + // Calculate birth places ----------------------------------------- + birthpl = birthpl.split(', '); + ibirthpl = birthpl.reverse(); + fbirthpl = fbirthpl.split(', '); + fbirthpl = fbirthpl.reverse(); + mbirthpl = mbirthpl.split(', '); + mbirthpl = mbirthpl.reverse(); + + // get Chapman Code for US ---------------------------------------- + if (birthpl[0] == "United States" || birthpl[0] == "United States Of America" || birthpl[0] == "USA") { + var ibirthpl = getChapmanCode(ibirthpl[1]); + } else { + var ibirthpl = getChapmanCode(ibirthpl[0]); + } + + if (fbirthpl[0] == "UNK") { + var fbirthpl = getChapmanCode(fbirthpl[0]); + } else if (fbirthpl[0] == "United States" || fbirthpl[0] == "United States Of America" || fbirthpl[0] == "USA") { + var fbirthpl = getChapmanCode(fbirthpl[1]); + } else { + var fbirthpl = getChapmanCode(fbirthpl[0]); + } + + if (mbirthpl[0] == "UNK") { + var mbirthpl = getChapmanCode(mbirthpl[0]); + } else if (mbirthpl[0] == "United States" || mbirthpl[0] == "United States Of America" || mbirthpl[0] == "USA") { + var mbirthpl = getChapmanCode(mbirthpl[1]); + } else { + var mbirthpl = getChapmanCode(mbirthpl[0]); + } + + // get birthplace for UK (check all countries in UK) -------------- + if (birthpl==null || birthpl=='') { + birthpl = '-'; + } else if (birthpl[0]!="England" && birthpl[0]!="Scotland" && birthpl[0]!="Wales" && birthpl[0]!="Northern Ireland" && birthpl[0]!="UK") { + birthpl = birthpl[0]+", "+birthpl[1]; + } else { + birthpl = birthpl[1]+", "+birthpl[2]; + } + + // Calculate/Format Birth, Marriage and Death Dates ========================== + var one_day = 1000*60*60*24; + var one_month = (365.26*one_day)/12; + var one_year = 365.26*one_day; + + // Date of Birth (dob) - passed as Julian Date String ----------------- + if (dob>1721060) { + IJD = Math.floor(dob); + L = Math.floor(IJD + 68569); + N = Math.floor(4 * L / 146097); + L = L - Math.floor((146097*N + 3)/4); + I = Math.floor(4000*(L + 1)/1461001); + L = L - Math.floor(1461 * I / 4) + 31; + J = Math.floor(80 * L / 2447); + K = L - Math.floor(2447 * J / 80); + L = Math.floor(J/11); + J = J + 2 - 12*L; + I = 100*(N - 49) + I + L; + dob = (I+', '+J+', '+K); + yob = I; + } + + // Date of Marriage (dom) - passed as Julian Date String -------------- + if (dom>1721060) { + IJD = Math.floor(dom); + L = Math.floor(IJD + 68569); + N = Math.floor(4 * L / 146097); + L = L - Math.floor((146097*N + 3)/4); + I = Math.floor(4000*(L + 1)/1461001); + L = L - Math.floor(1461 * I / 4) + 31; + J = Math.floor(80 * L / 2447); + K = L - Math.floor(2447 * J / 80); + L = Math.floor(J/11); + J = J + 2 - 12*L; + I = 100*(N - 49) + I + L; + dom = (I+', '+J+', '+K); + } + // Create Date of Marriage object from passed string dom + var jsdom = Date.parseString(dom, 'y, M, d'); + + // Create Date of Birth object and Age at First Marriage from passed string dob + var jsdob = Date.parseString(dob, 'y, M, d'); + // US Census - Create dob (month year) and Age at first marriage ------ + if (jsdob != "Invalid Date" && jsdob != "" && jsdob != null) { + usdob = jsdob.format("NNN "+yob); + agemarr = Math.floor((jsdom-jsdob)/one_year); + } else { + usdob = '-'; + agemarr = '-'; + } + + // Date of Death (dod) - passed as Julian Date String -------------- + if (dod>1721060) { + IJD = Math.floor(dod); + L = Math.floor(IJD + 68569); + N = Math.floor(4 * L / 146097); + L = L - Math.floor((146097*N + 3)/4); + I = Math.floor(4000*(L + 1)/1461001); + L = L - Math.floor(1461 * I / 4) + 31; + J = Math.floor(80 * L / 2447); + K = L - Math.floor(2447 * J / 80); + L = Math.floor(J/11); + J = J + 2 - 12*L; + I = 100*(N - 49) + I + L; + dod = (I+', '+J+', '+K); + } + // Create Date of Marriage object from passed string dom + var jsdod = Date.parseString(dod, 'y, M, d'); + + } + + + if (hasLoaded) { + + var tbl = document.getElementById(TABLE_NAME); + var nextRow = tbl.tBodies[0].rows.length; + var iteration = nextRow + ROW_BASE; + if (num == null) { + num = nextRow; + num2 = num; + } else { + iteration = num + ROW_BASE; + } + + // Initial Age Calculation based on 1901 Census Year input ============ + // *** NOTE *** + // *** This is then corrected when ChangeYear() function is run + // *** ChangeYear() is run each time Census Year is selected or changed + if (age2!="Age" && age2!=null) { + // Check if Census year filled in ------------- + if (cyear!="choose") { + cyear=cyear; + } else { + alert ("You must choose a Census year first") + return; + } + var diffage=(1901-cyear); + age=(age2-diffage); + } else { + age="-"; + } + + // add the row ======================================================= + var row = tbl.tBodies[0].insertRow(num); + + // **A** Define Cells =============================================== + var cell_ = new Array(73); + for (var i=0; i<=73; i++) { + cell_[i] = row.insertCell(i); + cell_[i].setAttribute('id', 'col_'+i); + cell_[i].setAttribute('name', 'col_'+i); + } + + if (iteration == 0) { + var cell_tdel = row.insertCell(74); // text Del + var cell_tra = row.insertCell(75); // text Radio + } else { + var cell_del = row.insertCell(74); // Onclick = Delete Row + cell_del.setAttribute('align', 'center'); + var cell_ra = row.insertCell(75); // Radio button used for inserting a row, rather than adding at end of table) + } + + var cell_index2 = row.insertCell(76); // Item Number (#2) + cell_index2.setAttribute('id', 'index2'); + cell_index2.setAttribute('name', 'index2'); + cell_index2.setAttribute('align', 'center'); + + + // **B** SHOW/HIDE Header Cell elements =============================== + // ---- Basic Hidden Columns (miss out 0,1,2 and >68) + for (var i=3; i<=69; i++) { + cell_[i].style.display = "none"; + } + + // ---- Show Cell Columns ========================================= + //var currcenyear = document.getElementById('censYear').value; + //changeCols(currcenyear); + + // **C** Define Header Cell elements ================================== + if (iteration == 0) { + // 0. Item Number ----------------------------------------------------- + var txt_itemNo = document.createElement('div'); + txt_itemNo.setAttribute('class', 'descriptionbox'); + txt_itemNo.className= 'descriptionbox'; //Required for IE + txt_itemNo.style.border='0px'; + txt_itemNo.innerHTML = '#'; + txt_itemNo.setAttribute('id', '.b.Item'); + txt_itemNo.setAttribute('type', 'text'); + txt_itemNo.style.fontSize="10px"; + txt_itemNo.style.display="none"; + // 1. Indi ID --------------------------------------------------------- + var txtInp_pid = document.createElement('div'); + txtInp_pid.setAttribute('type', 'text'); + txtInp_pid.setAttribute('class', 'descriptionbox'); + txtInp_pid.className= 'descriptionbox'; //Required for IE + txtInp_pid.style.fontSize="10px"; + txtInp_pid.style.border='0px'; + txtInp_pid.innerHTML = '<a href="#" alt="ID" title="ID"> ID </a>'; + // 2. Name ------------------------------------------------------------ + var txtInp_nam = document.createElement('div'); + txtInp_nam.setAttribute('class', 'descriptionbox'); + txtInp_nam.className= 'descriptionbox'; //Required for IE + txtInp_nam.setAttribute('type', 'text'); + txtInp_nam.style.fontSize="10px"; + txtInp_nam.style.border='0px'; + txtInp_nam.innerHTML = '<a href="#" alt="'+TTEditName+'" title="'+TTEditName+'">'+HeaderName+'</a>'; + txtInp_nam.setAttribute('id', '.b.'+HeaderName); + // 3. Relationship_1 -------------------------------------------------- + var txtInp_label = document.createElement('div'); + txtInp_label.setAttribute('type', 'text'); + txtInp_label.setAttribute('class', 'descriptionbox'); + txtInp_label.className= 'descriptionbox'; //Required for IE + txtInp_label.style.fontSize="10px"; + txtInp_label.style.border='0px'; + txtInp_label.innerHTML = '<a href="#" alt="'+TTEditRela+'" title="'+TTEditRela+'">'+HeaderRela+'</a>'; + txtInp_label.setAttribute('id', '.b.'+HeaderRela); + // 4. Conditition_1 --------------------------------------------------- + var txtInp_cond = document.createElement('div'); + txtInp_cond.setAttribute('type', 'text'); + txtInp_cond.setAttribute('class', 'descriptionbox'); + txtInp_cond.className= 'descriptionbox'; //Required for IE + txtInp_cond.style.fontSize="10px"; + txtInp_cond.style.border='0px'; + txtInp_cond.innerHTML = '<a href="#" alt="'+TTEditMCond+'" title="'+TTEditMCond+'">'+HeaderMCond+'</a>'; + txtInp_cond.setAttribute('id', '.b.'+HeaderMCond); + // 5. Tenure ---------------------------------------------------------- + var txtInp_tenure = document.createElement('div'); + txtInp_tenure.setAttribute('type', 'text'); + txtInp_tenure.setAttribute('class', 'descriptionbox'); + txtInp_tenure.className= 'descriptionbox'; //Required for IE + txtInp_tenure.style.fontSize="10px"; + txtInp_tenure.style.border='0px'; + txtInp_tenure.innerHTML = '<a href="#" alt="'+TTEditTenure+'" title="'+TTEditTenure+'">'+HeaderTenure+'</a>'; + txtInp_tenure.setAttribute('id', '.b.'+HeaderTenure); + // 6. Assets ---------------------------------------------------------- + var txtInp_assets = document.createElement('div'); + txtInp_assets.setAttribute('type', 'text'); + txtInp_assets.setAttribute('class', 'descriptionbox'); + txtInp_assets.className= 'descriptionbox'; //Required for IE + txtInp_assets.style.fontSize="10px"; + txtInp_assets.style.border='0px'; + txtInp_assets.innerHTML = '<a href="#" alt="'+TTEditAsset+'" title="'+TTEditAsset+'">'+HeaderAsset+'</a>'; + txtInp_assets.setAttribute('id', '.b.'+HeaderAsset); + // 7. Age_1 ----------------------------------------------------------- + var txtInp_age = document.createElement('div'); + txtInp_age.setAttribute('type', 'text'); + txtInp_age.setAttribute('class', 'descriptionbox'); + txtInp_age.className= 'descriptionbox'; //Required for IE + txtInp_age.style.fontSize="10px"; + txtInp_age.style.border='0px'; + txtInp_age.innerHTML = '<a href="#" alt="'+TTEditAge+'" title="'+TTEditAge+'">'+HeaderAge+'</a>'; + txtInp_age.setAttribute('id', '.b.'+HeaderAge); + // 8. Race_1 ---------------------------------------------------------- + var txtInp_race = document.createElement('div'); + txtInp_race.setAttribute('type', 'text'); + txtInp_race.setAttribute('class', 'descriptionbox'); + txtInp_race.className= 'descriptionbox'; //Required for IE + txtInp_race.style.fontSize="10px"; + txtInp_race.style.border='0px'; + txtInp_race.innerHTML = '<a href="#" alt="'+TTEditRace+'" title="'+TTEditRace+'">'+HeaderRace+'</a>'; + txtInp_race.setAttribute('id', '.b.'+HeaderRace); + // 9. Sex ------------------------------------------------------------- + var txtInp_gend = document.createElement('div'); + txtInp_gend.setAttribute('type', 'text'); + txtInp_gend.setAttribute('class', 'descriptionbox'); + txtInp_gend.className= 'descriptionbox'; //Required for IE + txtInp_gend.style.fontSize="10px"; + txtInp_gend.style.border='0px'; + txtInp_gend.innerHTML = '<a href="#" alt="'+TTEditSex+'" title="'+TTEditSex+'">'+HeaderSex+'</a>'; + txtInp_gend.setAttribute('id', '.b.'+HeaderSex); + // 10. Race_2 ---------------------------------------------------------- + var txtInp_race2 = document.createElement('div'); + txtInp_race2.setAttribute('type', 'text'); + txtInp_race2.setAttribute('class', 'descriptionbox'); + txtInp_race2.className= 'descriptionbox'; //Required for IE + txtInp_race2.style.fontSize="10px"; + txtInp_race2.style.border='0px'; + txtInp_race2.innerHTML = '<a href="#" alt="'+TTEditRace+'" title="'+TTEditRace+'">'+HeaderRace+'</a>'; + txtInp_race2.setAttribute('id', '.b.'+HeaderRace); + // 11. DOB/YOB --------------------------------------------------------- + var txtInp_yob = document.createElement('div'); + txtInp_yob.setAttribute('type', 'text'); + txtInp_yob.setAttribute('class', 'descriptionbox'); + txtInp_yob.className= 'descriptionbox'; //Required for IE + txtInp_yob.style.fontSize="10px"; + txtInp_yob.style.border='0px'; + txtInp_yob.innerHTML = '<a href="#" alt="'+TTEditYOB+'" title="'+TTEditYOB+'">'+HeaderYOB+'</a>'; + txtInp_yob.setAttribute('id', '.b.'+HeaderYOB); + // 12. Age_2 ----------------------------------------------------------- + var txtInp_age2 = document.createElement('div'); + txtInp_age2.setAttribute('type', 'text'); + txtInp_age2.setAttribute('class', 'descriptionbox'); + txtInp_age2.className= 'descriptionbox'; //Required for IE + txtInp_age2.style.fontSize="10px"; + txtInp_age2.style.border='0px'; + txtInp_age2.innerHTML = '<a href="#" alt="'+TTEditAge+'" title="'+TTEditAge+'">'+HeaderAge+'</a>'; + txtInp_age2.setAttribute('id', '.b.'+HeaderAge); + // 13. MthB (if born within census year) ------------------------------- + var txtInp_bmth = document.createElement('div'); + txtInp_bmth.setAttribute('type', 'text'); + txtInp_bmth.setAttribute('class', 'descriptionbox'); + txtInp_bmth.className= 'descriptionbox'; //Required for IE + txtInp_bmth.style.fontSize="10px"; + txtInp_bmth.style.border='0px'; + txtInp_bmth.innerHTML = '<a href="#" alt="'+TTEditBmth+'" title="'+TTEditBmth+'">'+HeaderBmth+'</a>'; + txtInp_bmth.setAttribute('id', '.b.'+HeaderBmth); + // 14. Relationship_2 -------------------------------------------------- + var txtInp_label2 = document.createElement('div'); + txtInp_label2.setAttribute('type', 'text'); + txtInp_label2.setAttribute('class', 'descriptionbox'); + txtInp_label2.className= 'descriptionbox'; //Required for IE + txtInp_label2.style.fontSize="10px"; + txtInp_label2.style.border='0px'; + txtInp_label2.innerHTML = '<a href="#" alt="'+TTEditRela+'" title="'+TTEditRela+'">'+HeaderRela+'</a>'; + txtInp_label2.setAttribute('id', '.b.'+HeaderRela); + // 15. Conditition_2 --------------------------------------------------- + var txtInp_cond2 = document.createElement('div'); + txtInp_cond2.setAttribute('type', 'text'); + txtInp_cond2.setAttribute('class', 'descriptionbox'); + txtInp_cond2.className= 'descriptionbox'; //Required for IE + txtInp_cond2.style.fontSize="10px"; + txtInp_cond2.style.border='0px'; + txtInp_cond2.innerHTML = '<a href="#" alt="'+TTEditMCond+'" title="'+TTEditMCond+'">'+HeaderMCond+'</a>'; + txtInp_cond2.setAttribute('id', '.b.'+HeaderMCond); + // 16. Years Married --------------------------------------------------- + var txtInp_yrsm = document.createElement('div'); + txtInp_yrsm.setAttribute('type', 'text'); + txtInp_yrsm.setAttribute('class', 'descriptionbox'); + txtInp_yrsm.className= 'descriptionbox'; //Required for IE + txtInp_yrsm.style.fontSize="10px"; + txtInp_yrsm.style.border='0px'; + txtInp_yrsm.innerHTML = '<a href="#" alt="'+TTEditYrsM+'" title="'+TTEditYrsM+'">'+HeaderYrsM+'</a>'; + txtInp_yrsm.setAttribute('id', '.b.'+HeaderYrsM); + // 17. Children Born Alive --------------------------------------------- + var txtInp_chilB = document.createElement('div'); + txtInp_chilB.setAttribute('type', 'text'); + txtInp_chilB.setAttribute('class', 'descriptionbox'); + txtInp_chilB.className= 'descriptionbox'; //Required for IE + txtInp_chilB.style.fontSize="10px"; + txtInp_chilB.style.border='0px'; + txtInp_chilB.innerHTML = '<a href="#" alt="'+TTEditChilB+'" title="'+TTEditChilB+'">'+HeaderChilB+'</a>'; + txtInp_chilB.setAttribute('id', '.b.'+HeaderChilB); + // 18. Children Still Living ------------------------------------------- + var txtInp_chilL = document.createElement('div'); + txtInp_chilL.setAttribute('type', 'text'); + txtInp_chilL.setAttribute('class', 'descriptionbox'); + txtInp_chilL.className= 'descriptionbox'; //Required for IE + txtInp_chilL.style.fontSize="10px"; + txtInp_chilL.style.border='0px'; + txtInp_chilL.innerHTML = '<a href="#" alt="'+TTEditChilL+'" title="'+TTEditChilL+'">'+HeaderChilL+'</a>'; + txtInp_chilL.setAttribute('id', '.b.'+HeaderChilL); + // 19. Children who have Died ------------------------------------------ + var txtInp_chilD = document.createElement('div'); + txtInp_chilD.setAttribute('type', 'text'); + txtInp_chilD.setAttribute('class', 'descriptionbox'); + txtInp_chilD.className= 'descriptionbox'; //Required for IE + txtInp_chilD.style.fontSize="10px"; + txtInp_chilD.style.border='0px'; + txtInp_chilD.innerHTML = '<a href="#" alt="'+TTEditChilD+'" title="'+TTEditChilD+'">'+HeaderChilD+'</a>'; + txtInp_chilD.setAttribute('id', '.b.'+HeaderChilD); + // 20. Age at first Marriage ------------------------------------------- + var txtInp_ageM = document.createElement('div'); + txtInp_ageM.setAttribute('type', 'text'); + txtInp_ageM.setAttribute('class', 'descriptionbox'); + txtInp_ageM.className= 'descriptionbox'; //Required for IE + txtInp_ageM.style.fontSize="10px"; + txtInp_ageM.style.border='0px'; + txtInp_ageM.innerHTML = '<a href="#" alt="'+TTEditAgeM+'" title="'+TTEditAgeM+'">'+HeaderAgeM+'</a>'; + txtInp_ageM.setAttribute('id', '.b.'+HeaderAgeM); + // 21. Occupation_1 ---------------------------------------------------- + var txtInp_occu = document.createElement('div'); + txtInp_occu.setAttribute('type', 'text'); + txtInp_occu.setAttribute('class', 'descriptionbox'); + txtInp_occu.className= 'descriptionbox'; //Required for IE + txtInp_occu.style.fontSize="10px"; + txtInp_occu.style.border='0px'; + txtInp_occu.innerHTML = '<a href="#" alt="'+TTEditOccu+'" title="'+TTEditOccu+'">'+HeaderOccu+'</a>'; + txtInp_occu.setAttribute('id', '.b.'+HeaderOccu); + // 22. Assets_2 -------------------------------------------------------- + var txtInp_assets2 = document.createElement('div'); + txtInp_assets2.setAttribute('type', 'text'); + txtInp_assets2.setAttribute('class', 'descriptionbox'); + txtInp_assets2.className= 'descriptionbox'; //Required for IE + txtInp_assets2.style.fontSize="10px"; + txtInp_assets2.style.border='0px'; + txtInp_assets2.innerHTML = '<a href="#" alt="'+TTEditAsset+'" title="'+TTEditAsset+'">'+HeaderAsset+'</a>'; + txtInp_assets2.setAttribute('id', '.b.'+HeaderAsset); + // 23. Birth Place_1 ----------------------------------------------- + var txtInp_birthpl = document.createElement('div'); + txtInp_birthpl.setAttribute('type', 'text'); + txtInp_birthpl.setAttribute('class', 'descriptionbox'); + txtInp_birthpl.className= 'descriptionbox'; //Required for IE + txtInp_birthpl.style.fontSize="10px"; + txtInp_birthpl.style.border='0px'; + txtInp_birthpl.innerHTML = '<a href="#" alt="'+TTEditBplace+'" title="'+TTEditBplace+'">'+HeaderBplace+'</a>'; + txtInp_birthpl.setAttribute('id', '.b.'+HeaderBplace); + // 24. Parentage ----------------------------------------------- + var txtInp_parent = document.createElement('div'); + txtInp_parent.setAttribute('type', 'text'); + txtInp_parent.setAttribute('class', 'descriptionbox'); + txtInp_parent.className= 'descriptionbox'; //Required for IE + txtInp_parent.style.fontSize="10px"; + txtInp_parent.style.border='0px'; + txtInp_parent.innerHTML = '<a href="#" alt="'+TTEditParent+'" title="'+TTEditParent+'">'+HeaderParent+'</a>'; + txtInp_parent.setAttribute('id', '.b.'+HeaderParent); + // 25. MthB_2 (if born within census year) ------------------------------- + var txtInp_bmth2 = document.createElement('div'); + txtInp_bmth2.setAttribute('type', 'text'); + txtInp_bmth2.setAttribute('class', 'descriptionbox'); + txtInp_bmth2.className= 'descriptionbox'; //Required for IE + txtInp_bmth2.style.fontSize="10px"; + txtInp_bmth2.style.border='0px'; + txtInp_bmth2.innerHTML = '<a href="#" alt="'+TTEditBmth+'" title="'+TTEditBmth+'">'+HeaderBmth+'</a>'; + txtInp_bmth2.setAttribute('id', '.b.'+HeaderBmth); + // 26. MthM (if married within census year) ------------------------------- + var txtInp_mmth = document.createElement('div'); + txtInp_mmth.setAttribute('type', 'text'); + txtInp_mmth.setAttribute('class', 'descriptionbox'); + txtInp_mmth.className= 'descriptionbox'; //Required for IE + txtInp_mmth.style.fontSize="10px"; + txtInp_mmth.style.border='0px'; + txtInp_mmth.innerHTML = '<a href="#" alt="'+TTEditMmth+'" title="'+TTEditMmth+'">'+HeaderMmth+'</a>'; + txtInp_mmth.setAttribute('id', '.b.'+HeaderMmth); + // 27. Indi Birth Place_1 ----------------------------------------------- + var txtInp_ibirthpl = document.createElement('div'); + txtInp_ibirthpl.setAttribute('type', 'text'); + txtInp_ibirthpl.setAttribute('class', 'descriptionbox'); + txtInp_ibirthpl.className= 'descriptionbox'; //Required for IE + txtInp_ibirthpl.style.fontSize="10px"; + txtInp_ibirthpl.style.border='0px'; + txtInp_ibirthpl.innerHTML = '<a href="#" alt="'+TTEditBP+'" title="'+TTEditBP+'">'+HeaderBP+'</a>'; + txtInp_ibirthpl.setAttribute('id', '.b.'+HeaderBP); + // 28. Fathers Birth Place_1 --------------------------------------------- + var txtInp_fbirthpl = document.createElement('div'); + txtInp_fbirthpl.setAttribute('type', 'text'); + txtInp_fbirthpl.setAttribute('class', 'descriptionbox'); + txtInp_fbirthpl.className= 'descriptionbox'; //Required for IE + txtInp_fbirthpl.style.fontSize="10px"; + txtInp_fbirthpl.style.border='0px'; + txtInp_fbirthpl.innerHTML = '<a href="#" alt="'+TTEditFBP+'" title="'+TTEditFBP+'">'+HeaderFBP+'</a>'; + txtInp_fbirthpl.setAttribute('id', '.b.'+HeaderFBP); + // 29. Mothers Birth Place_1 --------------------------------------------- + var txtInp_mbirthpl = document.createElement('div'); + txtInp_mbirthpl.setAttribute('type', 'text'); + txtInp_mbirthpl.setAttribute('class', 'descriptionbox'); + txtInp_mbirthpl.className= 'descriptionbox'; //Required for IE + txtInp_mbirthpl.style.fontSize="10px"; + txtInp_mbirthpl.style.border='0px'; + txtInp_mbirthpl.innerHTML = '<a href="#" alt="'+TTEditMBP+'" title="'+TTEditMBP+'">'+HeaderMBP+'</a>'; + txtInp_mbirthpl.setAttribute('id', '.b.'+HeaderMBP); + // 30. Years in USA ---------------------------------------------------- + var txtInp_yrsUS = document.createElement('div'); + txtInp_yrsUS.setAttribute('type', 'text'); + txtInp_yrsUS.setAttribute('class', 'descriptionbox'); + txtInp_yrsUS.className= 'descriptionbox'; //Required for IE + txtInp_yrsUS.style.fontSize="10px"; + txtInp_yrsUS.style.border='0px'; + txtInp_yrsUS.innerHTML = '<a href="#" alt="'+TTEditYrsUS+'" title="'+TTEditYrsUS+'">'+HeaderYrsUS+'</a>'; + txtInp_yrsUS.setAttribute('id', '.b.'+HeaderYrsUS); + // 31. Year of Immigration YOI_1 ---------------------------------------- + var txtInp_yoi1 = document.createElement('div'); + txtInp_yoi1.setAttribute('type', 'text'); + txtInp_yoi1.setAttribute('class', 'descriptionbox'); + txtInp_yoi1.className= 'descriptionbox'; //Required for IE + txtInp_yoi1.style.fontSize="10px"; + txtInp_yoi1.style.border='0px'; + txtInp_yoi1.innerHTML = '<a href="#" alt="'+TTEditYOI+'" title="'+TTEditYOI+'">'+HeaderYOI+'</a>'; + txtInp_yoi1.setAttribute('id', '.b.'+HeaderYOI); + // 32. Natualized or Alien_1 ---------------------------------------- + var txtInp_na1 = document.createElement('div'); + txtInp_na1.setAttribute('type', 'text'); + txtInp_na1.setAttribute('class', 'descriptionbox'); + txtInp_na1.className= 'descriptionbox'; //Required for IE + txtInp_na1.style.fontSize="10px"; + txtInp_na1.style.border='0px'; + txtInp_na1.innerHTML = '<a href="#" alt="'+TTEditNA+'" title="'+TTEditNA+'">'+HeaderNA+'</a>'; + txtInp_na1.setAttribute('id', '.b.'+HeaderNA); + // 33. Year of Naturalization YON_1 ---------------------------------------- + var txtInp_yon = document.createElement('div'); + txtInp_yon.setAttribute('type', 'text'); + txtInp_yon.setAttribute('class', 'descriptionbox'); + txtInp_yon.className= 'descriptionbox'; //Required for IE + txtInp_yon.style.fontSize="10px"; + txtInp_yon.style.border='0px'; + txtInp_yon.innerHTML = '<a href="#" alt="'+TTEditYON+'" title="'+TTEditYON+'">'+HeaderYON+'</a>'; + txtInp_yon.setAttribute('id', '.b.'+HeaderYON); + // 34. English if spoken, or if not, Language spoken Eng/Lang --------------- + var txtInp_englang = document.createElement('div'); + txtInp_englang.setAttribute('type', 'text'); + txtInp_englang.setAttribute('class', 'descriptionbox'); + txtInp_englang.className= 'descriptionbox'; //Required for IE + txtInp_englang.style.fontSize="10px"; + txtInp_englang.style.border='0px'; + txtInp_englang.innerHTML = '<a href="#" alt="'+TTEditEngL+'" title="'+TTEditEngL+'">'+HeaderEngL+'</a>'; + txtInp_englang.setAttribute('id', '.b.'+HeaderEngL); + // 35. Occupation_2 --------------------------------------------------------- + var txtInp_occu2 = document.createElement('div'); + txtInp_occu2.setAttribute('type', 'text'); + txtInp_occu2.setAttribute('class', 'descriptionbox'); + txtInp_occu2.className= 'descriptionbox'; //Required for IE + txtInp_occu2.style.fontSize="10px"; + txtInp_occu2.style.border='0px'; + txtInp_occu2.innerHTML = '<a href="#" alt="'+TTEditOccu+'" title="'+TTEditOccu+'">'+HeaderOccu+'</a>'; + txtInp_occu2.setAttribute('id', '.b.'+HeaderOccu); + // 36. Health -------------------------------------------------------------- + var txtInp_health = document.createElement('div'); + txtInp_health.setAttribute('type', 'text'); + txtInp_health.setAttribute('class', 'descriptionbox'); + txtInp_health.className= 'descriptionbox'; //Required for IE + txtInp_health.style.fontSize="10px"; + txtInp_health.style.border='0px'; + txtInp_health.innerHTML = '<a href="#" alt="'+TTEditHealth+'" title="'+TTEditHealth+'">'+HeaderHealth+'</a>'; + txtInp_health.setAttribute('id', '.b.'+HeaderHealth); + // 37. Industry ind_1 ------------------------------------------------------ + var txtInp_ind1 = document.createElement('div'); + txtInp_ind1.setAttribute('type', 'text'); + txtInp_ind1.setAttribute('class', 'descriptionbox'); + txtInp_ind1.className= 'descriptionbox'; //Required for IE + txtInp_ind1.style.fontSize="10px"; + txtInp_ind1.style.border='0px'; + txtInp_ind1.innerHTML = '<a href="#" alt="'+TTEditInd+'" title="'+TTEditInd+'">'+HeaderInd+'</a>'; + txtInp_ind1.setAttribute('id', '.b.'+HeaderInd); + // 38. Employ_1 ------------------------------------------------------------ + var txtInp_emp1 = document.createElement('div'); + txtInp_emp1.setAttribute('type', 'text'); + txtInp_emp1.setAttribute('class', 'descriptionbox'); + txtInp_emp1.className= 'descriptionbox'; //Required for IE + txtInp_emp1.style.fontSize="10px"; + txtInp_emp1.style.border='0px'; + txtInp_emp1.innerHTML = '<a href="#" alt="'+TTEditEmp+'" title="'+TTEditEmp+'">'+HeaderEmp+'</a>'; + txtInp_emp1.setAttribute('id', '.b.'+HeaderEmp); + // 39. Employer - EmR----------------------------------------------------------- + var txtInp_emR = document.createElement('div'); + txtInp_emR.setAttribute('type', 'text'); + txtInp_emR.setAttribute('class', 'descriptionbox'); + txtInp_emR.className= 'descriptionbox'; //Required for IE + txtInp_emR.style.fontSize="10px"; + txtInp_emR.style.border='0px'; + txtInp_emR.innerHTML = '<a href="#" alt="'+TTEditEmR+'" title="'+TTEditEmR+'">'+HeaderEmR+'</a>'; + txtInp_emR.setAttribute('id', '.b.'+HeaderEmR); + // 40. Employed EmD ------------------------------------------------------------ + var txtInp_emD = document.createElement('div'); + txtInp_emD.setAttribute('type', 'text'); + txtInp_emD.setAttribute('class', 'descriptionbox'); + txtInp_emD.className= 'descriptionbox'; //Required for IE + txtInp_emD.style.fontSize="10px"; + txtInp_emD.style.border='0px'; + txtInp_emD.innerHTML = '<a href="#" alt="'+TTEditEmD+'" title="'+TTEditEmD+'">'+HeaderEmD+'</a>'; + txtInp_emD.setAttribute('id', '.b.'+HeaderEmD); + // 41. Months employed during Census Year --------------------------------------- + var txtInp_mnsE = document.createElement('div'); + txtInp_mnsE.setAttribute('type', 'text'); + txtInp_mnsE.setAttribute('class', 'descriptionbox'); + txtInp_mnsE.className= 'descriptionbox'; //Required for IE + txtInp_mnsE.style.fontSize="10px"; + txtInp_mnsE.style.border='0px'; + txtInp_mnsE.innerHTML = '<a href="#" alt="'+TTEditMnse+'" title="'+TTEditMnse+'">'+HeaderMnse+'</a>'; + txtInp_mnsE.setAttribute('id', '.b.'+HeaderMnse); + // 42. Working at Home WH ---------------------------------------------------- + var txtInp_emH = document.createElement('div'); + txtInp_emH.setAttribute('type', 'text'); + txtInp_emH.setAttribute('class', 'descriptionbox'); + txtInp_emH.className= 'descriptionbox'; //Required for IE + txtInp_emH.style.fontSize="10px"; + txtInp_emH.style.border='0px'; + txtInp_emH.innerHTML = '<a href="#" alt="'+TTEditEmH+'" title="'+TTEditEmH+'">'+HeaderEmH+'</a>'; + txtInp_emH.setAttribute('id', '.b.'+HeaderEmH); + // 43. Not Employed EmN -------------------------------------------------------- + var txtInp_emN = document.createElement('div'); + txtInp_emN.setAttribute('type', 'text'); + txtInp_emN.setAttribute('class', 'descriptionbox'); + txtInp_emN.className= 'descriptionbox'; //Required for IE + txtInp_emN.style.fontSize="10px"; + txtInp_emN.style.border='0px'; + txtInp_emN.innerHTML = '<a href="#" alt="'+TTEditEmN+'" title="'+TTEditEmN+'">'+HeaderEmN+'</a>'; + txtInp_emN.setAttribute('id', '.b.'+HeaderEmN); + // 44. Weeks unemployed during Census Year --------------------------------------- + var txtInp_wksU = document.createElement('div'); + txtInp_wksU.setAttribute('type', 'text'); + txtInp_wksU.setAttribute('class', 'descriptionbox'); + txtInp_wksU.className= 'descriptionbox'; //Required for IE + txtInp_wksU.style.fontSize="10px"; + txtInp_wksU.style.border='0px'; + txtInp_wksU.innerHTML = '<a href="#" alt="'+TTEditWksu+'" title="'+TTEditWksu+'">'+HeaderWksu+'</a>'; + txtInp_wksU.setAttribute('id', '.b.'+HeaderWksu); + // 45. Months unemployed during Census Year --------------------------------------- + var txtInp_mnsU = document.createElement('div'); + txtInp_mnsU.setAttribute('type', 'text'); + txtInp_mnsU.setAttribute('class', 'descriptionbox'); + txtInp_mnsU.className= 'descriptionbox'; //Required for IE + txtInp_mnsU.style.fontSize="10px"; + txtInp_mnsU.style.border='0px'; + txtInp_mnsU.innerHTML = '<a href="#" alt="'+TTEditMnsu+'" title="'+TTEditMnsu+'">'+HeaderMnsu+'</a>'; + txtInp_mnsU.setAttribute('id', '.b.'+HeaderMnsu); + // 46. Education ----------------------------------------------------------- + var txtInp_educ = document.createElement('div'); + txtInp_educ.setAttribute('type', 'text'); + txtInp_educ.setAttribute('class', 'descriptionbox'); + txtInp_educ.className= 'descriptionbox'; //Required for IE + txtInp_educ.style.fontSize="10px"; + txtInp_educ.style.border='0px'; + txtInp_educ.innerHTML = '<a href="#" alt="'+TTEditEduc+'" title="'+TTEditEduc+'">'+HeaderEduc+'</a>'; + txtInp_educ.setAttribute('id', '.b.'+HeaderEduc); + // 47. Education pre 1890 Census --------------------------------------------- + var txtInp_educpre1890 = document.createElement('div'); + txtInp_educpre1890.setAttribute('type', 'text'); + txtInp_educpre1890.setAttribute('class', 'descriptionbox'); + txtInp_educpre1890.className= 'descriptionbox'; //Required for IE + txtInp_educpre1890.style.fontSize="10px"; + txtInp_educpre1890.style.border='0px'; + txtInp_educpre1890.innerHTML = '<a href="#" alt="'+TTEditEducpre1890+'" title="'+TTEditEducpre1890+'">'+HeaderEducpre1890+'</a>'; + txtInp_educpre1890.setAttribute('id', '.b.'+HeaderEducpre1890); + // 48. English Spoken y/n eng_1 ---------------------------------------- + var txtInp_eng1 = document.createElement('div'); + txtInp_eng1.setAttribute('type', 'text'); + txtInp_eng1.setAttribute('class', 'descriptionbox'); + txtInp_eng1.className= 'descriptionbox'; //Required for IE + txtInp_eng1.style.fontSize="10px"; + txtInp_eng1.style.border='0px'; + txtInp_eng1.innerHTML = '<a href="#" alt="'+TTEditEng+'" title="'+TTEditEng+'">'+HeaderEng+'</a>'; + txtInp_eng1.setAttribute('id', '.b.'+HeaderEng); + // 49. Home Ownership ------------------------------------------------- + var txtInp_home = document.createElement('div'); + txtInp_home.setAttribute('type', 'text'); + txtInp_home.setAttribute('class', 'descriptionbox'); + txtInp_home.className= 'descriptionbox'; //Required for IE + txtInp_home.style.fontSize="10px"; + txtInp_home.style.border='0px'; + txtInp_home.innerHTML = '<a href="#" alt="'+TTEditHome+'" title="'+TTEditHome+'">'+HeaderHome+'</a>'; + txtInp_home.setAttribute('id', '.b.'+HeaderHome); + // 50. Birth Place_2 ----------------------------------------------- + var txtInp_birthpl2 = document.createElement('div'); + txtInp_birthpl2.setAttribute('type', 'text'); + txtInp_birthpl2.setAttribute('class', 'descriptionbox'); + txtInp_birthpl2.className= 'descriptionbox'; //Required for IE + txtInp_birthpl2.style.fontSize="10px"; + txtInp_birthpl2.style.border='0px'; + txtInp_birthpl2.innerHTML = '<a href="#" alt="'+TTEditBplace+'" title="'+TTEditBplace+'">'+HeaderBplace+'</a>'; + txtInp_birthpl2.setAttribute('id', '.b.'+HeaderBplace); + // 51. Indi Birth Place_2 --------------------------------------------- + var txtInp_ibirthpl2 = document.createElement('div'); + txtInp_ibirthpl2.setAttribute('type', 'text'); + txtInp_ibirthpl2.setAttribute('class', 'descriptionbox'); + txtInp_ibirthpl2.className= 'descriptionbox'; //Required for IE + txtInp_ibirthpl2.style.fontSize="10px"; + txtInp_ibirthpl2.style.border='0px'; + txtInp_ibirthpl2.innerHTML = '<a href="#" alt="'+TTEditBP+'" title="'+TTEditBP+'">'+HeaderBP+'</a>'; + txtInp_ibirthpl2.setAttribute('id', '.b.'+HeaderBP); + // 52. Born in Same Country (ENG) ----------------------------------------------- + var txtInp_bic = document.createElement('div'); + txtInp_bic.setAttribute('type', 'text'); + txtInp_bic.setAttribute('class', 'descriptionbox'); + txtInp_bic.className= 'descriptionbox'; //Required for IE + txtInp_bic.style.fontSize="10px"; + txtInp_bic.style.border='0px'; + txtInp_bic.innerHTML = '<a href="#" alt="'+TTEditBIC+'" title="'+TTEditBIC+'">'+HeaderBIC+'</a>'; + txtInp_bic.setAttribute('id', '.b.'+HeaderBIC) + // 53. Born outside England (SCO, IRE, WAL, FOReign ---------------------------- + var txtInp_boe = document.createElement('div'); + txtInp_boe.setAttribute('type', 'text'); + txtInp_boe.setAttribute('class', 'descriptionbox'); + txtInp_boe.className= 'descriptionbox'; //Required for IE + txtInp_boe.style.fontSize="10px"; + txtInp_boe.style.border='0px'; + txtInp_boe.innerHTML = '<a href="#" alt="'+TTEditBOE+'" title="'+TTEditBOE+'">'+HeaderBOE+'</a>'; + txtInp_boe.setAttribute('id', '.b.'+HeaderBOE) + // 54. Fathers Birth Place_2 --------------------------------------------- + var txtInp_fbirthpl2 = document.createElement('div'); + txtInp_fbirthpl2.setAttribute('type', 'text'); + txtInp_fbirthpl2.setAttribute('class', 'descriptionbox'); + txtInp_fbirthpl2.className= 'descriptionbox'; //Required for IE + txtInp_fbirthpl2.style.fontSize="10px"; + txtInp_fbirthpl2.style.border='0px'; + txtInp_fbirthpl2.innerHTML = '<a href="#" alt="'+TTEditFBP+'" title="'+TTEditFBP+'">'+HeaderFBP+'</a>'; + txtInp_fbirthpl2.setAttribute('id', '.b.'+HeaderFBP); + // 55. Mothers Birth Place_2 --------------------------------------------- + var txtInp_mbirthpl2 = document.createElement('div'); + txtInp_mbirthpl2.setAttribute('type', 'text'); + txtInp_mbirthpl2.setAttribute('class', 'descriptionbox'); + txtInp_mbirthpl2.className= 'descriptionbox'; //Required for IE + txtInp_mbirthpl2.style.fontSize="10px"; + txtInp_mbirthpl2.style.border='0px'; + txtInp_mbirthpl2.innerHTML = '<a href="#" alt="'+TTEditMBP+'" title="'+TTEditMBP+'">'+HeaderMBP+'</a>'; + txtInp_mbirthpl2.setAttribute('id', '.b.'+HeaderMBP); + // 56. Native Language ---------------------------------------------------- + var txtInp_lang = document.createElement('div'); + txtInp_lang.setAttribute('type', 'text'); + txtInp_lang.setAttribute('class', 'descriptionbox'); + txtInp_lang.className= 'descriptionbox'; //Required for IE + txtInp_lang.style.fontSize="10px"; + txtInp_lang.style.border='0px'; + txtInp_lang.innerHTML = '<a href="#" alt="'+TTEditNL+'" title="'+TTEditNL+'">'+HeaderNL+'</a>'; + txtInp_lang.setAttribute('id', '.b.'+HeaderNL); + // 57. Year of Immigration YOI_2 ---------------------------------------- + var txtInp_yoi2 = document.createElement('div'); + txtInp_yoi2.setAttribute('type', 'text'); + txtInp_yoi2.setAttribute('class', 'descriptionbox'); + txtInp_yoi2.className= 'descriptionbox'; //Required for IE + txtInp_yoi2.style.fontSize="10px"; + txtInp_yoi2.style.border='0px'; + txtInp_yoi2.innerHTML = '<a href="#" alt="'+TTEditYOI+'" title="'+TTEditYOI+'">'+HeaderYOI+'</a>'; + txtInp_yoi2.setAttribute('id', '.b.'+HeaderYOI); + // 58. Natualized or Alien_2 ---------------------------------------- + var txtInp_na2 = document.createElement('div'); + txtInp_na2.setAttribute('type', 'text'); + txtInp_na2.setAttribute('class', 'descriptionbox'); + txtInp_na2.className= 'descriptionbox'; //Required for IE + txtInp_na2.style.fontSize="10px"; + txtInp_na2.style.border='0px'; + txtInp_na2.innerHTML = '<a href="#" alt="'+TTEditNA+'" title="'+TTEditNA+'">'+HeaderNA+'</a>'; + txtInp_na2.setAttribute('id', '.b.'+HeaderNA); + // 59. English Spoken y/n eng_2 ---------------------------------------- + var txtInp_eng2 = document.createElement('div'); + txtInp_eng2.setAttribute('type', 'text'); + txtInp_eng2.setAttribute('class', 'descriptionbox'); + txtInp_eng2.className= 'descriptionbox'; //Required for IE + txtInp_eng2.style.fontSize="10px"; + txtInp_eng2.style.border='0px'; + txtInp_eng2.innerHTML = '<a href="#" alt="'+TTEditEng+'" title="'+TTEditEng+'">'+HeaderEng+'</a>'; + txtInp_eng2.setAttribute('id', '.b.'+HeaderEng); + // 60. Occupation_3 ----------------------------------------------------- + var txtInp_occu3 = document.createElement('div'); + txtInp_occu3.setAttribute('type', 'text'); + txtInp_occu3.setAttribute('class', 'descriptionbox'); + txtInp_occu3.className= 'descriptionbox'; //Required for IE + txtInp_occu3.style.fontSize="10px"; + txtInp_occu3.style.border='0px'; + txtInp_occu3.innerHTML = '<a href="#" alt="'+TTEditOccu+'" title="'+TTEditOccu+'">'+HeaderOccu+'</a>'; + txtInp_occu3.setAttribute('id', '.b.'+HeaderOccu); + // 61. Industry ind_2 ------------------------------------------------------ + var txtInp_ind2 = document.createElement('div'); + txtInp_ind2.setAttribute('type', 'text'); + txtInp_ind2.setAttribute('class', 'descriptionbox'); + txtInp_ind2.className= 'descriptionbox'; //Required for IE + txtInp_ind2.style.fontSize="10px"; + txtInp_ind2.style.border='0px'; + txtInp_ind2.innerHTML = '<a href="#" alt="'+TTEditInd+'" title="'+TTEditInd+'">'+HeaderInd+'</a>'; + txtInp_ind2.setAttribute('id', '.b.'+HeaderInd); + // 62. Employ_2 ------------------------------------------------------------ + var txtInp_emp2 = document.createElement('div'); + txtInp_emp2.setAttribute('type', 'text'); + txtInp_emp2.setAttribute('class', 'descriptionbox'); + txtInp_emp2.className= 'descriptionbox'; //Required for IE + txtInp_emp2.style.fontSize="10px"; + txtInp_emp2.style.border='0px'; + txtInp_emp2.innerHTML = '<a href="#" alt="'+TTEditEmp+'" title="'+TTEditEmp+'">'+HeaderEmp+'</a>'; + txtInp_emp2.setAttribute('id', '.b.'+HeaderEmp); + /* + // 63. Nationality (UK 1911) ---------------------------------------------------- + var txtInp_infirm = document.createElement('div'); + txtInp_infirm.setAttribute('type', 'text'); + txtInp_infirm.setAttribute('class', 'descriptionbox'); + txtInp_infirm.className= 'descriptionbox'; //Required for IE + txtInp_infirm.style.fontSize="10px"; + txtInp_infirm.style.border='0px'; + txtInp_infirm.innerHTML = '<a href="#" alt="'+TTEditN-ality+'" title="'+TTEditNality+'">'+HeaderN-ality+'</a>'; + txtInp_infirm.setAttribute('id', '.b.'+HeaderN-ality); + */ + // 63. Infirmaties Infirm ------------------------------------------------------- + var txtInp_infirm = document.createElement('div'); + txtInp_infirm.setAttribute('type', 'text'); + txtInp_infirm.setAttribute('class', 'descriptionbox'); + txtInp_infirm.className= 'descriptionbox'; //Required for IE + txtInp_infirm.style.fontSize="10px"; + txtInp_infirm.style.border='0px'; + txtInp_infirm.innerHTML = '<a href="#" alt="'+TTEditInfirm+'" title="'+TTEditInfirm+'">'+HeaderInfirm+'</a>'; + txtInp_infirm.setAttribute('id', '.b.'+HeaderInfirm); + // 64. Situation (1890) ------------------------------------------------------ + var txtInp_situ = document.createElement('div'); + txtInp_situ.setAttribute('type', 'text'); + txtInp_situ.setAttribute('class', 'descriptionbox'); + txtInp_situ.className= 'descriptionbox'; //Required for IE + txtInp_situ.style.fontSize="10px"; + txtInp_situ.style.border='0px'; + txtInp_situ.innerHTML = '<a href="#" alt="'+TTEditSitu+'" title="'+TTEditSitu+'">'+HeaderSitu+'</a>'; + txtInp_situ.setAttribute('id', '.b.'+HeaderSitu); + // 65. Veteran ------------------------------------------------------ + var txtInp_vet = document.createElement('div'); + txtInp_vet.setAttribute('type', 'text'); + txtInp_vet.setAttribute('class', 'descriptionbox'); + txtInp_vet.className= 'descriptionbox'; //Required for IE + txtInp_vet.style.fontSize="10px"; + txtInp_vet.style.border='0px'; + txtInp_vet.innerHTML = '<a href="#" alt="'+TTEditVet+'" title="'+TTEditVet+'">'+HeaderVet+'</a>'; + txtInp_vet.setAttribute('id', '.b.'+HeaderVet); + // 66. War or Expedition --------------------------------------------- + var txtInp_war = document.createElement('div'); + txtInp_war.setAttribute('type', 'text'); + txtInp_war.setAttribute('class', 'descriptionbox'); + txtInp_war.className= 'descriptionbox'; //Required for IE + txtInp_war.style.fontSize="10px"; + txtInp_war.style.border='0px'; + txtInp_war.innerHTML = '<a href="#" alt="'+TTEditWar+'" title="'+TTEditWar+'">'+HeaderWar+'</a>'; + txtInp_war.setAttribute('id', '.b.'+HeaderWar); + // 67. Infirm1910 (1910) ----------------------------------------------- + var txtInp_infirm1910 = document.createElement('div'); + txtInp_infirm1910.setAttribute('type', 'text'); + txtInp_infirm1910.setAttribute('class', 'descriptionbox'); + txtInp_infirm1910.className= 'descriptionbox'; //Required for IE + txtInp_infirm1910.style.fontSize="10px"; + txtInp_infirm1910.style.border='0px'; + txtInp_infirm1910.innerHTML = '<a href="#" alt="'+TTEditInfirm1910+'" title="'+TTEditInfirm1910+'">'+HeaderInfirm1910+'</a>'; + txtInp_infirm1910.setAttribute('id', '.b.'+HeaderInfirm1910); + + // Hidden Items ------------------------------------------------------ + // 68. DOB date of Birth (Julian) actual or rough (ABT, BET) + // 69. DOM date of Marriage (Julian) actual or rough (ABT, BET) + // 70. Fullname + // 71. Married Name + // 72. DOD date of Death (Julian) actual or rough (ABT, BET) + // 73. Textual Array of Chil (Nam DOB DOD) for ChilB, ChilL, ChilD + // + + // 74. Extra 1. Text Del Button ------------------------------------------------- + var txtInp_tdel = document.createElement('div'); + txtInp_tdel.setAttribute('type', 'text'); + txtInp_tdel.setAttribute('class', 'descriptionbox'); + txtInp_tdel.className= 'descriptionbox'; //Required for IE + txtInp_tdel.style.fontSize="10px"; + txtInp_tdel.style.border='0px'; + txtInp_tdel.innerHTML = 'Del'; + txtInp_tdel.setAttribute('id', this); + // 75. Extra 2. Text Radio Button ----------------------------------------------- + var txtInp_tra = document.createElement('div'); + txtInp_tra.setAttribute('type', 'text'); + txtInp_tra.setAttribute('class', 'descriptionbox'); + txtInp_tra.className= 'descriptionbox'; //Required for IE + txtInp_tra.style.fontSize="10px"; + txtInp_tra.style.border='0px'; + txtInp_tra.innerHTML = 'Ins'; + // 76. Extra 3. Item Number 2 ------------------------------------------------- + var txt_itemNo2 = document.createElement('div'); + txt_itemNo2.setAttribute('class', 'descriptionbox'); + txt_itemNo2.className= 'descriptionbox'; //Required for IE + txt_itemNo2.style.border='0px'; + txt_itemNo2.innerHTML = '#'; + txt_itemNo2.setAttribute('id', '.b.Item2'); + txt_itemNo2.setAttribute('type', 'text'); + txt_itemNo2.style.fontSize="10px"; + + } else { + + // **D** Define Cell Elements ======================================= + var txtcolor = "#0000FF"; + // 0. Item Number --------------------------------------------------- + // var txt_itemNo = document.createTextNode(iteration); + var txt_itemNo = document.createElement('div'); + // txt_itemNo.style.display="none"; + // 1. Indi ID ------------------------------------------------------- + if (pid=='') { + var txtcolor = "#000000"; + // This adds a checkbox for adding an indi id .... to be implemented later + var txtInp_pid = document.createElement('input'); + txtInp_pid.setAttribute('type', 'checkbox'); + if (txtInp_pid.checked!='') { + txtInp_pid.setAttribute('value', 'no'); + } else { + txtInp_pid.setAttribute('value', 'add'); + } + // ------------------------------------------------------------------------- + txtInp_pid.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_1'); + txtInp_pid.setAttribute('size', '1'); + txtInp_pid.style.fontSize="11px"; + } else { + var txtInp_pid = document.createElement('input'); + //txtInp_pid.style.border='0px'; + txtInp_pid.style.background='#bbddff'; + // txtInp_pid.style.display='none' + txtInp_pid.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_1'); + txtInp_pid.setAttribute('value', pid); + txtInp_pid.setAttribute('size', '4'); + txtInp_pid.setAttribute('readOnly','true'); + txtInp_pid.style.fontSize="10px"; + } + // 2. Full Name ----------------------------------------------------- + var txtInp_nam = document.createElement('input'); + txtInp_nam.setAttribute('type', 'text'); + txtInp_nam.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_2'); + txtInp_nam.setAttribute('size', '30'); + txtInp_nam.setAttribute('value', nam); + txtInp_nam.style.color=txtcolor; + txtInp_nam.style.fontSize="10px"; + txtInp_nam.style.width="14em"; + // 3. Relationship_1 -------------------------------------------------- + var txtInp_label = document.createElement('input'); + txtInp_label.setAttribute('type', 'text'); + txtInp_label.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_3'); + txtInp_label.setAttribute('size', '15'); + txtInp_label.setAttribute('value', label); + txtInp_label.style.color=txtcolor; + txtInp_label.style.fontSize="10px"; + txtInp_label.style.width="7em"; + // 4. Conditition_1 --------------------------------------------------- + var txtInp_cond = document.createElement('input'); + txtInp_cond.setAttribute('type', 'text'); + txtInp_cond.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_4'); + txtInp_cond.setAttribute('size', '1'); + txtInp_cond.setAttribute('value', cond); + txtInp_cond.style.color=txtcolor; + txtInp_cond.style.fontSize="10px"; + txtInp_cond.style.width="1em"; + // 5. Tenure ---------------------------------------------------------- + var txtInp_tenure = document.createElement('input'); + txtInp_tenure.setAttribute('type', 'text'); + txtInp_tenure.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_5'); + txtInp_tenure.setAttribute('size', '1'); + txtInp_tenure.setAttribute('maxlength', '2'); + txtInp_tenure.setAttribute('value', ''); + txtInp_tenure.style.color=txtcolor; + txtInp_tenure.style.fontSize="10px"; + txtInp_tenure.style.width="1.6em"; + // 6. Assets_1 -------------------------------------------------------- + var txtInp_assets = document.createElement('input'); + txtInp_assets.setAttribute('type', 'text'); + txtInp_assets.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_6'); + txtInp_assets.setAttribute('size', '11'); + txtInp_assets.setAttribute('maxlength', '15'); + txtInp_assets.setAttribute('value', ''); + txtInp_assets.style.color=txtcolor; + txtInp_assets.style.fontSize="10px"; + // 7. Age_1 ----------------------------------------------------------- + var txtInp_age = document.createElement('input'); + txtInp_age.setAttribute('type', 'text'); + txtInp_age.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_7'); + txtInp_age.setAttribute('size', '2'); + txtInp_age.setAttribute('maxlength', '4'); + txtInp_age.setAttribute('value', age); + if (txtInp_age.value>=0) { + txtInp_age.style.color=txtcolor; + } else { + //txtInp_age.style.color="red"; + txtInp_age.style.color=txtcolor; + } + txtInp_age.style.fontSize="10px"; + txtInp_age.style.width="2.2em"; + // 8. Race_1 ----------------------------------------------------------- + var txtInp_race = document.createElement('input'); + txtInp_race.setAttribute('type', 'text'); + txtInp_race.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_8'); + txtInp_race.setAttribute('size', '1'); + txtInp_race.setAttribute('maxlength', '1'); + txtInp_race.setAttribute('value', ''); + txtInp_race.style.color=txtcolor; + txtInp_race.style.fontSize="10px"; + txtInp_race.style.width="1em"; + // 9. Sex ----------------------------------------------------------- + var txtInp_gend = document.createElement('input'); + txtInp_gend.setAttribute('type', 'text'); + txtInp_gend.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_9'); + txtInp_gend.setAttribute('size', '1'); + txtInp_gend.setAttribute('maxlength', '1'); + txtInp_gend.setAttribute('value', gend); + txtInp_gend.style.color=txtcolor; + txtInp_gend.style.fontSize="10px"; + txtInp_gend.style.width="1em"; + // 10. Race_2 ----------------------------------------------------------- + var txtInp_race2 = document.createElement('input'); + txtInp_race2.setAttribute('type', 'text'); + txtInp_race2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_10'); + txtInp_race2.setAttribute('size', '1'); + txtInp_race2.setAttribute('maxlength', '1'); + txtInp_race2.setAttribute('value', ''); + txtInp_race2.style.color=txtcolor; + txtInp_race2.style.fontSize="10px"; + txtInp_race2.style.width="1em"; + // 11. DOB/YOB --------------------------------------------------------- + var txtInp_yob = document.createElement('input'); + txtInp_yob.setAttribute('type', 'text'); + txtInp_yob.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_11'); + txtInp_yob.setAttribute('size', '3'); + txtInp_yob.setAttribute('maxlength', '8'); + txtInp_yob.setAttribute('value', usdob); + txtInp_yob.style.color=txtcolor; + txtInp_yob.style.fontSize="10px"; + txtInp_yob.style.width="5em"; + // 12. Age_2 ----------------------------------------------------------- + var txtInp_age2 = document.createElement('input'); + txtInp_age2.setAttribute('type', 'text'); + txtInp_age2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_12'); + txtInp_age2.setAttribute('size', '2'); + txtInp_age2.setAttribute('maxlength', '4'); + txtInp_age2.setAttribute('value', age); + if (txtInp_age2.value>=0) { + txtInp_age2.style.color=txtcolor; + } else { + // txtInp_age2.style.color="red"; + txtInp_age2.style.color=txtcolor; + } + txtInp_age2.style.fontSize="10px"; + txtInp_age2.style.width="2.0em"; + // 13. Birth month if born in Census Year ------------------------------ + var txtInp_bmth = document.createElement('input'); + txtInp_bmth.setAttribute('type', 'text'); + txtInp_bmth.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_13'); + txtInp_bmth.setAttribute('size', '1'); + txtInp_bmth.setAttribute('maxlength', '3'); + txtInp_bmth.setAttribute('value', ''); + txtInp_bmth.style.color=txtcolor; + txtInp_bmth.style.fontSize="10px"; + txtInp_bmth.style.width="2.4em"; + // 14. Relationship_2 -------------------------------------------------- + var txtInp_label2 = document.createElement('input'); + txtInp_label2.setAttribute('type', 'text'); + txtInp_label2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_14'); + txtInp_label2.setAttribute('size', '15'); + txtInp_label2.setAttribute('value', label); + txtInp_label2.style.color=txtcolor; + txtInp_label2.style.fontSize="10px"; + // 15. Conditition_2 --------------------------------------------------- + var txtInp_cond2 = document.createElement('input'); + txtInp_cond2.setAttribute('type', 'text'); + txtInp_cond2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_15'); + txtInp_cond2.setAttribute('size', '1'); + txtInp_cond2.setAttribute('maxlength', '1'); + txtInp_cond2.setAttribute('value', cond); + txtInp_cond2.style.color=txtcolor; + txtInp_cond2.style.fontSize="10px"; + txtInp_cond2.style.width="1em"; + // 16. Years Married (or Yes if married in Census Year) ---------------- + var txtInp_yrsm = document.createElement('input'); + txtInp_yrsm.setAttribute('type', 'text'); + txtInp_yrsm.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_16'); + txtInp_yrsm.setAttribute('size', '1'); + txtInp_yrsm.setAttribute('maxlength', '2'); + txtInp_yrsm.setAttribute('value', ''); + txtInp_yrsm.style.color=txtcolor; + txtInp_yrsm.style.fontSize="10px"; + txtInp_yrsm.style.width="1.4em"; + // 17. Children Born Alive -------------------------------------------- + var txtInp_chilB = document.createElement('input'); + txtInp_chilB.setAttribute('type', 'text'); + txtInp_chilB.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_17'); + txtInp_chilB.setAttribute('size', '1'); + txtInp_chilB.setAttribute('maxlength', '2'); + txtInp_chilB.setAttribute('value', BORN); + txtInp_chilB.style.color=txtcolor; + txtInp_chilB.style.fontSize="10px"; + txtInp_chilB.style.width="1.4em"; + if (gend=='M') { + txtInp_chilB.type = "hidden"; + } + // 18. Children Still Living ------------------------------------------ + var txtInp_chilL = document.createElement('input'); + txtInp_chilL.setAttribute('type', 'text'); + txtInp_chilL.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_18'); + txtInp_chilL.setAttribute('size', '1'); + txtInp_chilL.setAttribute('maxlength', '2'); + txtInp_chilL.setAttribute('value', ALIVE); + txtInp_chilL.style.color=txtcolor; + txtInp_chilL.style.fontSize="10px"; + txtInp_chilL.style.width="1.4em"; + if (gend=='M') { + txtInp_chilL.type = "hidden"; + } + // 19. Children who have Died ==--------------------------------------- + var txtInp_chilD = document.createElement('input'); + txtInp_chilD.setAttribute('type', 'text'); + txtInp_chilD.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_19'); + txtInp_chilD.setAttribute('size', '1'); + txtInp_chilD.setAttribute('maxlength', '2'); + txtInp_chilD.setAttribute('value', DEAD); + txtInp_chilD.style.color=txtcolor; + txtInp_chilD.style.fontSize="10px"; + txtInp_chilD.style.width="1.4em"; + if (gend=='M') { + txtInp_chilD.type = "hidden"; + } + // 20. Age at first marriage ------------------------------------------- + var txtInp_ageM = document.createElement('input'); + txtInp_ageM.setAttribute('type', 'text'); + txtInp_ageM.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_20'); + txtInp_ageM.setAttribute('size', '1'); + txtInp_ageM.setAttribute('maxlength', '2'); + txtInp_ageM.setAttribute('value', agemarr); + txtInp_ageM.style.color=txtcolor; + txtInp_ageM.style.fontSize="10px"; + txtInp_ageM.style.width="1.4em"; + // 21. Occupation_1 ---------------------------------------------------- + var txtInp_occu = document.createElement('input'); + txtInp_occu.setAttribute('type', 'text'); + txtInp_occu.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_21'); + txtInp_occu.setAttribute('size', '22'); + txtInp_occu.setAttribute('value', ''); + txtInp_occu.style.color=txtcolor; + txtInp_occu.style.fontSize="10px"; + txtInp_occu.style.width="11em"; + // 22. Assets_2 ------------------------------------------- + var txtInp_assets2 = document.createElement('input'); + txtInp_assets2.setAttribute('type', 'text'); + txtInp_assets2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_22'); + txtInp_assets2.setAttribute('size', '7'); + txtInp_assets2.setAttribute('maxlength', '9'); + txtInp_assets2.setAttribute('value', ''); + txtInp_assets2.style.color=txtcolor; + txtInp_assets2.style.fontSize="10px"; + // 23. Birth Place_1 (Full format) --------------------------------------- + var txtInp_birthpl = document.createElement('input'); + txtInp_birthpl.setAttribute('type', 'text'); + txtInp_birthpl.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_23'); + txtInp_birthpl.setAttribute('size', '25'); + txtInp_birthpl.setAttribute('value', birthpl); + txtInp_birthpl.style.color=txtcolor; + txtInp_birthpl.style.fontSize="10px"; + txtInp_birthpl.style.width="13em"; + // 24. Parentage - x-x = Father foreign born Y/N and Mother foreign born Y/N -- + var txtInp_parent = document.createElement('input'); + txtInp_parent.setAttribute('type', 'text'); + txtInp_parent.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_24'); + txtInp_parent.setAttribute('size', '1'); + txtInp_parent.setAttribute('maxlength', '3'); + txtInp_parent.setAttribute('value', ''); + txtInp_parent.style.color=txtcolor; + txtInp_parent.style.fontSize="10px"; + txtInp_parent.style.width="2em"; + // 25. Birth month Bmth_2) (if born in Census Year) ---------------------- + var txtInp_bmth2 = document.createElement('input'); + txtInp_bmth2.setAttribute('type', 'text'); + txtInp_bmth2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_25'); + txtInp_bmth2.setAttribute('size', '1'); + txtInp_bmth2.setAttribute('maxlength', '3'); + txtInp_bmth2.setAttribute('value', ''); + txtInp_bmth2.style.color=txtcolor; + txtInp_bmth2.style.fontSize="10px"; + txtInp_bmth2.style.width="2.4em"; + // 26. Married month if married in Census Year --------------------------- + var txtInp_mmth = document.createElement('input'); + txtInp_mmth.setAttribute('type', 'text'); + txtInp_mmth.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_26'); + txtInp_mmth.setAttribute('size', '1'); + txtInp_mmth.setAttribute('maxlength', '3'); + txtInp_mmth.setAttribute('value', ''); + txtInp_mmth.style.color=txtcolor; + txtInp_mmth.style.fontSize="10px"; + txtInp_mmth.style.width="2.4em"; + // 27. POB_1 Indi Birth Place_1 (Chapman format) ------------------------ + var txtInp_ibirthpl = document.createElement('input'); + txtInp_ibirthpl.setAttribute('type', 'text'); + txtInp_ibirthpl.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_27'); + txtInp_ibirthpl.setAttribute('size', '1'); + txtInp_ibirthpl.setAttribute('maxlength', '3'); + txtInp_ibirthpl.setAttribute('value', ibirthpl); + txtInp_ibirthpl.style.color=txtcolor; + txtInp_ibirthpl.style.fontSize="10px"; + txtInp_ibirthpl.style.width="2.4em"; + // 28. FPOB_1 Fathers Birth Place_1 (Chapman format) --------------------- + var txtInp_fbirthpl = document.createElement('input'); + txtInp_fbirthpl.setAttribute('type', 'text'); + txtInp_fbirthpl.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_28'); + txtInp_fbirthpl.setAttribute('size', '1'); + txtInp_fbirthpl.setAttribute('maxlength', '3'); + txtInp_fbirthpl.setAttribute('value', fbirthpl); + txtInp_fbirthpl.style.color=txtcolor; + txtInp_fbirthpl.style.fontSize="10px"; + txtInp_fbirthpl.style.width="2.4em"; + // 29. FPOB_1 Mothers Birth Place_1 (Chapman format )--------------------- + var txtInp_mbirthpl = document.createElement('input'); + txtInp_mbirthpl.setAttribute('type', 'text'); + txtInp_mbirthpl.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_29'); + txtInp_mbirthpl.setAttribute('size', '1'); + txtInp_mbirthpl.setAttribute('maxlength', '3'); + txtInp_mbirthpl.setAttribute('value', mbirthpl); + txtInp_mbirthpl.style.color=txtcolor; + txtInp_mbirthpl.style.fontSize="10px"; + txtInp_mbirthpl.style.width="2.4em"; + // 30. Years in USA ---------------------------------------------------- + var txtInp_yrsUS = document.createElement('input'); + txtInp_yrsUS.setAttribute('type', 'text'); + txtInp_yrsUS.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_30'); + txtInp_yrsUS.setAttribute('size', '1'); + txtInp_yrsUS.setAttribute('maxlength', '2'); + txtInp_yrsUS.setAttribute('value', ''); + txtInp_yrsUS.style.color=txtcolor; + txtInp_yrsUS.style.fontSize="10px"; + txtInp_yrsUS.style.width="1.4em"; + // 31. Year of Immigration YOI_1 ---------------------------------------- + var txtInp_yoi1 = document.createElement('input'); + txtInp_yoi1.setAttribute('type', 'text'); + txtInp_yoi1.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_31'); + txtInp_yoi1.setAttribute('size', '2'); + txtInp_yoi1.setAttribute('maxlength', '4'); + txtInp_yoi1.setAttribute('value', ''); + txtInp_yoi1.style.color=txtcolor; + txtInp_yoi1.style.fontSize="10px"; + // 32. Naturalized or Alien N-A_1 --------------------------------------- + var txtInp_na1 = document.createElement('input'); + txtInp_na1.setAttribute('type', 'text'); + txtInp_na1.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_32'); + txtInp_na1.setAttribute('size', '1'); + txtInp_na1.setAttribute('maxlength', '1'); + txtInp_na1.setAttribute('value', ''); + txtInp_na1.style.color=txtcolor; + txtInp_na1.style.fontSize="10px"; + txtInp_na1.style.width="1em"; + // 33. Year of naturalization YON --------------------------------------- + var txtInp_yon = document.createElement('input'); + txtInp_yon.setAttribute('type', 'text'); + txtInp_yon.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_33'); + txtInp_yon.setAttribute('size', '2'); + txtInp_yon.setAttribute('maxlength', '4'); + txtInp_yon.setAttribute('value', ''); + txtInp_yon.style.color=txtcolor; + txtInp_yon.style.fontSize="10px"; + // 34. English spoken, or if not, other Language spoken Eng/Lang -------- + var txtInp_englang = document.createElement('input'); + txtInp_englang.setAttribute('type', 'text'); + txtInp_englang.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_34'); + txtInp_englang.setAttribute('size', '8'); + txtInp_englang.setAttribute('maxlength', '10'); + txtInp_englang.setAttribute('value', ''); + txtInp_englang.style.color=txtcolor; + txtInp_englang.style.fontSize="10px"; + // 35. Occupation_2 ---------------------------------------------------- + var txtInp_occu2 = document.createElement('input'); + txtInp_occu2.setAttribute('type', 'text'); + txtInp_occu2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_35'); + txtInp_occu2.setAttribute('size', '22'); + txtInp_occu2.setAttribute('value', ''); + txtInp_occu2.style.color=txtcolor; + txtInp_occu2.style.fontSize="10px"; + txtInp_occu2.style.width="11em"; + // 36. Health ---------------------------------------------------------- + var txtInp_health = document.createElement('input'); + txtInp_health.setAttribute('type', 'text'); + txtInp_health.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_36'); + txtInp_health.setAttribute('size', '3'); + txtInp_health.setAttribute('maxlength', '5'); + txtInp_health.setAttribute('value', ''); + txtInp_health.style.color=txtcolor; + txtInp_health.style.fontSize="10px"; + // 37. Industry_1 ------------------------------------------------------ + var txtInp_ind1 = document.createElement('input'); + txtInp_ind1.setAttribute('type', 'text'); + txtInp_ind1.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_37'); + txtInp_ind1.setAttribute('size', '22'); + txtInp_ind1.setAttribute('value', ''); + txtInp_ind1.style.color=txtcolor; + txtInp_ind1.style.fontSize="10px"; + // 38. Employ_1 -------------------------------------------------------- + var txtInp_emp1 = document.createElement('input'); + txtInp_emp1.setAttribute('type', 'text'); + txtInp_emp1.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_38'); + txtInp_emp1.setAttribute('size', '12'); + txtInp_emp1.setAttribute('value', ''); + txtInp_emp1.style.color=txtcolor; + txtInp_emp1.style.fontSize="10px"; + txtInp_emp1.style.width="7em"; + // 39. Employer EmR ---------------------------------------------------- + var txtInp_emR = document.createElement('input'); + txtInp_emR.setAttribute('type', 'text'); + txtInp_emR.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_39'); + txtInp_emR.setAttribute('size', '1'); + txtInp_emR.setAttribute('maxlength', '1'); + txtInp_emR.setAttribute('value', ''); + txtInp_emR.style.color=txtcolor; + txtInp_emR.style.fontSize="10px"; + txtInp_emR.style.width="1em"; + // 40. Employed EmD ---------------------------------------------------- + var txtInp_emD = document.createElement('input'); + txtInp_emD.setAttribute('type', 'text'); + txtInp_emD.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_40'); + txtInp_emD.setAttribute('size', '1'); + txtInp_emD.setAttribute('maxlength', '1'); + txtInp_emD.setAttribute('value', ''); + txtInp_emD.style.color=txtcolor; + txtInp_emD.style.fontSize="10px"; + txtInp_emD.style.width="1em"; + // 41. Months employed ------------------------------------------------- + var txtInp_mnsE = document.createElement('input'); + txtInp_mnsE.setAttribute('type', 'text'); + txtInp_mnsE.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_41'); + txtInp_mnsE.setAttribute('size', '1'); + txtInp_mnsE.setAttribute('maxlength', '2'); + txtInp_mnsE.setAttribute('value', ''); + txtInp_mnsE.style.color=txtcolor; + txtInp_mnsE.style.fontSize="10px"; + txtInp_mnsE.style.width="1.4em"; + // 42. Working at Home WH ---------------------------------------------- + var txtInp_emH = document.createElement('input'); + txtInp_emH.setAttribute('type', 'text'); + txtInp_emH.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_42'); + txtInp_emH.setAttribute('size', '1'); + txtInp_emH.setAttribute('maxlength', '1'); + txtInp_emH.setAttribute('value', ''); + txtInp_emH.style.color=txtcolor; + txtInp_emH.style.fontSize="10px"; + txtInp_emH.style.width="1em"; + // 43. Not Employed EmN ------------------------------------------------ + var txtInp_emN = document.createElement('input'); + txtInp_emN.setAttribute('type', 'text'); + txtInp_emN.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_43'); + txtInp_emN.setAttribute('size', '1'); + txtInp_emN.setAttribute('maxlength', '1'); + txtInp_emN.setAttribute('value', ''); + txtInp_emN.style.color=txtcolor; + txtInp_emN.style.fontSize="10px"; + txtInp_emN.style.width="1em"; + // 44. Weeks unemployed ------------------------------------------------ + var txtInp_wksU = document.createElement('input'); + txtInp_wksU.setAttribute('type', 'text'); + txtInp_wksU.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_44'); + txtInp_wksU.setAttribute('size', '1'); + txtInp_wksU.setAttribute('maxlength', '2'); + txtInp_wksU.setAttribute('value', ''); + txtInp_wksU.style.color=txtcolor; + txtInp_wksU.style.fontSize="10px"; + txtInp_wksU.style.width="1.4em"; + // 45. Months unemployed ----------------------------------------------- + var txtInp_mnsU = document.createElement('input'); + txtInp_mnsU.setAttribute('type', 'text'); + txtInp_mnsU.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_45'); + txtInp_mnsU.setAttribute('size', '1'); + txtInp_mnsU.setAttribute('maxlength', '2'); + txtInp_mnsU.setAttribute('value', ''); + txtInp_mnsU.style.color=txtcolor; + txtInp_mnsU.style.fontSize="10px"; + txtInp_mnsU.style.width="1.4em"; + // 46. Education - xxx = School/Able to Read/Able to Write ------------- + var txtInp_educ = document.createElement('input'); + txtInp_educ.setAttribute('type', 'text'); + txtInp_educ.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_46'); + txtInp_educ.setAttribute('size', '1'); + txtInp_educ.setAttribute('maxlength', '3'); + txtInp_educ.setAttribute('value', ''); + txtInp_educ.style.color=txtcolor; + txtInp_educ.style.fontSize="10px"; + txtInp_educ.style.width="1.8em"; + // 47. Education pre 1890 Census - xxx = School/Cannot Read/Cannot Write ---- + var txtInp_educpre1890 = document.createElement('input'); + txtInp_educpre1890.setAttribute('type', 'text'); + txtInp_educpre1890.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_47'); + txtInp_educpre1890.setAttribute('size', '1'); + txtInp_educpre1890.setAttribute('maxlength', '3'); + txtInp_educpre1890.setAttribute('value', ''); + txtInp_educpre1890.style.color=txtcolor; + txtInp_educpre1890.style.fontSize="10px"; + txtInp_educpre1890.width="1.8em"; + // 48. English Spoken?_1 eng_1 ----------------------------------------- + var txtInp_eng1 = document.createElement('input'); + txtInp_eng1.setAttribute('type', 'text'); + txtInp_eng1.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_48'); + txtInp_eng1.setAttribute('size', '1'); + txtInp_eng1.setAttribute('maxlength', '1'); + txtInp_eng1.setAttribute('value', ''); + txtInp_eng1.style.color=txtcolor; + txtInp_eng1.style.fontSize="10px"; + txtInp_eng1.style.width="1em"; + // 49. Home Ownership - x-x-x-xxxx = O/R-F/M-F/H-#### = Owned/Rented-Free/Mortgaged-Farm/House-Farm Schedule number ---- + var txtInp_home = document.createElement('input'); + txtInp_home.setAttribute('type', 'text'); + txtInp_home.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_49'); + txtInp_home.setAttribute('size', '7'); + txtInp_home.setAttribute('maxlength', '12'); + txtInp_home.setAttribute('value', ''); + txtInp_home.style.color=txtcolor; + txtInp_home.style.fontSize="10px"; + // 50. Birth Place_2 (full format) ------------------------------------- + var txtInp_birthpl2 = document.createElement('input'); + txtInp_birthpl2.setAttribute('type', 'text'); + txtInp_birthpl2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_50'); + txtInp_birthpl2.setAttribute('size', '25'); + txtInp_birthpl2.setAttribute('value', birthpl); + txtInp_birthpl2.style.color=txtcolor; + txtInp_birthpl2.style.fontSize="10px"; + txtInp_birthpl2.style.width="13em"; + // 51. POB_2 Indi Birth Place_2 ---------------------------------------- + var txtInp_ibirthpl2 = document.createElement('input'); + txtInp_ibirthpl2.setAttribute('type', 'text'); + txtInp_ibirthpl2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_51'); + txtInp_ibirthpl2.setAttribute('size', '1'); + txtInp_ibirthpl2.setAttribute('maxlength', '3'); + txtInp_ibirthpl2.setAttribute('value', ibirthpl); + txtInp_ibirthpl2.style.color=txtcolor; + txtInp_ibirthpl2.style.fontSize="10px"; + txtInp_ibirthpl2.style.width="2.4em"; + // 52. Born in Same Country BIC ---------------------------------------- + var txtInp_bic = document.createElement('input'); + txtInp_bic.setAttribute('type', 'text'); + txtInp_bic.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_52'); + txtInp_bic.setAttribute('size', '1'); + txtInp_bic.setAttribute('maxlength', '1'); + txtInp_bic.setAttribute('value', ''); + txtInp_bic.style.color=txtcolor; + txtInp_bic.style.fontSize="10px"; + txtInp_bic.style.width="1em"; + // 53. Born outside England BOE ---------------------------------------- + var txtInp_boe = document.createElement('input'); + txtInp_boe.setAttribute('type', 'text'); + txtInp_boe.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_53'); + txtInp_boe.setAttribute('size', '1'); + txtInp_boe.setAttribute('maxlength', '3'); + txtInp_boe.setAttribute('value', ''); + txtInp_boe.style.color=txtcolor; + txtInp_boe.style.fontSize="10px"; + txtInp_boe.style.width="2.4em"; + // 54. FPOB_2 Birth Place_2 -------------------------------------------- + var txtInp_fbirthpl2 = document.createElement('input'); + txtInp_fbirthpl2.setAttribute('type', 'text'); + txtInp_fbirthpl2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_54'); + txtInp_fbirthpl2.setAttribute('size', '1'); + txtInp_fbirthpl2.setAttribute('maxlength', '3'); + txtInp_fbirthpl2.setAttribute('value', fbirthpl); + txtInp_fbirthpl2.style.color=txtcolor; + txtInp_fbirthpl2.style.fontSize="10px"; + txtInp_fbirthpl2.style.width="2.4em"; + // 55. MPOB_2 Birth Place_2 -------------------------------------------- + var txtInp_mbirthpl2 = document.createElement('input'); + txtInp_mbirthpl2.setAttribute('type', 'text'); + txtInp_mbirthpl2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_55'); + txtInp_mbirthpl2.setAttribute('size', '1'); + txtInp_mbirthpl2.setAttribute('maxlength', '3'); + txtInp_mbirthpl2.setAttribute('value', mbirthpl); + txtInp_mbirthpl2.style.color=txtcolor; + txtInp_mbirthpl2.style.fontSize="10px"; + txtInp_mbirthpl2.style.width="2.4em"; + // 56. Native Language ------------------------------------------------- + var txtInp_lang = document.createElement('input'); + txtInp_lang.setAttribute('type', 'text'); + txtInp_lang.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_56'); + txtInp_lang.setAttribute('size', '8'); + txtInp_lang.setAttribute('maxlength', '10'); + txtInp_lang.setAttribute('value', ''); + txtInp_lang.style.color=txtcolor; + txtInp_lang.style.fontSize="10px"; + // 57. Year of Immigration YOI_2 --------------------------------------- + var txtInp_yoi2 = document.createElement('input'); + txtInp_yoi2.setAttribute('type', 'text'); + txtInp_yoi2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_57'); + txtInp_yoi2.setAttribute('size', '2'); + txtInp_yoi2.setAttribute('maxlength', '4'); + txtInp_yoi2.setAttribute('value', ''); + txtInp_yoi2.style.color=txtcolor; + txtInp_yoi2.style.fontSize="10px"; + // 58. Naturalized or Alien N-A_2 -------------------------------------- + var txtInp_na2 = document.createElement('input'); + txtInp_na2.setAttribute('type', 'text'); + txtInp_na2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_58'); + txtInp_na2.setAttribute('size', '1'); + txtInp_na2.setAttribute('maxlength', '1'); + txtInp_na2.setAttribute('value', ''); + txtInp_na2.style.color=txtcolor; + txtInp_na2.style.fontSize="10px"; + txtInp_na2.style.width="1em"; + // 59. English Spoken?_2 eng_2 ----------------------------------------- + var txtInp_eng2 = document.createElement('input'); + txtInp_eng2.setAttribute('type', 'text'); + txtInp_eng2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_59'); + txtInp_eng2.setAttribute('size', '1'); + txtInp_eng2.setAttribute('maxlength', '1'); + txtInp_eng2.setAttribute('value', ''); + txtInp_eng2.style.color=txtcolor; + txtInp_eng2.style.fontSize="10px"; + txtInp_eng2.style.width="1em"; + // 60. Occupation_3 ---------------------------------------------------- + var txtInp_occu3 = document.createElement('input'); + txtInp_occu3.setAttribute('type', 'text'); + txtInp_occu3.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_60'); + txtInp_occu3.setAttribute('size', '22'); + txtInp_occu3.setAttribute('value', ''); + txtInp_occu3.style.color=txtcolor; + txtInp_occu3.style.fontSize="10px"; + txtInp_occu3.style.width="11em"; + // 61. Industry_2 ----------------------------------------------------- + var txtInp_ind2 = document.createElement('input'); + txtInp_ind2.setAttribute('type', 'text'); + txtInp_ind2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_61'); + txtInp_ind2.setAttribute('size', '22'); + txtInp_ind2.setAttribute('value', ''); + txtInp_ind2.style.color=txtcolor; + txtInp_ind2.style.fontSize="10px"; + // 62. Employ_2 ------------------------------------------------------- + var txtInp_emp2 = document.createElement('input'); + txtInp_emp2.setAttribute('type', 'text'); + txtInp_emp2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_62'); + txtInp_emp2.setAttribute('size', '12'); + txtInp_emp2.setAttribute('value', ''); + txtInp_emp2.style.color=txtcolor; + txtInp_emp2.style.fontSize="10px"; + txtInp_emp2.style.width="7em"; + /* + // 63. Nationality (UK 1911) ------------------------------------------ + var txtInp_emp2 = document.createElement('input'); + txtInp_emp2.setAttribute('type', 'text'); + txtInp_emp2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_63'); + txtInp_emp2.setAttribute('size', '22'); + txtInp_emp2.setAttribute('value', ''); + txtInp_emp2.style.color=txtcolor; + txtInp_emp2.style.fontSize="10px"; + */ + // 63. Infirmaties ---------------------------------------------------- + var txtInp_infirm = document.createElement('input'); + txtInp_infirm.setAttribute('type', 'text'); + txtInp_infirm.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_63'); + txtInp_infirm.setAttribute('size', '3'); + txtInp_infirm.setAttribute('maxlength', '4'); + txtInp_infirm.setAttribute('value', ''); + txtInp_infirm.style.color=txtcolor; + txtInp_infirm.style.fontSize="10px"; + txtInp_infirm.style.width="2.3em"; + // 64. Health / Situation = Disease-Infirmaties-Convict,Pauper etc ---- + var txtInp_situ = document.createElement('input'); + txtInp_situ.setAttribute('type', 'text'); + txtInp_situ.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_64'); + txtInp_situ.setAttribute('size', '12'); + txtInp_situ.setAttribute('value', ''); + txtInp_situ.style.color=txtcolor; + txtInp_situ.style.fontSize="10px"; + // 65. Veteran ? ------------------------------------------------------ + var txtInp_vet = document.createElement('input'); + txtInp_vet.setAttribute('type', 'text'); + txtInp_vet.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_65'); + txtInp_vet.setAttribute('size', '1'); + txtInp_vet.setAttribute('maxlength', '1'); + txtInp_vet.setAttribute('value', ''); + txtInp_vet.style.color=txtcolor; + txtInp_vet.style.fontSize="10px"; + txtInp_vet.style.width="1em"; + // 66. War or Expedition ---------------------------------------------- + var txtInp_war = document.createElement('input'); + txtInp_war.setAttribute('type', 'text'); + txtInp_war.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_66'); + txtInp_war.setAttribute('size', '8'); + txtInp_war.setAttribute('value', ''); + txtInp_war.style.color=txtcolor; + txtInp_war.style.fontSize="10px"; + // 67. Infirmaties (Census 1910) - x-x = Blind (both eyes) Y/N - Deaf and dumb Y/N ---- + var txtInp_infirm1910 = document.createElement('input'); + txtInp_infirm1910.setAttribute('type', 'text'); + txtInp_infirm1910.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_67'); + txtInp_infirm1910.setAttribute('size', '1'); + txtInp_infirm1910.setAttribute('maxlength', '2'); + txtInp_infirm1910.setAttribute('value', ''); + txtInp_infirm1910.style.color=txtcolor; + txtInp_infirm1910.style.fontSize="10px"; + txtInp_infirm1910.style.width="1.4em"; + + // Hidden ============================================================= + // 68. DOB ------------------------------------------------------------ + var txtInp_DOB = document.createElement('input'); + txtInp_DOB.setAttribute('type', 'text'); + txtInp_DOB.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_68'); + txtInp_DOB.setAttribute('size', '9'); + txtInp_DOB.setAttribute('maxlength', '20'); + txtInp_DOB.setAttribute('value', dob); + txtInp_DOB.style.color=txtcolor; + txtInp_DOB.style.fontSize="10px"; + txtInp_DOB.style.width="5.6em"; + txtInp_DOB.type = "hidden"; + // 69. DOM ------------------------------------------------------------ + var txtInp_DOM = document.createElement('input'); + txtInp_DOM.setAttribute('type', 'text'); + txtInp_DOM.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_69'); + txtInp_DOM.setAttribute('size', '8'); + txtInp_DOM.setAttribute('maxlength', '20'); + txtInp_DOM.setAttribute('value', dom); + txtInp_DOM.style.color=txtcolor; + txtInp_DOM.style.fontSize="10px"; + txtInp_DOM.style.width="1.4em"; + txtInp_DOM.type = "hidden"; + // 70. Full Name ------------------------------------------------------ + var txtInp_FullName = document.createElement('input'); + txtInp_FullName.setAttribute('type', 'text'); + txtInp_FullName.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_70'); + txtInp_FullName.setAttribute('size', '8'); + txtInp_FullName.setAttribute('maxlength', '40'); + txtInp_FullName.setAttribute('value', nam); + txtInp_FullName.style.color=txtcolor; + txtInp_FullName.style.fontSize="10px"; + txtInp_FullName.style.width="5.4em"; + txtInp_FullName.type = "hidden"; + // 71. Married Name --------------------------------------------------- + var txtInp_MarrName = document.createElement('input'); + txtInp_MarrName.setAttribute('type', 'text'); + txtInp_MarrName.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_71'); + txtInp_MarrName.setAttribute('size', '8'); + txtInp_MarrName.setAttribute('maxlength', '40'); + txtInp_MarrName.setAttribute('value', mnam); + txtInp_MarrName.style.color=txtcolor; + txtInp_MarrName.style.fontSize="10px"; + txtInp_MarrName.style.width="1.4em"; + txtInp_MarrName.type = "hidden"; + // 72. DOD ------------------------------------------------------------ + var txtInp_DOD = document.createElement('input'); + txtInp_DOD.setAttribute('type', 'text'); + txtInp_DOD.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_72'); + txtInp_DOD.setAttribute('size', '8'); + txtInp_DOD.setAttribute('maxlength', '20'); + txtInp_DOD.setAttribute('value', dod); + txtInp_DOD.style.color=txtcolor; + txtInp_DOD.style.fontSize="10px"; + txtInp_DOD.style.width="1.4em"; + txtInp_DOD.type = "hidden"; + // 73. DOD ------------------------------------------------------------ + var txtInp_ChBLD = document.createElement('input'); + txtInp_ChBLD.setAttribute('type', 'text'); + txtInp_ChBLD.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_73'); + txtInp_ChBLD.setAttribute('size', '8'); + txtInp_ChBLD.setAttribute('maxlength', '20'); + txtInp_ChBLD.setAttribute('value', chilBLD); + txtInp_ChBLD.style.color=txtcolor; + txtInp_ChBLD.style.fontSize="10px"; + txtInp_ChBLD.style.width="1.4em"; + txtInp_ChBLD.type = "hidden"; + + // Extra Cells for Navigation ========================================= + // 74. Extra 1. Delete Row Button ----------------------------------------- + //var btnEl = document.createElement('input'); + // btnEl.setAttribute('type', 'button'); + // btnEl.setAttribute('value', 'x'); + // btnEl.onclick = function () {deleteCurrentRow(this)}; + var btnEl = document.createElement('button'); + var btnEltext = document.createTextNode('X'); + btnEl.style.color='red'; + btnEl.appendChild(btnEltext); + btnEl.onclick = function () {deleteCurrentRow(this)}; + // 75. Extra 2. Insert row Radio button ----------------------------------- + var raEl; + try { + raEl = document.createElement('<input type="radio" name="' + RADIO_NAME + '" value="' + iteration + '">'); + var failIfNotIE = raEl.name.length; + } catch(ex) { + raEl = document.createElement('input'); + raEl.setAttribute('type', 'radio'); + raEl.setAttribute('name', RADIO_NAME ); + raEl.setAttribute('value', iteration); + } + // 76. Extra 3. Item Number ----------------------------------------------- + var txt_itemNo2 = document.createTextNode(iteration); + } + + // Cells Not visible but used for row re-order process ================= + var cbEl = document.createElement('input'); + cbEl.type = "hidden"; + + + // **E** Append appropriate Cell elements to each cell ================ + cell_[0].appendChild(txt_itemNo); // Item Number + cell_[1].appendChild(txtInp_pid); // Indi ID + cell_[2].appendChild(txtInp_nam); // Name + cell_[3].appendChild(txtInp_label); // Relationship_1 + cell_[4].appendChild(txtInp_cond); // Condition_1 + cell_[5].appendChild(txtInp_tenure); // Tenure + cell_[6].appendChild(txtInp_assets); // Assets_1 + cell_[7].appendChild(txtInp_age); // Age_1 + cell_[8].appendChild(txtInp_race); // Race_1 + cell_[9].appendChild(txtInp_gend); // Sex + + cell_[10].appendChild(txtInp_race2); // Race_2 + cell_[11].appendChild(txtInp_yob); // DOB/YOB + cell_[12].appendChild(txtInp_age2); // Age_2 + cell_[13].appendChild(txtInp_bmth); // Birth Month + cell_[14].appendChild(txtInp_label2); // Relationship_2 + cell_[15].appendChild(txtInp_cond2); // Condition_2 + cell_[16].appendChild(txtInp_yrsm); // Years Married + cell_[17].appendChild(txtInp_chilB); // Children Born Alive + cell_[18].appendChild(txtInp_chilL); // Children Still Living + cell_[19].appendChild(txtInp_chilD); // Children who have Died + + cell_[20].appendChild(txtInp_ageM); // Age st first marriage + cell_[21].appendChild(txtInp_occu); // Occupation_1 + cell_[22].appendChild(txtInp_assets2); // Assets_2 + cell_[23].appendChild(txtInp_birthpl); // Place of Birth_1 + cell_[24].appendChild(txtInp_parent); // Parentage + cell_[25].appendChild(txtInp_bmth2); // Month if born in Census Year - bmth2 + cell_[26].appendChild(txtInp_mmth); // Month if married in Census Year + cell_[27].appendChild(txtInp_ibirthpl); // Indis POB_1 + cell_[28].appendChild(txtInp_fbirthpl); // Father FPOB_1 + cell_[29].appendChild(txtInp_mbirthpl); // Mother MPOB_1 + + cell_[30].appendChild(txtInp_yrsUS); // Years in USA + cell_[31].appendChild(txtInp_yoi1); // Year of Immigration YOI_1 + cell_[32].appendChild(txtInp_na1); // Naturalized or Alien N-A_1 + cell_[33].appendChild(txtInp_yon); // Year of Naturalization YON + cell_[34].appendChild(txtInp_englang); // English spoken, if not, Other Language spoken Eng/Lang + cell_[35].appendChild(txtInp_occu2); // Occupation_2 + cell_[36].appendChild(txtInp_health); // Health - 5 parameters x--xx etc + cell_[37].appendChild(txtInp_ind1); // Industry ind_1 + cell_[38].appendChild(txtInp_emp1); // Employ_1 + cell_[39].appendChild(txtInp_emR); // Employer EmR + + cell_[40].appendChild(txtInp_emD); // Employed EmD + cell_[41].appendChild(txtInp_mnsE); // Months employed during Census Year + cell_[42].appendChild(txtInp_emH); // Working At Home WH + cell_[43].appendChild(txtInp_emN); // Not Employed EmN + cell_[44].appendChild(txtInp_wksU); // Weeks unemployed during Census Year + cell_[45].appendChild(txtInp_mnsU); // Months unemployed during Census Year + cell_[46].appendChild(txtInp_educ); // Education 3 parameters Sch-Read-Write -xx + cell_[47].appendChild(txtInp_educpre1890); // Education (pre 1890 Census) - 3 parameters = Sch, Cannot Read, Cannot Write -xx + cell_[48].appendChild(txtInp_eng1); // English spoken Y/N eng_1 + cell_[49].appendChild(txtInp_home); // Home Ownership x-x-x-xxxx = Owned/Rented - Free/Morgaged - Farm/House - Farm Sched # + + cell_[50].appendChild(txtInp_birthpl2); // Birth Place_2 + cell_[51].appendChild(txtInp_ibirthpl2); // Indis POB_2 + cell_[52].appendChild(txtInp_bic); // Born in County (UK) + cell_[53].appendChild(txtInp_boe); // Born outside England (UK) + cell_[54].appendChild(txtInp_fbirthpl2); // Fathers FPOB_2 + cell_[55].appendChild(txtInp_mbirthpl2); // Mothers MPOB_2 + cell_[56].appendChild(txtInp_lang); // Mother Tongue lang + cell_[57].appendChild(txtInp_yoi2); // Year of Immigration YOI_2 + cell_[58].appendChild(txtInp_na2); // Naturalized or Alien N-A_2 + cell_[59].appendChild(txtInp_eng2); // English spoken Y/N eng_2 + + cell_[60].appendChild(txtInp_occu3); // Occupation_3 + cell_[61].appendChild(txtInp_ind2); // Industry ind_2 + cell_[62].appendChild(txtInp_emp2); // Employ_2 + //cell_[63].appendChild(txtInp_N_ality); // Nationality (UK 1911) - British, OR Naturalised, OR(French, German, Russian etc) + cell_[63].appendChild(txtInp_infirm); // Infirmaties - up to 5 parameters x--xx etc + cell_[64].appendChild(txtInp_situ); // Health Situation 1890 - Disease, Infimaties, Convict, Pauper etc + cell_[65].appendChild(txtInp_vet); // Veteran ? + cell_[66].appendChild(txtInp_war); // War or expedition + cell_[67].appendChild(txtInp_infirm1910); // Infirmaties - xx = Blind (both eyes) Y/N/-, Deaf and Dumb Y/N/- + + // Hidden Cells ======================================================= + if (iteration > 0) { + cell_[68].appendChild(txtInp_DOB); // Date of Birth + cell_[69].appendChild(txtInp_DOM); // Date of Marriage + cell_[70].appendChild(txtInp_FullName); // Full Name + cell_[71].appendChild(txtInp_MarrName); // Married Name + cell_[72].appendChild(txtInp_DOD); // Date of Death + cell_[73].appendChild(txtInp_ChBLD); // Text Array - Children Born/Living/Died + } + + // Extra Cells ======================================================== + if (iteration == 0) { + cell_tdel.appendChild(txtInp_tdel); // Text Del + cell_tra.appendChild(txtInp_tra); // Text Ins + } else { + cell_del.appendChild(btnEl); // Onclick = Delete Row + cell_ra.appendChild(raEl); // Radio button used for inserting a row, rather than adding at end of table) + } + + // cell_index2.appendChild(txt_itemNo2); // Text Item Number + + // **F** Pass in the elements to be referenced later ================== + // Store the myRow object in each row + row.myRow = new myRowObject( txt_itemNo, txtInp_pid, txtInp_nam, txtInp_label, txtInp_cond, txtInp_tenure, txtInp_assets, txtInp_age, txtInp_race, txtInp_gend, + txtInp_race2, txtInp_yob, txtInp_age2, txtInp_bmth, txtInp_label2, txtInp_cond2, txtInp_yrsm, txtInp_chilB, txtInp_chilL, txtInp_chilD, + txtInp_ageM, txtInp_occu, txtInp_assets2, txtInp_birthpl, txtInp_parent, txtInp_bmth2, txtInp_mmth, txtInp_ibirthpl, txtInp_fbirthpl, txtInp_mbirthpl, + txtInp_yrsUS, txtInp_yoi1, txtInp_na1, txtInp_yon, txtInp_englang, txtInp_occu2, txtInp_health, txtInp_ind1, txtInp_emp1, txtInp_emR, + txtInp_emD, txtInp_mnsE, txtInp_emH, txtInp_emN, txtInp_wksU, txtInp_mnsU, txtInp_educ, txtInp_educpre1890, txtInp_eng1, txtInp_home, + txtInp_birthpl2, txtInp_ibirthpl2, txtInp_bic, txtInp_boe, txtInp_fbirthpl2, txtInp_mbirthpl2, txtInp_lang, txtInp_yoi2, txtInp_na2, txtInp_eng2, + txtInp_occu3, txtInp_ind2, txtInp_emp2, txtInp_infirm, txtInp_situ, txtInp_vet, txtInp_war, txtInp_infirm1910, txtInp_DOB, txtInp_DOM, + txtInp_FullName, txtInp_MarrName, txtInp_DOD, txtInp_ChBLD, + cbEl, raEl, txt_itemNo2 + ); + } +} + +// deleteCurrentRow - function to delete a row +function deleteCurrentRow(obj) { + if (hasLoaded) { + var delRow = obj.parentNode.parentNode; + var tbl = delRow.parentNode.parentNode; + var rIndex = delRow.sectionRowIndex; + var rowArray = new Array(delRow); + deleteRows(rowArray); + reorderRows(tbl, rIndex); + preview(); + } +} + +function deleteHeaderRow(obj) { + if (hasLoaded) { + var delRow = obj.parentNode.parentNode; + var tbl = delRow.parentNode.parentNode; + var rIndex = delRow.sectionRowIndex; + var rowArray = new Array(delRow); + deleteRows(rowArray); + } +} + +function deleteRows(rowObjArray) { + if (hasLoaded) { + for (var i=0; i<rowObjArray.length; i++) { // i set to 1 to avoid table header row of number 0 + var rIndex = rowObjArray[i].sectionRowIndex; + rowObjArray[i].parentNode.deleteRow(rIndex); + } + } +} + +// reorderRows - used to reorder rows after an insert or delete +function reorderRows(tbl, startingIndex) { + if (hasLoaded) { + if (tbl.tBodies[0].rows[startingIndex]) { + var count = startingIndex + ROW_BASE; + for (var i=startingIndex; i<tbl.tBodies[0].rows.length; i++) { + // CONFIG: next line is affected by myRowObject settings + tbl.tBodies[0].rows[i].myRow.zero.data = count; // text - (left column item number) + + // ------------------------------------------------------------ + tbl.tBodies[0].rows[i].myRow.one.id = INPUT_NAME_PREFIX + count + '_1'; // input text + tbl.tBodies[0].rows[i].myRow.two.id = INPUT_NAME_PREFIX + count + '_2'; // input text + tbl.tBodies[0].rows[i].myRow.three.id = INPUT_NAME_PREFIX + count + '_3'; // input text + tbl.tBodies[0].rows[i].myRow.four.id = INPUT_NAME_PREFIX + count + '_4'; // input text + tbl.tBodies[0].rows[i].myRow.five.id = INPUT_NAME_PREFIX + count + '_5'; // input text + tbl.tBodies[0].rows[i].myRow.six.id = INPUT_NAME_PREFIX + count + '_6'; // input text + tbl.tBodies[0].rows[i].myRow.seven.id = INPUT_NAME_PREFIX + count + '_7'; // input text + tbl.tBodies[0].rows[i].myRow.eight.id = INPUT_NAME_PREFIX + count + '_8'; // input text + tbl.tBodies[0].rows[i].myRow.nine.id = INPUT_NAME_PREFIX + count + '_9'; // input text + + tbl.tBodies[0].rows[i].myRow.ten.id = INPUT_NAME_PREFIX + count + '_10'; // input text + tbl.tBodies[0].rows[i].myRow.eleven.id = INPUT_NAME_PREFIX + count + '_11'; // input text + tbl.tBodies[0].rows[i].myRow.twelve.id = INPUT_NAME_PREFIX + count + '_12'; // input text + tbl.tBodies[0].rows[i].myRow.thirteen.id = INPUT_NAME_PREFIX + count + '_13'; // input text + tbl.tBodies[0].rows[i].myRow.fourteen.id = INPUT_NAME_PREFIX + count + '_14'; // input text + tbl.tBodies[0].rows[i].myRow.fifteen.id = INPUT_NAME_PREFIX + count + '_15'; // input text + tbl.tBodies[0].rows[i].myRow.sixteen.id = INPUT_NAME_PREFIX + count + '_16'; // input text + tbl.tBodies[0].rows[i].myRow.seventeen.id = INPUT_NAME_PREFIX + count + '_17'; // input text + tbl.tBodies[0].rows[i].myRow.eighteen.id = INPUT_NAME_PREFIX + count + '_18'; // input text + tbl.tBodies[0].rows[i].myRow.nineteen.id = INPUT_NAME_PREFIX + count + '_19'; // input text + + tbl.tBodies[0].rows[i].myRow.twenty.id = INPUT_NAME_PREFIX + count + '_20'; // input text + tbl.tBodies[0].rows[i].myRow.twentyone.id = INPUT_NAME_PREFIX + count + '_21'; // input text + tbl.tBodies[0].rows[i].myRow.twentytwo.id = INPUT_NAME_PREFIX + count + '_22'; // input text + tbl.tBodies[0].rows[i].myRow.twentythree.id = INPUT_NAME_PREFIX + count + '_23'; // input text + tbl.tBodies[0].rows[i].myRow.twentyfour.id = INPUT_NAME_PREFIX + count + '_24'; // input text + tbl.tBodies[0].rows[i].myRow.twentyfive.id = INPUT_NAME_PREFIX + count + '_25'; // input text + tbl.tBodies[0].rows[i].myRow.twentysix.id = INPUT_NAME_PREFIX + count + '_26'; // input text + tbl.tBodies[0].rows[i].myRow.twentyseven.id = INPUT_NAME_PREFIX + count + '_27'; // input text + tbl.tBodies[0].rows[i].myRow.twentyeight.id = INPUT_NAME_PREFIX + count + '_28'; // input text + tbl.tBodies[0].rows[i].myRow.twentynine.id = INPUT_NAME_PREFIX + count + '_29'; // input text + + tbl.tBodies[0].rows[i].myRow.thirty.id = INPUT_NAME_PREFIX + count + '_30'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyone.id = INPUT_NAME_PREFIX + count + '_31'; // input text + tbl.tBodies[0].rows[i].myRow.thirtytwo.id = INPUT_NAME_PREFIX + count + '_32'; // input text + tbl.tBodies[0].rows[i].myRow.thirtythree.id = INPUT_NAME_PREFIX + count + '_33'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyfour.id = INPUT_NAME_PREFIX + count + '_34'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyfive.id = INPUT_NAME_PREFIX + count + '_35'; // input text + tbl.tBodies[0].rows[i].myRow.thirtysix.id = INPUT_NAME_PREFIX + count + '_36'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyseven.id = INPUT_NAME_PREFIX + count + '_37'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyeight.id = INPUT_NAME_PREFIX + count + '_38'; // input text + tbl.tBodies[0].rows[i].myRow.thirtynine.id = INPUT_NAME_PREFIX + count + '_39'; // input text + + tbl.tBodies[0].rows[i].myRow.forty.id = INPUT_NAME_PREFIX + count + '_40'; // input text + tbl.tBodies[0].rows[i].myRow.fortyone.id = INPUT_NAME_PREFIX + count + '_41'; // input text + tbl.tBodies[0].rows[i].myRow.fortytwo.id = INPUT_NAME_PREFIX + count + '_42'; // input text + tbl.tBodies[0].rows[i].myRow.fortythree.id = INPUT_NAME_PREFIX + count + '_43'; // input text + tbl.tBodies[0].rows[i].myRow.fortyfour.id = INPUT_NAME_PREFIX + count + '_44'; // input text + tbl.tBodies[0].rows[i].myRow.fortyfive.id = INPUT_NAME_PREFIX + count + '_45'; // input text + tbl.tBodies[0].rows[i].myRow.fortysix.id = INPUT_NAME_PREFIX + count + '_46'; // input text + tbl.tBodies[0].rows[i].myRow.fortyseven.id = INPUT_NAME_PREFIX + count + '_47'; // input text + tbl.tBodies[0].rows[i].myRow.fortyeight.id = INPUT_NAME_PREFIX + count + '_48'; // input text + tbl.tBodies[0].rows[i].myRow.fortynine.id = INPUT_NAME_PREFIX + count + '_49'; // input text + + tbl.tBodies[0].rows[i].myRow.fifty.id = INPUT_NAME_PREFIX + count + '_50'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyone.id = INPUT_NAME_PREFIX + count + '_51'; // input text + tbl.tBodies[0].rows[i].myRow.fiftytwo.id = INPUT_NAME_PREFIX + count + '_52'; // input text + tbl.tBodies[0].rows[i].myRow.fiftythree.id = INPUT_NAME_PREFIX + count + '_53'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyfour.id = INPUT_NAME_PREFIX + count + '_54'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyfive.id = INPUT_NAME_PREFIX + count + '_55'; // input text + tbl.tBodies[0].rows[i].myRow.fiftysix.id = INPUT_NAME_PREFIX + count + '_56'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyseven.id = INPUT_NAME_PREFIX + count + '_57'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyeight.id = INPUT_NAME_PREFIX + count + '_58'; // input text + tbl.tBodies[0].rows[i].myRow.fiftynine.id = INPUT_NAME_PREFIX + count + '_59'; // input text + + tbl.tBodies[0].rows[i].myRow.sixty.id = INPUT_NAME_PREFIX + count + '_60'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyone.id = INPUT_NAME_PREFIX + count + '_61'; // input text + tbl.tBodies[0].rows[i].myRow.sixtytwo.id = INPUT_NAME_PREFIX + count + '_62'; // input text + tbl.tBodies[0].rows[i].myRow.sixtythree.id = INPUT_NAME_PREFIX + count + '_63'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyfour.id = INPUT_NAME_PREFIX + count + '_64'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyfive.id = INPUT_NAME_PREFIX + count + '_65'; // input text + tbl.tBodies[0].rows[i].myRow.sixtysix.id = INPUT_NAME_PREFIX + count + '_66'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyseven.id = INPUT_NAME_PREFIX + count + '_67'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyeight.id = INPUT_NAME_PREFIX + count + '_68'; // input text + tbl.tBodies[0].rows[i].myRow.sixtynine.id = INPUT_NAME_PREFIX + count + '_69'; // input text + tbl.tBodies[0].rows[i].myRow.seventy.id = INPUT_NAME_PREFIX + count + '_70'; // input text + tbl.tBodies[0].rows[i].myRow.seventyone.id = INPUT_NAME_PREFIX + count + '_71'; // input text + tbl.tBodies[0].rows[i].myRow.seventytwo.id = INPUT_NAME_PREFIX + count + '_72'; // input text + tbl.tBodies[0].rows[i].myRow.seventythree.id = INPUT_NAME_PREFIX + count + '_73'; // input text + // ------------------------------------------------------------ + + // ------------------------------------------------------------ + tbl.tBodies[0].rows[i].myRow.one.name = INPUT_NAME_PREFIX + count + '_1'; // input text + tbl.tBodies[0].rows[i].myRow.two.name = INPUT_NAME_PREFIX + count + '_2'; // input text + tbl.tBodies[0].rows[i].myRow.three.name = INPUT_NAME_PREFIX + count + '_3'; // input text + tbl.tBodies[0].rows[i].myRow.four.name = INPUT_NAME_PREFIX + count + '_4'; // input text + tbl.tBodies[0].rows[i].myRow.five.name = INPUT_NAME_PREFIX + count + '_5'; // input text + tbl.tBodies[0].rows[i].myRow.six.name = INPUT_NAME_PREFIX + count + '_6'; // input text + tbl.tBodies[0].rows[i].myRow.seven.name = INPUT_NAME_PREFIX + count + '_7'; // input text + tbl.tBodies[0].rows[i].myRow.eight.name = INPUT_NAME_PREFIX + count + '_8'; // input text + tbl.tBodies[0].rows[i].myRow.nine.name = INPUT_NAME_PREFIX + count + '_9'; // input text + + tbl.tBodies[0].rows[i].myRow.ten.name = INPUT_NAME_PREFIX + count + '_10'; // input text + tbl.tBodies[0].rows[i].myRow.eleven.name = INPUT_NAME_PREFIX + count + '_11'; // input text + tbl.tBodies[0].rows[i].myRow.twelve.name = INPUT_NAME_PREFIX + count + '_12'; // input text + tbl.tBodies[0].rows[i].myRow.thirteen.name = INPUT_NAME_PREFIX + count + '_13'; // input text + tbl.tBodies[0].rows[i].myRow.fourteen.name = INPUT_NAME_PREFIX + count + '_14'; // input text + tbl.tBodies[0].rows[i].myRow.fifteen.name = INPUT_NAME_PREFIX + count + '_15'; // input text + tbl.tBodies[0].rows[i].myRow.sixteen.name = INPUT_NAME_PREFIX + count + '_16'; // input text + tbl.tBodies[0].rows[i].myRow.seventeen.name = INPUT_NAME_PREFIX + count + '_17'; // input text + tbl.tBodies[0].rows[i].myRow.eighteen.name = INPUT_NAME_PREFIX + count + '_18'; // input text + tbl.tBodies[0].rows[i].myRow.nineteen.name = INPUT_NAME_PREFIX + count + '_19'; // input text + + tbl.tBodies[0].rows[i].myRow.twenty.name = INPUT_NAME_PREFIX + count + '_20'; // input text + tbl.tBodies[0].rows[i].myRow.twentyone.name = INPUT_NAME_PREFIX + count + '_21'; // input text + tbl.tBodies[0].rows[i].myRow.twentytwo.name = INPUT_NAME_PREFIX + count + '_22'; // input text + tbl.tBodies[0].rows[i].myRow.twentythree.name = INPUT_NAME_PREFIX + count + '_23'; // input text + tbl.tBodies[0].rows[i].myRow.twentyfour.name = INPUT_NAME_PREFIX + count + '_24'; // input text + tbl.tBodies[0].rows[i].myRow.twentyfive.name = INPUT_NAME_PREFIX + count + '_25'; // input text + tbl.tBodies[0].rows[i].myRow.twentysix.name = INPUT_NAME_PREFIX + count + '_26'; // input text + tbl.tBodies[0].rows[i].myRow.twentyseven.name = INPUT_NAME_PREFIX + count + '_27'; // input text + tbl.tBodies[0].rows[i].myRow.twentyeight.name = INPUT_NAME_PREFIX + count + '_28'; // input text + tbl.tBodies[0].rows[i].myRow.twentynine.name = INPUT_NAME_PREFIX + count + '_29'; // input text + + tbl.tBodies[0].rows[i].myRow.thirty.name = INPUT_NAME_PREFIX + count + '_30'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyone.name = INPUT_NAME_PREFIX + count + '_31'; // input text + tbl.tBodies[0].rows[i].myRow.thirtytwo.name = INPUT_NAME_PREFIX + count + '_32'; // input text + tbl.tBodies[0].rows[i].myRow.thirtythree.name = INPUT_NAME_PREFIX + count + '_33'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyfour.name = INPUT_NAME_PREFIX + count + '_34'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyfive.name = INPUT_NAME_PREFIX + count + '_35'; // input text + tbl.tBodies[0].rows[i].myRow.thirtysix.name = INPUT_NAME_PREFIX + count + '_36'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyseven.name = INPUT_NAME_PREFIX + count + '_37'; // input text + tbl.tBodies[0].rows[i].myRow.thirtyeight.name = INPUT_NAME_PREFIX + count + '_38'; // input text + tbl.tBodies[0].rows[i].myRow.thirtynine.name = INPUT_NAME_PREFIX + count + '_39'; // input text + + tbl.tBodies[0].rows[i].myRow.forty.name = INPUT_NAME_PREFIX + count + '_40'; // input text + tbl.tBodies[0].rows[i].myRow.fortyone.name = INPUT_NAME_PREFIX + count + '_41'; // input text + tbl.tBodies[0].rows[i].myRow.fortytwo.name = INPUT_NAME_PREFIX + count + '_42'; // input text + tbl.tBodies[0].rows[i].myRow.fortythree.name = INPUT_NAME_PREFIX + count + '_43'; // input text + tbl.tBodies[0].rows[i].myRow.fortyfour.name = INPUT_NAME_PREFIX + count + '_44'; // input text + tbl.tBodies[0].rows[i].myRow.fortyfive.name = INPUT_NAME_PREFIX + count + '_45'; // input text + tbl.tBodies[0].rows[i].myRow.fortysix.name = INPUT_NAME_PREFIX + count + '_46'; // input text + tbl.tBodies[0].rows[i].myRow.fortyseven.name = INPUT_NAME_PREFIX + count + '_47'; // input text + tbl.tBodies[0].rows[i].myRow.fortyeight.name = INPUT_NAME_PREFIX + count + '_48'; // input text + tbl.tBodies[0].rows[i].myRow.fortynine.name = INPUT_NAME_PREFIX + count + '_49'; // input text + + tbl.tBodies[0].rows[i].myRow.fifty.name = INPUT_NAME_PREFIX + count + '_50'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyone.name = INPUT_NAME_PREFIX + count + '_51'; // input text + tbl.tBodies[0].rows[i].myRow.fiftytwo.name = INPUT_NAME_PREFIX + count + '_52'; // input text + tbl.tBodies[0].rows[i].myRow.fiftythree.name = INPUT_NAME_PREFIX + count + '_53'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyfour.name = INPUT_NAME_PREFIX + count + '_54'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyfive.name = INPUT_NAME_PREFIX + count + '_55'; // input text + tbl.tBodies[0].rows[i].myRow.fiftysix.name = INPUT_NAME_PREFIX + count + '_56'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyseven.name = INPUT_NAME_PREFIX + count + '_57'; // input text + tbl.tBodies[0].rows[i].myRow.fiftyeight.name = INPUT_NAME_PREFIX + count + '_58'; // input text + tbl.tBodies[0].rows[i].myRow.fiftynine.name = INPUT_NAME_PREFIX + count + '_59'; // input text + + tbl.tBodies[0].rows[i].myRow.sixty.name = INPUT_NAME_PREFIX + count + '_60'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyone.name = INPUT_NAME_PREFIX + count + '_61'; // input text + tbl.tBodies[0].rows[i].myRow.sixtytwo.name = INPUT_NAME_PREFIX + count + '_62'; // input text + tbl.tBodies[0].rows[i].myRow.sixtythree.name = INPUT_NAME_PREFIX + count + '_63'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyfour.name = INPUT_NAME_PREFIX + count + '_64'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyfive.name = INPUT_NAME_PREFIX + count + '_65'; // input text + tbl.tBodies[0].rows[i].myRow.sixtysix.name = INPUT_NAME_PREFIX + count + '_66'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyseven.name = INPUT_NAME_PREFIX + count + '_67'; // input text + tbl.tBodies[0].rows[i].myRow.sixtyeight.name = INPUT_NAME_PREFIX + count + '_68'; // input text + tbl.tBodies[0].rows[i].myRow.sixtynine.name = INPUT_NAME_PREFIX + count + '_69'; // input text + + tbl.tBodies[0].rows[i].myRow.seventy.name = INPUT_NAME_PREFIX + count + '_70'; // input text + tbl.tBodies[0].rows[i].myRow.seventyone.name = INPUT_NAME_PREFIX + count + '_71'; // input text + tbl.tBodies[0].rows[i].myRow.seventytwo.name = INPUT_NAME_PREFIX + count + '_72'; // input text + tbl.tBodies[0].rows[i].myRow.seventythree.name = INPUT_NAME_PREFIX + count + '_73'; // input text + + // ------------------------------------------------------------ + tbl.tBodies[0].rows[i].myRow.ra.value = count; // input radio + count++; + } + } + } +} + +</script> diff --git a/modules_v2/GEDFact_assistant/_CENS/js/chapman_codes.js b/modules_v2/GEDFact_assistant/_CENS/js/chapman_codes.js new file mode 100644 index 0000000000..431894761c --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/js/chapman_codes.js @@ -0,0 +1,398 @@ +/** + * Census Assistant module for webtrees + * + * Chapman Code information + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + * @author Brian Holland (windmillway) + */ + + function getChapmanCode(location) { + // Countries + if (location == 'All') { var ChapmanCode = 'ALL'; + } else if (location == 'Anywhere') { var ChapmanCode = 'ANY'; + } else if (location == 'At Sea') { var ChapmanCode = 'SEA'; + } else if (location == 'Unknown') { var ChapmanCode = 'UNK'; + } else if (location == 'UNK') { var ChapmanCode = '-'; + } else if (location == '') { var ChapmanCode = '-'; + + } else if (location == 'Afghanistan') { var ChapmanCode = 'AFG'; + } else if (location == 'Albania') { var ChapmanCode = 'ALB'; + } else if (location == 'Algeria') { var ChapmanCode = 'DZA'; + } else if (location == 'American Samoa') { var ChapmanCode = 'ASM'; + } else if (location == 'Andorra') { var ChapmanCode = 'AND'; + } else if (location == 'Angola') { var ChapmanCode = 'AGO'; + } else if (location == 'Anguilla') { var ChapmanCode = 'AIA'; + } else if (location == 'Antarctica') { var ChapmanCode = 'ATA'; + } else if (location == 'Antigua and Barbuda') { var ChapmanCode = 'ATG'; + } else if (location == 'Argentina') { var ChapmanCode = 'ARG'; + } else if (location == 'Armenia') { var ChapmanCode = 'ARM'; + } else if (location == 'Aruba') { var ChapmanCode = 'ABW'; + } else if (location == 'Australia') { var ChapmanCode = 'AUS'; + } else if (location == 'Austria') { var ChapmanCode = 'AUT'; + } else if (location == 'Azerbaijan') { var ChapmanCode = 'AZE'; + } else if (location == 'Bahamas') { var ChapmanCode = 'BHS'; + } else if (location == 'Bahrain') { var ChapmanCode = 'BHR'; + } else if (location == 'Bangladesh') { var ChapmanCode = 'BGD'; + } else if (location == 'Barbados') { var ChapmanCode = 'BRB'; + } else if (location == 'Belarus') { var ChapmanCode = 'BLR'; + } else if (location == 'Belgium') { var ChapmanCode = 'BEL'; + } else if (location == 'Belize') { var ChapmanCode = 'BLZ'; + } else if (location == 'Benin') { var ChapmanCode = 'BEN'; + } else if (location == 'Bermuda') { var ChapmanCode = 'BMU'; + } else if (location == 'Bhutan') { var ChapmanCode = 'BTN'; + } else if (location == 'Bolivia') { var ChapmanCode = 'BOL'; + } else if (location == 'Bosnia and Herzegovina') { var ChapmanCode = 'BIH'; + } else if (location == 'Botswana') { var ChapmanCode = 'BWA'; + } else if (location == 'Bouvet Island') { var ChapmanCode = 'BVT'; + } else if (location == 'Brazil') { var ChapmanCode = 'BRA'; + } else if (location == 'British Indian Ocean Territory') { var ChapmanCode = 'IOT'; + } else if (location == 'British West Indies') { var ChapmanCode = 'BWI'; + } else if (location == 'Brunei Darussalam') { var ChapmanCode = 'BRN'; + } else if (location == 'Bulgaria') { var ChapmanCode = 'BGR'; + } else if (location == 'Burkina Faso') { var ChapmanCode = 'BFA'; + } else if (location == 'Burma') { var ChapmanCode = 'MMR'; + } else if (location == 'Burundi') { var ChapmanCode = 'BDI'; + } else if (location == 'Cambodia') { var ChapmanCode = 'KHM'; + } else if (location == 'Cameroon') { var ChapmanCode = 'CMR'; + } else if (location == 'Canada') { var ChapmanCode = 'CAN'; + } else if (location == 'Cape Verde') { var ChapmanCode = 'CPV'; + } else if (location == 'Cayman Islands') { var ChapmanCode = 'CYM'; + } else if (location == 'Central African Republic') { var ChapmanCode = 'CAF'; + } else if (location == 'Central America') { var ChapmanCode = 'CAM'; + } else if (location == 'Chad') { var ChapmanCode = 'TCD'; + } else if (location == 'Channel Islands') { var ChapmanCode = 'CHI'; + } else if (location == 'Chile') { var ChapmanCode = 'CHL'; + } else if (location == 'China') { var ChapmanCode = 'CHN'; + } else if (location == 'Christmas Island') { var ChapmanCode = 'CXR'; + } else if (location == 'Cocos (Keeling) Islands') { var ChapmanCode = 'CCK'; + } else if (location == 'Colombia') { var ChapmanCode = 'COL'; + } else if (location == 'Comoros') { var ChapmanCode = 'COM'; + } else if (location == 'Congo') { var ChapmanCode = 'COG'; + } else if (location == 'Cook Islands') { var ChapmanCode = 'COK'; + } else if (location == 'Costa Rica') { var ChapmanCode = 'CRI'; + } else if (location == 'Cote D\'ivoire') { var ChapmanCode = 'CIV'; + } else if (location == 'Croatia') { var ChapmanCode = 'HRV'; + } else if (location == 'Hrvatska)') { var ChapmanCode = 'HRV'; + } else if (location == 'Cuba') { var ChapmanCode = 'CUB'; + } else if (location == 'Cyprus') { var ChapmanCode = 'CYP'; + } else if (location == 'Czechoslovakia') { var ChapmanCode = 'CSK'; + } else if (location == 'Czech Republic') { var ChapmanCode = 'CZE'; + } else if (location == 'Denmark') { var ChapmanCode = 'DNK'; + } else if (location == 'Deutschland') { var ChapmanCode = 'DEU'; + } else if (location == 'Djibouti') { var ChapmanCode = 'DJI'; + } else if (location == 'Dominica') { var ChapmanCode = 'DMA'; + } else if (location == 'Dominican Republic') { var ChapmanCode = 'DOM'; + } else if (location == 'Dutch New Guinea') { var ChapmanCode = 'DNG'; + } else if (location == 'East Indies') { var ChapmanCode = 'IDN'; + } else if (location == 'East Timor') { var ChapmanCode = 'TLS'; + } else if (location == 'Ecuador') { var ChapmanCode = 'ECU'; + } else if (location == 'Egypt') { var ChapmanCode = 'EGY'; + } else if (location == 'Eire') { var ChapmanCode = 'EIR'; + } else if (location == 'El Salvador') { var ChapmanCode = 'SLV'; + } else if (location == 'England') { var ChapmanCode = 'ENG'; + } else if (location == 'Equatorial Guinea') { var ChapmanCode = 'GNQ'; + } else if (location == 'Eritrea') { var ChapmanCode = 'ERI'; + } else if (location == 'Estonia') { var ChapmanCode = 'EST'; + } else if (location == 'Ethiopia') { var ChapmanCode = 'ETH'; + } else if (location == 'Falkland Islands') { var ChapmanCode = 'FLK'; + } else if (location == 'Malvinas') { var ChapmanCode = 'FLK'; + } else if (location == 'Faroe Islands') { var ChapmanCode = 'FRO'; + } else if (location == 'Fiji') { var ChapmanCode = 'FJI'; + } else if (location == 'Finland') { var ChapmanCode = 'FIN'; + } else if (location == 'France') { var ChapmanCode = 'FRA'; + } else if (location == 'France, Metropolitan') { var ChapmanCode = 'FXX'; + } else if (location == 'French Guiana') { var ChapmanCode = 'GUF'; + } else if (location == 'French Polynesia') { var ChapmanCode = 'PYF'; + } else if (location == 'French Southern Territories') { var ChapmanCode = 'ATF'; + } else if (location == 'Gabon') { var ChapmanCode = 'GAB'; + } else if (location == 'Gambia') { var ChapmanCode = 'GMB'; + } else if (location == 'Georgia') { var ChapmanCode = 'GEO'; + } else if (location == 'Germany') { var ChapmanCode = 'DEU'; + } else if (location == 'Ghana') { var ChapmanCode = 'GHA'; + } else if (location == 'Gibraltar') { var ChapmanCode = 'GIB'; + } else if (location == 'Great Britain') { var ChapmanCode = 'GBR'; + } else if (location == 'Greece') { var ChapmanCode = 'GRC'; + } else if (location == 'Greenland') { var ChapmanCode = 'GRL'; + } else if (location == 'Grenada') { var ChapmanCode = 'GRD'; + } else if (location == 'Guadeloupe') { var ChapmanCode = 'GLP'; + } else if (location == 'Guam') { var ChapmanCode = 'GUM'; + } else if (location == 'Guatemala') { var ChapmanCode = 'GTM'; + } else if (location == 'Guinea') { var ChapmanCode = 'GIN'; + } else if (location == 'Guinea-Bissau') { var ChapmanCode = 'GNB'; + } else if (location == 'Guyana') { var ChapmanCode = 'GUY'; + } else if (location == 'Haiti') { var ChapmanCode = 'HTI'; + } else if (location == 'Heard Island & McDonald Islands') { var ChapmanCode = 'HMD'; + } else if (location == 'Holland') { var ChapmanCode = 'HOL'; + } else if (location == 'Honduras') { var ChapmanCode = 'HND'; + } else if (location == 'Hong Kong') { var ChapmanCode = 'HKG'; + } else if (location == 'Hungary') { var ChapmanCode = 'HUN'; + } else if (location == 'Iceland') { var ChapmanCode = 'ISL'; + } else if (location == 'India') { var ChapmanCode = 'IND'; + } else if (location == 'Indonesia') { var ChapmanCode = 'IDN'; + } else if (location == 'Iran') { var ChapmanCode = 'IRN'; + } else if (location == 'Islamic Republic of Iran') { var ChapmanCode = 'IRN'; + } else if (location == 'Iraq') { var ChapmanCode = 'IRQ'; + } else if (location == 'Ireland') { var ChapmanCode = 'IRL'; + } else if (location == 'Israel') { var ChapmanCode = 'ISR'; + } else if (location == 'Italy') { var ChapmanCode = 'ITA'; + } else if (location == 'Jamaica') { var ChapmanCode = 'JAM'; + } else if (location == 'Japan') { var ChapmanCode = 'JPN'; + } else if (location == 'Jordan') { var ChapmanCode = 'JOR'; + } else if (location == 'Kazakhstan') { var ChapmanCode = 'KAZ'; + } else if (location == 'Kenya') { var ChapmanCode = 'KEN'; + } else if (location == 'Kiribati') { var ChapmanCode = 'KIR'; + } else if (location == 'North Korea') { var ChapmanCode = 'PRK'; + } else if (location == 'Korea, Democratic People\'s Republic of') { var ChapmanCode = 'PRK'; + } else if (location == 'South Korea') { var ChapmanCode = 'KOR'; + } else if (location == 'Korea, Republic of') { var ChapmanCode = 'KOR'; + } else if (location == 'Kuwait') { var ChapmanCode = 'KWT'; + } else if (location == 'Kyrgyzstan') { var ChapmanCode = 'KGZ'; + } else if (location == 'Laos') { var ChapmanCode = 'LAO'; + } else if (location == 'Lao People\'s Democratic Republic') { var ChapmanCode = 'LAO'; + } else if (location == 'Latvia') { var ChapmanCode = 'LVA'; + } else if (location == 'Lebanon') { var ChapmanCode = 'LBN'; + } else if (location == 'Lesotho') { var ChapmanCode = 'LSO'; + } else if (location == 'Liberia') { var ChapmanCode = 'LBR'; + } else if (location == 'Libya') { var ChapmanCode = 'LBY'; + } else if (location == 'Libyan Arab Jamahiriya') { var ChapmanCode = 'LBY'; + } else if (location == 'Liechtenstein') { var ChapmanCode = 'LIE'; + } else if (location == 'Lithuania') { var ChapmanCode = 'LTU'; + } else if (location == 'Luxembourg') { var ChapmanCode = 'LUX'; + } else if (location == 'Macau') { var ChapmanCode = 'MAC'; + } else if (location == 'Macedonia') { var ChapmanCode = 'MKD'; + } else if (location == 'Madagascar') { var ChapmanCode = 'MDG'; + } else if (location == 'Malawi') { var ChapmanCode = 'MWI'; + } else if (location == 'Malaysia') { var ChapmanCode = 'MYS'; + } else if (location == 'Maldives') { var ChapmanCode = 'MDV'; + } else if (location == 'Mali') { var ChapmanCode = 'MLI'; + } else if (location == 'Malta') { var ChapmanCode = 'MLT'; + } else if (location == 'Marshall Islands') { var ChapmanCode = 'MHL'; + } else if (location == 'Martinique') { var ChapmanCode = 'MTQ'; + } else if (location == 'Mauritania') { var ChapmanCode = 'MRT'; + } else if (location == 'Mauritius') { var ChapmanCode = 'MUS'; + } else if (location == 'Mayotte') { var ChapmanCode = 'MYT'; + } else if (location == 'Mexico') { var ChapmanCode = 'MEX'; + } else if (location == 'Micronesia') { var ChapmanCode = 'FSM'; + } else if (location == 'Micronesia, Federated States of') { var ChapmanCode = 'FSM'; + } else if (location == 'Moldova') { var ChapmanCode = 'MDA'; + } else if (location == 'Moldova, Republic of') { var ChapmanCode = 'MDA'; + } else if (location == 'Monaco') { var ChapmanCode = 'MCO'; + } else if (location == 'Mongolia') { var ChapmanCode = 'MNG'; + } else if (location == 'Montserrat') { var ChapmanCode = 'MSR'; + } else if (location == 'Morocco') { var ChapmanCode = 'MAR'; + } else if (location == 'Mozambique') { var ChapmanCode = 'MOZ'; + } else if (location == 'Myanmar') { var ChapmanCode = 'MMR'; + } else if (location == 'Namibia') { var ChapmanCode = 'NAM'; + } else if (location == 'Nauru') { var ChapmanCode = 'NRU'; + } else if (location == 'Nepal') { var ChapmanCode = 'NPL'; + } else if (location == 'Nederland') { var ChapmanCode = 'NLD'; + } else if (location == 'Netherlands') { var ChapmanCode = 'NLD'; + } else if (location == 'Netherlands Antilles') { var ChapmanCode = 'ANT'; + } else if (location == 'New Caledonia') { var ChapmanCode = 'NCL'; + } else if (location == 'New Zealand') { var ChapmanCode = 'NZL'; + } else if (location == 'Nicaragua') { var ChapmanCode = 'NIC'; + } else if (location == 'Niger') { var ChapmanCode = 'NER'; + } else if (location == 'Nigeria') { var ChapmanCode = 'NGA'; + } else if (location == 'Niue') { var ChapmanCode = 'NIU'; + } else if (location == 'Norfolk Island') { var ChapmanCode = 'NFK'; + } else if (location == 'Northern Ireland') { var ChapmanCode = 'NIR'; + } else if (location == 'Northern Mariana Islands') { var ChapmanCode = 'MNP'; + } else if (location == 'Norway') { var ChapmanCode = 'NOR'; + } else if (location == 'Oman') { var ChapmanCode = 'OMN'; + } else if (location == 'Pakistan') { var ChapmanCode = 'PAK'; + } else if (location == 'Palau') { var ChapmanCode = 'PLW'; + } else if (location == 'Panama') { var ChapmanCode = 'PAN'; + } else if (location == 'Panama Canal Zone') { var ChapmanCode = 'PCZ'; + } else if (location == 'Papua New Guinea') { var ChapmanCode = 'PNG'; + } else if (location == 'Paraguay') { var ChapmanCode = 'PRY'; + } else if (location == 'Peru') { var ChapmanCode = 'PER'; + } else if (location == 'Philippines') { var ChapmanCode = 'PHL'; + } else if (location == 'Pitcairn') { var ChapmanCode = 'PCN'; + } else if (location == 'Poland') { var ChapmanCode = 'POL'; + } else if (location == 'Portugal') { var ChapmanCode = 'PRT'; + } else if (location == 'Puerto Rico') { var ChapmanCode = 'PRI'; + } else if (location == 'Qatar') { var ChapmanCode = 'QAT'; + } else if (location == 'Reunion') { var ChapmanCode = 'REU'; + } else if (location == 'Romania') { var ChapmanCode = 'ROU'; + } else if (location == 'Russia') { var ChapmanCode = 'RUS'; + } else if (location == 'Russian Federation') { var ChapmanCode = 'RUS'; + } else if (location == 'Rwanda') { var ChapmanCode = 'RWA'; + } else if (location == 'Saint Kitts and Nevis') { var ChapmanCode = 'KNA'; + } else if (location == 'Saint Lucia') { var ChapmanCode = 'LCA'; + } else if (location == 'Saint Vincent and the Grenadines') { var ChapmanCode = 'VCT'; + } else if (location == 'Samoa') { var ChapmanCode = 'WSM'; + } else if (location == 'San Marino') { var ChapmanCode = 'SMR'; + } else if (location == 'Sao Tome and Principe') { var ChapmanCode = 'STP'; + } else if (location == 'Saudi Arabia') { var ChapmanCode = 'SAU'; + } else if (location == 'Scotland') { var ChapmanCode = 'SCT'; + } else if (location == 'Senegal') { var ChapmanCode = 'SEN'; + } else if (location == 'Seychelles') { var ChapmanCode = 'SYC'; + } else if (location == 'Sicily') { var ChapmanCode = 'SIC'; + } else if (location == 'Sierra Leone') { var ChapmanCode = 'SLE'; + } else if (location == 'Singapore') { var ChapmanCode = 'SGP'; + } else if (location == 'Slovakia') { var ChapmanCode = 'SVK'; + } else if (location == 'Slovak Republic') { var ChapmanCode = 'SVK'; + } else if (location == 'Slovenia') { var ChapmanCode = 'SVN'; + } else if (location == 'Solomon Islands') { var ChapmanCode = 'SLB'; + } else if (location == 'Somalia') { var ChapmanCode = 'SOM'; + } else if (location == 'South Africa') { var ChapmanCode = 'ZAF'; + } else if (location == 'Zuid Afrika') { var ChapmanCode = 'ZAF'; + } else if (location == 'South America') { var ChapmanCode = 'SAM'; + } else if (location == 'Spain') { var ChapmanCode = 'ESP'; + } else if (location == 'Espana') { var ChapmanCode = 'ESP'; + } else if (location == 'Sri Lanka') { var ChapmanCode = 'LKA'; + } else if (location == 'Saint Helena') { var ChapmanCode = 'SHN'; + } else if (location == 'Saint Pierre and Miquelon') { var ChapmanCode = 'SPM'; + } else if (location == 'Sudan') { var ChapmanCode = 'SDN'; + } else if (location == 'Suriname') { var ChapmanCode = 'SUR'; + } else if (location == 'Svalbard and Jan Mayen Islands') { var ChapmanCode = 'SJM'; + } else if (location == 'Swaziland') { var ChapmanCode = 'SWZ'; + } else if (location == 'Sweden') { var ChapmanCode = 'SWE'; + } else if (location == 'Switzerland') { var ChapmanCode = 'CHE'; + } else if (location == 'Syria') { var ChapmanCode = 'SYR'; + } else if (location == 'Syrian Arab Republic') { var ChapmanCode = 'SYR'; + } else if (location == 'Taiwan') { var ChapmanCode = 'TWN'; + } else if (location == 'Taiwan, Province of China') { var ChapmanCode = 'TWN'; + } else if (location == 'Tajikistan') { var ChapmanCode = 'TJK'; + } else if (location == 'Tanzania') { var ChapmanCode = 'TZA'; + } else if (location == 'Tanzania, United Republic of') { var ChapmanCode = 'TZA'; + } else if (location == 'United Republic of Tanzania') { var ChapmanCode = 'TZA'; + } else if (location == 'Thailand') { var ChapmanCode = 'THA'; + } else if (location == 'Togo') { var ChapmanCode = 'TGO'; + } else if (location == 'Tokelau') { var ChapmanCode = 'TKL'; + } else if (location == 'Tonga') { var ChapmanCode = 'TON'; + } else if (location == 'Trinidad and Tobago') { var ChapmanCode = 'TTO'; + } else if (location == 'Tunisia') { var ChapmanCode = 'TUN'; + } else if (location == 'Turkey') { var ChapmanCode = 'TUR'; + } else if (location == 'Turkmenistan') { var ChapmanCode = 'TKM'; + } else if (location == 'Turks and Caicos Islands') { var ChapmanCode = 'TCA'; + } else if (location == 'Tuvalu') { var ChapmanCode = 'TUV'; + } else if (location == 'Uganda') { var ChapmanCode = 'UGA'; + } else if (location == 'Ukraine') { var ChapmanCode = 'UKR'; + } else if (location == 'United Arab Emirates') { var ChapmanCode = 'ARE'; + } else if (location == 'Arab Emirates') { var ChapmanCode = 'ARE'; + } else if (location == 'United Kingdom') { var ChapmanCode = 'GBR'; + } else if (location == 'United States Of America') { var ChapmanCode = 'USA'; + } else if (location == 'United States') { var ChapmanCode = 'USA'; + } else if (location == 'United States, Minor Outlying Islands') { var ChapmanCode = 'UMI'; + } else if (location == 'Uruguay') { var ChapmanCode = 'URY'; + } else if (location == 'Uzbekistan') { var ChapmanCode = 'UZB'; + } else if (location == 'Vanuatu') { var ChapmanCode = 'VUT'; + } else if (location == 'Vatican City State') { var ChapmanCode = 'VAT'; + } else if (location == 'Venezuela') { var ChapmanCode = 'VEN'; + } else if (location == 'Viet Nam') { var ChapmanCode = 'VNM'; + } else if (location == 'Virgin Islands (British)') { var ChapmanCode = 'VGB'; + } else if (location == 'Virgin Islands (U.S.)') { var ChapmanCode = 'VIR'; + } else if (location == 'Wales') { var ChapmanCode = 'WLS'; + } else if (location == 'Wallis and Futuna Islands') { var ChapmanCode = 'WLF'; + } else if (location == 'West Africa') { var ChapmanCode = 'WAF'; + } else if (location == 'West Indies') { var ChapmanCode = 'BWI'; + } else if (location == 'West Indies, British') { var ChapmanCode = 'BWI'; + } else if (location == 'Western Sahara') { var ChapmanCode = 'ESH'; + } else if (location == 'Yemen') { var ChapmanCode = 'YEM'; + } else if (location == 'Yugoslavia') { var ChapmanCode = 'YUG'; + } else if (location == 'Zaire') { var ChapmanCode = 'ZAR'; + } else if (location == 'Zambia') { var ChapmanCode = 'ZMB'; + } else if (location == 'Zimbabwe') { var ChapmanCode = 'ZWE'; + + // USA States + } else if (location == 'AL' || location == 'Alabama') { var ChapmanCode = 'AL'; + } else if (location == 'AK' || location == 'Alaska') { var ChapmanCode = 'AK'; + } else if (location == 'AZ' || location == 'Arizona') { var ChapmanCode = 'AZ'; + } else if (location == 'AR' || location == 'Arkansas') { var ChapmanCode = 'AR'; + } else if (location == 'CA' || location == 'California') { var ChapmanCode = 'CA'; + } else if (location == 'CO' || location == 'Colorado') { var ChapmanCode = 'CO'; + } else if (location == 'CT' || location == 'Connecticut') { var ChapmanCode = 'CT'; + } else if (location == 'DE' || location == 'Delaware') { var ChapmanCode = 'DE'; + } else if (location == 'DC' || location == 'District of Columbia') { var ChapmanCode = 'DC'; + } else if (location == 'FL' || location == 'Florida') { var ChapmanCode = 'FL'; + } else if (location == 'GA' || location == 'Georgia') { var ChapmanCode = 'GA'; + } else if (location == 'HI' || location == 'Hawaii') { var ChapmanCode = 'HI'; + } else if (location == 'ID' || location == 'Idaho') { var ChapmanCode = 'ID'; + } else if (location == 'IL' || location == 'Illinois') { var ChapmanCode = 'IL'; + } else if (location == 'IN' || location == 'Indiana') { var ChapmanCode = 'IN'; + } else if (location == 'IA' || location == 'Iowa') { var ChapmanCode = 'IA'; + } else if (location == 'KS' || location == 'Kansas') { var ChapmanCode = 'KS'; + } else if (location == 'KY' || location == 'Kentucky') { var ChapmanCode = 'KY'; + } else if (location == 'LA' || location == 'Louisiana') { var ChapmanCode = 'LA'; + } else if (location == 'ME' || location == 'Maine') { var ChapmanCode = 'ME'; + } else if (location == 'MD' || location == 'Maryland') { var ChapmanCode = 'MD'; + } else if (location == 'MA' || location == 'Massachusetts') { var ChapmanCode = 'MA'; + } else if (location == 'MI' || location == 'Michigan') { var ChapmanCode = 'MI'; + } else if (location == 'MN' || location == 'Minnesota') { var ChapmanCode = 'MN'; + } else if (location == 'MS' || location == 'Mississippi') { var ChapmanCode = 'MS'; + } else if (location == 'MO' || location == 'Missouri') { var ChapmanCode = 'MO'; + } else if (location == 'MT' || location == 'Montana') { var ChapmanCode = 'MT'; + } else if (location == 'NE' || location == 'Nebraska') { var ChapmanCode = 'NE'; + } else if (location == 'NV' || location == 'Nevada') { var ChapmanCode = 'NV'; + } else if (location == 'NH' || location == 'New Hampshire') { var ChapmanCode = 'NH'; + } else if (location == 'NJ' || location == 'New Jersey') { var ChapmanCode = 'NJ'; + } else if (location == 'NM' || location == 'New Mexico') { var ChapmanCode = 'NM'; + } else if (location == 'NY' || location == 'New York') { var ChapmanCode = 'NY'; + } else if (location == 'NC' || location == 'North Carolina') { var ChapmanCode = 'NC'; + } else if (location == 'ND' || location == 'North Dakota') { var ChapmanCode = 'ND'; + } else if (location == 'OH' || location == 'Ohio') { var ChapmanCode = 'OH'; + } else if (location == 'OK' || location == 'Oklahoma') { var ChapmanCode = 'OK'; + } else if (location == 'OR' || location == 'Oregon') { var ChapmanCode = 'OR'; + } else if (location == 'PA' || location == 'Pennsylvania') { var ChapmanCode = 'PA'; + } else if (location == 'PR' || location == '(Puerto Rico)') { var ChapmanCode = 'PR'; + } else if (location == 'RI' || location == 'Rhode Island') { var ChapmanCode = 'RI'; + } else if (location == 'SC' || location == 'South Carolina') { var ChapmanCode = 'SC'; + } else if (location == 'SD' || location == 'South Dakota') { var ChapmanCode = 'SD'; + } else if (location == 'TN' || location == 'Tennessee') { var ChapmanCode = 'TN'; + } else if (location == 'TX' || location == 'Texas') { var ChapmanCode = 'TX'; + } else if (location == 'UT' || location == 'Utah') { var ChapmanCode = 'UT'; + } else if (location == 'VT' || location == 'Vermont') { var ChapmanCode = 'VT'; + } else if (location == 'VA' || location == 'Virginia') { var ChapmanCode = 'VA'; + } else if (location == 'VI' || location == '(Virgin Islands)') { var ChapmanCode = 'VI'; + } else if (location == 'WA' || location == 'Washington') { var ChapmanCode = 'WA'; + } else if (location == 'WV' || location == 'West Virginia') { var ChapmanCode = 'WV'; + } else if (location == 'WI' || location == 'Wisconsin') { var ChapmanCode = 'WI'; + } else if (location == 'WY' || location == 'Wyoming') { var ChapmanCode = 'WY'; + + // Canadian Provinces + } else if (location == 'AB' || location == 'Alberta') { var ChapmanCode = 'AB'; + } else if (location == 'BC' || location == 'British Columbia') { var ChapmanCode = 'BC'; + } else if (location == 'NL' || location == 'Labrador') { var ChapmanCode = 'NL'; + } else if (location == 'MB' || location == 'Manitoba') { var ChapmanCode = 'MB'; + } else if (location == 'NB' || location == 'New Brunswick') { var ChapmanCode = 'NB'; + } else if (location == 'NL' || location == 'Newfoundland') { var ChapmanCode = 'NL'; + } else if (location == 'NL' || location == 'Newfoundland and Labrador') { var ChapmanCode = 'NL'; + } else if (location == 'NT' || location == 'Northwest Territories') { var ChapmanCode = 'NT'; + } else if (location == 'NS' || location == 'Nova Scotia') { var ChapmanCode = 'NS'; + } else if (location == 'NU' || location == 'Nunavut') { var ChapmanCode = 'NU'; + } else if (location == 'ON' || location == 'Ontario') { var ChapmanCode = 'ON'; + } else if (location == 'PE' || location == 'Prince Edward Island') { var ChapmanCode = 'PE'; + } else if (location == 'QC' || location == 'Quebec') { var ChapmanCode = 'QC'; + } else if (location == 'SK' || location == 'Saskatchewan') { var ChapmanCode = 'SK'; + } else if (location == 'YT' || location == 'Yukon') { var ChapmanCode = 'YT'; + + // Default ChapmanCode + } else { + var ChapmanCode = '?NA'; + } + return ChapmanCode; +} diff --git a/modules_v2/GEDFact_assistant/_CENS/js/date.js b/modules_v2/GEDFact_assistant/_CENS/js/date.js new file mode 100644 index 0000000000..40d83cae83 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/js/date.js @@ -0,0 +1,503 @@ +/** + * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com) + * + * Dual licensed under the MIT and GPL licenses. + * This basically means you can use this code however you want for + * free, but don't claim to have written it yourself! + * Donations always accepted: http://www.JavascriptToolbox.com/donate/ + * + * Please do not link to the .js files on javascripttoolbox.com from + * your site. Copy the files locally to your server instead. + * + +Date functions + +These functions are used to parse, format, and manipulate Date objects. +See documentation and examples at http://www.JavascriptToolbox.com/lib/date/ + +*/ +Date.$VERSION = 1.02; + +/** + * Census Assistant Control module for webtrees + * + * Census information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ +*/ + +// Utility function to append a 0 to single-digit numbers +Date.LZ = function(x) {return(x<0||x>9?"":"0")+x}; +// Full month names. Change this for local month names +Date.monthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December'); +// Month abbreviations. Change this for local month names +Date.monthAbbreviations = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); +// Full day names. Change this for local month names +Date.dayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); +// Day abbreviations. Change this for local month names +Date.dayAbbreviations = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); +// Used for parsing ambiguous dates like 1/2/2000 - default to preferring 'American' format meaning Jan 2. +// Set to false to prefer 'European' format meaning Feb 1 +Date.preferAmericanFormat = true; + +// If the getFullYear() method is not defined, create it +if (!Date.prototype.getFullYear) { + Date.prototype.getFullYear = function() { var yy=this.getYear(); return (yy<1900?yy+1900:yy); } ; +} + +// Parse a string and convert it to a Date object. +// If no format is passed, try a list of common formats. +// If string cannot be parsed, return null. +// Avoids regular expressions to be more portable. +Date.parseString = function(val, format) { + // If no format is specified, try a few common formats + if (typeof(format)=="undefined" || format==null || format=="") { + var generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d','MMM-d','d-MMM'); + var monthFirst=new Array('M/d/y','M-d-y','M.d.y','M/d','M-d'); + var dateFirst =new Array('d/M/y','d-M-y','d.M.y','d/M','d-M'); + var checkList=new Array(generalFormats,Date.preferAmericanFormat?monthFirst:dateFirst,Date.preferAmericanFormat?dateFirst:monthFirst); + for (var i=0; i<checkList.length; i++) { + var l=checkList[i]; + for (var j=0; j<l.length; j++) { + var d=Date.parseString(val,l[j]); + if (d!=null) { + return d; + } + } + } + return null; + }; + + this.isInteger = function(val) { + for (var i=0; i < val.length; i++) { + if ("1234567890".indexOf(val.charAt(i))==-1) { + return false; + } + } + return true; + }; + this.getInt = function(str,i,minlength,maxlength) { + for (var x=maxlength; x>=minlength; x--) { + var token=str.substring(i,i+x); + if (token.length < minlength) { + return null; + } + if (this.isInteger(token)) { + return token; + } + } + return null; + }; + val=val+""; + format=format+""; + var i_val=0; + var i_format=0; + var c=""; + var token=""; + var token2=""; + var x,y; + var year=new Date().getFullYear(); + var month=1; + var date=1; + var hh=0; + var mm=0; + var ss=0; + var ampm=""; + while (i_format < format.length) { + // Get next token from format string + c=format.charAt(i_format); + token=""; + while ((format.charAt(i_format)==c) && (i_format < format.length)) { + token += format.charAt(i_format++); + } + // Extract contents of value based on format token + if (token=="yyyy" || token=="yy" || token=="y") { + if (token=="yyyy") { + x=4;y=4; + } + if (token=="yy") { + x=2;y=2; + } + if (token=="y") { + x=2;y=4; + } + year=this.getInt(val,i_val,x,y); + if (year==null) { + return null; + } + i_val += year.length; + if (year.length==2) { + if (year > 70) { + year=1900+(year-0); + } + else { + year=2000+(year-0); + } + } + } + else if (token=="MMM" || token=="NNN"){ + month=0; + var names = (token=="MMM"?(Date.monthNames.concat(Date.monthAbbreviations)):Date.monthAbbreviations); + for (var i=0; i<names.length; i++) { + var month_name=names[i]; + if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) { + month=(i%12)+1; + i_val += month_name.length; + break; + } + } + if ((month < 1)||(month>12)){ + return null; + } + } + else if (token=="EE"||token=="E"){ + var names = (token=="EE"?Date.dayNames:Date.dayAbbreviations); + for (var i=0; i<names.length; i++) { + var day_name=names[i]; + if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) { + i_val += day_name.length; + break; + } + } + } + else if (token=="MM"||token=="M") { + month=this.getInt(val,i_val,token.length,2); + if (month==null||(month<1)||(month>12)){ + return null; + } + i_val+=month.length; + } + else if (token=="dd"||token=="d") { + date=this.getInt(val,i_val,token.length,2); + if (date==null||(date<1)||(date>31)){ + return null; + } + i_val+=date.length; + } + else if (token=="hh"||token=="h") { + hh=this.getInt(val,i_val,token.length,2); + if (hh==null||(hh<1)||(hh>12)){ + return null; + } + i_val+=hh.length; + } + else if (token=="HH"||token=="H") { + hh=this.getInt(val,i_val,token.length,2); + if (hh==null||(hh<0)||(hh>23)){ + return null; + } + i_val+=hh.length; + } + else if (token=="KK"||token=="K") { + hh=this.getInt(val,i_val,token.length,2); + if (hh==null||(hh<0)||(hh>11)){ + return null; + } + i_val+=hh.length; + hh++; + } + else if (token=="kk"||token=="k") { + hh=this.getInt(val,i_val,token.length,2); + if (hh==null||(hh<1)||(hh>24)){ + return null; + } + i_val+=hh.length; + hh--; + } + else if (token=="mm"||token=="m") { + mm=this.getInt(val,i_val,token.length,2); + if (mm==null||(mm<0)||(mm>59)){ + return null; + } + i_val+=mm.length; + } + else if (token=="ss"||token=="s") { + ss=this.getInt(val,i_val,token.length,2); + if (ss==null||(ss<0)||(ss>59)){ + return null; + } + i_val+=ss.length; + } + else if (token=="a") { + if (val.substring(i_val,i_val+2).toLowerCase()=="am") { + ampm="AM"; + } + else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") { + ampm="PM"; + } + else { + return null; + } + i_val+=2; + } + else { + if (val.substring(i_val,i_val+token.length)!=token) { + return null; + } + else { + i_val+=token.length; + } + } + } + // If there are any trailing characters left in the value, it doesn't match + if (i_val != val.length) { + return null; + } + // Is date valid for month? + if (month==2) { + // Check for leap year + if (( (year%4==0)&&(year%100 != 0) ) || (year%400==0)) { // leap year + if (date > 29){ + return null; + } + } + else { + if (date > 28) { + return null; + } + } + } + if ((month==4)||(month==6)||(month==9)||(month==11)) { + if (date > 30) { + return null; + } + } + // Correct hours value + if (hh<12 && ampm=="PM") { + hh=hh-0+12; + } + else if (hh>11 && ampm=="AM") { + hh-=12; + } + return new Date(year,month-1,date,hh,mm,ss); +}; + +// Check if a date string is valid +Date.isValid = function(val,format) { + return (Date.parseString(val,format) != null); +}; + +// Check if a date object is before another date object +Date.prototype.isBefore = function(date2) { + if (date2==null) { + return false; + } + return (this.getTime()<date2.getTime()); +}; + +// Check if a date object is after another date object +Date.prototype.isAfter = function(date2) { + if (date2==null) { + return false; + } + return (this.getTime()>date2.getTime()); +}; + +// Check if two date objects have equal dates and times +Date.prototype.equals = function(date2) { + if (date2==null) { + return false; + } + return (this.getTime()==date2.getTime()); +}; + +// Check if two date objects have equal dates, disregarding times +Date.prototype.equalsIgnoreTime = function(date2) { + if (date2==null) { + return false; + } + var d1 = new Date(this.getTime()).clearTime(); + var d2 = new Date(date2.getTime()).clearTime(); + return (d1.getTime()==d2.getTime()); +}; + +// Format a date into a string using a given format string +Date.prototype.format = function(format) { + format=format+""; + var result=""; + var i_format=0; + var c=""; + var token=""; + var y=this.getYear()+""; + var M=this.getMonth()+1; + var d=this.getDate(); + var E=this.getDay(); + var H=this.getHours(); + var m=this.getMinutes(); + var s=this.getSeconds(); + var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k; + // Convert real date parts into formatted versions + var value=new Object(); + if (y.length < 4) { + y=""+(+y+1900); + } + value["y"]=""+y; + value["yyyy"]=y; + value["yy"]=y.substring(2,4); + value["M"]=M; + value["MM"]=Date.LZ(M); + value["MMM"]=Date.monthNames[M-1]; + value["NNN"]=Date.monthAbbreviations[M-1]; + value["d"]=d; + value["dd"]=Date.LZ(d); + value["E"]=Date.dayAbbreviations[E]; + value["EE"]=Date.dayNames[E]; + value["H"]=H; + value["HH"]=Date.LZ(H); + if (H==0){ + value["h"]=12; + } + else if (H>12){ + value["h"]=H-12; + } + else { + value["h"]=H; + } + value["hh"]=Date.LZ(value["h"]); + value["K"]=value["h"]-1; + value["k"]=value["H"]+1; + value["KK"]=Date.LZ(value["K"]); + value["kk"]=Date.LZ(value["k"]); + if (H > 11) { + value["a"]="PM"; + } + else { + value["a"]="AM"; + } + value["m"]=m; + value["mm"]=Date.LZ(m); + value["s"]=s; + value["ss"]=Date.LZ(s); + while (i_format < format.length) { + c=format.charAt(i_format); + token=""; + while ((format.charAt(i_format)==c) && (i_format < format.length)) { + token += format.charAt(i_format++); + } + if (typeof(value[token])!="undefined") { + result=result + value[token]; + } + else { + result=result + token; + } + } + return result; +}; + +// Get the full name of the day for a date +Date.prototype.getDayName = function() { + return Date.dayNames[this.getDay()]; +}; + +// Get the abbreviation of the day for a date +Date.prototype.getDayAbbreviation = function() { + return Date.dayAbbreviations[this.getDay()]; +}; + +// Get the full name of the month for a date +Date.prototype.getMonthName = function() { + return Date.monthNames[this.getMonth()]; +}; + +// Get the abbreviation of the month for a date +Date.prototype.getMonthAbbreviation = function() { + return Date.monthAbbreviations[this.getMonth()]; +}; + +// Clear all time information in a date object +Date.prototype.clearTime = function() { + this.setHours(0); + this.setMinutes(0); + this.setSeconds(0); + this.setMilliseconds(0); + return this; +}; + +// Add an amount of time to a date. Negative numbers can be passed to subtract time. +Date.prototype.add = function(interval, number) { + if (typeof(interval)=="undefined" || interval==null || typeof(number)=="undefined" || number==null) { + return this; + } + number = +number; + if (interval=='y') { // year + this.setFullYear(this.getFullYear()+number); + } + else if (interval=='M') { // Month + this.setMonth(this.getMonth()+number); + } + else if (interval=='d') { // Day + this.setDate(this.getDate()+number); + } + else if (interval=='w') { // Weekday + var step = (number>0)?1:-1; + while (number!=0) { + this.add('d',step); + while(this.getDay()==0 || this.getDay()==6) { + this.add('d',step); + } + number -= step; + } + } + else if (interval=='h') { // Hour + this.setHours(this.getHours() + number); + } + else if (interval=='m') { // Minute + this.setMinutes(this.getMinutes() + number); + } + else if (interval=='s') { // Second + this.setSeconds(this.getSeconds() + number); + } + return this; +}; + + + +// Added by Brian Holland ============================================ + +// Calculate Julian Date +function calculateJD(calendarDate) { + cdDate = new Date(calendarDate) + year = cdDate.getYear() //added + 1900 10/03/2003 + if (year < 1000 ) {year+=1900} // modified 10/03/2003 + //year = 1900+cdDate.getYear() + month = cdDate.getMonth() + 1 //getMonth() returns 0-11 + day = cdDate.getDate() + hour = cdDate.getHours() + min = cdDate.getMinutes() + sec = cdDate.getSeconds() + univTime = hour+(min/60)+(sec/3600) + if ((100*year+month-190002.5) >= 0) {sign = 1} + else {sign = -1} + with (Math) { + part1 = 367 * year + part2 = floor((7*(year+floor((month+9)/12)))/4) + part3 = day+floor((275*month)/9) + part4 = 1721013.5+(univTime/24) + part5 = 0.5*sign + jd = part1-part2+part3+part4-part5+0.5 + } + return jd +} + diff --git a/modules_v2/GEDFact_assistant/_CENS/js/dynamicoptionlist.js b/modules_v2/GEDFact_assistant/_CENS/js/dynamicoptionlist.js new file mode 100644 index 0000000000..418583b588 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_CENS/js/dynamicoptionlist.js @@ -0,0 +1,473 @@ +/** + * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com) + * + * Dual licensed under the MIT and GPL licenses. + * This basically means you can use this code however you want for + * free, but don't claim to have written it yourself! + * Donations always accepted: http://www.JavascriptToolbox.com/donate/ + * + * Please do not link to the .js files on javascripttoolbox.com from + * your site. Copy the files locally to your server instead. + * + */ +// Global objects to keep track of DynamicOptionList objects created on the page +var dynamicOptionListCount=0; +var dynamicOptionListObjects = new Array(); + +// Init call to setup lists after page load. One call to this function sets up all lists. +function initDynamicOptionLists() { + // init each DynamicOptionList object + for (var i=0; i<dynamicOptionListObjects.length; i++) { + var dol = dynamicOptionListObjects[i]; + + // Find the form associated with this list + if (dol.formName!=null) { + dol.form = document.forms[dol.formName]; + } + else if (dol.formIndex!=null) { + dol.form = document.forms[dol.formIndex]; + } + else { + // Form wasn't set manually, so go find it! + // Search for the first form element name in the lists + var name = dol.fieldNames[0][0]; + for (var f=0; f<document.forms.length; f++) { + if (typeof(document.forms[f][name])!="undefined") { + dol.form = document.forms[f]; + break; + } + } + if (dol.form==null) { + alert("ERROR: Couldn't find form element "+name+" in any form on the page! Init aborted"); return; + } + } + + // Form is found, now set the onchange attributes of each dependent select box + for (var j=0; j<dol.fieldNames.length; j++) { + // For each set of field names... + for (var k=0; k<dol.fieldNames[j].length-1; k++) { + // For each field in the set... + var selObj = dol.form[dol.fieldNames[j][k]]; + if (typeof(selObj)=="undefined") { alert("Select box named "+dol.fieldNames[j][k]+" could not be found in the form. Init aborted"); return; } + // Map the HTML options in the first select into the options we created + if (k==0) { + if (selObj.options!=null) { + for (l=0; l<selObj.options.length; l++) { + var sopt = selObj.options[l]; + var m = dol.findMatchingOptionInArray(dol.options,sopt.text,sopt.value,false); + if (m!=null) { + var reselectForNN6 = sopt.selected; + var m2 = new Option(sopt.text, sopt.value, sopt.defaultSelected, sopt.selected); + m2.selected = sopt.selected; // For some reason I need to do this to make NN4 happy + m2.defaultSelected = sopt.defaultSelected; + m2.DOLOption = m; + selObj.options[l] = m2; + selObj.options[l].selected = reselectForNN6; // Reselect this option for NN6 to be happy. Yuck. + } + } + } + } + if (selObj.onchange==null) { + // We only modify the onChange attribute if it's empty! Otherwise do it yourself in your source! + selObj.onchange = new Function("dynamicOptionListObjects["+dol.index+"].change(this)"); + } + } + } + } + // Set the preselectd options on page load + resetDynamicOptionLists(); +} + +// This function populates lists with the preselected values. +// It's pulled out into a separate function so it can be hooked into a 'reset' button on a form +// Optionally passed a form object which should be the only form reset +function resetDynamicOptionLists(theform) { + // reset each DynamicOptionList object + for (var i=0; i<dynamicOptionListObjects.length; i++) { + var dol = dynamicOptionListObjects[i]; + if (typeof(theform)=="undefined" || theform==null || theform==dol.form) { + for (var j=0; j<dol.fieldNames.length; j++) { + dol.change(dol.form[dol.fieldNames[j][0]],true); // Second argument says to use preselected values rather than default values + } + } + } +} + +// An object to represent an Option() but just for data-holding +function DOLOption(text,value,defaultSelected,selected) { + this.text = text; + this.value = value; + this.defaultSelected = defaultSelected; + this.selected = selected; + this.options = new Array(); // To hold sub-options + return this; +} + +// DynamicOptionList CONSTRUCTOR +function DynamicOptionList() { + this.form = null;// The form this list belongs to + this.options = new Array();// Holds the options of dependent lists + this.longestString = new Array();// Longest string that is currently a potential option (for Netscape) + this.numberOfOptions = new Array();// The total number of options that might be displayed, to build dummy options (for Netscape) + this.currentNode = null;// The current node that has been selected with forValue() or forText() + this.currentField = null;// The current field that is selected to be used for setValue() + this.currentNodeDepth = 0;// How far down the tree the currentNode is + this.fieldNames = new Array();// Lists of dependent fields which use this object + this.formIndex = null;// The index of the form to associate with this list + this.formName = null;// The name of the form to associate with this list + this.fieldListIndexes = new Object();// Hold the field lists index where fields exist + this.fieldIndexes = new Object();// Hold the index within the list where fields exist + this.selectFirstOption = true;// Whether or not to select the first option by default if no options are default or preselected, otherwise set the selectedIndex = -1 + this.numberOfOptions = new Array();// Store the max number of options for a given option list + this.longestString = new Array();// Store the longest possible string + this.values = new Object(); // Will hold the preselected values for fields, by field name + + // Method mappings + this.forValue = DOL_forValue; + this.forText = DOL_forText; + this.forField = DOL_forField; + this.forX = DOL_forX; + this.addOptions = DOL_addOptions; + this.addOptionsTextValue = DOL_addOptionsTextValue; + this.setDefaultOptions = DOL_setDefaultOptions; + this.setValues = DOL_setValues; + this.setValue = DOL_setValues; + this.setFormIndex = DOL_setFormIndex; + this.setFormName = DOL_setFormName; + this.printOptions = DOL_printOptions; + this.addDependentFields = DOL_addDependentFields; + this.change = DOL_change; + this.child = DOL_child; + this.selectChildOptions = DOL_selectChildOptions; + this.populateChild = DOL_populateChild; + this.change = DOL_change; + this.addNewOptionToList = DOL_addNewOptionToList; + this.findMatchingOptionInArray = DOL_findMatchingOptionInArray; + + // Optionally pass in the dependent field names + if (arguments.length > 0) { + // Process arguments and add dependency groups + for (var i=0; i<arguments.length; i++) { + this.fieldListIndexes[arguments[i].toString()] = this.fieldNames.length; + this.fieldIndexes[arguments[i].toString()] = i; + } + this.fieldNames[this.fieldNames.length] = arguments; + } + + // Add this object to the global array of dynamicoptionlist objects + this.index = window.dynamicOptionListCount++; + window["dynamicOptionListObjects"][this.index] = this; +} + +// Given an array of Option objects, search for an existing option that matches value, text, or both +function DOL_findMatchingOptionInArray(a,text,value,exactMatchRequired) { + if (a==null || typeof(a)=="undefined") { return null; } + var value_match = null; // Whether or not a value has been matched + var text_match = null; // Whether or not a text has been matched + for (var i=0; i<a.length; i++) { + var opt = a[i]; + // If both value and text match, return it right away + if (opt.value==value && opt.text==text) { return opt; } + if (!exactMatchRequired) { + // If value matches, store it until we complete scanning the list + if (value_match==null && value!=null && opt.value==value) { + value_match = opt; + } + // If text matches, store it for later + if (text_match==null && text!=null && opt.text==text) { + text_match = opt; + } + } + } + return (value_match!=null)?value_match:text_match; +} + +// Util function used by forValue and forText +function DOL_forX(s,type) { + if (this.currentNode==null) { this.currentNodeDepth=0; } + var useNode = (this.currentNode==null)?this:this.currentNode; + var o = this.findMatchingOptionInArray(useNode["options"],(type=="text")?s:null,(type=="value")?s:null,false); + if (o==null) { + o = new DOLOption(null,null,false,false); + o[type] = s; + useNode.options[useNode.options.length] = o; + } + this.currentNode = o; + this.currentNodeDepth++; + return this; +} + +// Set the portion of the list structure that is to be used by a later operation like addOptions +function DOL_forValue(s) { return this.forX(s,"value"); } + +// Set the portion of the list structure that is to be used by a later operation like addOptions +function DOL_forText(s) { return this.forX(s,"text"); } + +// Set the field to be used for setValue() calls +function DOL_forField(f) { this.currentField = f; return this; } + +// Create and add an option to a list, avoiding duplicates +function DOL_addNewOptionToList(a, text, value, defaultSelected) { + var o = new DOLOption(text,value,defaultSelected,false); + // Add the option to the array + if (a==null) { a = new Array(); } + for (var i=0; i<a.length; i++) { + if (a[i].text==o.text && a[i].value==o.value) { + if (o.selected) { + a[i].selected=true; + } + if (o.defaultSelected) { + a[i].defaultSelected = true; + } + return a; + } + } + a[a.length] = o; +} + +// Add sub-options to the currently-selected node, with the same text and value for each option +function DOL_addOptions() { + if (this.currentNode==null) { this.currentNode = this; } + if (this.currentNode["options"] == null) { this.currentNode["options"] = new Array(); } + for (var i=0; i<arguments.length; i++) { + var text = arguments[i]; + this.addNewOptionToList(this.currentNode.options,text,text,false); + if (typeof(this.numberOfOptions[this.currentNodeDepth])=="undefined") { + this.numberOfOptions[this.currentNodeDepth]=0; + } + if (this.currentNode.options.length > this.numberOfOptions[this.currentNodeDepth]) { + this.numberOfOptions[this.currentNodeDepth] = this.currentNode.options.length; + } + if (typeof(this.longestString[this.currentNodeDepth])=="undefined" || (text.length > this.longestString[this.currentNodeDepth].length)) { + this.longestString[this.currentNodeDepth] = text; + } + } + this.currentNode = null; + this.currentNodeDepth = 0; +} + +// Add sub-options to the currently-selected node, specifying separate text and values for each option +function DOL_addOptionsTextValue() { + if (this.currentNode==null) { this.currentNode = this; } + if (this.currentNode["options"] == null) { this.currentNode["options"] = new Array(); } + for (var i=0; i<arguments.length; i++) { + var text = arguments[i++]; + var value = arguments[i]; + this.addNewOptionToList(this.currentNode.options,text,value,false); + if (typeof(this.numberOfOptions[this.currentNodeDepth])=="undefined") { + this.numberOfOptions[this.currentNodeDepth]=0; + } + if (this.currentNode.options.length > this.numberOfOptions[this.currentNodeDepth]) { + this.numberOfOptions[this.currentNodeDepth] = this.currentNode.options.length; + } + if (typeof(this.longestString[this.currentNodeDepth])=="undefined" || (text.length > this.longestString[this.currentNodeDepth].length)) { + this.longestString[this.currentNodeDepth] = text; + } + } + this.currentNode = null; + this.currentNodeDepth = 0; +} + +// Find the first dependent list of a select box +// If it's the last list in a chain, return null because there are no children +function DOL_child(obj) { + var listIndex = this.fieldListIndexes[obj.name]; + var index = this.fieldIndexes[obj.name]; + if (index < (this.fieldNames[listIndex].length-1)) { + return this.form[this.fieldNames[listIndex][index+1]]; + } + return null; +} + +// Set the options which should be selected by default for a certain value in the parent +function DOL_setDefaultOptions() { + if (this.currentNode==null) { this.currentNode = this; } + for (var i=0; i<arguments.length; i++) { + var o = this.findMatchingOptionInArray(this.currentNode.options,null,arguments[i],false); + if (o!=null) { + o.defaultSelected = true; + } + } + this.currentNode = null; +} + +// Set the options which should be selected when the page loads. This is different than the default value and ONLY applies when the page LOADS +function DOL_setValues() { + if (this.currentField==null) { + alert("Can't call setValues() without using forField() first!"); + return; + } + if (typeof(this.values[this.currentField])=="undefined") { + this.values[this.currentField] = new Object(); + } + for (var i=0; i<arguments.length; i++) { + this.values[this.currentField][arguments[i]] = true; + } + this.currentField = null; +} + +// Manually set the form for the object using an index +function DOL_setFormIndex(i) { + this.formIndex = i; +} + +// Manually set the form for the object using a form name +function DOL_setFormName(n) { + this.formName = n; +} + +// Print blank <option> objects for Netscape4, since it refuses to grow or shrink select boxes for new options +function DOL_printOptions(name) { + // Only need to write out "dummy" options for Netscape4 + if ((navigator.appName == 'Netscape') && (parseInt(navigator.appVersion) <= 4)){ + var index = this.fieldIndexes[name]; + var ret = ""; + if (typeof(this.numberOfOptions[index])!="undefined") { + for (var i=0; i<this.numberOfOptions[index]; i++) { + ret += "<OPTION>"; + } + } + ret += "<OPTION>"; + if (typeof(this.longestString[index])!="undefined") { + for (var i=0; i<this.longestString[index].length; i++) { + ret += "_"; + } + } + document.writeln(ret); + } +} + +// Add a list of field names which use this option-mapping object. +// A single mapping object may be used by multiple sets of fields +function DOL_addDependentFields() { + for (var i=0; i<arguments.length; i++) { + this.fieldListIndexes[arguments[i].toString()] = this.fieldNames.length; + this.fieldIndexes[arguments[i].toString()] = i; + } + this.fieldNames[this.fieldNames.length] = arguments; +} + +// Called when a parent select box is changed. It populates its direct child, then calls change on the child object to continue the population. +function DOL_change(obj, usePreselected) { + if (usePreselected==null || typeof(usePreselected)=="undefined") { usePreselected = false; } + var changedListIndex = this.fieldListIndexes[obj.name]; + var changedIndex = this.fieldIndexes[obj.name]; + var child = this.child(obj); + if (child == null) { return; } // No child, no need to continue + if (obj.type == "select-one") { + // Treat single-select differently so we don't have to scan the entire select list, which could potentially speed things up + if (child.options!=null) { + child.options.length=0; // Erase all the options from the child so we can re-populate + } + if (obj.options!=null && obj.options.length>0 && obj.selectedIndex>=0) { + var o = obj.options[obj.selectedIndex]; + this.populateChild(o.DOLOption,child,usePreselected); + this.selectChildOptions(child,usePreselected); + } + } + else if (obj.type == "select-multiple") { + // For each selected value in the parent, find the options to fill in for this list + // Loop through the child list and keep track of options that are currently selected + var currentlySelectedOptions = new Array(); + if (!usePreselected) { + for (var i=0; i<child.options.length; i++) { + var co = child.options[i]; + if (co.selected) { + this.addNewOptionToList(currentlySelectedOptions, co.text, co.value, co.defaultSelected); + } + } + } + child.options.length=0; + if (obj.options!=null) { + var obj_o = obj.options; + // For each selected option in the parent... + for (var i=0; i<obj_o.length; i++) { + if (obj_o[i].selected) { + // if option is selected, add its children to the list + this.populateChild(obj_o[i].DOLOption,child,usePreselected); + } + } + // Now go through and re-select any options which were selected before + var atLeastOneSelected = false; + if (!usePreselected) { + for (var i=0; i<child.options.length; i++) { + var m = this.findMatchingOptionInArray(currentlySelectedOptions,child.options[i].text,child.options[i].value,true); + if (m!=null) { + child.options[i].selected = true; + atLeastOneSelected = true; + } + } + } + if (!atLeastOneSelected) { + this.selectChildOptions(child,usePreselected); + } + } + } + // Change all the way down the chain + this.change(child,usePreselected); +} +function DOL_populateChild(dolOption,childSelectObj,usePreselected) { + // If this opton has sub-options, populate the child list with them + if (dolOption!=null && dolOption.options!=null) { + for (var j=0; j<dolOption.options.length; j++) { + var srcOpt = dolOption.options[j]; + if (childSelectObj.options==null) { childSelectObj.options = new Array(); } + // Put option into select list + var duplicate = false; + var preSelectedExists = false; + for (var k=0; k<childSelectObj.options.length; k++) { + var csi = childSelectObj.options[k]; + if (csi.text==srcOpt.text && csi.value==srcOpt.value) { + duplicate = true; + break; + } + } + if (!duplicate) { + var newopt = new Option(srcOpt.text, srcOpt.value, false, false); + newopt.selected = false; // Again, we have to do these two statements for NN4 to work + newopt.defaultSelected = false; + newopt.DOLOption = srcOpt; + childSelectObj.options[childSelectObj.options.length] = newopt; + } + } + } +} + +// Once a child select is populated, go back over it to select options which should be selected +function DOL_selectChildOptions(obj,usePreselected) { + // Look to see if any options are preselected=true. If so, then set then selected if usePreselected=true, otherwise set defaults + var values = this.values[obj.name]; + var preselectedExists = false; + if (usePreselected && values!=null && typeof(values)!="undefined") { + for (var i=0; i<obj.options.length; i++) { + var v = obj.options[i].value; + if (v!=null && values[v]!=null && typeof(values[v])!="undefined") { + preselectedExists = true; + break; + } + } + } + // Go back over all the options to do the selection + var atLeastOneSelected = false; + for (var i=0; i<obj.options.length; i++) { + var o = obj.options[i]; + if (preselectedExists && o.value!=null && values[o.value]!=null && typeof(values[o.value])!="undefined") { + o.selected = true; + atLeastOneSelected = true; + } + else if (!preselectedExists && o.DOLOption!=null && o.DOLOption.defaultSelected) { + o.selected = true; + atLeastOneSelected = true; + } + else { + o.selected = false; + } + } + // If nothing else was selected, select the first one by default + if (this.selectFirstOption && !atLeastOneSelected && obj.options.length>0) { + obj.options[0].selected = true; + } + else if (!atLeastOneSelected && obj.type=="select-one") { + obj.selectedIndex = -1; + } +} diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_0_inverselink.php b/modules_v2/GEDFact_assistant/_MEDIA/media_0_inverselink.php new file mode 100644 index 0000000000..0f28cef48d --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_0_inverselink.php @@ -0,0 +1,277 @@ +<?php +// Media Link Assistant Control module for webtrees +// +// Media Link information about an individual +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +// GEDFact Media assistant replacement code for inverselink.php: =========================== + +//-- extra page parameters and checking +$more_links = safe_REQUEST($_REQUEST, 'more_links', WT_REGEX_UNSAFE); +$exist_links = safe_REQUEST($_REQUEST, 'exist_links', WT_REGEX_UNSAFE); +$gid = safe_GET_xref('gid'); +$update_CHAN = safe_REQUEST($_REQUEST, 'preserve_last_changed', WT_REGEX_UNSAFE); + + +if (empty($linktoid) || empty($linkto)) { + $paramok = false; + $toitems = ""; +} else { + switch ($linkto) { + case 'person': + $toitems = WT_I18N::translate('To Person'); + break; + case 'family': + $toitems = WT_I18N::translate('To Family'); + break; + case 'source': + $toitems = WT_I18N::translate('To Source'); + break; + } +} +if (WT_USER_IS_ADMIN) { + print_simple_header(WT_I18N::translate('Link media')." ".$toitems); +} else { + print_simple_header(WT_I18N::translate('Administration')); + echo WT_I18N::translate('Unable to authenticate user.'); +} + +if ($ENABLE_AUTOCOMPLETE) require WT_ROOT.'js/autocomplete.js.htm'; + + +//-- check for admin +//$paramok = WT_USER_CAN_EDIT; +$paramok = WT_USER_GEDCOM_ADMIN; +if (!empty($linktoid)) $paramok = canDisplayRecord(WT_GED_ID, find_gedcom_record($linktoid), WT_GED_ID); + +if ($action == "choose" && $paramok) { + + ?> + <script type="text/javascript"> + <!-- + // Javascript variables + var id_empty = "<?php echo WT_I18N::translate('When adding a Link, the ID field cannot be empty.'); ?>"; + + var pastefield; + var language_filter, magnify; + language_filter = ""; + magnify = ""; + + function openerpasteid(id) { + window.opener.paste_id(id); + window.close(); + } + + function paste_id(value) { + pastefield.value = value; + } + + function paste_char(value, lang, mag) { + pastefield.value += value; + language_filter = lang; + magnify = mag; + } + + function blankwin() { + if (document.getElementById('gid').value == "" || document.getElementById('gid').value.length<=1) { + alert(id_empty); + } else { + var iid = document.getElementById('gid').value; + //var winblank = window.open('module.php?mod=GEDFact_assistant&mod_action=_MEDIA/media_query_3a&iid='+iid, 'winblank', 'top=100, left=200, width=400, height=20, toolbar=0, directories=0, location=0, status=0, menubar=0, resizable=1, scrollbars=1'); + var winblank = window.open(WT_MODULES_DIR+'GEDFact_assistant/_MEDIA/media_query_3a.php?iid='+iid, 'winblank', 'top=100, left=200, width=400, height=20, toolbar=0, directories=0, location=0, status=0, menubar=0, resizable=1, scrollbars=1'); + } + } + + var GEDFact_assist = "installed"; +//--> + </script> + <script src="webtrees.js" type="text/javascript"></script> + <link href ="<?php echo WT_MODULES_DIR; ?>GEDFact_assistant/css/media_0_inverselink.css" rel="stylesheet" type="text/css" media="screen" /> + + <?php + echo '<form name="link" method="get" action="inverselink.php">'; + // echo '<input type="hidden" name="action" value="choose" />'; + echo '<input type="hidden" name="action" value="update" />'; + if (!empty($mediaid)) { + echo '<input type="hidden" name="mediaid" value="', $mediaid, '" />'; + } + if (!empty($linktoid)) { + echo '<input type="hidden" name="linktoid" value="', $linktoid, '" />'; + } + echo '<input type="hidden" name="linkto" value="', $linkto, '" />'; + echo '<input type="hidden" name="ged" value="', $GEDCOM, '" />'; + echo '<table class="facts_table center ', $TEXT_DIRECTION, '">'; + echo '<tr><td class="topbottombar" colspan="2">'; + echo WT_I18N::translate('Link media'), ' ', $toitems, help_link('add_media_linkid'); + echo '</td></tr><tr><td class="descriptionbox width20 wrap">', WT_I18N::translate('Media'), '</td>'; + echo '<td class="optionbox wrap">'; + if (!empty($mediaid)) { + //-- Get the title of this existing Media item + $title= + WT_DB::prepare("SELECT m_titl FROM `##media` where m_media=? AND m_gedfile=?") + ->execute(array($mediaid, WT_GED_ID)) + ->fetchOne(); + if ($title) { + echo '<b>', PrintReady($title), '</b>'; + } else { + echo '<b>', $mediaid, '</b>'; + } + echo '<table><tr><td>'; + //-- Get the filename of this existing Media item + $filename= + WT_DB::prepare("SELECT m_file FROM `##media` where m_media=? AND m_gedfile=?") + ->execute(array($mediaid, WT_GED_ID)) + ->fetchOne(); + $filename = str_replace(" ", "%20", $filename); + $thumbnail = thumbnail_file($filename, false); + echo '<img src = ', $thumbnail, ' class="thumbheight" />'; + echo '</td></tr></table>'; + echo '</td></tr>'; + echo '<tr><td class="descriptionbox width20 wrap">', WT_I18N::translate('Links'), '</td>'; + echo '<td class="optionbox wrap">'; + require WT_ROOT.WT_MODULES_DIR.'GEDFact_assistant/_MEDIA/media_query_1a.php'; + echo '</td></tr>'; + } + + if (!isset($linktoid)) { $linktoid = ""; } + + echo '<tr><td class="descriptionbox wrap">'; + echo WT_I18N::translate('Add links'); + echo '<td class="optionbox wrap ">'; + if ($linktoid=="") { + // ---- + } else { + $record=WT_Person::getInstance($linktoid); + echo '<b>', PrintReady($record->getFullName()), '</b>'; + } + echo '<table><tr><td>'; + echo "<input type=\"text\" name=\"gid\" id=\"gid\" size=\"6\" value=\"\" />"; + // echo ' Enter Name or ID <b>OR</b> Search for ID '; + echo '</td><td style=" padding-bottom:2px; vertical-align:middle">'; + echo ' '; + if (isset($WT_IMAGES["add"])) { + echo '<a href="#"><img style="border-style:none;" src="', $WT_IMAGES["add"], '" alt="', WT_I18N::translate('Add'), ' "title="', WT_I18N::translate('Add'), '" align="middle" name="addLink" value="" onClick="javascript:blankwin(); return false;" />'; + } else { + echo '<button name="addLink" value="" type="button" onClick="javascript:blankwin(); return false;">', WT_I18N::translate('Add'), '</button>'; + } + echo ' '; + print_findindi_link("gid", ""); + echo ' '; + print_findfamily_link("gid"); + echo ' '; + print_findsource_link("gid"); + echo '</td></tr></table>'; + echo "<sub>" . WT_I18N::translate('Enter or search for the ID of the person, family, or source to which this media item should be linked.') . "</sub>"; + + + echo '<br /><br />'; + echo '<input type="hidden" name="idName" id="idName" size="36" value="Name of ID" />'; + require WT_ROOT.WT_MODULES_DIR.'GEDFact_assistant/_MEDIA/media_query_2a.php'; + echo '</td></tr>'; + // Admin Option CHAN log update override ======================= + if (WT_USER_IS_ADMIN) { + echo "<tr><td class=\"descriptionbox ", $TEXT_DIRECTION, " wrap width25\">"; + echo WT_I18N::translate('Admin Option'), "</td><td class=\"optionbox wrap\">"; + if ($NO_UPDATE_CHAN) { + echo "<input type=\"checkbox\" checked=\"checked\" name=\"preserve_last_changed\" />"; + } else { + echo "<input type=\"checkbox\" name=\"preserve_last_changed\" />"; + } + echo WT_I18N::translate('Do not update the CHAN (Last Change) records'), help_link('no_update_CHAN'), '<br /><br />'; + echo "</td></tr>"; + } + echo '</tr>'; + echo '<input type="hidden" name="more_links" value="No_Values" />'; + echo '<input type="hidden" name="exist_links" value="No_Values" />'; + echo '<tr><td colspan="2">'; + echo '</td></tr>'; + echo '<tr><td class="topbottombar" colspan="2">'; + echo '<center><input type="submit" value="', WT_I18N::translate('Save'), '" onclick="javascript:shiftlinks();" />'; + echo '</center></td></tr>'; + require WT_ROOT.WT_MODULES_DIR.'GEDFact_assistant/_MEDIA/media_7_parse_addLinksTbl.php'; + echo '</table>'; + echo '</form>'; + echo '<br/><br/><center><a href="javascript:;" onclick="if (window.opener.showchanges) window.opener.showchanges(); window.close(); winNav.close(); ">', WT_I18N::translate('Close Window'), '</a><br /></center>'; + // print_simple_footer(); + +} elseif ($action == "update" && $paramok) { + + echo "<b>", $mediaid, "</b><br/><br />"; + + // Unlink records indicated by radio button ========= + if (isset($exist_links) && $exist_links!="No_Values") { + $exist_links = substr($exist_links, 0, -1); + $rem_exist_links = (explode(", ", $exist_links)); + foreach ($rem_exist_links as $remLinkId) { + global $linkToId; + $linkToId = PrintReady($remLinkId); + echo WT_I18N::translate('Link to %s deleted', $remLinkId); + echo '<br />'; + if ($update_CHAN=='no_change') { + unlinkMedia($remLinkId, 'OBJE', $mediaid, 1, false); + } else { + unlinkMedia($remLinkId, 'OBJE', $mediaid, 1, true); + } + } + echo '<br />'; + } else { + // echo nothing and do nothing + } + + // Add new Links ==================================== + if (isset($more_links) && $more_links!="No_Values" && $more_links!=",") { + $more_links = substr($more_links, 0, -1); + $add_more_links = (explode(", ", $more_links)); + foreach ($add_more_links as $addLinkId) { + global $unlinkFromId; + $$unlinkFromId = PrintReady($addLinkId); + echo WT_I18N::translate('Link to %s added', $addLinkId); + if ($update_CHAN=='no_change') { + linkMedia($mediaid, $addLinkId, 1, false); + } else { + linkMedia($mediaid, $addLinkId, 1, true); + } + echo '<br />'; + } + echo '<br />'; + } else if ($more_links==",") { + // echo nothing and do nothing + } else { + //echo $mediaid, $pgv_lang["media_now_linked to"], '(', $gid, ')<br />'; + //linkMedia($mediaid, $gid); + } + + if ($update_CHAN=='no_change') { + echo WT_I18N::translate('No CHAN (Last Change) records were updated'); + echo '<br />'; + } + + echo '<br/><br/><center><a href="javascript:;" onclick="if (window.opener.showchanges) window.opener.showchanges(); window.close(); winNav.close(); ">', WT_I18N::translate('Close Window'), '</a><br /></center>'; + print_simple_footer(); + +} else { + // echo '<center>You must be logged in as an Administrator<center>'; + echo '<br/><br/><center><a href="javascript:;" onclick="if (window.opener.showchanges) window.opener.showchanges(); window.close(); winNav.close();">', WT_I18N::translate('Close Window'), '</a><br /></center>'; + //print_simple_footer(); +} diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_1_ctrl.php b/modules_v2/GEDFact_assistant/_MEDIA/media_1_ctrl.php new file mode 100644 index 0000000000..f4b66a4423 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_1_ctrl.php @@ -0,0 +1,86 @@ +<?php +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + */ + + if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +global $summary, $TEXT_DIRECTION, $censyear, $censdate; + +$pid = safe_get('pid'); + +// echo $pid; + +$year = "1901"; +$censevent = new WT_Event("1 CENS\n2 DATE 03 MAR".$year.""); +$censdate = $censevent->getDate(); +$censyear = $censdate->date1->y; +$ctry = "UK"; +// $married = WT_Date::Compare($censdate, $marrdate); +$married=-1; + + +// Test to see if Base pid is filled in ============================ +if ($pid=="") { + echo "<br /><br />"; + echo "<b><font color=\"red\">YOU MUST enter a Base individual ID to be able to \"ADD\" Individual Links</font></b>"; + echo "<br /><br />"; +} else { + + $person=WT_Person::getInstance($pid); + // var_dump($person->getAllNames()); + $nam = $person->getAllNames(); + if (PrintReady($person->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($person->getDeathYear()); } + if (PrintReady($person->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($person->getBirthYear()); } + if ($married>=0 && isset($nam[1])) { + $wholename = rtrim($nam[1]['fullNN']); + } else { + $wholename = rtrim($nam[0]['fullNN']); + } + $currpid=$pid; + + echo '<table width=400 class="facts_table center ', $TEXT_DIRECTION, '">'; + echo '<tr><td class="topbottombar" colspan="1">'; + echo '<b>', WT_I18N::translate('Family Navigator'), '</b>'; + echo '</td></tr>'; + echo '<tr>'; + //echo '<td class="optionbox wrap" valign="top" align="left" width="50%" >'; + //echo WT_I18N::translate('Add Family, and Search links'); + //echo '</td>'; + echo '<td valign="top" width=400>'; + //-- Search and Add Family Members Area ========================================= + require WT_MODULES_DIR.'GEDFact_assistant/_MEDIA/media_3_search_add.php'; + echo '</td>'; + echo '</tr>'; + echo '</table>'; + +} // End IF test for Base pid diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_3_find.php b/modules_v2/GEDFact_assistant/_MEDIA/media_3_find.php new file mode 100644 index 0000000000..e8c229fdcc --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_3_find.php @@ -0,0 +1,802 @@ +<?php +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * Popup window that will allow a user to search for a family id, person id + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @version $Id$ + */ + +global $MEDIA_DIRECTORY, $MEDIA_DIRECTORY_LEVELS, $TEXT_DIRECTION, $ABBREVIATE_CHART_LABELS; + +$type =safe_GET('type', WT_REGEX_ALPHA, 'indi'); +$filter =safe_GET('filter'); +$action =safe_GET('action'); +$callback =safe_GET('callback', WT_REGEX_NOSCRIPT, 'paste_id'); +$create =safe_GET('create'); +$media =safe_GET('media'); +$external_links =safe_GET('external_links'); +$directory =safe_GET('directory', WT_REGEX_NOSCRIPT, $MEDIA_DIRECTORY); +$multiple =safe_GET_bool('multiple'); +$showthumb =safe_GET_bool('showthumb'); +$all =safe_GET_bool('all'); +$subclick =safe_GET('subclick'); +$choose =safe_GET('choose', WT_REGEX_NOSCRIPT, '0all'); +$level =safe_GET('level', WT_REGEX_INTEGER, 0); +$language_filter=safe_GET('language_filter'); +$magnify =safe_GET_bool('magnify'); + +if ($showthumb) { + $thumbget='&showthumb=true'; +} else { + $thumbget=''; +} + +if ($subclick=='all') { + $all=true; +} + +$embed = substr($choose, 0, 1)=="1"; +$chooseType = substr($choose, 1); +if ($chooseType!="media" && $chooseType!="0file") { + $chooseType = "all"; +} + +//-- force the thumbnail directory to have the same layout as the media directory +//-- Dots and slashes should be escaped for the preg_replace +$srch = "/".addcslashes($MEDIA_DIRECTORY, '/.')."/"; +$repl = addcslashes($MEDIA_DIRECTORY."thumbs/", '/.'); +$thumbdir = stripcslashes(preg_replace($srch, $repl, $directory)); + +//-- prevent script from accessing an area outside of the media directory +//-- and keep level consistency +if (($level < 0) || ($level > $MEDIA_DIRECTORY_LEVELS)) { + $directory = $MEDIA_DIRECTORY; + $level = 0; +} elseif (preg_match("'^$MEDIA_DIRECTORY'", $directory)==0) { + $directory = $MEDIA_DIRECTORY; + $level = 0; +} +// End variables for find media + +// Variables for Find Special Character +if (empty($language_filter)) { + if (!empty($_SESSION["language_filter"])) { + $language_filter=$_SESSION["language_filter"]; + } else { + $language_filter=WT_LOCALE; + } +} +require WT_ROOT.'includes/specialchars.php'; +// End variables for Find Special Character + +switch ($type) { +case "indi": + print_simple_header(WT_I18N::translate('Find individual ID')); + break; +case "fam": + print_simple_header(WT_I18N::translate('Find Family List')); + break; +case "media": + print_simple_header(WT_I18N::translate('Find media')); + $action="filter"; + break; +case "place": + print_simple_header(WT_I18N::translate('Find Place')); + $action="filter"; + break; +case "repo": + print_simple_header(WT_I18N::translate('Repositories')); + $action="filter"; + break; +case "note": + print_simple_header(WT_I18N::translate('Find Shared Note')); + $action="filter"; + break; +case "source": + print_simple_header(WT_I18N::translate('Find Source')); + $action="filter"; + break; +case "specialchar": + print_simple_header(WT_I18N::translate('Find Special Characters')); + $action="filter"; + break; +} + +echo WT_JS_START; +?> + + function pasterow(id, name, gend, yob, age, bpl) { + window.opener.opener.insertRowToTable(id, name, '', gend, '', yob, age, 'Y', '', bpl); + <?php // if (!$multiple) echo "window.close();"; ?> + } + + function pasteid(id, name, thumb) { + if (thumb) { + window.opener.<?php echo $callback; ?>(id, name, thumb); + <?php if (!$multiple) echo "window.close();"; ?> + } else { + // GEDFact_assistant ======================== + if (window.opener.document.getElementById('addlinkQueue')) { + window.opener.insertRowToTable(id, name); + // Check if Indi, Fam or source =================== + /* + if (id.match("I")=="I") { + var win01 = window.opener.window.open('edit_interface.php?action=addmedia_links¬eid=newnote&pid='+id, 'win01', 'top=50, left=600, width=420, height=650, resizable=1, scrollbars=1'); + if (window.focus) {win01.focus();} + } else if (id.match("F")=="F") { + // TODO --- alert('Opening Navigator with family id entered will come later'); + } + */ + } + window.opener.<?php echo $callback; ?>(id); + if (window.opener.pastename) window.opener.pastename(name); + <?php if (!$multiple) echo "window.close();"; ?> + } + } + var language_filter; + function paste_char(selected_char, language_filter, magnify) { + window.opener.paste_char(selected_char, language_filter, magnify); + return false; + } + function setMagnify() { + document.filterspecialchar.magnify.value = '<?php echo !$magnify; ?>'; + document.filterspecialchar.submit(); + } + function checknames(frm) { + if (document.forms[0].subclick) button = document.forms[0].subclick.value; + else button = ""; + if (frm.filter.value.length<2&button!="all") { + alert("<?php echo WT_I18N::translate('Please enter more than one character'); ?>"); + frm.filter.focus(); + return false; + } + if (button=="all") { + frm.filter.value = ""; + } + return true; + } +<?php +echo WT_JS_END; + +$options = array(); +$options["option"][]= "findindi"; +$options["option"][]= "findfam"; +$options["option"][]= "findmedia"; +$options["option"][]= "findplace"; +$options["option"][]= "findrepo"; +$options["option"][]= "findnote"; +$options["option"][]= "findsource"; +$options["option"][]= "findspecialchar"; +$options["form"][]= "formindi"; +$options["form"][]= "formfam"; +$options["form"][]= "formmedia"; +$options["form"][]= "formplace"; +$options["form"][]= "formrepo"; +$options["form"][]= "formnote"; +$options["form"][]= "formsource"; +$options["form"][]= "formspecialchar"; + +echo "<div align=\"center\">"; +echo "<table class=\"list_table $TEXT_DIRECTION width90\" border=\"0\">"; +echo "<tr><td style=\"padding: 10px;\" valign=\"top\" class=\"facts_label03 width90\">"; // start column for find text header + +switch ($type) { +case "indi": + echo WT_I18N::translate('Find individual ID'); + break; +case "fam": + echo WT_I18N::translate('Find Family List'); + break; +case "media": + echo WT_I18N::translate('Find media'); + break; +case "place": + echo WT_I18N::translate('Find Place'); + break; +case "repo": + echo WT_I18N::translate('Repositories'); + break; +case "note": + echo WT_I18N::translate('Find Shared Note'); + break; +case "source": + echo WT_I18N::translate('Find Source'); + break; +case "specialchar": + echo WT_I18N::translate('Find Special Characters'); + break; +} + +echo "</td>"; // close column for find text header + +// start column for find options +echo "</tr><tr><td class=\"list_value\" style=\"padding: 0px;\">"; + +// Show indi and hide the rest +if ($type == "indi") { + echo "<div align=\"center\">"; + echo "<form name=\"filterindi\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"indi\" />"; + echo "<input type=\"hidden\" name=\"multiple\" value=\"$multiple\" />"; +/* + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Name contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" value=\"", WT_I18N::translate('Filter'), "\" /><br />"; + echo "</td></tr></table>"; +*/ + echo "</form></div>"; +} + +// Show fam and hide the rest +if ($type == "fam") { + echo "<div align=\"center\">"; + echo "<form name=\"filterfam\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"fam\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"multiple\" value=\"$multiple\" />"; + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Name contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" value=\"", WT_I18N::translate('Filter'), "\" /><br />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show media and hide the rest +if ($type == "media" && $MULTI_MEDIA) { + echo "<div align=\"center\">"; + echo "<form name=\"filtermedia\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"choose\" value=\"", $choose, "\" />"; + echo "<input type=\"hidden\" name=\"directory\" value=\"", $directory, "\" />"; + echo "<input type=\"hidden\" name=\"thumbdir\" value=\"", $thumbdir, "\" />"; + echo "<input type=\"hidden\" name=\"level\" value=\"", $level, "\" />"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"media\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Media contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo help_link('simple_filter'); + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" wstyle=\"padding: 5px;\">"; + echo "<input type=\"checkbox\" name=\"showthumb\" value=\"true\""; + if ($showthumb) echo "checked=\"checked\""; + echo "onclick=\"javascript: this.form.submit();\" />", WT_I18N::translate('Show thumbnails'); + echo help_link('show_thumb'); + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show place and hide the rest +if ($type == "place") { + echo "<div align=\"center\">"; + echo "<form name=\"filterplace\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"place\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Place contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show repo and hide the rest +if ($type == "repo") { + echo "<div align=\"center\">"; + echo "<form name=\"filterrepo\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"repo\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Repository contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show Shared Notes and hide the rest +if ($type == "note") { + echo "<div align=\"center\">"; + echo "<form name=\"filternote\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"note\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Shared Note contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show source and hide the rest +if ($type == "source") { + echo "<div align=\"center\">"; + echo "<form name=\"filtersource\" method=\"get\" onsubmit=\"return checknames(this);\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"source\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"$callback\" />"; + echo "<input type=\"hidden\" name=\"subclick\">"; // This is for passing the name of which submit button was clicked + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo WT_I18N::translate('Source contains:'), " <input type=\"text\" name=\"filter\" value=\""; + if ($filter) echo $filter; + echo "\" />"; + echo "</td></tr>"; + echo "<tr><td class=\"list_label width10\" style=\"padding: 5px;\">"; + echo "<input type=\"submit\" name=\"search\" value=\"", WT_I18N::translate('Filter'), "\" onclick=\"this.form.subclick.value=this.name\" /> "; + echo "<input type=\"submit\" name=\"all\" value=\"", WT_I18N::translate('Display all'), "\" onclick=\"this.form.subclick.value=this.name\" />"; + echo "</td></tr></table>"; + echo "</form></div>"; +} + +// Show specialchar and hide the rest +if ($type == "specialchar") { + echo "<div align=\"center\">"; + echo "<form name=\"filterspecialchar\" method=\"get\" action=\"find.php\">"; + echo "<input type=\"hidden\" name=\"action\" value=\"filter\" />"; + echo "<input type=\"hidden\" name=\"type\" value=\"specialchar\" />"; + echo "<input type=\"hidden\" name=\"callback\" value=\"", $callback, "\" />"; + echo "<input type=\"hidden\" name=\"magnify\" value=\"", $magnify, "\" />"; + echo "<table class=\"list_table $TEXT_DIRECTION width100\" border=\"0\">"; + echo "<tr><td class=\"list_label\" style=\"padding: 5px;\">"; + echo "<select id=\"language_filter\" name=\"language_filter\" onchange=\"submit();\">"; + echo "<option value=\"\">", WT_I18N::translate('Change language'), "</option>"; + $language_options = ""; + foreach ($specialchar_languages as $key=>$value) { + $language_options.= "<option value=\"$key\">$value</option>"; + } + $language_options = str_replace("\"$language_filter\"", "\"$language_filter\" selected", $language_options); + echo $language_options; + echo "</select><br /><a href=\"javascript:;\" onclick=\"setMagnify()\">", WT_I18N::translate('Magnify'), "</a>"; + echo "</td></tr></table>"; + echo "</form></div>"; +} +// end column for find options +echo "</td></tr>"; +echo "</table>"; // Close table with find options + +echo "<br />"; +echo "<a href=\"javascript:;\" onclick=\"if (window.opener.showchanges) window.opener.showchanges(); window.close();\">", WT_I18N::translate('Close Window'), "</a><br />"; +echo "<br />"; + +if ($action=="filter") { + $filter = trim($filter); + $filter_array=explode(' ', preg_replace('/ {2,}/', ' ', $filter)); + + // Output Individual + if ($type == "indi") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr>"; + $myindilist=search_indis_names($filter_array, array(WT_GED_ID), 'AND'); + if ($myindilist) { + echo "<td class=\"list_value_wrap $TEXT_DIRECTION\"><ul>"; + usort($myindilist, array('WT_GedcomRecord', 'Compare')); + foreach ($myindilist as $indi) { + //echo $indi->format_list('li', true); + $nam = htmlspecialchars($indi->getFullName()); + echo "<li><a href=\"javascript:;\" onclick=\"pasterow( + '".$indi->getXref()."' , + '".$nam."' , + '".$indi->getSex()."' , + '".$indi->getbirthyear()."' , + '".(1901-$indi->getbirthyear())."' , + '".$indi->getbirthplace()."'); return false;\"> + <b>".$indi->getFullName()."</b> "; + + if ($ABBREVIATE_CHART_LABELS) { + $born=abbreviate_fact('BIRT'); + } else { + $born=translate_fact('BIRT'); + } + + + echo "</span><br><span class=\"list_item\">", $born, " ", $indi->getbirthyear(), " ", $indi->getbirthplace(), "</span></a></li>"; + + echo "<hr />"; + } + echo '</ul></td></tr><tr><td class="list_label">', WT_I18N::translate('Total individuals'), ' ', count($myindilist), '</tr></td>'; + } else { + echo "<td class=\"list_value_wrap\">"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + echo "</table>"; + } + + // Output Family + if ($type == "fam") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr>"; + // Get the famrecs with hits on names from the family table + // Get the famrecs with hits in the gedcom record from the family table + $myfamlist = wt_array_merge( + search_fams_names($filter_array, array(WT_GED_ID), 'AND'), + search_fams($filter_array, array(WT_GED_ID), 'AND', true) + ); + if ($myfamlist) { + $curged = $GEDCOM; + echo "<td class=\"list_value_wrap $TEXT_DIRECTION\"><ul>"; + usort($myfamlist, array('WT_GedcomRecord', 'Compare')); + foreach ($myfamlist as $family) { + echo $family->format_list('li', true); + } + echo '</ul></td></tr><tr><td class="list_label">', WT_I18N::translate('Total families'), ' ', count($myfamlist), '</tr></td>'; + } else { + echo "<td class=\"list_value_wrap\">"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + echo "</table>"; + } + + // Output Media + if ($type == "media") { + global $dirs; + + $medialist = get_medialist(true, $directory); + + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\">"; + // Show link to previous folder + if ($level>0) { + $levels = explode("/", $directory); + $pdir = ""; + for ($i=0; $i<count($levels)-2; $i++) $pdir.=$levels[$i]."/"; + $levels = explode("/", $thumbdir); + $pthumb = ""; + for ($i=0; $i<count($levels)-2; $i++) $pthumb.=$levels[$i]."/"; + $uplink = "<a href=\"find.php?directory=".rawurlencode($pdir)."&thumbdir=".rawurlencode($pthumb)."&level=".($level-1)."{$thumbget}&type=media&choose={$choose}\"> <-- <span dir=\"ltr\">".$pdir."</span> </a><br />"; + } + + // Start of media directory table + echo "<table class=\"list_table $TEXT_DIRECTION width90\">"; + + // Tell the user where he is + echo "<tr>"; + echo "<td class=\"topbottombar\" colspan=\"2\">"; + echo WT_I18N::translate('Current directory'); + echo "<br />"; + echo substr($directory, 0, -1); + echo "</td>"; + echo "</tr>"; + + // display the directory list + if (count($dirs) || $level) { + sort($dirs); + if ($level) { + echo "<tr><td class=\"list_value $TEXT_DIRECTION\" colspan=\"2\">"; + echo $uplink, "</td></tr>"; + } + echo "<tr><td class=\"descriptionbox $TEXT_DIRECTION\" colspan=\"2\">"; + echo "<a href=\"find.php?directory=".rawurlencode($directory)."&thumbdir=".str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY."thumbs/", $directory)."&level={$level}{$thumbget}&external_links=http&type=media&choose={$choose}\">", WT_I18N::translate('External objects'), "</a>"; + echo "</td></tr>"; + foreach ($dirs as $indexval => $dir) { + echo "<tr><td class=\"list_value $TEXT_DIRECTION\" colspan=\"2\">"; + echo "<a href=\"find.php?directory=".rawurlencode($directory.$dir)."/&thumbdir=".rawurlencode($directory.$dir)."/&level=".($level+1)."{$thumbget}&type=media&choose={$choose}\"><span dir=\"ltr\">", $dir, "</span></a>"; + echo "</td></tr>"; + } + } + echo "<tr><td class=\"descriptionbox $TEXT_DIRECTION\" colspan=\"2\"></td></tr>"; + + /** + * This action generates a thumbnail for the file + * + * @name $create->thumbnail + */ + if ($create=="thumbnail") { + $filename = $_REQUEST["file"]; + generate_thumbnail($directory.$filename, $thumbdir.$filename); + } + + echo "<br />"; + + // display the images TODO x across if lots of files?? + if (count($medialist) > 0) { + foreach ($medialist as $indexval => $media) { + + // Check if the media belongs to the current folder + preg_match_all("/\//", $media["FILE"], $hits); + $ct = count($hits[0]); + + if (($ct <= $level+1 && $external_links != "http" && !isFileExternal($media["FILE"])) || (isFileExternal($media["FILE"]) && $external_links == "http")) { + // simple filter to reduce the number of items to view + $isvalid = filterMedia($media, $filter, 'http'); + if ($isvalid && $chooseType!="all") { + if ($chooseType=="0file" && !empty($media["XREF"])) $isvalid = false; // skip linked media files + if ($chooseType=="media" && empty($media["XREF"])) $isvalid = false; // skip unlinked media files + } + if ($isvalid) { + if ($media["EXISTS"] && media_filesize($media["FILE"]) != 0) { + $imgsize = findImageSize($media["FILE"]); + $imgwidth = $imgsize[0]+40; + $imgheight = $imgsize[1]+150; + } + else { + $imgwidth = 0; + $imgheight = 0; + } + + echo "<tr>"; + + //-- thumbnail field + if ($showthumb) { + echo "<td class=\"list_value $TEXT_DIRECTION width10\">"; + if (isset($media["THUMB"])) echo "<a href=\"javascript:;\" onclick=\"return openImage('", rawurlencode($media["FILE"]), "', $imgwidth, $imgheight);\"><img src=\"", filename_decode($media["THUMB"]), "\" border=\"0\" width=\"50\" alt=\"\" /></a>"; + else echo " "; + } + + //-- name and size field + echo "<td class=\"list_value $TEXT_DIRECTION\">"; + if ($media["TITL"] != "") { + echo "<b>", PrintReady($media["TITL"]), "</b> "; + if ($TEXT_DIRECTION=="rtl") echo getRLM(); + echo "(", $media["XREF"], ")"; + if ($TEXT_DIRECTION=="rtl") echo getRLM(); + echo "<br />"; + } + if (!$embed) { + echo "<a href=\"javascript:;\" onclick=\"pasteid('", addslashes($media["FILE"]), "');\"><span dir=\"ltr\">", $media["FILE"], "</span></a> -- "; + } + else echo "<a href=\"javascript:;\" onclick=\"pasteid('", $media["XREF"], "','", addslashes($media["TITL"]), "','", addslashes($media["THUMB"]), "');\"><span dir=\"ltr\">", $media["FILE"], "</span></a> -- "; + echo "<a href=\"javascript:;\" onclick=\"return openImage('", rawurlencode($media["FILE"]), "', $imgwidth, $imgheight);\">", WT_I18N::translate('View'), "</a><br />"; + if (!$media["EXISTS"] && !isFileExternal($media["FILE"])) echo $media["FILE"], "<br /><span class=\"error\">", WT_I18N::translate('The filename entered does not exist.'), "</span><br />"; + else if (!isFileExternal($media["FILE"]) && !empty($imgsize[0])) { + echo "<br /><sub> ", WT_I18N::translate('Image Dimensions'), " -- ", $imgsize[0], "x", $imgsize[1], "</sub><br />"; + } + if ($media["LINKED"]) { + echo WT_I18N::translate('This media object is linked to the following:'), "<br />"; + foreach ($media["LINKS"] as $indi => $type_record) { + if ($type_record!='INDI' && $type_record!='FAM' && $type_record!='SOUR' && $type_record!='OBJE') continue; + $record=WT_GedcomRecord::getInstance($indi); + echo '<br /><a href="', $record->getHtmlUrl(), '">'; + switch($type_record) { + case 'INDI': + echo WT_I18N::translate('View Person'), ' - '; + break; + case 'FAM': + echo WT_I18N::translate('View Family'), ' - '; + break; + case 'SOUR': + echo WT_I18N::translate('View Source'), ' - '; + break; + case 'OBJE': + echo WT_I18N::translate('View Object'), ' - '; + break; + } + echo PrintReady($record->getFullName()), '</a>'; + } + } else { + echo WT_I18N::translate('This media object is not linked to any GEDCOM record.'); + } + echo "</td>"; + } + } + } + } + else { + echo "<tr><td class=\"list_value_wrap\">"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + echo "</table>"; + } + + // Output Places + if ($type == "place") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr>"; + $placelist = array(); + if ($all || $filter) { + $placelist=find_place_list($filter); + $ctplace = count($placelist); + if ($ctplace>0) { + $revplacelist = array(); + foreach ($placelist as $indexval => $place) { + $levels = explode(',', $place); // -- split the place into comma seperated values + $levels = array_reverse($levels); // -- reverse the array so that we get the top level first + $placetext = ""; + $j=0; + foreach ($levels as $indexval => $level) { + if ($j>0) $placetext .= ", "; + $placetext .= trim($level); + $j++; + } + $revplacelist[] = $placetext; + } + uasort($revplacelist, "utf8_strcasecmp"); + echo "<td class=\"list_value_wrap $TEXT_DIRECTION\"><ul>"; + foreach ($revplacelist as $place) { + echo "<li><a href=\"javascript:;\" onclick=\"pasteid('", str_replace(array("'", '"'), array("\'", '"'), $place), "');\">", PrintReady($place), "</a></li>"; + } + echo "</ul></td></tr>"; + echo "<tr><td class=\"list_label\">", WT_I18N::translate('Places found'), " ", $ctplace; + echo "</td></tr>"; + } + else { + echo "<tr><td class=\"list_value_wrap $TEXT_DIRECTION\"><ul>"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + } + echo "</table>"; + } + + // Output Repositories + if ($type == "repo") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr>"; + $repo_list = get_repo_list(WT_GED_ID); + if ($repo_list) { + echo "<td class=\"list_value_wrap\"><ul>"; + foreach ($repo_list as $repo) { + echo '<li><a href="', $repo->getHtmlUrl(), '" onclick="pasteid(\'', $repo->getXref(), '\');"><span class="list_item">', $repo->getListName(),'</span></a></li>'; + } + echo "</ul></td></tr>"; + echo "<tr><td class=\"list_label\">", WT_I18N::translate('Repositories found'), " ", count($repo_list); + echo "</td></tr>"; + } + else { + echo "<tr><td class=\"list_value_wrap\">"; + echo WT_I18N::translate('No results found.'); + echo "</td></tr>"; + } + echo "</table>"; + } + + // Output Shared Notes + if ($type=="note") { + echo '<table class="tabs_table ', $TEXT_DIRECTION, ' width90">'; + if ($filter) { + $mynotelist = search_notes($filter_array, array(WT_GED_ID), 'AND', true); + } else { + $mynotelist = get_note_list(WT_GED_ID); + } + if ($mynotelist) { + usort($mynotelist, array('WT_GedcomRecord', 'Compare')); + echo '<tr><td class="list_value_wrap"><ul>'; + foreach ($mynotelist as $note) { + echo '<li><a href="', $note->getHtmlUrl(), '" onclick="pasteid(\'', $note->getXref(), '\');"><span class="list_item">', $note->getListName(),'</span></a></li>'; + } + echo '</ul></td></tr><tr><td class="list_label">', WT_I18N::translate('Shared Notes found'), ' ', count($mynotelist), '</td></tr>'; + } + else { + echo '<tr><td class="list_value_wrap">', WT_I18N::translate('No results found.'), '</td></tr>'; + } + echo '</table>'; + } + + // Output Sources + if ($type=="source") { + echo '<table class="tabs_table ', $TEXT_DIRECTION, ' width90">'; + if ($filter) { + $mysourcelist = search_sources($filter_array, array(WT_GED_ID), 'AND', true); + } else { + $mysourcelist = get_source_list(WT_GED_ID); + } + if ($mysourcelist) { + usort($mysourcelist, array('WT_GedcomRecord', 'Compare')); + echo '<tr><td class="list_value_wrap"><ul>'; + foreach ($mysourcelist as $source) { + echo '<li><a href="', $source->getHtmlUrl(), '" onclick="pasteid(\'', $source->getXref(), '\');"><span class="list_item">', $source->getListName(),'</span></a></li>'; + } + echo '</ul></td></tr><tr><td class="list_label">', WT_I18N::translate('Total Sources'), ' ', count($mysourcelist), '</td></tr>'; + } + else { + echo '<tr><td class="list_value_wrap">', WT_I18N::translate('No results found.'), '</td></tr>'; + } + echo '</table>'; + } + + // Output Special Characters + if ($type == "specialchar") { + echo "<table class=\"tabs_table $TEXT_DIRECTION width90\"><tr><td class=\"list_value center wrap\" dir=\"$TEXT_DIRECTION\"><br/>"; + // lower case special characters + if ($magnify) { + echo '<span class="largechars">'; + } + foreach ($lcspecialchars as $key=>$value) { + $value = str_replace("'", "\'", $value); + echo "<a href=\"javascript:;\" onclick=\"return paste_char('$value', '$language_filter', '$magnify');\">"; + echo $key; + echo "</span></a> "; + } + if ($magnify) { + echo '<span class="largechars">'; + } + echo '<br/><br/>'; + //upper case special characters + if ($magnify) { + echo '<span class="largechars">'; + } + foreach ($ucspecialchars as $key=>$value) { + $value = str_replace("'", "\'", $value); + echo "<a href=\"javascript:;\" onclick=\"return paste_char('$value', '$language_filter', '$magnify');\">"; + echo $key; + echo "</span></a> "; + } + if ($magnify) { + echo '<span class="largechars">'; + } + echo '<br/><br/>'; + // other special characters (not letters) + if ($magnify) { + echo '<span class="largechars">'; + } + foreach ($otherspecialchars as $key=>$value) { + $value = str_replace("'", "\'", $value); + echo "<a href=\"javascript:;\" onclick=\"return paste_char('$value', '$language_filter', '$magnify');\">"; + echo $key; + echo "</span></a> "; + } + if ($magnify) { + echo '<span class="largechars">'; + } + echo '<br/><br/></td></tr></table>'; + } +} +echo "</div>"; // Close div that centers table + +// Set focus to the input field +echo WT_JS_START, 'document.filter', $type, '.filter.focus();', WT_JS_END; + +print_simple_footer(); diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_3_search_add.php b/modules_v2/GEDFact_assistant/_MEDIA/media_3_search_add.php new file mode 100644 index 0000000000..f6bebebb62 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_3_search_add.php @@ -0,0 +1,1447 @@ +<?php +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2007 to 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @version $Id$ + * @author Brian Holland +*/ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} +?> +<table class="outer_nav center"> + <?php + + //-- Search Function ------------------------------------------------------------ + ?> + <tr> + <td class="descriptionbox font9 center"><?php echo WT_I18N::translate('Search for People to add to Add Links list.'); ?></td> + </tr> + <tr> + <td id="srch" class="optionbox center"> + <script> + var enter_name = "<?php echo WT_I18N::translate('You must enter a name'); ?>"; + function findindi(persid) { + var findInput = document.getElementById('personid'); + txt = findInput.value; + if (txt=="") { + alert(enter_name); + } else { + var win02 = window.open( + "module.php?mod=GEDFact_assistant&mod_action=_MEDIA/media_3_find&callback=paste_id&action=filter&type=indi&multiple=&filter="+txt, "win02", "resizable=1, menubar=0, scrollbars=1, top=180, left=600, HEIGHT=600, WIDTH=450 "); + if (window.focus) { + win02.focus(); + } + } + } + </script> + <?php + echo '<input id="personid" type="text" value="" />'; + echo '<a href="javascript: onclick=findindi()">' ; + echo ' <font size="2"> ', WT_I18N::translate('Search'), '</font>'; + echo '</a>'; + ?> + </td> + </tr> + <tr> + <td class="transparent;"> + <br /> + </td> + </tr> + + <?php + //-- Add Family Members to Census ------------------------------------------- + global $WT_IMAGES, $spouselinks, $parentlinks, $DeathYr, $BirthYr, $TEXT_DIRECTION, $censyear, $censdate; + // echo "CENS = " . $censyear; + ?> + <tr> + <td align="center"class="transparent;"> + <table width="100%" class="fact_table" cellspacing="0" border="0"> + <tr> + <td align="center" colspan=3 class="descriptionbox wrap font9"> + <?php + // Header text with "Head" button ================================================= + $headImg = "<img class=\"headimg vmiddle\" src=\"".$WT_IMAGES["button_head"]."\" />"; + $headImg2 = "<img class=\"headimg2 vmiddle\" src=\"".$WT_IMAGES["button_head"]."\" alt=\"".WT_I18N::translate('Click to choose person as Head of family.')."\" title=\"".WT_I18N::translate('Click to choose person as Head of family.')."\" />"; + global $tempStringHead; + echo WT_I18N::translate('Click %s to choose person as Head of family.', $headImg); + ?> + <br /><br /> + <?php echo WT_I18N::translate('Click Name to add person to Add Links List.'); ?> + </td> + </tr> + + <tr> + <td class="font9"> + <br /> + </td> + </tr> + + <?php + //-- Build Parent Family --------------------------------------------------- + $personcount=0; + $families = $this->indi->getChildFamilies(); + foreach ($families as $family) { + $label = $this->indi->getChildFamilyLabel($family); + $people = $this->buildFamilyList($family, "parents"); + $marrdate = $family->getMarriageDate(); + + // Husband ------------------- + $styleadd = ""; + if (isset($people["husb"])) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["husb"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + $menu = new WT_Menu(" " . $people["husb"]->getLabel()); + // $menu->addClass("", "", "submenu"); + $slabel = print_pedigree_person_nav2($people["husb"]->getXref(), 2, 0, $personcount++, $currpid, $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + + + echo '<tr>'; + // Define width of Left (Label) column ------- + ?> + <td width=75 align="left" class="optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value" > + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addmedia_links&noteid=newnote&pid=".$people["husb"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + if (($people["husb"]->canDisplayDetails())) { + ?> + <a href='javaScript:opener.insertRowToTable("<?php + echo PrintReady($people["husb"]->getXref()) ; // pid = PID + ?>", "<?php + // echo PrintReady($people["husb"]->getFullName()); // nam = Name + echo PrintReady($fulln); + ?>", "<?php + echo PrintReady($people["husb"]->getLabel()); // label = Relationship + ?>", "<?php + echo PrintReady($people["husb"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + echo PrintReady($people["husb"]->getbirthyear()); // yob = Year of Birth + ?>", "<?php + echo PrintReady($censyear-$people["husb"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo "Y"; // YMD + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["husb"]->getcensbirthplace()); // birthpl = Census Place of Birth + ?>");'><?php + echo PrintReady($people["husb"]->getFullName()); // Name + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + + if (isset($people["wife"])) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["wife"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } else { + $fulmn = $fulln; + $marn = $surn; + } + + $menu = new WT_Menu(" " . $people["wife"]->getLabel()); + //$menu->addClass("", "", "submenu"); + $slabel = print_pedigree_person_nav2($people["wife"]->getXref(), 2, 0, $personcount++, $currpid, $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td width=75 align="left" class="optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addmedia_links&noteid=newnote&pid=".$people["wife"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + if (($people["wife"]->canDisplayDetails())) { + ?> + <a href='javaScript:opener.insertRowToTable("<?php + echo $people["wife"]->getXref() ; // pid = PID + ?>", "<?php + // if ($married>=0 && isset($nam[1])) { + // echo PrintReady($fulmn); // nam = Married Name + // } else { + //echo PrintReady($people["wife"]->getFullName()); // nam = Name + echo PrintReady($fulln); + // } + ?>", "<?php + echo PrintReady($people["wife"]->getLabel()); // label = Relationship + ?>", "<?php + echo PrintReady($people["wife"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0 && isset($nam[1])) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + echo PrintReady($people["wife"]->getbirthyear()); // yob = Year of Birth + ?>", "<?php + echo PrintReady($censyear-$people["wife"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo "Y"; // YMD + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["wife"]->getcensbirthplace()); // birthpl = Census Place of Birth + ?>");'> + <?php + //if ($married>=0 && isset($nam[1])) { + // echo PrintReady($fulmn); // Full Married Name + //} else { + echo PrintReady($people["wife"]->getFullName()); // Full Name + //} + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + + if (isset($people["children"])) { + $elderdate = $family->getMarriageDate(); + foreach ($people["children"] as $key=>$child) { + // Get child's marriage status + $married=""; + foreach ($child->getSpouseFamilies() as $childfamily) { + $tmp=$childfamily->getMarriageDate(); + $married = WT_Date::Compare($censdate, $tmp); + } + $nam = $child->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + + $menu = new WT_Menu(" " . $child->getLabel()); + //$menu->addClass("", "", "submenu"); + $slabel = print_pedigree_person_nav2($child->getXref(), 2, 0, $personcount++, $currpid, $censyear); + $slabel .= $spouselinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + + if ($child->getXref()==$pid) { + //Only print Head of Family in Immediate Family Block + } else { + ?> + <tr> + <td width=75 align="left" class="optionbox"> + <font size=1> + <?php + if ($child->getXref()==$pid) { + echo $child->getLabel(); + } else { + echo $menu->getMenu(); + } + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addmedia_links&noteid=newnote&pid=".$child->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + if (($child->canDisplayDetails())) { + ?> + <a href='javaScript:opener.insertRowToTable("<?php + echo $child->getXref() ; // pid = PID + ?>", "<?php + //if ($married>=0 && isset($nam[1])) { + // echo PrintReady($fulmn); // nam = Married Name + //} else { + //echo PrintReady($child->getFullName()); // nam = Full Name + echo PrintReady($fulln); + //} + ?>", "<?php + if ($child->getXref()==$pid) { + echo "Head"; // label = Head + } else { + echo PrintReady($child->getLabel()); // label = Relationship + } + ?>", "<?php + echo PrintReady($child->getSex()); // gend = Gender + ?>", "<?php + if ($married>0) { + echo "M"; // cond = Condition (Married) + } else if ($married<0 || ($married=="0") ) { + echo "S"; // cond = Condition (Single) + } else { + echo ""; // cond = Condition (Not Known) + } + ?>", "<?php + echo PrintReady($child->getbirthyear()); // yob = Year of Birth + ?>", "<?php + echo PrintReady($censyear-$child->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo "Y"; // YMD + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($child->getcensbirthplace()); // birthpl = Census Place of Birth + ?>");'><?php + // if ($married>=0 && isset($nam[1])) { + // echo PrintReady($fulmn); // Full Married Name + // } else { + echo PrintReady($child->getFullName()); // Full Name + // } + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + } + $elderdate = $child->getBirthDate(false); + } + } + + //-- Build step families ---------------------------------------------------------------- + foreach ($this->indi->getChildStepFamilies() as $family) { + $label = $this->indi->getStepFamilyLabel($family); + $people = $this->buildFamilyList($family, "step-parents"); + if ($people) { + echo "<tr><td><br /></td><td></td></tr>"; + } + $marrdate = $family->getMarriageDate(); + + // Husband ----------------------------- + $styleadd = ""; + $elderdate = ""; + if (isset($people["husb"]) ) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["husb"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + $menu = new WT_Menu(); + if ($people["husb"]->getLabel() == ".") { + $menu->addLabel(" " . WT_I18N::translate('Step-Father')); + } else { + $menu->addLabel(" " . $people["husb"]->getLabel()); + } + //$menu->addClass("", "", "submenu"); + $slabel = print_pedigree_person_nav2($people["husb"]->getXref(), 2, 0, $personcount++, $currpid, $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + if (PrintReady($people["husb"]->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($people["husb"]->getDeathYear()); } + if (PrintReady($people["husb"]->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($people["husb"]->getBirthYear()); } + ?> + <tr> + <td width=75 align="left" class="optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addmedia_links&noteid=newnote&pid=".$people["husb"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + if (($people["husb"]->canDisplayDetails())) { + ?> + <a href='javaScript:opener.insertRowToTable("<?php + echo PrintReady($people["husb"]->getXref()) ; // pid = PID + ?>", "<?php + //echo PrintReady($people["husb"]->getFullName()); // nam = Name + echo PrintReady($fulln); + ?>", "<?php + if ($people["husb"]->getLabel() == ".") { + echo PrintReady(WT_I18N::translate('Step-Father')); // label = Relationship + } else { + echo PrintReady($people["husb"]->getLabel()); // label = Relationship + } + ?>", "<?php + echo PrintReady($people["husb"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + echo PrintReady($people["husb"]->getbirthyear()); // yob = Year of Birth + ?>", "<?php + echo PrintReady($censyear-$people["husb"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo "Y"; // YMD + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["husb"]->getcensbirthplace()); // birthpl = Census Place of Birth + ?>");'> + <?php echo PrintReady($people["husb"]->getFullName()); // Name + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + $elderdate = $people["husb"]->getBirthDate(false); + } + + // Wife ------------------- + $styleadd = ""; + if (isset($people["wife"]) ) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["wife"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + $menu = new WT_Menu(); + if ($people["husb"]->getLabel() == ".") { + $menu->addLabel(" " . WT_I18N::translate('Step-Mother')); + } else { + $menu->addLabel(" " . $people["wife"]->getLabel()); + } + //$menu->addClass("", "", "submenu"); + $slabel = print_pedigree_person_nav2($people["wife"]->getXref(), 2, 0, $personcount++, $currpid, $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + if (PrintReady($people["wife"]->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($people["wife"]->getDeathYear()); } + if (PrintReady($people["wife"]->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($people["wife"]->getBirthYear()); } + ?> + <tr> + <td width=75 align="left" class="optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addmedia_links&noteid=newnote&pid=".$people["wife"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + if (($people["wife"]->canDisplayDetails())) { + ?> + <a href='javaScript:opener.insertRowToTable("<?php + echo PrintReady($people["wife"]->getXref()) ; // pid = PID + ?>", "<?php + // if ($married>=0 && isset($nam[1])) { + // echo PrintReady($fulmn); // nam = Married Name + // } else { + //echo PrintReady($people["wife"]->getFullName()); // nam = Full Name + echo PrintReady($fulln); + // } + ?>", "<?php + if ($people["wife"]->getLabel() == ".") { + echo PrintReady(WT_I18N::translate('Step-Mother')); // label = Relationship + } else { + echo PrintReady($people["wife"]->getLabel()); // label = Relationship + } + ?>", "<?php + echo PrintReady($people["wife"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0 && isset($nam[1])) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + echo PrintReady($people["wife"]->getbirthyear()); // yob = Year of Birth + ?>", "<?php + echo PrintReady($censyear-$people["wife"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo "Y"; // YMD + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["wife"]->getcensbirthplace()); // birthpl = Census Place of Birth + ?>");'> + <?php + //if ($married>=0 && isset($nam[1])) { + // echo PrintReady($fulmn); // Full Married Name + //} else { + echo PrintReady($people["wife"]->getFullName()); // Full Name + //} + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + + // Children --------------------- + $styleadd = ""; + if (isset($people["children"])) { + $elderdate = $family->getMarriageDate(); + foreach ($people["children"] as $key=>$child) { + $nam = $child->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + $menu = new WT_Menu(" " . $child->getLabel()); + //$menu->addClass("", "", "submenu"); + $slabel = print_pedigree_person_nav2($child->getXref(), 2, 0, $personcount++, $currpid, $censyear); + $slabel .= $spouselinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); if (PrintReady($child->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($child->getDeathYear()); } + if (PrintReady($child->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($child->getBirthYear()); } + ?> + <tr> + <td width=75 align="left" class="optionbox"> + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value" > + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addmedia_links&noteid=newnote&pid=".$child->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + if (($child->canDisplayDetails())) { + ?> + <a href='javaScript:opener.insertRowToTable("<?php + echo PrintReady($child->getXref()) ; // pid = PID + ?>", "<?php + //echo PrintReady($child->getFullName()); // nam = Name + echo PrintReady($fulln); + ?>", "<?php + echo PrintReady($child->getLabel()); // label = Relationship + ?>", "<?php + echo PrintReady($child->getSex()); // gend = Gender + ?>", "<?php + echo ""; // cond = Condition (Married or Single) + ?>", "<?php + echo PrintReady($child->getbirthyear()); // yob = Year of Birth + ?>", "<?php + echo PrintReady($censyear-$child->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo "Y"; // YMD + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($child->getcensbirthplace()); // birthpl = Census Place of Birth + ?>");'> + <?php echo PrintReady($child->getFullName()); // Name + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + //$elderdate = $child->getBirthDate(false); + } + } + } + + echo "<tr><td><font size=1><br /></font></td></tr>"; + + //-- Build Spouse Family --------------------------------------------------- + $families = $this->indi->getSpouseFamilies(); + //$personcount = 0; + foreach ($families as $family) { + $people = $this->buildFamilyList($family, "spouse"); + if ($this->indi->equals($people["husb"])) { + $spousetag = 'WIFE'; + } else { + $spousetag = 'HUSB'; + } + $marrdate = $family->getMarriageDate(); + + // Husband ------------------- + if (isset($people["husb"])) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["husb"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + $menu = new WT_Menu(" " . $people["husb"]->getLabel()); + //$menu->addClass("", "", "submenu"); + $slabel = print_pedigree_person_nav2($people["husb"]->getXref(), 2, 0, $personcount++, $currpid, $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + if (PrintReady($people["husb"]->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($people["husb"]->getDeathYear()); } + if (PrintReady($people["husb"]->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($people["husb"]->getBirthYear()); } + ?> + <tr class="fact_value"> + <td width=75 align="left" class="optionbox"> + <font size=1> + <?php + if ($people["husb"]->getXref()==$pid) { + echo " " .($people["husb"]->getLabel())." ".WT_I18N::translate('Head of Household:'); + } else { + echo $menu->getMenu(); + } + ?> + </font> + </td> + <td align="left" class="facts_value" > + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addmedia_links&noteid=newnote&pid=".$people["husb"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value" > + <font size=1> + <?php + if (($people["husb"]->canDisplayDetails())) { + ?> + <a href='javaScript:opener.insertRowToTable("<?php + echo $people["husb"]->getXref() ; // pid = PID + ?>", "<?php + //echo PrintReady($people["husb"]->getFullName()); // nam = Name + echo PrintReady($fulln); + ?>", "<?php + if ($people["husb"]->getXref()==$pid) { + echo "Head"; // label = Relationship + } else { + echo $people["husb"]->getLabel(); // label = Relationship + } + ?>", "<?php + echo PrintReady($people["husb"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + echo PrintReady($people["husb"]->getbirthyear()); // yob = Year of Birth + ?>", "<?php + echo PrintReady($censyear-$people["husb"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo "Y"; // YMD + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["husb"]->getcensbirthplace()); // birthpl = Census Place of Birth + ?>");'> + <?php + echo PrintReady($people["husb"]->getFullName()); // Name + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + <tr> + <?php + } + + + // Wife ------------------- + //if (isset($people["wife"]) && $spousetag == 'WIFE') { + if (isset($people["wife"])) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $people["wife"]->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } else { + $fulmn = $fulln; + $marn = $surn; + } + $menu = new WT_Menu(" " . $people["wife"]->getLabel()); + //$menu->addClass("", "", "submenu"); + $slabel = print_pedigree_person_nav2($people["wife"]->getXref(), 2, 0, $personcount++, $currpid, $censyear); + $slabel .= $parentlinks; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + if (PrintReady($people["wife"]->getDeathYear()) == 0) { $DeathYr = ""; } else { $DeathYr = PrintReady($people["wife"]->getDeathYear()); } + if (PrintReady($people["wife"]->getBirthYear()) == 0) { $BirthYr = ""; } else { $BirthYr = PrintReady($people["wife"]->getBirthYear()); } + ?> + <tr> + <td width=75 align="left" class="optionbox"> + <font size=1> + <?php + if ($people["wife"]->getXref()==$pid) { + echo " " .($people["wife"]->getLabel())." ".WT_I18N::translate('Head of Household:'); + } else { + echo $menu->getMenu(); + } + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addmedia_links&noteid=newnote&pid=".$people["wife"]->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + if (($people["wife"]->canDisplayDetails())) { + ?> + <a href='javaScript:opener.insertRowToTable("<?php + echo $people["wife"]->getXref() ; // pid = PID + ?>", "<?php + // if ($married>=0 && isset($nam[1])) { + // echo PrintReady($fulmn); // nam = Full Married Name + // } else { + //echo PrintReady($people["wife"]->getFullName()); // nam = Full Name + echo PrintReady($fulln); + // } + ?>", "<?php + if ($people["wife"]->getXref()==$pid) { + echo "Head"; // label = Head + } else { + echo PrintReady($people["wife"]->getLabel()); // label = Relationship + } + ?>", "<?php + echo PrintReady($people["wife"]->getSex()); // gend = Gender + ?>", "<?php + if ($married>=0 && isset($nam[1])) { + echo "M"; // cond = Condition (Married) + } else { + echo "S"; // cond = Condition (Single) + } + ?>", "<?php + echo PrintReady($people["wife"]->getbirthyear()); // yob = Year of Birth + ?>", "<?php + echo PrintReady($censyear-$people["wife"]->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo "Y"; // YMD + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($people["wife"]->getcensbirthplace()); // birthpl = Census Place of Birth + ?>");'> + <?php + //if ($married>=0 && isset($nam[1])) { + // echo PrintReady($fulmn); // Full Married Name + //} else { + echo PrintReady($people["wife"]->getFullName()); // Full Name + //} + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + <tr> <?php + } + + // Children + foreach ($people["children"] as $key=>$child) { + // Get child's marriage status + $married=""; + foreach ($child->getSpouseFamilies() as $childfamily) { + $tmp=$childfamily->getMarriageDate(); + $married = WT_Date::Compare($censdate, $tmp); + } + $nam = $child->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } else { + $fulmn = $fulln; + $marn = $surn; + } + $menu = new WT_Menu(" " . $child->getLabel()); + //$menu->addClass("", "", "submenu"); + $slabel = print_pedigree_person_nav2($child->getXref(), 2, 0, $personcount++, $child->getLabel(), $censyear); + $slabel .= $spouselinks; + $submenu = new WT_Menu($slabel); + $menu->addSubmenu($submenu); + ?> + <tr> + <td width=75 align="left" class="optionbox" > + <font size=1> + <?php echo $menu->getMenu(); ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + echo "<a href=\"edit_interface.php?action=addmedia_links&noteid=newnote&pid=".$child->getXref()."&gedcom=".WT_GEDURL."\">"; + echo $headImg2; + echo "</a>"; + ?> + </font> + </td> + <td align="left" class="facts_value"> + <font size=1> + <?php + if (($child->canDisplayDetails())) { + ?> + <a href='javaScript:opener.insertRowToTable("<?php + echo $child->getXref() ; // pid = PID + ?>", "<?php + // if ($married>0 && isset($nam[1])) { + // echo PrintReady($fulmn); // nam = Full Married Name + // } else { + // echo PrintReady($child->getFullName()); // nam = Full Name + echo PrintReady($fulln); // nam = Full Name + // } + ?>", "<?php + echo PrintReady($child->getLabel()); // label = Relationship + ?>", "<?php + echo PrintReady($child->getSex()); // gend = Gender + ?>", "<?php + if ($married>0) { + echo "M"; // cond = Condition (Married) + } else if ($married<0 || ($married=="0") ) { + echo "S"; // cond = Condition (Single) + } else { + echo ""; // cond = Condition (Not Known) + } + ?>", "<?php + echo PrintReady($child->getbirthyear()); // yob = Year of Birth + ?>", "<?php + echo PrintReady($censyear-$child->getbirthyear()); // age = Census Date minus YOB + ?>", "<?php + echo "Y"; // YMD + ?>", "<?php + echo ""; // occu = Occupation + ?>", "<?php + echo PrintReady($child->getcensbirthplace()); // birthpl = Census Place of Birth + ?>");'> + <?php + // if ($married>=0 && isset($nam[1])) { + // echo PrintReady($fulmn); // Full Married Name + // } else { + echo PrintReady($child->getFullName()); // Full Name + // } + ?> + </a> + <?php + } else { + echo WT_I18N::translate('Private'); + } + ?> + </font> + </td> + </tr> + <?php + } + echo "<tr><td><font size=1><br /></font></td></tr>"; + } + ?> + + </table> + </td> + </tr> +</table> +<?php +// ================================================================== +require_once WT_ROOT.'includes/functions/functions_charts.php'; +/** + * print the information for an individual chart box + * + * find and print a given individuals information for a pedigree chart + * @param string $pid the Gedcom Xref ID of the to print + * @param int $style the style to print the box in, 1 for smaller boxes, 2 for larger boxes + * @param int $count on some charts it is important to keep a count of how many boxes were printed + */ +function print_pedigree_person_nav2($pid, $style=1, $count=0, $personcount="1", $currpid, $censyear) { + global $HIDE_LIVE_PEOPLE, $SHOW_LIVING_NAMES, $ZOOM_BOXES, $LINK_ICONS; + global $MULTI_MEDIA, $SHOW_HIGHLIGHT_IMAGES, $bwidth, $bheight, $PEDIGREE_FULL_DETAILS, $SHOW_PEDIGREE_PLACES; + global $TEXT_DIRECTION, $DEFAULT_PEDIGREE_GENERATIONS, $OLD_PGENS, $talloffset, $PEDIGREE_LAYOUT, $MEDIA_DIRECTORY; + global $WT_IMAGES, $ABBREVIATE_CHART_LABELS, $USE_MEDIA_VIEWER; + global $chart_style, $box_width, $generations, $show_spouse, $show_full; + global $CHART_BOX_TAGS, $SHOW_LDS_AT_GLANCE, $PEDIGREE_SHOW_GENDER; + global $SEARCH_SPIDER; + + global $spouselinks, $parentlinks, $step_parentlinks, $persons, $person_step, $person_parent, $tabno, $spousetag; + global $natdad, $natmom, $censyear, $censdate; + + if ($style != 2) $style=1; + if (empty($show_full)) $show_full = 0; + if (empty($PEDIGREE_FULL_DETAILS)) $PEDIGREE_FULL_DETAILS = 0; + + if (!isset($OLD_PGENS)) $OLD_PGENS = $DEFAULT_PEDIGREE_GENERATIONS; + if (!isset($talloffset)) $talloffset = $PEDIGREE_LAYOUT; + + $person=WT_Person::getInstance($pid); + if ($pid==false || empty($person)) { + $spouselinks = false; + $parentlinks = false; + $step_parentlinks = false; + } + + $tmp=array('M'=>'','F'=>'F', 'U'=>'NN'); + $isF=$tmp[$person->getSex()]; + $spouselinks = ""; + $parentlinks = ""; + $step_parentlinks = ""; + $disp=$person->canDisplayDetails(); + + if ($person->canDisplayName()) { + if (empty($SEARCH_SPIDER)) { + if ($LINK_ICONS!="disabled") { + //-- draw a box for the family popup + if ($TEXT_DIRECTION=="rtl") { + $spouselinks .= "<table id=\"flyoutFamRTL\" class=\"person_box$isF\"><tr><td class=\"name2 font9 rtl\">"; + $spouselinks .= "<b>" . WT_I18N::translate('Family') . "</b> (" .$person->getFullName(). ")<br />"; + $parentlinks .= "<table id=\"flyoutParRTL\" class=\"person_box$isF\"><tr><td class=\"name2 font9 rtl\">"; + $parentlinks .= "<b>" . WT_I18N::translate('Parents') . "</b> (" .$person->getFullName(). ")<br />"; + $step_parentlinks .= "<table id=\"flyoutStepRTL\" class=\"person_box$isF\"><tr><td class=\"name2 font9 rtl\">"; + $step_parentlinks .= "<b>" . WT_I18N::translate('Parents') . "</b> (" .$person->getFullName(). ")<br />"; + } else { + $spouselinks .= "<table id=\"flyoutFam\" class=\"person_box$isF\"><tr><td class=\"name2 font9 ltr\">"; + $spouselinks .= "<b>" . WT_I18N::translate('Family') . "</b> (" .$person->getFullName(). ")<br />"; + $parentlinks .= "<table id=\"flyoutPar\" class=\"person_box$isF\"><tr><td class=\"name2 font9 ltr\">"; + $parentlinks .= "<b>" . WT_I18N::translate('Parents') . "</b> (" .$person->getFullName(). ")<br />"; + $step_parentlinks .= "<table id=\"flyoutStep\" class=\"person_box$isF\"><tr><td class=\"name2 font9 ltr\">"; + $step_parentlinks .= "<b>" . WT_I18N::translate('Parents') . "</b> (" .$person->getFullName(). ")<br />"; + } + $persons = ""; + $person_parent = ""; + $person_step = ""; + + //-- parent families -------------------------------------- + foreach ($person->getChildFamilies() as $family) { + + if (!is_null($family)) { + $husb = $family->getHusband($person); + $wife = $family->getWife($person); + // $spouse = $family->getSpouse($person); + $children = $family->getChildren(); + $num = count($children); + $marrdate = $family->getMarriageDate(); + + // Husband ------------------------------ + if ($husb || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($husb) { + $person_parent="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$husb->getXref(); + } else { + $title = $husb->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$husb->getXref(); + if ($husb->canDisplayName()) { + $nam = $husb->getAllNames(); + // $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surn']; + $fulln = $husb->getFullName(); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surn']; + if (isset($nam[1]) ) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surn']; + $marn = $nam[1]['surn']; + } + $parentlinks .= "<a href=\"javascript:opener.insertRowToTable("; + $parentlinks .= "'".PrintReady($husb->getXref())."', "; // pid = PID + $parentlinks .= "'".PrintReady($fulln)."', "; // nam = Name + if ($currpid=="Wife" || $currpid=="Husband") { + $parentlinks .= "'Father in Law', "; // label = 1st Gen Male Relationship + } else { + $parentlinks .= "'Grand-Father', "; // label = 2st Gen Male Relationship + } + $parentlinks .= "'".PrintReady($husb->getSex())."', "; // sex = Gender + $parentlinks .= "''".", "; // cond = Condition (Married etc) + $parentlinks .= "'".PrintReady($husb->getbirthyear())."', "; // yob = Year of Birth + if ($husb->getbirthyear()>=1) { + $parentlinks .= "'".PrintReady($censyear-$husb->getbirthyear())."', "; // age = Census Year - Year of Birth + } else { + $parentlinks .= "''".", "; // age = Undefined + } + $parentlinks .= "'Y'".", "; // Y/M/D = Age in Years/Months/Days + $parentlinks .= "''".", "; // occu = Occupation + $parentlinks .= "'".PrintReady($husb->getcensbirthplace())."'"; // birthpl = Birthplace + $parentlinks .= ");\">"; + $parentlinks .= PrintReady($husb->getFullName()); + $parentlinks .= "</a>"; + + } else { + $parentlinks .= WT_I18N::translate('Private'); + } + $natdad = "yes"; + } + } + + // Wife ------------------------------ + if ($wife || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($wife) { + $person_parent="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$wife->getXref(); + } else { + $title = $wife->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$wife->getXref(); + if ($wife->canDisplayName()) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $wife->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + //$fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $fulmn = $nam[1]['fullNN']; + $marn = $nam[1]['surname']; + } + $parentlinks .= "<a href=\"javascript:opener.insertRowToTable("; + $parentlinks .= "'".PrintReady($wife->getXref())."',"; // pid = PID + // $parentlinks .= "'".PrintReady($fulln)."',"; // nam = Name + + //if ($married>=0 && isset($nam[1])) { + // $parentlinks .= "'".PrintReady($fulmn)."',"; // nam = Full Married Name + //} else { + $parentlinks .= "'".PrintReady($fulln)."',"; // nam = Full Name + //} + + if ($currpid=="Wife" || $currpid=="Husband") { + $parentlinks .= "'Mother in Law',"; // label = 1st Gen Female Relationship + } else { + $parentlinks .= "'Grand-Mother',"; // label = 2st Gen Female Relationship + } + $parentlinks .= "'".PrintReady($wife->getSex())."',"; // sex = Gender + $parentlinks .= "''".","; // cond = Condition (Married etc) + $parentlinks .= "'".PrintReady($wife->getbirthyear())."',"; // yob = Year of Birth + if ($wife->getbirthyear()>=1) { + $parentlinks .= "'".PrintReady($censyear-$wife->getbirthyear())."',"; // age = Census Year - Year of Birth + } else { + $parentlinks .= "''".","; // age = Undefined + } + $parentlinks .= "'Y'".","; // Y/M/D = Age in Years/Months/Days + $parentlinks .= "''".","; // occu = Occupation + $parentlinks .= "'".PrintReady($wife->getcensbirthplace())."'"; // birthpl = Birthplace + //$parentlinks .= ");\"><div id='wifePar'>"; + $parentlinks .= ");\">"; + //if ($married>=0 && isset($nam[1])) { + // $parentlinks .= $fulmn; // Full Married Name + //} else { + $parentlinks .= PrintReady($wife->getFullName()); // Full Name + //} + // $parentlinks .= "</div></a>"; + $parentlinks .= "</a>"; + } else { + $parentlinks .= WT_I18N::translate('Private'); + } + $parentlinks .= "<br />"; + $natmom = "yes"; + } + } + } + } + + //-- step families ----------------------------------------- + $fams = $person->getChildStepFamilies(); + foreach ($fams as $family) { + if (!is_null($family)) { + $husb = $family->getHusband($person); + $wife = $family->getWife($person); + // $spouse = $family->getSpouse($person); + $children = $family->getChildren(); + $num = count($children); + $marrdate = $family->getMarriageDate(); + + if ($natdad == "yes") { + } else { + // Husband ----------------------- + if (($husb || $num>0) && $husb->getLabel() != ".") { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($husb) { + $person_step="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$husb->getXref(); + } else { + $title = $husb->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$husb->getXref(); + if ($husb->canDisplayName()) { + $nam = $husb->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + //$fulln = $husb->getFullName(); + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + + $parentlinks .= "<a href=\"individual.php?pid={$tmp}&tab={$tabno}&gedcom=".WT_GEDURL."\">"; + $parentlinks .= PrintReady($husb->getFullName()); + $parentlinks .= "</a>"; + } else { + $parentlinks .= WT_I18N::translate('Private'); + } + $parentlinks .= "<br />"; + } + } + } + + if ($natmom == "yes") { + } else { + // Wife ---------------------------- + if ($wife || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($wife) { + $person_step="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$wife->getXref(); + } else { + $title = $wife->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$wife->getXref(); + if ($wife->canDisplayName()) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $wife->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + $parentlinks .= "<a href=\"individual.php?pid={$tmp}&tab={$tabno}&gedcom=".WT_GEDURL."\">"; + $parentlinks .= PrintReady($wife->getFullName()); + $parentlinks .= "</a>"; + } else { + $parentlinks .= WT_I18N::translate('Private'); + } + $parentlinks .= "<br />"; + } + } + } + } + } + + // Spouse Families -------------------------------------- @var $family Family + foreach ($person->getSpouseFamilies() as $family) { + if (!is_null($family)) { + $spouse = $family->getSpouse($person); + $children = $family->getChildren(); + $num = count($children); + $marrdate = $family->getMarriageDate(); + + // Spouse ------------------------------ + if ($spouse || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($spouse) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$spouse->getXref(); + } else { + $title = $spouse->getXref()." :".WT_I18N::translate('Individual information'); + } + $tmp=$spouse->getXref(); + if ($spouse->canDisplayName()) { + $married = WT_Date::Compare($censdate, $marrdate); + $nam = $spouse->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + $spouselinks .= "<a href=\"javascript:opener.insertRowToTable("; + $spouselinks .= "'".PrintReady($spouse->getXref())."',"; // pid = PID + //$spouselinks .= "'".PrintReady($fulln)."',"; // nam = Name + //if ($married>=0 && isset($nam[1])) { + // $spouselinks .= "'".PrintReady($fulmn)."',"; // Full Married Name + //} else { + $spouselinks .= "'".PrintReady($spouse->getFullName())."',"; // Full Name + //} + if ($currpid=="Son" || $currpid=="Daughter") { + if ($spouse->getSex()=="M") { + $spouselinks .= "'Son in Law',"; // label = Male Relationship + } else { + $spouselinks .= "'Daughter in Law',"; // label = Female Relationship + } + } else { + if ($spouse->getSex()=="M") { + $spouselinks .= "'Brother in Law',"; // label = Male Relationship + } else { + $spouselinks .= "'Sister in Law',"; // label = Female Relationship + } + } + $spouselinks .= "'".PrintReady($spouse->getSex())."',"; // sex = Gender + $spouselinks .= "''".","; // cond = Condition (Married etc) + $spouselinks .= "'".PrintReady($spouse->getbirthyear())."',"; // yob = Year of Birth + if ($spouse->getbirthyear()>=1) { + $spouselinks .= "'".PrintReady($censyear-$spouse->getbirthyear())."',"; // age = Census Year - Year of Birth + } else { + $spouselinks .= "''".","; // age = Undefined + } + $spouselinks .= "'Y'".","; // Y/M/D = Age in Years/Months/Days + $spouselinks .= "''".","; // occu = Occupation + $spouselinks .= "'".PrintReady($spouse->getcensbirthplace())."'"; // birthpl = Birthplace + $spouselinks .= ");\">"; + // $spouselinks .= PrintReady($fulln); + //if ($married>=0 && isset($nam[1])) { + // $spouselinks .= "'".PrintReady($fulmn)."',"; // Full Married Name + //} else { + $spouselinks .= PrintReady($spouse->getFullName()); // Full Name + //} + $spouselinks .= "</a>"; + } else { + $spouselinks .= WT_I18N::translate('Private'); + } + $spouselinks .= "</a>"; + if ($spouse->getFullName() != "") { + $persons = "Yes"; + } + } + } + + // Children ------------------------------ @var $child Person + $spouselinks .= "<div id='spouseFam'>"; + $spouselinks .= "<ul class=\"clist ".$TEXT_DIRECTION."\">"; + foreach ($children as $c=>$child) { + $cpid = $child->getXref(); + if ($child) { + $persons="Yes"; + $title = WT_I18N::translate('Individual information').": ".$cpid; + if ($child->canDisplayName()) { + $nam = $child->getAllNames(); + $fulln = rtrim($nam[0]['givn'],'*')." ".$nam[0]['surname']; + $givn = rtrim($nam[0]['givn'],'*'); + $surn = $nam[0]['surname']; + if (isset($nam[1])) { + $fulmn = rtrim($nam[1]['givn'],'*')." ".$nam[1]['surname']; + $marn = $nam[1]['surname']; + } + $spouselinks .= "<li>"; + $spouselinks .= "<a href=\"javascript:opener.insertRowToTable("; + $spouselinks .= "'".PrintReady($child->getXref())."',"; // pid = PID + //$spouselinks .= "'".PrintReady($child->getFullName())."',"; // nam = Name + $spouselinks .= "'".PrintReady($fulln)."',"; // nam = Name + if ($currpid=="Son" || $currpid=="Daughter") { + if ($child->getSex()=="M") { + $spouselinks .= "'Grand-Son',"; // label = Male Relationship + } else { + $spouselinks .= "'Grand-Daughter',"; // label = Female Relationship + } + } else { + if ($child->getSex()=="M") { + $spouselinks .= "'Nephew',"; // label = Male Relationship + } else { + $spouselinks .= "'Niece',"; // label = Female Relationship + } + } + $spouselinks .= "'".PrintReady($child->getSex())."',"; // sex = Gender + $spouselinks .= "''".","; // cond = Condition (Married etc) + $spouselinks .= "'".PrintReady($child->getbirthyear())."',"; // yob = Year of Birth + if ($child->getbirthyear()>=1) { + $spouselinks .= "'".PrintReady($censyear-$child->getbirthyear())."',"; // age = Census Year - Year of Birth + } else { + $spouselinks .= "''".","; // age = Undefined + } + $spouselinks .= "'Y'".","; // Y/M/D = Age in Years/Months/Days + $spouselinks .= "''".","; // occu = Occupation + $spouselinks .= "'".PrintReady($child->getcensbirthplace())."'"; // birthpl = Birthplace + $spouselinks .= ");\">"; + $spouselinks .= PrintReady($child->getFullName()); // Full Name + $spouselinks .= "</a>"; + } else { + $spouselinks .= WT_I18N::translate('Private'); + } + $spouselinks .= "</li>"; + } + } + $spouselinks .= "</ul>"; + $spouselinks .= "</div>"; + } + } + + if ($persons != "Yes") { + $spouselinks .= "(" . WT_I18N::translate('none') . ")</td></tr></table>"; + } else { + $spouselinks .= "</td></tr></table>"; + } + + if ($person_parent != "Yes") { + $parentlinks .= "(" . WT_I18N::translate_c('unknown family', 'unknown') . ")</td></tr></table>"; + } else { + $parentlinks .= "</td></tr></table>"; + } + + if ($person_step != "Yes") { + $step_parentlinks .= "(" . WT_I18N::translate_c('unknown family', 'unknown') . ")</td></tr></table>"; + } else { + $step_parentlinks .= "</td></tr></table>"; + } + } + } + } +} diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_5_input.js b/modules_v2/GEDFact_assistant/_MEDIA/media_5_input.js new file mode 100644 index 0000000000..41d222e96e --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_5_input.js @@ -0,0 +1,340 @@ +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ +*/ + +var INPUT_NAME_PREFIX = 'InputCell_'; // this is being set via script +var RADIO_NAME = "totallyrad"; // this is being set via script +var TABLE_NAME = 'addlinkQueue'; // this should be named in the HTML +var ROW_BASE = 1; // first number (for display) +var hasLoaded = false; + +window.onload=fillInRows; + +function fillInRows() +{ + hasLoaded = true; + //insertRowToTable(); + //addRowToTable(); +} + +// CONFIG: +// myRowObject is an object for storing information about the table rows +//function myRowObject(zero, one, two, three, four, five, six, seven, eight, nine, ten, cb, ra) +function myRowObject(zero, one, two, cb, ra) +{ + this.zero = zero; // text object + this.one = one; // input text object + this.two = two; // input text object + + this.cb = cb; // input checkbox object + this.ra = ra; // input radio object +} + +/* + * insertRowToTable + * Insert and reorder + */ +//function insertRowToTable(pid, nam, label, gend, cond, yob, age, YMD, occu, birthpl) +function insertRowToTable(pid, nam, head) +{ + if (hasLoaded) { + + var tbl = document.getElementById(TABLE_NAME); + var rowToInsertAt = ""; + + // Get links list ==================================== + var links = document.getElementById('existLinkTbl'); + var numrows = links.rows.length; + var strRow = ''; + for (var i=1; i<numrows; i++) { + if (IE) { + strRow += (strRow==''?'':', ') + links.rows[i].cells[1].innerText; + } else { + strRow += (strRow==''?'':', ') + links.rows[i].cells[1].textContent; + } + } + strRow += (strRow==''?'':', '); + + //Check if id exists in Links list ================================= + if (strRow.match(pid+',')!= pid+',') { + // alert('NO MATCH'); + } else { + rowToInsertAt = 'EXIST' ; + } + + // Check if id exists in "Add links" list ========================== + for (var i=0; i<tbl.tBodies[0].rows.length; i++) { + if (tbl.tBodies[0].rows[i].myRow.one.textContent==pid) { + rowToInsertAt = 'EXIST' ; + } else + if (tbl.tBodies[0].rows[i].myRow && tbl.tBodies[0].rows[i].myRow.ra.getAttribute('type') == 'radio' && tbl.tBodies[0].rows[i].myRow.ra.checked) { + rowToInsertAt = i; + break; + } + } + + // If Link does not exist then add it, or show alert =============== + if (rowToInsertAt!='EXIST') { + rowToInsertAt = i; + //addRowToTable(rowToInsertAt, pid, nam, label, gend, cond, yob, age, YMD, occu, birthpl); + addRowToTable(rowToInsertAt, pid, nam, head); + reorderRows(tbl, rowToInsertAt); + } else { + alert(nam+' ('+pid+') - '+linkExists); + } + + } +} + +function removeHTMLTags(htmlString) +{ + if (htmlString) { + var mydiv = document.createElement("div"); + mydiv.innerHTML = htmlString; + if (document.all) // IE Stuff + { + return mydiv.innerText; + } + else // Mozilla does not work with innerText + { + return mydiv.textContent; + } + } +} + +/* + * addRowToTable + * Inserts at row 'num', or appends to the end if no arguments are passed in. Don't pass in empty strings. + */ +// function addRowToTable(num, pid, nam, label, gend, cond, yob, age, YMD, occu, birthpl) +function addRowToTable(num, pid, nam, head) +{ + if (hasLoaded) { + var tbl = document.getElementById(TABLE_NAME); + var nextRow = tbl.tBodies[0].rows.length; + var iteration = nextRow + ROW_BASE; + // var txtcolor = "#888888"; + + if (num == null) { + num = nextRow; + } else { + iteration = num + ROW_BASE; + } + + // add the row + var row = tbl.tBodies[0].insertRow(num); + + // CONFIG: requires classe + row.className = 'descriptionbox'; + + // CONFIG: This whole section can be configured + + // cell 0 - Count + var cell0 = row.insertCell(0); + cell0.style.fontSize="11px"; + var textNode = document.createTextNode(iteration); + cell0.appendChild(textNode); + + // cell 1 - ID: + var cell1 = row.insertCell(1); + // cell1.setAttribute('align', 'left'); + if (pid=='') { + var txtInp1 = document.createElement('div'); + txtInp1.setAttribute('type', 'checkbox'); + if (txtInp1.checked!='') { + txtInp1.setAttribute('value', 'no'); + } else { + txtInp1.setAttribute('value', 'add'); + } + } else { + var txtInp1 = document.createElement('div'); + txtInp1.setAttribute('type', 'text'); + txtInp1.innerHTML = pid; // Required for IE + txtInp1.textContent = pid; + } + txtInp1.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_1'); + txtInp1.style.color=txtcolor; + txtInp1.style.background='transparent'; + txtInp1.style.border='0px'; + txtInp1.style.fontSize="11px"; + cell1.appendChild(txtInp1); + + // cell 2 - Name + var cell2 = row.insertCell(2); + // cell2.setAttribute('align', 'left'); + var txtInp2 = document.createElement('div'); + txtInp2.setAttribute('type', 'text'); + txtInp2.setAttribute('id', INPUT_NAME_PREFIX + iteration + '_2'); + txtInp2.style.color=txtcolor; + txtInp2.style.background='transparent'; + txtInp2.style.border='0px'; + txtInp2.style.fontSize="11px"; + txtInp2.innerHTML = unescape(removeHTMLTags(nam)); //Required for IE + txtInp2.textContent = unescape(removeHTMLTags(nam)); + cell2.appendChild(txtInp2); + + // cell btn - remove img button + var cellbtn = row.insertCell(3); + cellbtn.setAttribute('align', 'center'); + var btnEl = document.createElement('img'); + btnEl.setAttribute('type', 'img'); + btnEl.setAttribute('src', imageDir+'/remove.gif'); + btnEl.setAttribute('alt', remove); + btnEl.setAttribute('title', remove); + btnEl.setAttribute('height', '13px'); + btnEl.onclick = function () {deleteCurrentRow(this)}; + cellbtn.appendChild(btnEl); + + // cell btn - family img button + var cellbtn2 = row.insertCell(4); + cellbtn2.setAttribute('align', 'center'); + if (pid.match("I")=="I" || pid.match("i")=="i") { + var btn2El = document.createElement('img'); + btn2El.setAttribute('type', 'img'); + btn2El.setAttribute('src', imageDir+'/buttons/family.gif'); + btn2El.setAttribute('alt', ifamily); + btn2El.setAttribute('title', ifamily); + btn2El.onclick = function () {openFamNav(pid)}; + cellbtn2.appendChild(btn2El); + } else if (pid.match("F")=="F" || pid.match("f")=="f") { + var btn2El = document.createElement('img'); + btn2El.setAttribute('type', 'img'); + btn2El.setAttribute('src', imageDir+'/buttons/family.gif'); + btn2El.setAttribute('alt', ifamily); + btn2El.setAttribute('title', ifamily); + btn2El.onclick = function () {openFamNav(head)}; + cellbtn2.appendChild(btn2El); + } else { + // Show No Icon + } + + // cell cb - input checkbox + var cbEl = document.createElement('input'); + cbEl.type = "hidden"; + + // cell ra - input radio + //var cellra = row.insertCell(5); + var cellra = document.createElement('input'); + cellra.type = "hidden"; + + // Pass in the elements you want to reference later + // Store the myRow object in each row + row.myRow = new myRowObject(textNode, txtInp1, txtInp2, cbEl, cellra); + } +} + +// CONFIG: this entire function is affected by myRowObject settings +// If there isn't a checkbox in your row, then this function can't be used. +function deleteChecked() +{ + if (hasLoaded) { + var checkedObjArray = new Array(); + var cCount = 0; + + var tbl = document.getElementById(TABLE_NAME); + for (var i=0; i<tbl.tBodies[0].rows.length; i++) { + if (tbl.tBodies[0].rows[i].myRow && tbl.tBodies[0].rows[i].myRow.cb.getAttribute('type') == 'checkbox' && tbl.tBodies[0].rows[i].myRow.cb.checked) { + checkedObjArray[cCount] = tbl.tBodies[0].rows[i]; + cCount++; + } + } + if (checkedObjArray.length > 0) { + var rIndex = checkedObjArray[0].sectionRowIndex; + deleteRows(checkedObjArray); + reorderRows(tbl, rIndex); + } + } +} + +// If there isn't an element with an onclick event in your row, then this function can't be used. +function deleteCurrentRow(obj) +{ + if (hasLoaded) { + var delRow = obj.parentNode.parentNode; + var tbl = delRow.parentNode.parentNode; + var rIndex = delRow.sectionRowIndex; + var rowArray = new Array(delRow); + deleteRows(rowArray); + reorderRows(tbl, rIndex); + } +} + +function reorderRows(tbl, startingIndex) +{ + if (hasLoaded) { + if (tbl.tBodies[0].rows[startingIndex]) { + var count = startingIndex + ROW_BASE; + for (var i=startingIndex; i<tbl.tBodies[0].rows.length; i++) { + + // CONFIG: next line is affected by myRowObject settings + tbl.tBodies[0].rows[i].myRow.zero.data = count; // text + + tbl.tBodies[0].rows[i].myRow.one.id = INPUT_NAME_PREFIX + count + '_1'; // input text + tbl.tBodies[0].rows[i].myRow.two.id = INPUT_NAME_PREFIX + count + '_2'; // input text + + tbl.tBodies[0].rows[i].myRow.one.name = INPUT_NAME_PREFIX + count + '_1'; // input text + tbl.tBodies[0].rows[i].myRow.two.name = INPUT_NAME_PREFIX + count + '_2'; // input text + + // tbl.tBodies[0].rows[i].myRow.cb.value = count; // input checkbox + tbl.tBodies[0].rows[i].myRow.ra.value = count; // input radio + + // CONFIG: requires class named classy0 and classy1 + tbl.tBodies[0].rows[i].className = 'classy' + (count % 2); + + count++; + } + } + } +} + +function deleteRows(rowObjArray) +{ + if (hasLoaded) { + for (var i=0; i<rowObjArray.length; i++) { + var rIndex = rowObjArray[i].sectionRowIndex; + rowObjArray[i].parentNode.deleteRow(rIndex); + } + } +} + +function openInNewWindow(frm) +{ + // open a blank window + var aWindow = window.open('', 'TableAddRow2NewWindow', + 'scrollbars=yes,menubar=yes,resizable=yes,location=no,toolbar=no,width=550,height=700'); + aWindow.focus(); + + // set the target to the blank window + frm.target = 'TableAddRow2NewWindow'; + + // submit + frm.submit(); +} + + diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_5_input.php b/modules_v2/GEDFact_assistant/_MEDIA/media_5_input.php new file mode 100644 index 0000000000..d3772b70f2 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_5_input.php @@ -0,0 +1,71 @@ +<?php +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + */ + +?> + + <script> + var txtcolor="#000000"; + </script> + + <style type="text/css"> + <!-- + #addlinkQueue td, th { padding: 0.2em; } + .classy0 { font-family: Verdana, Arial, Helvetica, sans-serif; background-color: transparent; color: #000000; font-size: 10px; } + .classy1 { font-family: Verdana, Arial, Helvetica, sans-serif; background-color: transparent; color: #000000; font-size: 10px; } + --> + </style> +<?php + +// Various JavaScript variables required --------------------------------- ?> +<script language="javascript" type="text/javascript"> + var ifamily = "<?php echo WT_I18N::translate('Open Family Navigator'); ?>"; + var remove = "<?php echo WT_I18N::translate('Remove'); ?>"; + var linkExists = "<?php echo WT_I18N::translate('This link already exists'); ?>"; + var imageDir = "<?php echo WT_THEME_DIR.'images/'; ?>"; +</script> + +<?php +echo '<script src="', WT_MODULES_DIR, 'GEDFact_assistant/_MEDIA/media_5_input.js" type="text/javascript"></script>'; +?> + + <table width="430" border="0" cellspacing="1" id="addlinkQueue"> + <thead> + <tr> + <th class="topbottombar" width="10" style="font-weight:100;" align="left">#</th> + <th class="topbottombar" width="55" style="font-weight:100;" align="left">ID:</th> + <th class="topbottombar" width="370" style="font-weight:100;" align="left"><?php echo WT_I18N::translate('Name'); ?></th> + <th class="topbottombar" width="20" style="font-weight:100;" align="left"><?php echo WT_I18N::translate('Remove'); ?></th> + <th class="topbottombar" width="20" style="font-weight:100;" align="left"><?php echo WT_I18N::translate('Navigator'); ?></th> + </tr> + </thead> + <tbody></tbody> + <tr><td></td></tr> + </table> diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_7_parse_addLinksTbl.php b/modules_v2/GEDFact_assistant/_MEDIA/media_7_parse_addLinksTbl.php new file mode 100644 index 0000000000..385a925358 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_7_parse_addLinksTbl.php @@ -0,0 +1,115 @@ +<?php +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + */ +?> + +<script> +function parseAddLinks() { + str = ""; + var tbl = document.getElementById('addlinkQueue'); + for (var i=1; i<tbl.rows.length; i++) { // start at i=1 because we need to avoid header + var tr = tbl.rows[i]; + var strRow = ''; + for (var j=1; j<tr.cells.length; j++) { // Start at col 1 (j=1) + if (j>=2) { + // dont show col 0 index + // SHOW col 1 id + // miss out col 2 name + // miss out col 3 relationship + // miss out col 4 delete button + continue; + } else { + if (IE) { + strRow += (strRow==''?'':'') + tr.cells[j].childNodes[0].innerHTML; + } else { + strRow += (strRow==''?'':'') + tr.cells[j].childNodes[0].textContent; + } + } + } + str += (str==''?'':', ') + strRow; + } + // str += (str==''?'':'' '); // Adds just final single quote at end of string (\') +} + +function parseRemLinks() { + remstr = ""; + var tbl = document.getElementById('existLinkTbl'); + for (var i=1; i<tbl.rows.length; i++) { // start at i=1 because we need to avoid header + var remtr = tbl.rows[i]; + var remstrRow = ''; + for (var j=1; j<remtr.cells.length; j++) { // Start at col 1 (j=1) + if (j!=4 ) { + // dont show col 0 index + // miss out col 2 name + // miss out col 3 keep radio button + // choose col 4 remove radio button + continue; + } else { + if (remtr.cells[j].childNodes[0].checked) { + remstrRow += (remstrRow==''?'':'') + remtr.cells[j].childNodes[0].name + ', '; + } + } + } + remstr += (remstr==''?'':'') + remstrRow; + } + // remstr += (remstr==''?'':','); // Adds just final comma at end of string (\') +} + +function preview() { + parseAddLinks(); + alert (str); +} + +function shiftlinks() { + + parseRemLinks(); + // alert('remstring = '+ remstr); + if (remstr) { + document.link.exist_links.value = remstr; + } + + parseAddLinks(); + // alert('string = '+ str); + if (str) { + document.link.more_links.value = str; + } else { + // leave hidden input morelinks as "No Values" + var inputField = document.getElementById('gid'); + // alert(inputField.value) + if (inputField) { + document.link.more_links.value = inputField.value+','; + } + } + if (winNav) { + winNav.close(); + } +} + +</script> diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_query_1a.php b/modules_v2/GEDFact_assistant/_MEDIA/media_query_1a.php new file mode 100644 index 0000000000..17420dd3e1 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_query_1a.php @@ -0,0 +1,96 @@ +<?php +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ +*/ + +if (stristr($_SERVER["SCRIPT_NAME"], basename(__FILE__))!==false) { + echo "You cannot access an include file directly."; + exit; +} +?> + +<html <?php echo WT_I18N::html_markup(); ?>> +<head> +</head> +<body> +<?php + + $links = get_media_relations($mediaid); + echo "<table><tr><td>"; + echo "<table id=\"existLinkTbl\" width=\"430\" cellspacing=\"1\" >"; + echo "<tr>"; + echo '<td class="topbottombar" width="15" style="font-weight:100;" >#</td>'; + echo '<td class="topbottombar" width="50" style="font-weight:100;" >ID:</td>'; + echo '<td class="topbottombar" width="340" style="font-weight:100;" >', WT_I18N::translate('Name'), '</td>'; + echo '<td class="topbottombar" width="20" style="font-weight:100;" >', WT_I18N::translate('Keep'), '</td>'; + echo '<td class="topbottombar" width="20" style="font-weight:100;" >', WT_I18N::translate('Remove'), '</td>'; + echo '<td class="topbottombar" width="20" style="font-weight:100;" >', WT_I18N::translate('Navigator'), '</td>'; + echo "</tr>"; + + $i=1; + foreach (array_keys($links) as $link) { + $record=WT_GedcomRecord::getInstance($link); + echo "<tr ><td>"; + echo $i++; + echo "</td><td id=\"existId_", $i, "\" class=\"row2\">"; + echo $link; + echo "</td><td>"; + echo $record->getFullName(); + echo "</td>"; + echo "<td align='center'><input alt='", WT_I18N::translate('Keep Link in list'), "', title='", WT_I18N::translate('Keep Link in list'), "' type='radio' id='", $link, "_off' name='", $link, "' checked /></td>"; + echo "<td align='center'><input alt='", WT_I18N::translate('Remove Link from list'), "', title='", WT_I18N::translate('Remove Link from list'), "' type='radio' id='", $link, "_on' name='", $link, "' /></td>"; + + if ($record->getType()=='INDI') { + ?> + <td align="center"><a href="#"><img style="border-style:none; margin-top:5px;" src="<?php echo $WT_IMAGES['button_family']; ?>" alt="<?php echo WT_I18N::translate('Open Family Navigator'); ?>" title="<?php echo WT_I18N::translate('Open Family Navigator'); ?>" name="family_'<?php echo $link; ?>'" onclick="javascript:openFamNav('<?php echo $link; ?>');" /></a></td> + <?php + } elseif ($record->getType()=='FAM') { + if ($record->getHusband()) { + $head=$record->getHusband()->getXref(); + } elseif ($record->getWife()) { + $head=$record->getWife()->getXref(); + } else { + $head=''; + } + ?> + <td align="center"><a href="#"><img style="border-style:none; margin-top:5px;" src="<?php echo $WT_IMAGES['button_family']; ?>" alt="<?php echo WT_I18N::translate('Open Family Navigator'); ?>" title="<?php echo WT_I18N::translate('Open Family Navigator'); ?>" name="family_'<?php echo $link; ?>'" onclick="javascript:openFamNav('<?php echo $head; ?>');" /></a></td> + <?php + } else { + echo '<td></td>'; + } + echo '</tr>'; + } + + echo "</table>"; + echo "</td></tr></table>"; + echo "<br />"; +?> + +</body> +</html> diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_query_2a.php b/modules_v2/GEDFact_assistant/_MEDIA/media_query_2a.php new file mode 100644 index 0000000000..9b31206ea3 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_query_2a.php @@ -0,0 +1,80 @@ +<?php +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ +*/ + +if (stristr($_SERVER["SCRIPT_NAME"], basename(__FILE__))!==false) { + echo "You cannot access an include file directly."; + exit; +} +?> + +<html <?php echo WT_I18N::html_markup(); ?>> +<head> +<script language="javascript"> + + + function addlinks(iname) { + // iid=document.getElementById('gid').value; + if (document.getElementById('gid').value == "") { + alert(id_empty); + } else { + addmedia_links(document.getElementById('gid'), document.getElementById('gid').value, iname ); + return false; + } + } + + function openFamNav(id) { + //id=document.getElementById('gid').value; + if (id.match("I")=="I" || id.match("i")=="i") { + id = id.toUpperCase(); + winNav = window.open('edit_interface.php?action=addmedia_links¬eid=newnote&pid='+id, 'winNav', 'top=50,left=640,width=300,height=630,resizable=1,scrollbars=1'); + if (window.focus) {winNav.focus();} + } else if (id.match("F")=="F") { + id = id.toUpperCase(); + // TODO --- alert('Opening Navigator with family id entered will come later'); + } + } + +</script> +</head> + + +<table border="0" cellpadding="1" cellspacing="2" > +<tr> +<td width="350" class="row2"> +<?php + require WT_MODULES_DIR.'GEDFact_assistant/_MEDIA/media_5_input.php'; +?> +</td> +</tr> +</table> + +</body> +</html> diff --git a/modules_v2/GEDFact_assistant/_MEDIA/media_query_3a.php b/modules_v2/GEDFact_assistant/_MEDIA/media_query_3a.php new file mode 100644 index 0000000000..80c7258048 --- /dev/null +++ b/modules_v2/GEDFact_assistant/_MEDIA/media_query_3a.php @@ -0,0 +1,73 @@ +<?php +// Media Link Assistant Control module for webtrees +// +// Media Link information about an individual +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2008 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +// TODO: This module should be loaded via module.php. We should not load it directly. +define('WT_SCRIPT_NAME', WT_MODULES_DIR.'GEDFact_assistant/_MEDIA/media_query_3a.php'); +require '../../../includes/session.php'; + + +$iid2 = safe_GET('iid'); + +print_simple_header(WT_I18N::translate('Link media')); + +$record=WT_GedcomRecord::getInstance($iid2); +if ($record) { + $headjs=''; + if ($record->getType()=='FAM') { + if ($record->getHusband()) { + $headjs=$record->getHusband()->getXref(); + } elseif ($record->getWife()) { + $headjs=$record->getWife()->getXref(); + } + } + ?> + <script type="text/javascript"> + function insertId() { + if (window.opener.document.getElementById('addlinkQueue')) { + // alert('Please move this alert window and examine the contents of the pop-up window, then click OK') + window.opener.insertRowToTable("<?php echo $record->getXref(); ?>", "<?php echo htmlSpecialChars($record->getFullName()); ?>", "<?php echo $headjs; ?>"); + window.close(); + } + } + </script> + <?php + +} else { + ?> + <script type="text/javascript"> + function insertId() { + window.opener.alert('<?php echo strtoupper($iid2); ?> - <?php echo WT_I18N::translate('Not a valid Individual, Family or Source ID'); ?>'); + window.close(); + } + </script> + <?php +} +?> + +<script type="text/javascript"> + window.onLoad = insertId(); +</script> diff --git a/modules_v2/GEDFact_assistant/css/gf_styles.css b/modules_v2/GEDFact_assistant/css/gf_styles.css new file mode 100644 index 0000000000..f3157d6f31 --- /dev/null +++ b/modules_v2/GEDFact_assistant/css/gf_styles.css @@ -0,0 +1,100 @@ +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2007 John Finlay and Others + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + */ + +/* --------- Styles used in /_MEDIA/media_3_search.php ---*/ + +/* Outer border around nav elements */ +.outer_nav { + width:270px; + border:3px #808080 outset; + } + +/* Transparent cell border */ +.transparent { +border: 0px solid transparent; +} + +/* top Search box */ +input[type='text'] { + background: #FFFFFF; + color: #000000; + border: 1px solid #000000; + width: 120px; +} + +/* "Head" button images */ +.headimg { +margin-top:-4px; +border:0; +} +.headimg2 { +height:17px; +border-style:none; +margin:-3px; +margin-left:0px; +} + +/* Creates clickable <td> for fly-outs */ +td a { + display: block; + text-decoration: none; +} + + /* Prevents clickable td for Search <td> */ +td #srch a { + display: inline; +} + +/* Flyouts <td> */ +#flyoutFam, #flyoutPar, #flyoutStep { + position: absolute; + top: -15px; + left: 80px; + width: 150px; +} +#flyoutFamRTL, #flyoutParRTL, #flyoutStepRTL { + position: absolute; + top: -15px; + right: 35px; +} +#flyoutFam td, #flyoutPar td, #flyoutStep td, #flyoutFamRTL td, #flyoutParRTL td, #flyoutStepRTL td { + white-space: nowrap; + font-size:10px; + font-weight:normal; + text-decoration: none; +} + +div #spouseFam { + margin-left:13px; + margin-top:0px; +} + +/*-------------------------------------------------*/ + diff --git a/modules_v2/GEDFact_assistant/css/media_0_inverselink.css b/modules_v2/GEDFact_assistant/css/media_0_inverselink.css new file mode 100644 index 0000000000..e4c2cb1150 --- /dev/null +++ b/modules_v2/GEDFact_assistant/css/media_0_inverselink.css @@ -0,0 +1,36 @@ +/** + * Media Link Assistant Control module for webtrees + * + * Media Link information about an individual + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView +* Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GEDFact_assistant + * @version $Id$ + */ + +/* --------- Styles used in /_MEDIA/media_0_inverselink.php ---*/ + +.thumbheight { + height: expression( this.scrollHeight > 69 ? "70px" : "auto" ); /* sets max-height for IE */ + max-height: 70px; /* sets max-height value for all standards-compliant browsers */ +}
\ No newline at end of file diff --git a/modules_v2/GEDFact_assistant/module.php b/modules_v2/GEDFact_assistant/module.php new file mode 100644 index 0000000000..1f97821661 --- /dev/null +++ b/modules_v2/GEDFact_assistant/module.php @@ -0,0 +1,55 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class GEDFact_assistant_WT_Module extends WT_Module { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Census assistant'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('The census assistant provides a simple way to enter census transcripts and link them to each person listed in the census.'); + } + + // Extend WT_Module + public function modAction($mod_action) { + switch($mod_action) { + case '_CENS/census_3_find': + // TODO: this file should be a method in this class + require WT_ROOT.WT_MODULES_DIR.$this->getName().'/'.$mod_action.'.php'; + break; + case '_MEDIA/media_3_find': + // TODO: this file should be a method in this class + require WT_ROOT.WT_MODULES_DIR.$this->getName().'/'.$mod_action.'.php'; + break; + } + } +} diff --git a/modules_v2/address_report/module.php b/modules_v2/address_report/module.php new file mode 100644 index 0000000000..71cf428365 --- /dev/null +++ b/modules_v2/address_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class address_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Address List'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of addresses, telephone numbers, and email addresses.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_USER; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('place'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/address_report/report.xml b/modules_v2/address_report/report.xml new file mode 100644 index 0000000000..275ffa9cc0 --- /dev/null +++ b/modules_v2/address_report/report.xml @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Address List')" /></Title> + <Description><var var="WT_I18N::translate('A report of addresses, telephone numbers, and email addresses.')" /></Description> + <Input name="address" type="text"><var var="WT_I18N::translate('Show addresses that contain:')" /> </Input> + <Input name="sortby" type="select" options="NAME=>WT_I18N::translate('Name')|ID=>WT_I18N::translate('ID number')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="email_in" type="select" options="all=>WT_I18N::translate('All addresses')|noemail=>WT_I18N::translate('Addresses without emails')|onlyemail=>WT_I18N::translate('Only addresses with emails')"><var var="WT_I18N::translate('Include:')"/> </Input> + <Input name="report_type" type="select" options="list=>WT_I18N::translate('List')|labels=>WT_I18N::translate('Address Labels')"><var var="WT_I18N::translate('Type')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="16" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8" style="" /> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9" style="" /> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + + <if condition="$report_type=='list'"> + <!-- Date Text--> + <Style name="date" font="$fonts" size="8"/> + <!-- Column labels --> + <Style name="label" font="$fonts" size="10" style="b" /> + <Doc pageSize="$pageSize" > + <Header> + <Cell align="center" height="20" newline="1" style="header"><var var="WT_I18N::translate('Address List')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + <TextBox border="1" height="12" width="40"> + <Text style="label"> </Text> + </TextBox> + <TextBox border="1" height="12" width="170"> + <Text style="label"><var var="WT_I18N::translate('Name')" /></Text> + </TextBox> + <TextBox border="1" height="12" width="160"> + <Text style="label"><var var="WT_I18N::translate('Address')" /></Text> + </TextBox> + <TextBox border="1" height="12" newline="1"> + <Text style="label"><var var="WT_I18N::translate('Phone')" /> / <var var="WT_I18N::translate('Email address')" /></Text> + </TextBox> + </Header> + + <Body> + <SetVar name="email" value="" /> + <SetVar name="addrfilter" value=":ADDR CONTAINS " /> + <SetVar name="addrfilter2" value="" /> + <if condition="$address != ''"> + <SetVar name="addrfilter2" value="ADDR SUBCONTAINS $address" /> + </if> + <if condition="$email_in=='noemail'"> + <SetVar name="email" value="EMAIL EQUALS ''" /> + </if> + <if condition="$email_in=='onlyemail'"> + <SetVar name="email" value="EMAIL CONTAINS ." /> + <if condition="$address==''"> + <SetVar name="addrfilter" value="EMAIL CONTAINS ." /> + <SetVar name="email" value="" /> + </if> + </if> + <List list="individual" filter1="$addrfilter" filter2="$addrfilter2" filter3="$email" sortby="$sortby"> + <TextBox width="40" height="52" border="1"> + <Text style="text"><GedcomValue tag="@id" /></Text> + </TextBox> + <TextBox width="170" height="52" border="1"> + <Text style="text"><GetPersonName id="" /></Text> + </TextBox> + <TextBox width="160" height="52" border="1"> + <Text style="text"><GedcomValue tag="ADDR" /><GedcomValue tag="RESI:ADDR" /></Text> + <if condition="@ADDR:ADR1 != ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:ADR1" /></Text> + </if> + <if condition="@ADDR:CITY != ''"> + <if condition="$POSTAL_CODE==false"> + <if condition="@ADDR:STAE != ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:POST" /> <GedcomValue tag="ADDR:CITY" />, <GedcomValue tag="ADDR:STAE" /> </Text> + </if> + <if condition="@ADDR:STAE == ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:POST" /> <GedcomValue tag="ADDR:CITY" /></Text> + </if> + </if> + <if condition="$POSTAL_CODE==true"> + <if condition="@ADDR:STAE != ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:CITY" />, <GedcomValue tag="ADDR:STAE" /> <GedcomValue tag="ADDR:POST" /></Text> + </if> + <if condition="@ADDR:STAE == ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:CITY" /> <GedcomValue tag="ADDR:POST" /></Text> + </if> + </if> + + </if> + <if condition="@ADDR:CTRY != ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:CTRY" /></Text> + </if> + </TextBox> + <TextBox height="52" border="1" newline="1"> + <Text style="text"> + <varLetter var="PHON" /> <GedcomValue tag="PHON" /><br /> + <varLetter var="FAX" /> <GedcomValue tag="FAX" /><br /> + <varLetter var="EMAIL" /> <GedcomValue tag="_EMAIL" /><GedcomValue tag="EMAIL" /> + </Text> + </TextBox> + </List> + <Cell align="rightrtl" newline="1" style="label"> + <br /><var var="WT_I18N::translate('Total individuals')" />: <ListTotal /> + </Cell> + </Body> + + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now /></Cell> + </Footer> + </Doc> + </if> + <if condition="$report_type=='labels'"> + <Style name="label" font="$fonts" size="8" style="b" /> + <Style name="idstyle" font="$fonts" size="6" style="" /> + + <Doc pageSize="$pageSize" leftmargin="1" rightmargin="1" showGeneratedBy="0"> + <Header> + </Header> + <Body> + <SetVar name="email" value="" /> + <SetVar name="addrfilter" value=":ADDR CONTAINS " /> + <SetVar name="addrfilter2" value="" /> + <if condition="$address != ''"> + <SetVar name="addrfilter2" value="ADDR SUBCONTAINS $address" /> + </if> + <if condition="$email_in=='noemail'"> + <SetVar name="email" value="EMAIL EQUALS ''" /> + </if> + <if condition="$email_in=='onlyemail'"> + <SetVar name="email" value="EMAIL CONTAINS ." /> + <if condition="$address==''"> + <SetVar name="addrfilter" value="EMAIL CONTAINS ." /> + <SetVar name="email" value="" /> + </if> + </if> + <SetVar name="newline" value="0" /> + <SetVar name="count" value="1" /> + <SetVar name="Xstart" value="1" /> + <SetVar name="Ystart" value="30" /> + <SetVar name="width" value="200" /> + <SetVar name="height" value="74" /> + <SetVar name="Xspace" value="3" /> + <SetVar name="Yspace" value="1" /> + <if condition="$pageSize=='letter'"> + <SetVar name="Xstart" value="5" /> + <SetVar name="Ystart" value="25" /> + <SetVar name="width" value="194" /> + <SetVar name="height" value="76" /> + <SetVar name="Xspace" value="15" /> + <SetVar name="Yspace" value="1" /> + </if> + <SetVar name="X" value="$Xstart" /> + <SetVar name="Y" value="$Ystart" /> + <List list="individual" filter1="$addrfilter" filter2="$addrfilter2" filter3="$email" sortby="$sortby"> + <TextBox top="$Y" left="$X" width="$width" height="$height" newline="$newline" pagecheck="false"> + <Text style="label"><GetPersonName id="" /></Text> + <Text style="text"><br /><GedcomValue tag="ADDR" /><GedcomValue tag="RESI:ADDR" /></Text> + <if condition="@ADDR:ADR1 != ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:ADR1" /></Text> + </if> + <if condition="@ADDR:CITY != ''"> + <if condition="$POSTAL_CODE==false"> + <if condition="@ADDR:STAE != ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:POST" /> <GedcomValue tag="ADDR:CITY" />, <GedcomValue tag="ADDR:STAE" /> </Text> + </if> + <if condition="@ADDR:STAE == ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:POST" /> <GedcomValue tag="ADDR:CITY" /></Text> + </if> + </if> + <if condition="$POSTAL_CODE==true"> + <if condition="@ADDR:STAE != ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:CITY" />, <GedcomValue tag="ADDR:STAE" /> <GedcomValue tag="ADDR:POST" /></Text> + </if> + <if condition="@ADDR:STAE == ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:CITY" /> <GedcomValue tag="ADDR:POST" /></Text> + </if> + </if> + </if> + <if condition="@ADDR:CTRY != ''"> + <Text style="text"><br /><GedcomValue tag="ADDR:CTRY" /></Text> + </if> + <if condition="$showid==1"> + <Text style="idstyle"><br /> <GedcomValue tag="@id" /></Text> + </if> + </TextBox> + <SetVar name="count" value="$count+1" /> + <SetVar name="X" value="$X+$Xspace" /> + <SetVar name="X" value="$X+$width" /> + <if condition="$count==4"> + <SetVar name="Y" value="$Y+$Yspace" /> + <SetVar name="Y" value="$Y+$height" /> + </if> + <if condition="$Y>$pageHeight"> + <SetVar name="Y" value="$Ystart" /> + <SetVar name="X" value="$Xstart" /> + <NewPage /> + </if> + <if condition="$count>3"> + <SetVar name="count" value="1" /> + <SetVar name="X" value="$Xstart" /> + </if> + </List> + </Body> + <Footer> + </Footer> + </Doc> + </if> +</Report> diff --git a/modules_v2/ahnentafel_report/module.php b/modules_v2/ahnentafel_report/module.php new file mode 100644 index 0000000000..76c9351cb4 --- /dev/null +++ b/modules_v2/ahnentafel_report/module.php @@ -0,0 +1,69 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class ahnentafel_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Ahnentafel Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of a person\'s ancestors in a narrative style.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + global $controller; + + if ($controller && isset($controller->pid)) { + $pid='&pid='.$controller->pid; + } elseif ($controller && isset($controller->rootid)) { + $pid='&pid='.$controller->rootid; + } else { + $pid=''; + } + + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'.$pid); + $menu->addIcon('ancestry'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/ahnentafel_report/report.xml b/modules_v2/ahnentafel_report/report.xml new file mode 100644 index 0000000000..9fde717f65 --- /dev/null +++ b/modules_v2/ahnentafel_report/report.xml @@ -0,0 +1,592 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Includes 2010 work done by John Hawthornthwaite(hagershorn1) for an ancestry report in PhpGedView --> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Ahnentafel Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of a person\'s ancestors in a narrative style.')" /></Description> + <Input name="pid" lookup="INDI" type="text"><var var="WT_I18N::translate('Enter Individual ID')" /></Input> + <Input name="maxgen" type="select" options="3=>3|4=>4|5=>5|6=>6|7=>7|8=>8|9=>9|*=>*"><var var="WT_I18N::translate('Generations')" /></Input> + <Input name="sources" type="checkbox" default="1"><var var="WT_I18N::translate('Show sources?')" /></Input> + <Input name="notes" type="checkbox" default="0"><var var="WT_I18N::translate('Show notes?')" /></Input> + <Input name="occu" type="checkbox" default="0"><var var="WT_I18N::translate('Show occupations?')" /></Input> + <Input name="resi" type="checkbox" default="0"><var var="WT_I18N::translate('Show residences?')" /></Input> + <Input name="children" type="checkbox" default="0"><var var="WT_I18N::translate('Show children of ancestors?')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="14" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="10"/> + <!-- Links to sources - required style name by the generator --> + <Style name="footnotenum" font="$fonts" size="7"/> + <!-- Source text - FootnoteTexts - required style name by the generator --> + <Style name="footnote" font="$fonts" size="8"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date Text--> + <Style name="date" font="$fonts" size="8"/> + <!-- Note Text --> + <Style name="note" font="$fonts" size="9"/> + <!-- Individual name --> + <Style name="name" font="$fonts" size="10" style="b" /> + <Style name="namech" font="$fonts" size="8" style="b" /> + <Style name="subheader" font="$fonts" size="12" style="b" /> + <Style name="label1" font="$fonts" size="8"/> + <Style name="label2" font="$fonts" size="10"/> + <SetVar name="num" value="1" /> + <SetVar name="generation" value="0" /> + <SetVar name="empty_name" value="f" /> + <SetVar name="empty_start_value" value="0" /> + <SetVar name="nametokeep" value=" " /> + <SetVar name="personNumber" value="1" /> + <SetVar name="individual" value=" " /> + <SetVar name="spouse" value="" /> + <SetVar name="childNumber" value="1" /> + <!-- New Page for Sources controller if SOUR exist --> + <SetVar name="source_exist" value="0" /> + + <Doc pageSize="$pageSize"> + <Header> + <Cell align="center" height="30" newline="1" style="header"><var var="WT_I18N::translate('Ahnentafel Report for ')" /><GetPersonName id="$pid" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + </Header> + <Body> + <Relatives id="$pid" group="direct-ancestors" sortby="none" maxgen="$maxgen" showempty="true"> + <SetVar name="gender" value="m" /> + <if condition="@SEX=='F'"> + <SetVar name="gender" value="f" /> + </if> + <if condition="$generation!=@generation"> + <if condition="$empty_name=='t'" > + <TextBox width="50" height="20"> + <SetVar name="empty_end_value" value="$num-1" /> + <Text style="text"><var var="empty_start_value" />-<var var="empty_end_value" />.</Text> + </TextBox> + <TextBox width="475" height="12" newline="1" > + <Text style="text"><br /></Text> + </TextBox> + <TextBox width="25" height="20" newline="1"> + <Text style="text"><br /></Text> + </TextBox> + <SetVar name="empty_start_value" value="$num" /> + </if> + <Cell align="center" height="30" newline="1" style="subheader"><var var="WT_I18N::translate('Generation ')" /><Generation /></Cell> + <SetVar name="generation" value="@generation" /> + </if> + <SetVar name="indiname" value="@NAME" /> + <if condition="$indiname==''"> + <if condition="$empty_name=='f'"> + <SetVar name="empty_name" value="t" /> + <SetVar name="empty_start_value" value="$num" /> + </if> + </if> + <if condition="$indiname!=''"> + <if condition="$empty_name=='t'" > + <TextBox width="50" height="20"> + <SetVar name="empty_end_value" value="$num-1" /> + <Text style="text"><var var="empty_start_value" />-<var var="empty_end_value" />.</Text> + </TextBox> + <TextBox width="475" height="12" newline="1"> + <Text style="text"><br /></Text> + </TextBox> + <TextBox width="25" height="20" newline="1"> + <Text style="text"><br /></Text> + </TextBox> + <SetVar name="empty_name" value="f" /> + </if> + + <!-- Generation counter --> + <TextBox width="25" height="30"> + <Text style="text"><var var="num" />.</Text> + </TextBox> + + <!-- Sentence 1 + Individual, name... --> + <TextBox height="12" newline="1"> + <Text style="name"><GetPersonName id="" /> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <!-- Individual, birth... --> + <Gedcom id="BIRT"> + <Text style="text"> + <if condition="$gender=='m'"> + <var var="WT_I18N::translate_c('MALE', 'was born')" /> + </if> + <if condition="$gender=='f'"> + <var var="WT_I18N::translate_c('FEMALE', 'was born')" /> + </if> + </Text> + <if condition="$sources==1"> + <RepeatTag tag="BIRT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="text"><var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="text"><var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + <if condition="(@desc=='Y') or (@DATE=='' and @PLAC=='')"> + <Text style="text"><var var="WT_I18N::translate(' but the details are unknown')" /></Text> + </if> + <Text style="text">.</Text> + </Gedcom> + + <!-- Sentence 2 + Individual, christened... --> + <Gedcom id="CHR"> + <Text style="text"> + <if condition="$gender=='m'"> + <var var="WT_I18N::translate('He was christened')" /> + </if> + <if condition="$gender=='f'"> + <var var="WT_I18N::translate('She was christened')" /> + </if> + </Text> + <if condition="$sources==1"> + <RepeatTag tag="CHR:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="text"><var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="text"><var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + <if condition="(@desc=='Y') or (@DATE=='' and @PLAC=='')"> + <Text style="text"><var var="WT_I18N::translate(' but the details are unknown')" /></Text> + </if> + <Text style="text">.</Text> + </Gedcom> + <if condition="$occu==1"> + <!-- Individual, occupation... --> + <Gedcom id="OCCU"> + <Text style="text"> + <if condition="$gender=='m'"> + <var var="WT_I18N::translate('His occupation was')" /> <GedcomValue tag="OCCU" level="1" /> + </if> + <if condition="$gender=='f'"> + <var var="WT_I18N::translate('Her occupation was')" /> <GedcomValue tag="OCCU" level="1" /> + </if> + </Text> + <if condition="$sources==1"> + <RepeatTag tag="OCCU:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="text"><var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="text"><var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + <Text style="text">.</Text> + </Gedcom> + </if> + <if condition="$resi==1"> + <!-- Individual, residence... --> + <Gedcom id="RESI"> + <Text style="text"> + <if condition="$gender=='m'"> + <var var="WT_I18N::translate('He resided at')" /> + </if> + <if condition="$gender=='f'"> + <var var="WT_I18N::translate('She resided at')" /> + </if> + <if condition="@ADDR!=''"> + <GedcomValue tag="RESI:ADDR" level="1" /> + </if> + <if condition="@ADDR==''"> + <if condition="@PLAC!=''"> + <GedcomValue tag="RESI:PLAC" level="1" /> + </if> + </if> + + </Text> + <if condition="$sources==1"> + <RepeatTag tag="RESI:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="text"><var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <Text style="text">.</Text> + </Gedcom> + </if> + <SetVar name="cpid" value="@ID" /> + <if condition="$cpid!=$spid"> + <Gedcom id="@FAMS"> + <if condition="$cpid==@HUSB"> + <SetVar name="spid" value="@WIFE" /> + </if> + <if condition="$cpid==@WIFE"> + <SetVar name="spid" value="@HUSB" /> + </if> + <Gedcom id="MARR"> + <if condition="$spid!='' and @DATE!='' and @PLAC!=''"> + <Text style="text"><br /> + <if condition="$gender=='m'"> + <var var="WT_I18N::translate('He married')" /> + </if> + <if condition="$gender=='f'"> + <var var="WT_I18N::translate('She married')" /> + </if> + </Text> + <if condition="$sources==1"> + <RepeatTag tag="MARR:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="$spid!=''"> + <Text style="text"> <GetPersonName id="$spid" /></Text> + </if> + <Text style="text"> <var var=" " /></Text> + <if condition="@DATE!=''"> + <Text style="text"><var var=" " /> <GedcomValue tag="DATE" level="2" /><if condition="@PLAC==''"> </if></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="text"><var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + <if condition="((@desc=='Y') or (@DATE=='' and @PLAC=='')) and ($spid=='')"> + <Text style="text"><var var="WT_I18N::translate(' but the details are unknown')" /></Text> + </if> + <Text style="text">.</Text> + </if> + </Gedcom> + </Gedcom> + </if> + <Gedcom id="DEAT"> + <Text style="text"><br /> + <if condition="$gender=='m'"> + <var var="WT_I18N::translate('He died')" /> + </if> + <if condition="$gender=='f'"> + <var var="WT_I18N::translate('She died')" /> + </if> + </Text> + <if condition="$sources==1"> + <RepeatTag tag="DEAT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="text"><var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="text"><var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + <if condition="(@desc=='Y') or (@DATE=='' and @PLAC=='')"> + <Text style="text"><var var="WT_I18N::translate(' but the details are unknown')" /></Text> + </if> + <Text style="text">. </Text> + </Gedcom> + <Gedcom id="CREM"> + <Text style="text"><br /> + <if condition="$gender=='m'"> + <var var="WT_I18N::translate('He was cremated')" /> + </if> + <if condition="$gender=='f'"> + <var var="WT_I18N::translate('She was cremated')" /> + </if> + </Text> + <if condition="$sources==1"> + <RepeatTag tag="CREM:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="text"><var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="text"><var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + <if condition="(@desc=='Y') or (@DATE=='' and @PLAC=='')"> + <Text style="text"><var var="WT_I18N::translate(' but the details are unknown')" /></Text> + </if> + <Text style="text">. </Text> + </Gedcom> + <Gedcom id="BURI"> + <!-- Look for Level 2 CREM subordinate to BURI (should have been at Level 1) --> + <RepeatTag tag="BURI:CREM"> + <if condition="$gender=='m'"> + <var var="WT_I18N::translate('He was cremated')" /> + </if> + <if condition="$gender=='f'"> + <var var="WT_I18N::translate('She was cremated')" /> + </if> + <Text style="text">.</Text> + </RepeatTag> + <!-- Now for the real BURI information --> + <Text style="text"> + <if condition="$gender=='m'"> + <var var="WT_I18N::translate('He was buried')" /> + </if> + <if condition="$gender=='f'"> + <var var="WT_I18N::translate('She was buried')" /> + </if> + </Text> + <if condition="$sources==1"> + <RepeatTag tag="BURI:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="text"><var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="text"><var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + <if condition="(@desc=='Y') or (@DATE=='' and @PLAC=='')"> + <Text style="text"><var var="WT_I18N::translate(' but the details are unknown')" /></Text> + </if> + <Text style="text">.</Text> + </Gedcom> + </TextBox> + <if condition="$notes==1"> + <RepeatTag tag="NOTE"> + <TextBox height="3" newline="1" padding="0"/> + <Cell height="12" left="30" newline="1" style="note"><GedcomValue tag="NOTE"/></Cell> + </RepeatTag> + </if> + <TextBox height="10" newline="1" padding="0"/> + </if> + <SetVar name="num" value="$num+1" /> + <if condition="$children==1"> + <!-- this section gets the children.--> + <RepeatTag tag="FAMS"> + <SetVar name="individual" value="$cpid" /> + <SetVar name="spouse" value="$spid" /> + <Gedcom id="@FAMS"> + <if condition="@CHIL!=''"> + <SetVar name="numberOfChildren" value="0" /> + <RepeatTag tag="CHIL"> + <Gedcom id="@CHIL"> + <SetVar name="numberOfChildren" value="$numberOfChildren+1" /> + </Gedcom> + </RepeatTag> + <if condition="$individual == $spouse"> + <TextBox height="20" left="25" newline="1"> + <if condition="$numberOfChildren==1"> + <Text style="label1"><var var="WT_I18N::translate('Child of ')" /></Text> + </if> + <if condition="$numberOfChildren>1"> + <Text style="label1"><var var="WT_I18N::translate('Children of ')" /></Text> + </if> + <Text style="namech"><GetPersonName id="@HUSB" /></Text> + <Text style="label1"> <var var="WT_I18N::translate('and')" /> </Text> + <Text style="namech"><GetPersonName id="@WIFE" /></Text> + <Text style="label1">:</Text> + </TextBox> + <SetVar name="familyChildNumber" value ="1" /> + <RepeatTag tag="CHIL"> + <Gedcom id="@CHIL"> + <if condition="$familyChildNumber==1"><SetVar name="familyChildRoman" value="i" /></if> + <if condition="$familyChildNumber==2"><SetVar name="familyChildRoman" value="ii" /></if> + <if condition="$familyChildNumber==3"><SetVar name="familyChildRoman" value="iii" /></if> + <if condition="$familyChildNumber==4"><SetVar name="familyChildRoman" value="iv" /></if> + <if condition="$familyChildNumber==5"><SetVar name="familyChildRoman" value="v" /></if> + <if condition="$familyChildNumber==6"><SetVar name="familyChildRoman" value="vi" /></if> + <if condition="$familyChildNumber==7"><SetVar name="familyChildRoman" value="vii" /></if> + <if condition="$familyChildNumber==8"><SetVar name="familyChildRoman" value="viii" /></if> + <if condition="$familyChildNumber==9"><SetVar name="familyChildRoman" value="ix" /></if> + <if condition="$familyChildNumber==10"><SetVar name="familyChildRoman" value="x" /></if> + <if condition="$familyChildNumber==11"><SetVar name="familyChildRoman" value="xi" /></if> + <if condition="$familyChildNumber==12"><SetVar name="familyChildRoman" value="xii" /></if> + <if condition="$familyChildNumber==13"><SetVar name="familyChildRoman" value="xiii" /></if> + <if condition="$familyChildNumber==14"><SetVar name="familyChildRoman" value="xiv" /></if> + <if condition="$familyChildNumber==15"><SetVar name="familyChildRoman" value="xv" /></if> + <if condition="$familyChildNumber==16"><SetVar name="familyChildRoman" value="xvi" /></if> + <if condition="$familyChildNumber==17"><SetVar name="familyChildRoman" value="xvii" /></if> + <if condition="$familyChildNumber==18"><SetVar name="familyChildRoman" value="xviii" /></if> + <if condition="$familyChildNumber==19"><SetVar name="familyChildRoman" value="xix" /></if> + <if condition="$familyChildNumber==20"><SetVar name="familyChildRoman" value="xx" /></if> + <TextBox left="25" height="20" newline="1"> + <Text style="label1"><var var="familyChildRoman" /></Text> + <Text style="namech"> <GetPersonName id="" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <Gedcom id="BIRT"> + <Text style="label1"> + <varLetter var="BIRT" /> + <GedcomValue tag="DATE" level="2"/> + <GedcomValue tag="PLAC" level="2"/> + </Text> + </Gedcom> + <if condition="@SEX=='M'"> + <SetVar name="gender" value="male" /> + </if> + <if condition="@SEX=='F'"> + <SetVar name="gender" value="female" /> + </if> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS"> + <Text style="label1">, + <varLetter var="MARR" /> + </Text> + <if condition="$gender=='male'"> + <Text style="namech"><GetPersonName id="@WIFE" /></Text> + </if> + <if condition="$gender=='female'"> + <Text style="namech"><GetPersonName id="@HUSB" /></Text> + </if> + <Text style="label1"> + <Gedcom id="MARR"> + <if condition="@DATE!=''"> + <GedcomValue tag="DATE" level="2" /> + </if> + <if condition="@PLAC!=''"> + <GedcomValue tag="PLAC" level="2" /> + </if> + </Gedcom> + </Text> + </Gedcom> + </RepeatTag> + <Gedcom id="DEAT"> + <Text style="label1">, + <varLetter var="DEAT" /> + <GedcomValue tag="DATE" level="2"/> + <GedcomValue tag="PLAC" level="2"/> + </Text> + </Gedcom> + </TextBox> + </Gedcom> + <SetVar name="familyChildNumber" value="$familyChildNumber+1" /> + </RepeatTag> + </if> + </if> + </Gedcom> + </RepeatTag> + <SetVar name="personNumber" value="$personNumber + 1" /> + <TextBox height="10" newline="1" padding="0"/> + </if> + </Relatives> + <!-- if the sources were on, print the source citations as footnotes --> + <if condition="$source_exist==1"> + <NewPage/> + <TextBox width="$width" height="20" newline="1"> + <Text style="subheader"><var var="WT_I18N::translate('Sources')" /><br /><br /></Text> + <FootnoteTexts /> + </TextBox> + </if> + </Body> + <Footer> + <Cell align="rightrtl" style="date"><Now /></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/all_tab/module.php b/modules_v2/all_tab/module.php new file mode 100644 index 0000000000..b3c35117af --- /dev/null +++ b/modules_v2/all_tab/module.php @@ -0,0 +1,106 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class all_tab_WT_Module extends WT_Module implements WT_Module_Tab { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('All'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab to the individual page which displays the contents of all other active tabs.'); + } + + // Implement WT_Module_Tab + public function defaultTabOrder() { + return 90; + } + + // Implement WT_Module_Tab + public function hasTabContent() { + return true; + } + + // Implement WT_Module_Tab + public function getTabContent() { + + $out = '<div id="'.$this->getName().'_content">'; + $out .= "<!-- all tab doesn't have it's own content -->"; + $out .= "</div>"; + return $out; + } + + // Implement WT_Module_Tab + public function canLoadAjax() { + return true; + } + + // Implement WT_Module_Tab + public function getPreLoadContent() { + return ''; + } + + // Implement WT_Module_Tab + public function getJSCallback() { + $out='if (jQuery("#tabs li:eq("+jQuery("#tabs").tabs("option", "selected")+") a").attr("title")=="'.$this->getName().'") {'; + foreach ($this->controller->tabs as $tab) { + if ($tab->getName()!=$this->getName()) { + $out.= + ' if (!tabCache["'.$tab->getName().'"]) {'. + ' jQuery("#'.$tab->getName().'").load("'.$this->controller->indi->getRawUrl().'&action=ajax&module='.$tab->getName().'");'. + ' tabCache["'.$tab->getName().'"] = true;'. + ' }'; + } + } + $out.= + ' jQuery("#tabs > div").each(function() {'. + ' if (this.name!="'.$this->getName().'") {'. + ' jQuery(this).removeClass("ui-tabs-hide");'. + ' }'. + ' });'. + '}'; + if (array_key_exists('googlemap', WT_Module::getActiveModules())) { + global $GOOGLEMAP_PH_CONTROLS; + $out.='if (jQuery("#tabs li:eq("+jQuery("#tabs").tabs("option", "selected")+") a").attr("title")=="'.$this->getName().'") {'. + ' loadMap();'; + if ($GOOGLEMAP_PH_CONTROLS) { + $out.=' GEvent.addListener(map,"mouseout", function() { map.hideControls(); });'. + ' GEvent.addListener(map,"mouseover",function() { map.showControls(); });'. + ' GEvent.trigger (map,"mouseout");'; + } + $out.=' map.setMapType(GOOGLEMAP_MAP_TYPE);'. + ' SetMarkersAndBounds();'. + ' ResizeMap();'. + '}'; + } + return $out; + } +} diff --git a/modules_v2/batch_update/admin_batch_update.php b/modules_v2/batch_update/admin_batch_update.php new file mode 100644 index 0000000000..96bd8fc6af --- /dev/null +++ b/modules_v2/batch_update/admin_batch_update.php @@ -0,0 +1,449 @@ +<?php +/** + * Batch Update module for phpGedView + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * @author Greg Roach + * $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +if (!WT_USER_GEDCOM_ADMIN) { + header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH.'module.php?mod=batch_update'); + exit; +} + +require WT_ROOT.'includes/functions/functions_edit.php'; + +class batch_update { + var $plugin =null; // Form parameter: chosen plugin + var $xref =null; // Form parameter: record to update + var $action =null; // Form parameter: how to update record + var $data =null; // Form parameter: additional details for $action + var $plugins =null; // Array of available plugins + var $PLUGIN =null; // An instance of a plugin object + var $all_xrefs=null; // An array of all xrefs that might need to be updated + var $prev_xref=null; // The previous xref to process + var $curr_xref=null; // The xref to process + var $next_xref=null; // The next xref to process + var $record =null; // A GedcomRecord object corresponding to $curr_xref + + // Main entry point - called by the PGV framework in response to module.php?mod=batch_update + function main() { + // HTML common to all pages + $html= + print_header(WT_I18N::translate('Batch Update')). + self::getJavascript(). + '<form id="batch_update_form" action="module.php" method="get">'. + '<input type="hidden" name="mod" value="batch_update">'. + '<input type="hidden" name="mod_action" value="admin_batch_update">'. + '<input type="hidden" name="xref" value="'.$this->xref.'">'. + '<input type="hidden" name="action" value="">'. // will be set by javascript for next update + '<input type="hidden" name="data" value="">'. // will be set by javascript for next update + '<table id="batch_update"><tr>'. + '<th>'.WT_I18N::translate('Family tree').'</th>'. + '<td><select name="GEDCOM" onchange="reset_reload();">'; + + $all_gedcoms=get_all_gedcoms(); + asort($all_gedcoms); + foreach ($all_gedcoms as $ged_id=>$gedcom) { + $html.='<option value="'.$gedcom.'"'.($ged_id==WT_GED_ID ? ' selected="selected"' : '').'>'.get_gedcom_setting($ged_id, 'title').'</option>'; + } + $html.='</select></td></tr><tr><th>'.WT_I18N::translate('Batch Update').'</th><td><select name="plugin" onchange="reset_reload();">'; + if (!$this->plugin) { + $html.='<option value="" selected="selected"></option>'; + } + + foreach ($this->plugins as $class=>$plugin) { + $html.='<option value="'.$class.'"'.($this->plugin==$class ? ' selected="selected"' : '').'>'.$plugin->getName().'</option>'; + } + $html.='</select>'; + if ($this->PLUGIN) { + $html.='<br/><i>'.$this->PLUGIN->getDescription().'</i>'; + } + $html.='</td></tr>'; + + if (!get_user_setting(WT_USER_ID, 'auto_accept')) + $html.='<tr><td colspan="2" class="warning">'.WT_I18N::translate('Your user account does not have "automatically approve changes" enabled. You will only be able to change one record at a time.').'</td></tr>'; + + // If a plugin is selected, display the details + if ($this->PLUGIN) { + $html.=$this->PLUGIN->getOptionsForm(); + if (substr($this->action, -4)=='_all') { + // Reset - otherwise we might "undo all changes", which refreshes the + // page, which makes them all again! + $html.='<script type="text/javascript">reset_reload();</script>'; + } else { + if ($this->curr_xref) { + // Create an object, so we can get the latest version of the name. + $object=WT_GedcomRecord::getInstance($this->curr_xref); + $object->setGedcomRecord($this->record); + + $html.= + '</table><table id="batch_update2"><tr><td>'. + self::createSubmitButton(WT_I18N::translate('previous'), $this->prev_xref). + self::createSubmitButton(WT_I18N::translate('next'), $this->next_xref). + '</td><th><a href="'.$object->getHtmlUrl().'">'.$object->getFullName().'</a>'. + '</th>'. + '</tr><tr><td valign="top">'. + '<br/>'.implode('<br/>',$this->PLUGIN->getActionButtons($this->curr_xref, $this->record)).'<br/>'. + '</td><td dir="ltr" align="left">'. + $this->PLUGIN->getActionPreview($this->curr_xref, $this->record); + '</td></tr>'; + } else { + $html.='<tr><td class="accepted" colspan=2>'.WT_I18N::translate('Nothing found.').'</td></tr>'; + } + } + } + $html.='</table></form>'; + ob_start(); + print_footer(); + return $html.ob_get_clean(); + } + + // Constructor - initialise variables and validate user-input + function __construct() { + $this->plugins=self::getPluginList(); // List of available plugins + $this->plugin =safe_GET('plugin', array_keys($this->plugins)); // User parameters + $this->xref =safe_GET('xref', WT_REGEX_XREF); + $this->action =safe_GET('action'); + $this->data =safe_GET('data'); + + // Don't do any processing until a plugin is chosen. + if ($this->plugin) { + $this->PLUGIN=new $this->plugin; + $this->PLUGIN->getOptions(); + $this->getAllXrefs(); + + switch ($this->action) { + case '': + break; + case 'update': + $record=self::getLatestRecord($this->xref, $this->all_xrefs[$this->xref]); + if ($this->PLUGIN->doesRecordNeedUpdate($this->xref, $record)) { + $newrecord=$this->PLUGIN->updateRecord($this->xref, $record); + if ($newrecord!=$record) { + if ($newrecord) { + replace_gedrec($this->xref, WT_GED_ID, $newrecord, $this->PLUGIN->chan); + } else { + delete_gedrec($this->xref, WT_GED_ID); + } + } + } + $this->xref=$this->findNextXref($this->xref); + break; + case 'update_all': + foreach ($this->all_xrefs as $xref=>$type) { + $record=self::getLatestRecord($xref, $type); + if ($this->PLUGIN->doesRecordNeedUpdate($xref, $record)) { + $newrecord=$this->PLUGIN->updateRecord($xref, $record); + if ($newrecord!=$record) { + if ($newrecord) { + replace_gedrec($xref, WT_GED_ID, $newrecord, $this->PLUGIN->chan); + } else { + delete_gedrec($xref, WT_GED_ID); + } + } + } + } + $this->xref=''; + return; + case 'delete': + $record=self::getLatestRecord($this->xref, $this->all_xrefs[$this->xref]); + if ($this->PLUGIN->doesRecordNeedUpdate($this->xref, $record)) { + delete_gedrec($this->xref, WT_GED_ID); + } + $this->xref=$this->findNextXref($this->xref); + break; + case 'delete_all': + foreach ($this->all_xrefs as $xref=>$type) { + $record=self::getLatestRecord($xref, $type); + if ($this->PLUGIN->doesRecordNeedUpdate($xref, $record)) { + delete_gedrec($xref, WT_GED_ID); + } + } + $xref->xref=''; + return; + default: + // Anything else will be handled by the plugin + $this->PLUGIN->performAction($this->xref, $this->record, $this->action, $this->data); + break; + } + + // Make sure that our requested record really does need updating. + // It may have been updated in another session, or may not have + // been specified at all. + if (array_key_exists($this->xref, $this->all_xrefs) && + $this->PLUGIN->doesRecordNeedUpdate($this->xref, self::getLatestRecord($this->xref, $this->all_xrefs[$this->xref]))) { + $this->curr_xref=$this->xref; + } + // The requested record doesn't need updating - find one that does + if (!$this->curr_xref) { + $this->curr_xref=$this->findNextXref($this->xref); + } + if (!$this->curr_xref) { + $this->curr_xref=$this->findPrevXref($this->xref); + } + // If we've found a record to update, get details and look for the next/prev + if ($this->curr_xref) { + $this->record=self::getLatestRecord($this->curr_xref, $this->all_xrefs[$this->curr_xref]); + $this->prev_xref=$this->findPrevXref($this->curr_xref); + $this->next_xref=$this->findNextXref($this->curr_xref); + } + } + } + + // Find the next record that needs to be updated + function findNextXref($xref) { + foreach (array_keys($this->all_xrefs) as $key) { + if ($key>$xref) { + $record=self::getLatestRecord($key, $this->all_xrefs[$key]); + if ($this->PLUGIN->doesRecordNeedUpdate($key, $record)) { + return $key; + } + } + } + return null; + } + + // Find the previous record that needs to be updated + function findPrevXref($xref) { + foreach (array_reverse(array_keys($this->all_xrefs)) as $key) { + if ($key<$xref) { + $record=self::getLatestRecord($key, $this->all_xrefs[$key]); + if ($this->PLUGIN->doesRecordNeedUpdate($key, $record)) { + return $key; + } + } + } + return null; + } + + function getAllXrefs() { + $sql=array(); + $vars=array(); + foreach ($this->PLUGIN->getRecordTypesToUpdate() as $type) { + switch ($type) { + case 'INDI': + $sql[]="SELECT i_id, 'INDI' FROM `##individuals` WHERE i_file=?"; + $vars[]=WT_GED_ID; + break; + case 'FAM': + $sql[]="SELECT f_id, 'FAM' FROM `##families` WHERE f_file=?"; + $vars[]=WT_GED_ID; + break; + case 'SOUR': + $sql[]="SELECT s_id, 'SOUR' FROM `##sources` WHERE s_file=?"; + $vars[]=WT_GED_ID; + break; + case 'OBJE': + $sql[]="SELECT m_media, 'OBJE' FROM `##media` WHERE m_gedfile=?"; + $vars[]=WT_GED_ID; + break; + default: + $sql[]="SELECT o_id, ? FROM `##other` WHERE o_type=? AND o_file=?"; + $vars[]=$type; + $vars[]=$type; + $vars[]=WT_GED_ID; + break; + } + } + $this->all_xrefs= + WT_DB::prepare(implode(' UNION ', $sql).' ORDER BY 1 ASC') + ->execute($vars) + ->fetchAssoc(); + } + + // Scan the plugin directory for a list of plugins + static function getPluginList() { + $array=array(); + $dir=dirname(__FILE__).'/plugins/'; + $dir_handle=opendir($dir); + while ($file=readdir($dir_handle)) { + if (substr($file, -4)=='.php') { + require dirname(__FILE__).'/plugins/'.$file; + $class=basename($file, '.php').'_bu_plugin'; + $array[$class]=new $class; + } + } + closedir($dir_handle); + return $array; + } + + // Javascript that gets included on every page + static function getJavascript() { + return + '<script type="text/javascript">'. + 'function reset_reload() {'. + ' var bu_form=document.getElementById("batch_update_form");'. + ' bu_form.xref.value="";'. + ' bu_form.action.value="";'. + ' bu_form.data.value="";'. + ' bu_form.submit();'. + '}</script>' + ; + } + + // Create a submit button for our form + static function createSubmitButton($text, $xref, $action='', $data='') { + return + '<input type="submit" value="'.$text.'" onclick="'. + 'this.form.xref.value=\''.htmlspecialchars($xref).'\';'. + 'this.form.action.value=\''.htmlspecialchars($action).'\';'. + 'this.form.data.value=\''.htmlspecialchars($data).'\';'. + 'return true;"'. + ($xref ? '' : ' disabled').'>'; + } + + // Get the current view of a record, allowing for pending changes + static function getLatestRecord($xref, $type) { + return find_gedcom_record($xref, WT_GED_ID); + } +} + +// Each plugin should extend the base_plugin class, and implement these +// two functions: +// +// bool doesRecordNeedUpdate($xref, $gedrec) +// string updateRecord($xref, $gedrec) +// +class base_plugin { + var $chan=false; // User option; update change record + + // Default is to operate on INDI records + function getRecordTypesToUpdate() { + return array('INDI'); + } + + // Default option is just the "don't update CHAN record" + function getOptions() { + $this->chan=safe_GET_bool('chan'); + } + + // Default option is just the "don't update CHAN record" + function getOptionsForm() { + return + '<tr><th>'.WT_I18N::translate('Update the CHAN record').':</th>'. + '<td><select name="chan" onchange="this.form.submit();">'. + '<option value="no"' .($this->chan ? '' : ' selected="selected"').'>'.WT_I18N::translate('No') .'</option>'. + '<option value="yes"'.($this->chan ? ' selected="selected"' : '').'>'.WT_I18N::translate('Yes').'</option>'. + '</select></td></tr>'; + } + + // Default buttons are update and update_all + function getActionButtons($xref) { + if (get_user_setting(WT_USER_ID, 'auto_accept')) { + return array( + batch_update::createSubmitButton(WT_I18N::translate('Update'), $xref, 'update'), + batch_update::createSubmitButton(WT_I18N::translate('Update all'), $xref, 'update_all') + ); + } else { + return array( + batch_update::createSubmitButton(WT_I18N::translate('Update'), $xref, 'update') + ); + } + } + + // Default previewer for plugins with no custom preview. + function getActionPreview($xref, $gedrec) { + $old_lines=preg_split('/[\n]+/', $gedrec); + $new_lines=preg_split('/[\n]+/', $this->updateRecord($xref, $gedrec)); + // Find matching lines using longest-common-subsequence algorithm. + $lcs=self::LCS($old_lines, $new_lines, 0, count($old_lines)-1, 0, count($new_lines)-1); + + $diff_lines=array(); + $last_old=-1; + $last_new=-1; + while ($lcs) { + list($old, $new)=array_shift($lcs); + while ($last_old<$old-1) { + $diff_lines[]=self::decorateDeletedText($old_lines[++$last_old]); + } + while ($last_new<$new-1) { + $diff_lines[]=self::decorateInsertedText($new_lines[++$last_new]); + } + $diff_lines[]=$new_lines[$new]; + $last_old=$old; + $last_new=$new; + } + while ($last_old<count($old_lines)-1) { + $diff_lines[]=self::decorateDeletedText($old_lines[++$last_old]); + } + while ($last_new<count($new_lines)-1) { + $diff_lines[]=self::decorateInsertedText($new_lines[++$last_new]); + } + + return '<pre>'.self::createEditLinks(implode("\n", $diff_lines)).'</pre>'; + } + + // Longest Common Subsequence. + static function LCS($X, $Y, $x1, $x2, $y1, $y2) { + if ($x2-$x1>=0 && $y2-$y1>=0) { + if ($X[$x1]==$Y[$y1]) { + // Match at start of sequence + $tmp=self::LCS($X, $Y, $x1+1, $x2, $y1+1, $y2); + array_unshift($tmp, array($x1, $y1)); + return $tmp; + } elseif ($X[$x2]==$Y[$y2]) { + // Match at end of sequence + $tmp=self::LCS($X, $Y, $x1, $x2-1, $y1, $y2-1); + array_push($tmp, array($x2, $y2)); + return $tmp; + } else { + // No match. Look for subsequences + $tmp1=self::LCS($X, $Y, $x1, $x2, $y1, $y2-1); + $tmp2=self::LCS($X, $Y, $x1, $x2-1, $y1, $y2); + return count($tmp1) > count($tmp2) ? $tmp1 : $tmp2; + } + } else { + // One array is empty - end recursion + return array(); + } + } + + // Default handler for plugin with no custom actions. + function performAction($xref, $gedrec, $action, $data) { + } + + // Decorate inserted/deleted text + static function decorateInsertedText($text) { + return '<span class="added_text">'.$text.'</span>'; + } + static function decorateDeletedText($text) { + return '<span class="deleted_text">'.$text.'</span>'; + } + + // Converted gedcom links into editable links + static function createEditLinks($gedrec) { + return preg_replace( + "/@([^#@\n]+)@/m", + '<a href="javascript:;" onclick="return edit_raw(\'\\1\');">@\\1@</a>', + $gedrec + ); + } +} diff --git a/modules_v2/batch_update/module.php b/modules_v2/batch_update/module.php new file mode 100644 index 0000000000..f7ddb22f4d --- /dev/null +++ b/modules_v2/batch_update/module.php @@ -0,0 +1,58 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class batch_update_WT_Module extends WT_Module implements WT_Module_Config{ + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Batch Update'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Perform bulk updates and corrections on your GEDCOM data'); + } + + // Extend WT_Module + public function modAction($mod_action) { + switch($mod_action) { + case 'admin_batch_update': + // TODO: these files should be methods in this class + require WT_ROOT.WT_MODULES_DIR.$this->getName().'/'.$mod_action.'.php'; + $mod=new batch_update; + echo $mod->main(); + break; + } + } + + // Implement WT_Module_Config + public function getConfigLink() { + return 'module.php?mod='.$this->getName().'&mod_action=admin_batch_update'; + } +} diff --git a/modules_v2/batch_update/plugins/death_y.php b/modules_v2/batch_update/plugins/death_y.php new file mode 100644 index 0000000000..806bef563e --- /dev/null +++ b/modules_v2/batch_update/plugins/death_y.php @@ -0,0 +1,51 @@ +<?php +/** + * Batch Update plugin for phpGedView - add missing 1 BIRT/DEAT Y + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2008 Greg Roach. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class death_y_bu_plugin extends base_plugin { + static function getName() { + return WT_I18N::translate('Add missing death records'); + } + + static function getDescription() { + return WT_I18N::translate('You can speed up the privacy calculations by adding a death record to individuals whose death can be inferred from other dates, but who do not have a record of death, burial, cremation, etc.'); + } + + static function doesRecordNeedUpdate($xref, $gedrec) { + return !preg_match('/\n1 ('.WT_EVENTS_DEAT.')/', $gedrec) && WT_Person::getInstance($xref)->isDead(); + } + + static function updateRecord($xref, $gedrec) { + return $gedrec."\n1 DEAT Y"; + } +} diff --git a/modules_v2/batch_update/plugins/duplicate_links.php b/modules_v2/batch_update/plugins/duplicate_links.php new file mode 100644 index 0000000000..89fe16e3ff --- /dev/null +++ b/modules_v2/batch_update/plugins/duplicate_links.php @@ -0,0 +1,67 @@ +<?php +/** + * Batch Update plugin for phpGedView - remove duplicate links in records + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2008 Greg Roach. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class duplicate_links_bu_plugin extends base_plugin { + static function getName() { + return WT_I18N::translate('Remove duplicate links'); + } + + static function getDescription() { + return WT_I18N::translate('A common error is to have multiple links to the same record, for example listing the same child more than once in a family record.'); + } + + // Default is to operate on INDI records + function getRecordTypesToUpdate() { + return array('INDI', 'FAM', 'SOUR', 'REPO', 'NOTE', 'OBJE'); + } + + static function doesRecordNeedUpdate($xref, $gedrec) { + return + preg_match('/(\n1.*@.+@.*(?:(?:\n[2-9].*)*))(?:\n1.*(?:\n[2-9].*)*)*\1/', $gedrec) || + preg_match('/(\n2.*@.+@.*(?:(?:\n[3-9].*)*))(?:\n2.*(?:\n[3-9].*)*)*\1/', $gedrec) || + preg_match('/(\n3.*@.+@.*(?:(?:\n[4-9].*)*))(?:\n3.*(?:\n[4-9].*)*)*\1/', $gedrec); + } + + static function updateRecord($xref, $gedrec) { + return preg_replace( + array( + '/(\n1.*@.+@.*(?:(?:\n[2-9].*)*))((?:\n1.*(?:\n[2-9].*)*)*\1)/', + '/(\n2.*@.+@.*(?:(?:\n[3-9].*)*))((?:\n2.*(?:\n[3-9].*)*)*\1)/', + '/(\n3.*@.+@.*(?:(?:\n[4-9].*)*))((?:\n3.*(?:\n[4-9].*)*)*\1)/' + ), + '$2', + $gedrec + ); + } +} diff --git a/modules_v2/batch_update/plugins/married_names.php b/modules_v2/batch_update/plugins/married_names.php new file mode 100644 index 0000000000..dc3362c33d --- /dev/null +++ b/modules_v2/batch_update/plugins/married_names.php @@ -0,0 +1,116 @@ +<?php +/** + * Batch Update plugin for phpGedView - add missing 2 _MARNM records + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2008 Greg Roach. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class married_names_bu_plugin extends base_plugin { + var $surname=null; // User option: add or replace husband's surname + + static function getName() { + return WT_I18N::translate('Add missing married names'); + } + + static function getDescription() { + return WT_I18N::translate('You can make it easier to search for married women by recording their married name.<br />However not all women take their husband\'s surname, so beware of introducing incorrect information into your database.'); + } + + function doesRecordNeedUpdate($xref, $gedrec) { + return preg_match('/^1 SEX F/m', $gedrec) && preg_match('/^1 NAME /m', $gedrec) && self::_surnames_to_add($xref, $gedrec); + } + + function updateRecord($xref, $gedrec) { + $SURNAME_TRADITION=get_gedcom_setting(WT_GED_ID, 'SURNAME_TRADITION'); + + preg_match('/^1 NAME (.*)/m', $gedrec, $match); + $wife_name=$match[1]; + $married_names=array(); + foreach (self::_surnames_to_add($xref, $gedrec) as $surname) { + switch ($this->surname) { + case 'add': + $married_names[]="\n2 _MARNM ".str_replace('/', '', $wife_name).' /'.$surname.'/'; + break; + case 'replace': + if ($SURNAME_TRADITION=='polish') { + $surname=preg_replace(array('/ski$/','/cki$/','/dzki$/'), array('ska', 'cka', 'dzka'), $surname); + } + $married_names[]="\n2 _MARNM ".preg_replace('!/.*/!', '/'.$surname.'/', $wife_name); + break; + } + } + return preg_replace('/(^1 NAME .*([\r\n]+[2-9].*)*)/m', '\\1'.implode('', $married_names), $gedrec, 1); + } + + static function _surnames_to_add($xref, $gedrec) { + $wife_surnames=self::_surnames($xref, $gedrec); + $husb_surnames=array(); + $missing_surnames=array(); + preg_match_all('/^1 FAMS @(.+)@/m', $gedrec, $fmatch); + foreach ($fmatch[1] as $famid) { + $famrec=batch_update::getLatestRecord($famid, 'FAM'); + if (preg_match('/^1 '.WT_EVENTS_MARR.'/m', $famrec) && preg_match('/^1 HUSB @(.+)@/m', $famrec, $hmatch)) { + $husbrec=batch_update::getLatestRecord($hmatch[1], 'INDI'); + $husb_surnames=array_unique(array_merge($husb_surnames, self::_surnames($hmatch[1], $husbrec))); + } + } + foreach ($husb_surnames as $husb_surname) { + if (!in_array($husb_surname, $wife_surnames)) { + $missing_surnames[]=$husb_surname; + } + } + return $missing_surnames; + } + + static function _surnames($xref, $gedrec) { + if (preg_match_all('/^(?:1 NAME|2 _MARNM) .*\/(.+)\//m', $gedrec, $match)) { + return $match[1]; + } else { + return array(); + } + } + + // Add an option for different surname styles + function getOptions() { + parent::getOptions(); + $this->surname=safe_GET('surname', array('add', 'replace'), 'replace'); + } + + function getOptionsForm() { + return + parent::getOptionsForm(). + '<tr valign="top"><td class="list_label width20">'.WT_I18N::translate('Surname Option').'</td>'. + '<td class="optionbox"><select name="surname" onchange="reset_reload();"><option value="replace"'. + ($this->surname=='replace' ? ' selected="selected"' : ''). + '">'.WT_I18N::translate('Wife\'s surname replaced by husband\'s surname').'</option><option value="add"'. + ($this->surname=='add' ? ' selected="selected"' : ''). + '">'.WT_I18N::translate('Wife\'s maiden surname becomes new given name').'</option></select></td></tr>'; + } +} diff --git a/modules_v2/batch_update/plugins/name_format.php b/modules_v2/batch_update/plugins/name_format.php new file mode 100644 index 0000000000..602a25371a --- /dev/null +++ b/modules_v2/batch_update/plugins/name_format.php @@ -0,0 +1,63 @@ +<?php +/** + * Batch Update plugin for phpGedView - fix spacing in names, particularly that before/after the surname slashes + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2008 Greg Roach. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class name_format_bu_plugin extends base_plugin { + static function getName() { + return WT_I18N::translate('Fix name slashes and spaces'); + } + + static function getDescription() { + return WT_I18N::translate('Correct NAME records of the form \'John/DOE/\' or \'John /DOE\', as produced by older genealogy programs.'); + } + + static function doesRecordNeedUpdate($xref, $gedrec) { + return + preg_match('/^(?:1 NAME|2 _MARNM|2 _AKA) [^\/\n]*\/[^\/\n]*$/m', $gedrec) || + preg_match('/^(?:1 NAME|2 _MARNM|2 _AKA) [^\/\n]*[^\/ ]\//m', $gedrec); + } + + static function updateRecord($xref, $gedrec) { + return preg_replace( + array( + '/^((?:1 NAME|2 _MARNM|2 _AKA) [^\/\n]*\/[^\/\n]*)$/m', + '/^((?:1 NAME|2 _MARNM|2 _AKA) [^\/\n]*[^\/ ])(\/)/m' + ), + array( + '$1/', + '$1 $2' + ), + $gedrec + ); + } +} diff --git a/modules_v2/batch_update/plugins/search_replace.php b/modules_v2/batch_update/plugins/search_replace.php new file mode 100644 index 0000000000..b29e7a33bf --- /dev/null +++ b/modules_v2/batch_update/plugins/search_replace.php @@ -0,0 +1,128 @@ +<?php +/** + * Batch Update plugin for phpGedView - search/replace + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2008 Greg Roach. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class search_replace_bu_plugin extends base_plugin { + var $search =null; // Search string + var $replace=null; // Replace string + var $method =null; // simple/wildcards/regex + var $regex =null; // Search string, converted to a regex + var $case =null; // "i" for case insensitive, "" for case sensitive + var $error =null; // Message for bad user parameters + + static function getName() { + return WT_I18N::translate('Search and replace'); + } + + static function getDescription() { + return WT_I18N::translate('Search and/or replace data in your GEDCOM using simple searches or advanced pattern matching.'); + } + + // Default is to operate on INDI records + function getRecordTypesToUpdate() { + return array('INDI', 'FAM', 'SOUR', 'REPO', 'NOTE', 'OBJE'); + } + + function doesRecordNeedUpdate($xref, $gedrec) { + return !$this->error && preg_match('/(?:'.$this->regex.')/'.$this->case, $gedrec); + } + + function updateRecord($xref, $gedrec) { + return preg_replace('/'.$this->regex.'/'.$this->case, $this->replace, $gedrec); + } + + function getOptions() { + parent::getOptions(); + $this->search =safe_GET('search'); + $this->replace=safe_GET('replace'); + $this->method =safe_GET('method', array('exact', 'words', 'wildcards', 'regex'), 'exact'); + $this->case =safe_GET('case', 'i'); + + $this->error=''; + switch ($this->method) { + case 'exact': + $this->regex=preg_quote($this->search, '/'); + break; + case 'words': + $this->regex='\b'.preg_quote($this->search, '/').'\b'; + break; + case 'wildcards': + $this->regex='\b'.str_replace(array('\*', '\?'), array('.*', '.'), preg_quote($this->search, '/')).'\b'; + break; + case 'regex': + $this->regex=$this->search; + // Check for invalid regexes + // If the regex is bad, $ct will be left at -1 + $ct=-1; + $ct=@preg_match('/'.$this->search.'/', ''); + if ($ct==-1) { + $this->error='<br/><span class="error">'.WT_I18N::translate('The regex appears to contain an error. It can\'t be used.').'</span>'; + } + break; + } + } + + function getOptionsForm() { + $descriptions=array( + 'exact'=>WT_I18N::translate('Match the exact text, even if it occurs in the middle of a word.'), + 'words'=>WT_I18N::translate('Match the exact text, unless it occurs in the middle of a word.'), + 'wildcards'=>WT_I18N::translate('Use a «?» to match a single character, use «*» to match zero or more characters.'), + 'regex'=>WT_I18N::translate('Regular expressions are an advanced pattern matching technique. See <a href="http://php.net/manual/en/regexp.reference.php" target="_new">php.net/manual/en/regexp.reference.php</a> for futher details.'), + ); + + return + '<tr><th>'.WT_I18N::translate('Search text/pattern').':</th>'. + '<td>'. + '<input name="search" size="40" value="'.htmlspecialchars($this->search). + '" onchange="this.form.submit();"></td></tr>'. + + '<tr><th>'.WT_I18N::translate('Replacement text').':</th>'. + '<td>'. + '<input name="replace" size="40" value="'.htmlspecialchars($this->replace). + '" onchange="this.form.submit();"></td></tr>'. + + '<tr><th>'.WT_I18N::translate('Search method').':</th>'. + '<td><select name="method" onchange="this.form.submit();">'. + '<option value="exact"' .($this->method=='exact' ? ' selected="selected"' : '').'>'.WT_I18N::translate('Exact text') .'</option>'. + '<option value="words"' .($this->method=='words' ? ' selected="selected"' : '').'>'.WT_I18N::translate('Whole words only') .'</option>'. + '<option value="wildcards"'.($this->method=='wildcards' ? ' selected="selected"' : '').'>'.WT_I18N::translate('Wildcards').'</option>'. + '<option value="regex"' .($this->method=='regex' ? ' selected="selected"' : '').'>'.WT_I18N::translate('Regular expression') .'</option>'. + '</select><br/><i>'.$descriptions[$this->method].'</i>'.$this->error.'</td></tr>'. + + '<tr><th>'.WT_I18N::translate('Case insensitive').':</th>'. + '<td>'. + '<input type="checkbox" name="case" value="i" '.($this->case=='i' ? 'checked="checked"' : '').'" onchange="this.form.submit();">'. + '<br/><i>'.WT_I18N::translate('Tick this box to match both upper and lower case letters.').'</i></td></tr>'. + parent::getOptionsForm(); + } +} diff --git a/modules_v2/bdm_report/module.php b/modules_v2/bdm_report/module.php new file mode 100644 index 0000000000..52f7ecd715 --- /dev/null +++ b/modules_v2/bdm_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class bdm_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Births, Deaths, Marriages'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report. "vital records" are life events - birth/marriage/death */ WT_I18N::translate('A report of vital records for a given date or place.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('place'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/bdm_report/report.xml b/modules_v2/bdm_report/report.xml new file mode 100644 index 0000000000..bbaeca9945 --- /dev/null +++ b/modules_v2/bdm_report/report.xml @@ -0,0 +1,218 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Births, Deaths, Marriages')" /></Title> + <Description><var var="WT_I18N::translate('A report of vital records for a given date or place.')" /></Description> + <Input name="name" lookup="NAME" type="text"><var var="WT_I18N::translate('Name')" /></Input> + <Input name="bdmplace" lookup="PLAC" type="text"><var var="WT_I18N::translate('Place')" /></Input> + <Input name="birthdate1" lookup="DATE" type="text"><var var="WT_I18N::translate('Birth Date range start')" /></Input> + <Input name="birthdate2" lookup="DATE" type="text"><var var="WT_I18N::translate('Birth Date range end')" /></Input> + <Input name="deathdate1" lookup="DATE" type="text"><var var="WT_I18N::translate('Death Date range start')" /></Input> + <Input name="deathdate2" lookup="DATE" type="text"><var var="WT_I18N::translate('Death Date range end')" /></Input> + <Input name="sortby" type="select" default="BIRT:DATE" options="NAME=>WT_I18N::translate('Name')|BIRT:DATE=>WT_I18N::translate('Date of birth')|DEAT:DATE=>WT_I18N::translate('Date of death')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="15" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + <Style name="small" font="$fonts" size="7"/> + <Style name="label" font="$fonts" size="10" style="b" /> + + <Doc pageSize="$pageSize" orientation="landscape"> + <Header> + <Cell align="center" newline="1" style="label"><var var="WT_I18N::translate('Births, Deaths, Marriages')" /></Cell> + <Cell align="center" newline="1" style="header"> + <if condition="$name!=''"> + <var var="name" /> + </if> + <if condition="$bdmplace!=''"> + <var var="bdmplace" /> + </if> + </Cell> + <Cell align="rightrtl" height="10" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + <!-- Name --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <TextBox bgcolor="$fill" border="1" height="12" width="205"> + <Text style="label"><var var="WT_I18N::translate('Name')" /></Text> + </TextBox> + <!-- Birth --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='BIRT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <TextBox bgcolor="$fill" border="1" height="12" width="165"> + <Text style="label"> + <var var="WT_I18N::translate('Birth')" /> + <if condition="$birthdate1!='' or $birthdate2!=''"> + [ + <if condition="$birthdate1!=''"> + <var var="birthdate1" /> + </if> + - + <if condition="$birthdate2!=''"> + <var var="birthdate2" /> + </if> + ] + </if> + </Text> + </TextBox> + <!-- Marrige --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='MARR:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <TextBox bgcolor="$fill" border="1" height="12" width="165"> + <Text style="label"><var var="WT_I18N::translate('Marriage')" /></Text> + </TextBox> + <!-- Death --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='DEAT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <TextBox bgcolor="$fill" border="1" height="12" newline="1"> + <Text style="label"> + <var var="WT_I18N::translate('Death')" /> + <if condition="$deathdate1!='' or $deathdate2!=''"> + [ + <if condition="$deathdate1!=''"> + <var var="deathdate1" /> + </if> + - + <if condition="$deathdate2!=''"> + <var var="deathdate2" /> + </if> + ] + </if> + </Text> + </TextBox> + </Header> + + <Body> + <SetVar name="filter1" value="" /> + <if condition="$bdmplace!=''"> + <SetVar name="filter1" value=":PLAC CONTAINS $bdmplace" /> + <!-- todo: print only if BDM place is the searched place - use OR - search also on marriage place and date --> + </if> + + <List list="individual" filter1="$filter1" filter2="BIRT:DATE GTE $birthdate1" filter3="BIRT:DATE LTE $birthdate2" filter4="DEAT:DATE GTE $deathdate1" filter5="DEAT:DATE LTE $deathdate2" filter6="NAME CONTAINS $name" sortby="$sortby"> + <SetVar name="spid" value="@ID" /> + + <TextBox width="205" height="46"> + <Text style="text"> + <GetPersonName id="" /> + </Text> + <Text style="small"> + <br /> <var var="WT_I18N::translate('Father')" /> + : <Gedcom id="@FAMC"><GetPersonName id="@HUSB" /></Gedcom> + <br /> <var var="WT_I18N::translate('Mother')" /> + : <Gedcom id="@FAMC"><GetPersonName id="@WIFE" /></Gedcom> + </Text> + </TextBox> + + <TextBox width="165" height="46" border="0"> + <SetVar name="moreB" value="0" /> + <Text style="small"> + <RepeatTag tag="BIRT"> + <if condition="$moreB==1"> + <br /> + </if> + <var var="WT_I18N::translate('Date')" /> + : <GedcomValue tag="BIRT:DATE" /> + <br /> <var var="WT_I18N::translate('Place')" /> + : <GedcomValue tag="BIRT:PLAC" /> + <br /> <var var="WT_I18N::translate('Source')" /> + : <RepeatTag tag="BIRT:SOUR"> + <Gedcom id="@SOUR"> + <GedcomValue tag="TITL" /> + </Gedcom> + </RepeatTag> + <SetVar name="moreB" value="1" /> + </RepeatTag> + </Text> + </TextBox> + + <TextBox width="165" height="46" border="0"> + <SetVar name="more" value="0" /> + <RepeatTag tag="FAMS"> + <Text style="small"> + <Gedcom id="@FAMS"> + <if condition="$more==1"> + <br /> + --------------------------- + <br /> + </if> + <!-- todo: print the dates, places and sources of all the FAM MARR records --> + <var var="WT_I18N::translate('Date')" /> + : <GedcomValue tag="MARR:DATE" /> + <br /> <var var="WT_I18N::translate('Place')" /> + : <GedcomValue tag="MARR:PLAC" /> + <br /> <var var="WT_I18N::translate('Source')" /> + : <RepeatTag tag="MARR:SOUR"> + <Gedcom id="@SOUR"> + <GedcomValue tag="TITL" /> + </Gedcom> + </RepeatTag> + <br /> + <var var="WT_I18N::translate('Spouse')" /> + : + <if condition="$spid==@WIFE"> + <GetPersonName id="@HUSB" /> + </if> + <if condition="$spid==@HUSB"> + <GetPersonName id="@WIFE" /> + </if> + <SetVar name="more" value="1" /> + </Gedcom> + </Text> + </RepeatTag> + </TextBox> + + <TextBox border="0" height="46" newline="1"> + <SetVar name="moreD" value="0" /> + <Text style="small"> + <RepeatTag tag="DEAT"> + <if condition="$moreD==1"> + <br /> + </if> + <var var="WT_I18N::translate('Date')" /> + : <GedcomValue tag="DEAT:DATE" /> + <br /> <var var="WT_I18N::translate('Place')" /> + : <GedcomValue tag="DEAT:PLAC" /> + <br /> <var var="WT_I18N::translate('Source')" /> + : <RepeatTag tag="DEAT:SOUR"> + <Gedcom id="@SOUR"> + <GedcomValue tag="TITL" /> + </Gedcom> + </RepeatTag> + <SetVar name="moreD" value="1" /> + </RepeatTag> + <RepeatTag tag="BURI:CEME"> + <br /><var var="WT_I18N::translate('Cemetery')" /> + : <GedcomValue tag="CEME" /> + </RepeatTag> + </Text> + </TextBox> + <Line /> + </List> + + <Cell align="rightrtl" height="24" newline="1" style="label"><br /> + <var var="WT_I18N::translate('Total individuals')" /> + : <ListTotal /> + </Cell> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now /></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/birth_report/module.php b/modules_v2/birth_report/module.php new file mode 100644 index 0000000000..dc51720035 --- /dev/null +++ b/modules_v2/birth_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class birth_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Birth Date and Place Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of people who were born in a given time or place.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('place'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/birth_report/report.xml b/modules_v2/birth_report/report.xml new file mode 100644 index 0000000000..3c0ecc5841 --- /dev/null +++ b/modules_v2/birth_report/report.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Birth Date and Place Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of people who were born in a given time or place.')" /></Description> + <Input name="name" lookup="NAME" type="text"><var var="WT_I18N::translate('Name')" /></Input> + <Input name="birthplace" lookup="PLAC" type="text"><var var="WT_I18N::translate('Birth Place contains')" /></Input> + <Input name="birthdate1" lookup="DATE" type="text"><var var="WT_I18N::translate('Birth Date range start')" /></Input> + <Input name="birthdate2" lookup="DATE" type="text"><var var="WT_I18N::translate('Birth Date range end')" /></Input> + <Input name="sortby" type="select" default="NAME" options="none=>WT_I18N::translate('None')|NAME=>WT_I18N::translate('Name')|BIRT:DATE=>WT_I18N::translate('Date of birth')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="16" style="b"/> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8"/> + <!-- Column labels --> + <Style name="label" font="$fonts" size="10" style="b"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9"/> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + + <Doc pageSize="$pageSize" orientation="landscape" > + <Header> + <Cell align="center" height="20" newline="1" style="header"><var var="WT_I18N::translate('Birth Date and Place Report')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"><SetVar name="fill" value="#AAAAAA" /></if> + <Cell bgcolor="$fill" border="1" width="200" style="label"><var var="WT_I18N::translate('Name')" /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='BIRT:DATE'"><SetVar name="fill" value="#AAAAAA" /></if> + <Cell bgcolor="$fill" border="1" width="100" style="label"><var var="WT_I18N::translate('Date')" /></Cell> + + <Cell border="1" width="150" style="label"><var var="WT_I18N::translate('Place')" /></Cell> + <Cell border="1" newline="1" style="label"><var var="WT_I18N::translate('Source')" /></Cell> + </Header> + + <Body> + <List list="individual" filter1="BIRT:PLAC CONTAINS $birthplace" filter2="BIRT:DATE GTE $birthdate1" filter3="BIRT:DATE LTE $birthdate2" filter4="NAME CONTAINS $name" sortby="$sortby"> + <Cell width="200" style="text"><GetPersonName id="" /></Cell> + <Cell width="100" style="text"><GedcomValue tag="BIRT:DATE" newline="1" /></Cell> + <Cell width="150" style="text"><GedcomValue tag="BIRT:PLAC" /></Cell> + <Cell newline="1" style="text"> + <!-- Only with multiple sources use line feed (br) --> + <SetVar name="usebr" value="0"/> + <RepeatTag tag="BIRT:SOUR"> + <Gedcom id="@SOUR"> + <if condition="$usebr==1"><br /></if> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + <SetVar name="usebr" value="1"/> + </RepeatTag> + </Cell> + </List> + <Cell align="rightrtl" height="24" newline="1" style="label"><br/><var var="WT_I18N::translate('Total individuals')"/>: <ListTotal/></Cell> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now/></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/cemetery_report/module.php b/modules_v2/cemetery_report/module.php new file mode 100644 index 0000000000..a11a747d74 --- /dev/null +++ b/modules_v2/cemetery_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class cemetery_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Cemetery Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of people buried in a given place.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('place'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/cemetery_report/report.xml b/modules_v2/cemetery_report/report.xml new file mode 100644 index 0000000000..0f2966dfde --- /dev/null +++ b/modules_v2/cemetery_report/report.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Cemetery Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of people buried in a given place.')" /></Description> + <Input name="deathplace" lookup="PLAC" type="text"><var var="WT_I18N::translate('Burial Place contains')" /> </Input> + <Input name="sortby" type="select" default="NAME" options="none=>WT_I18N::translate('None')|ID=>WT_I18N::translate('ID number')|NAME=>WT_I18N::translate('Name')|DEAT:DATE=>WT_I18N::translate('Date of death')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="adlist" type="select" default="none" options="none=>WT_I18N::translate('None')|_MARNM=>translate_fact('_MARNM')|HUSB=>WT_I18N::translate('Husband')"><var var="WT_I18N::translate('Name List')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="16" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9"/> + <!-- Column labels --> + <Style name="label" font="$fonts" size="10" style="b" /> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + + <!-- landscape orientation --> + <SetVar name="namewidth" value="185"/> + <SetVar name="datewidth" value="95"/> + <SetVar name="cemewidth" value="150"/> + <SetVar name="placewidth" value="175"/> + + <Doc pageSize="$pageSize" orientation="landscape"> + <Header> + <Cell align="center" height="20" newline="1" style="header"><var var="WT_I18N::translate('Cemetery Report')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + + <SetVar name="fill" value="" /> + <if condition="($sortby=='NAME') or ($sortby=='ID')"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" width="$namewidth"> + <Text style="label"><var var="WT_I18N::translate('Name')" /></Text> + </TextBox> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='DEAT:DATE'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" width="$datewidth"> + <Text style="label"><var var="translate_fact('DEAT:DATE')" /></Text> + </TextBox> + <!-- should print and sort by burial date --> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='BURI'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" width="$cemewidth"> + <Text style="label"><var var="WT_I18N::translate('Cemetery')" /></Text> + </TextBox> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='PLAC'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" width="$placewidth"> + <Text style="label"><var var="WT_I18N::translate('Place')" /></Text> + </TextBox> + + <TextBox border="1" newline="1"> + <Text style="label"><var var="WT_I18N::translate('Note')" /></Text> + </TextBox> + </Header> + <Body> + <List list="individual" filter1="BURI:PLAC CONTAINS $deathplace" sortby="$sortby"> + <Cell style="text" width="$namewidth"><GetPersonName id="" /> + <if condition="$adlist=='_MARNM'"> + <RepeatTag tag="NAME:_MARNM"> + <br /><GedcomValue tag="_MARNM" /> + </RepeatTag> + </if> + <if condition="($adlist=='HUSB') and (@SEX=='F')"> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS:@HUSB"> + <br /><GetPersonName id="" /> + </Gedcom> + </RepeatTag> + </if> + </Cell> + <Cell style="text" width="$datewidth"><GedcomValue tag="DEAT:DATE" newline="1" /></Cell> + <Cell style="text" width="$cemewidth"><GedcomValue tag="BURI:CEME" /></Cell> + <Cell style="text" width="$placewidth"><GedcomValue tag="BURI:PLAC" /></Cell> + <Cell newline="1" style="text"><GedcomValue tag="BURI:NOTE" /></Cell> + </List> + <Cell align="rightrtl" newline="1" style="label"><br /><var var="WT_I18N::translate('Total individuals')" />: <ListTotal /></Cell> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now /></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/change_report/module.php b/modules_v2/change_report/module.php new file mode 100644 index 0000000000..bb6e5bf022 --- /dev/null +++ b/modules_v2/change_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class change_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Changes Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of recent and pending changes.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_USER; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('place'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/change_report/report.xml b/modules_v2/change_report/report.xml new file mode 100644 index 0000000000..5c74efc2d6 --- /dev/null +++ b/modules_v2/change_report/report.xml @@ -0,0 +1,132 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Changes Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of recent and pending changes.')" /></Description> + <Input name="changeRangeStart" lookup="DATE" type="text" default="NOW-30"><var var="WT_I18N::translate('Starting range of change dates')" /></Input> + <Input name="changeRangeEnd" lookup="DATE" type="text" default="NOW"><var var="WT_I18N::translate('Ending range of change dates')" /></Input> + <Input name="sortby" type="select" options="CHAN=>WT_I18N::translate('Last change')|NAME=>WT_I18N::translate('Name')|BIRT:DATE=>WT_I18N::translate('Date of birth')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="pending" type="select" options="yes=>WT_I18N::translate('Yes')|no=>WT_I18N::translate('No')"><var var="WT_I18N::translate('Show pending changes')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="pageorient" type="select" default="landscape" options="landscape=>WT_I18N::translate('Landscape')|portrait=>WT_I18N::translate('Portrait')"><var var="WT_I18N::translate('Orientation')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="16" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9"/> + <!-- Column labels --> + <Style name="label" font="$fonts" size="10" style="b"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + <Style name="header2" font="$fonts" size="12" style="b" /> + + <if condition="$pageorient=='landscape'"> + <!-- landscape orientation --> + <SetVar name="namewidth" value="270"/> + <SetVar name="datewidth" value="300"/> + </if> + + <if condition="$pageorient=='portrait'"> + <!-- portrait orientation --> + <SetVar name="namewidth" value="210"/> + <SetVar name="datewidth" value="190"/> + </if> + + <Doc pageSize="$pageSize" orientation="$pageorient" > + <Header> + <Cell align="center" height="20" newline="1" style="header"><var var="WT_I18N::translate('Changes Report')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + </Header> + + <Body> + + <!-- Pending changes section Header --> + <if condition="$pending=='yes'"> + <Cell align="center" height="20" newline="1" style="header2"><var var="WT_I18N::translate('Pending changes')" /></Cell> + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" height="12" width="$namewidth"> + <Text style="label"><var var="WT_I18N::translate('Name')" /></Text> + </TextBox> + + <TextBox border="1" height="12" width="$datewidth"> + <Text style="label"><var var="WT_I18N::translate('Differences')" /></Text> + </TextBox> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='CHAN'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" height="12" newline="1"> + <Text style="label"><var var="WT_I18N::translate('Last change')" /></Text> + </TextBox> + + <!-- Pending Changes Section Data --> + <List list="pending" sortby="$sortby"> + <TextBox height="12" width="$namewidth"> + <Text style="text"><GetPersonName id="" /></Text> + </TextBox> + <TextBox height="12" width="$datewidth"> + <Facts ignore="CHAN" families="0" diff="true"> + <Text style="text"> + <var var="@fact" /> <GedcomValue tag="@fact:DATE" /><br /> + </Text> + </Facts> + </TextBox> + <TextBox height="12" newline="1"> + <Text style="text"><GedcomValue tag="CHAN:DATE" /> <GedcomValue tag="CHAN:DATE:TIME" /> - <GedcomValue tag="CHAN:_WT_USER" /></Text> + </TextBox> + + </List> + <Cell align="rightrtl" height="25" newline="1" style="label"> + <var var="WT_I18N::translate('Total pending changes: ')" /><ListTotal /><br /> + </Cell> + </if> + + <!-- Recent Changes Section Header --> + <Cell align="center" height="20" newline="1" style="header2"><var var="WT_I18N::translate('Recent changes')" /> <var var="changeRangeStart" date="1" /> - <var var="changeRangeEnd" date="1" /></Cell> + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" height="12" width="$namewidth"> + <Text style="label"><var var="WT_I18N::translate('Name')" /></Text> + </TextBox> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='BIRT:DATE'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" height="12" width="$datewidth"> + <Text style="label"><var var="WT_I18N::translate('Birth')" /> - <var var="WT_I18N::translate('Death')" /></Text> + </TextBox> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='CHAN'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" height="12" newline="1"> + <Text style="label"><var var="WT_I18N::translate('Last change')" /></Text> + </TextBox> + + <!-- Recent Changes Section Data --> + <List list="individual" filter1="CHAN:DATE LTE $changeRangeEnd" filter2="CHAN:DATE GTE $changeRangeStart" sortby="$sortby"> + <TextBox height="12" width="$namewidth"> + <Text style="text"><GetPersonName id="" /></Text> + </TextBox> + + <TextBox height="12" width="$datewidth"> + <Text style="text"><varLetter var="BIRT" />: <GedcomValue tag="BIRT:DATE" /><br /><varLetter var="DEAT" />: <GedcomValue tag="DEAT:DATE" /></Text> + </TextBox> + + <TextBox height="12" newline="1"> + <Text style="text"><GedcomValue tag="CHAN:DATE" /> <GedcomValue tag="CHAN:DATE:TIME" /> - <GedcomValue tag="CHAN:_WT_USER" /></Text> + </TextBox> + </List> + + <Cell align="rightrtl" height="25" newline="1" style="label"> + <var var="WT_I18N::translate('Total accepted changes: ')" /><ListTotal /> + </Cell> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now /></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/charts/help_text.php b/modules_v2/charts/help_text.php new file mode 100644 index 0000000000..deb42fd259 --- /dev/null +++ b/modules_v2/charts/help_text.php @@ -0,0 +1,38 @@ +<?php +/** + * Charts Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'index_charts': + $title=WT_I18N::translate('Charts block'); + $text=WT_I18N::translate('This block allows a pedigree, descendancy, or hourglass chart to appear on My Page or the Home Page. Because of space limitations, the charts should be placed only on the left side of the page.<br /><br />When this block appears on the Home Page, the root person and the type of chart to be displayed are determined by the administrator. When this block appears on the user\'s personalized My Page, these options are determined by the user.<br /><br />The behavior of these charts is identical to their behavior when they are called up from the menus. Click on the box of a person to see more details about them.'); + break; +} diff --git a/modules_v2/charts/module.php b/modules_v2/charts/module.php new file mode 100644 index 0000000000..58cc368228 --- /dev/null +++ b/modules_v2/charts/module.php @@ -0,0 +1,238 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class charts_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Charts block'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The Charts block allows you to place a chart on the Home or My Page. You can configure the block to show an ancestors, descendants, hourglass view, or an interactive tree. You can also choose the root person for the chart.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $WT_IMAGES, $PEDIGREE_ROOT_ID, $PEDIGREE_FULL_DETAILS, $show_full, $bwidth, $bheight; + + $details=get_block_setting($block_id, 'details', false); + $type =get_block_setting($block_id, 'type', 'treenav'); + $pid =get_block_setting($block_id, 'pid', WT_USER_ID ? (WT_USER_GEDCOM_ID ? WT_USER_GEDCOM_ID : $PEDIGREE_ROOT_ID) : $PEDIGREE_ROOT_ID); + $block =get_block_setting($block_id, 'block'); + if ($cfg) { + foreach (array('details', 'type', 'pid', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + // Override GEDCOM configuration temporarily + if (isset($show_full)) $saveShowFull = $show_full; + $savePedigreeFullDetails = $PEDIGREE_FULL_DETAILS; + if (!$details) { + $show_full = 0; + // Here we could adjust the block width & height to accommodate larger displays + } else { + $show_full = 1; + // Here we could adjust the block width & height to accommodate larger displays + } + $PEDIGREE_FULL_DETAILS = $show_full; + + if ($type!='treenav') { + $controller = new WT_Controller_Hourglass(); + $controller->init($pid,0,3); + $controller->setupJavascript(); + } else { + $nav = new WT_TreeNav($pid, 'blocknav',-1); + $nav->generations = 2; + } + + $person = WT_Person::getInstance($pid); + if ($person==null) { + $pid = $PEDIGREE_ROOT_ID; + set_block_setting($block_id, 'pid', $pid); + $person = WT_Person::getInstance($pid); + } + + $id=$this->getName().$block_id; + $title=''; + if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) { + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=700,height=400,scrollbars=1,resizable=1'); return false;\">"; + $title .= "<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + if ($person) { + switch($type) { + case 'pedigree': + $title .= WT_I18N::translate('Pedigree tree of %s', $person->getFullName()); + break; + case 'descendants': + $title .= WT_I18N::translate('Descendancy chart of %s', $person->getFullName()); + break; + case 'hourglass': + $title .= WT_I18N::translate('Hourglass chart of %s', $person->getFullName()); + break; + case 'treenav': + $title .= WT_I18N::translate('Interactive tree of %s', $person->getFullName()); + break; + } + $title .= help_link('index_charts', $this->getName()); + $content = "<script src=\"js/webtrees.js\" language=\"JavaScript\" type=\"text/javascript\"></script>"; + if ($show_full==0) { + $content .= '<center><span class="details2">'.WT_I18N::translate('Click on any of the boxes to get more information about that person.').'</span></center><br />'; + } + $content .= '<table cellspacing="0" cellpadding="0" border="0"><tr>'; + if ($type=='descendants' || $type=='hourglass') { + $content .= "<td valign=\"middle\">"; + ob_start(); + $controller->print_descendency($person, 1, false); + $content .= ob_get_clean(); + $content .= "</td>"; + } + if ($type=='pedigree' || $type=='hourglass') { + //-- print out the root person + if ($type!='hourglass') { + $content .= "<td valign=\"middle\">"; + ob_start(); + print_pedigree_person($person); + $content .= ob_get_clean(); + $content .= "</td>"; + } + $content .= "<td valign=\"middle\">"; + ob_start(); + $controller->print_person_pedigree($person, 1); + $content .= ob_get_clean(); + $content .= "</td>"; + } + if ($type=='treenav') { + $content .= "<td>"; + ob_start(); + $nav->drawViewport('blocknav', "", "240px"); + $content .= ob_get_clean(); + $content .= "</td>"; + } + $content .= "</tr></table>"; + } else { + $content=WT_I18N::translate('You must select an individual and chart type in the block configuration settings.'); + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + + // Restore GEDCOM configuration + unset($show_full); + if (isset($saveShowFull)) $show_full = $saveShowFull; + $PEDIGREE_FULL_DETAILS = $savePedigreeFullDetails; + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + global $ctype, $TEXT_DIRECTION, $PEDIGREE_ROOT_ID, $ENABLE_AUTOCOMPLETE; + + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'details', safe_POST_bool('details')); + set_block_setting($block_id, 'type', safe_POST('type', array('pedigree', 'descendants', 'hourglass', 'treenav'), 'treenav')); + set_block_setting($block_id, 'pid', safe_POST('pid', WT_REGEX_XREF)); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + $details=get_block_setting($block_id, 'details', false); + $type =get_block_setting($block_id, 'type', 'treenav'); + $pid =get_block_setting($block_id, 'pid', WT_USER_ID ? (WT_USER_GEDCOM_ID ? WT_USER_GEDCOM_ID : $PEDIGREE_ROOT_ID) : $PEDIGREE_ROOT_ID); + + if ($ENABLE_AUTOCOMPLETE) require WT_ROOT.'js/autocomplete.js.htm'; + ?> + <tr><td class="descriptionbox wrap width33"><?php echo WT_I18N::translate('Chart type'); ?></td> + <td class="optionbox"> + <select name="type"> + <option value="pedigree"<?php if ($type=="pedigree") echo " selected=\"selected\""; ?>><?php echo WT_I18N::translate('Pedigree Tree'); ?></option> + <option value="descendants"<?php if ($type=="descendants") echo " selected=\"selected\""; ?>><?php echo WT_I18N::translate('Descendancy chart'); ?></option> + <option value="hourglass"<?php if ($type=="hourglass") echo " selected=\"selected\""; ?>><?php echo WT_I18N::translate('Hourglass chart'); ?></option> + <option value="treenav"<?php if ($type=="treenav") echo " selected=\"selected\""; ?>><?php echo WT_I18N::translate('Interactive tree'); ?></option> + </select> + </td></tr> + <tr> + <td class="descriptionbox wrap width33"><?php echo WT_I18N::translate('Show Details'); ?></td> + <td class="optionbox"> + <select name="details"> + <option value="no" <?php if (!$details) echo " selected=\"selected\""; ?>><?php echo WT_I18N::translate('No'); ?></option> + <option value="yes" <?php if ($details) echo " selected=\"selected\""; ?>><?php echo WT_I18N::translate('Yes'); ?></option> + </select> + </td> + </tr> + <tr> + <td class="descriptionbox wrap width33"><?php echo WT_I18N::translate('Root Person ID'); ?></td> + <td class="optionbox"> + <input type="text" name="pid" id="pid" value="<?php echo $pid; ?>" size="5" /> + <?php + print_findindi_link('pid',''); + $root=WT_Person::getInstance($pid); + if ($root) { + echo ' <span class="list_item">', $root->getFullName(), $root->format_first_major_fact(WT_EVENTS_BIRT, 1), '</span>'; + } + ?> + </td> + </tr> + <?php + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $block=get_block_setting($block_id, 'block', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } +} diff --git a/modules_v2/ckeditor/CHANGES.html b/modules_v2/ckeditor/CHANGES.html new file mode 100644 index 0000000000..9d1481f86d --- /dev/null +++ b/modules_v2/ckeditor/CHANGES.html @@ -0,0 +1,1064 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Changelog - CKEditor</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <style type="text/css">
+
+#footer hr
+{
+ margin: 10px 0 15px 0;
+ height: 1px;
+ border: solid 1px gray;
+ border-bottom: none;
+}
+
+#footer p
+{
+ margin: 0 10px 10px 10px;
+ float: left;
+}
+
+#footer #copy
+{
+ float: right;
+}
+
+ </style>
+</head>
+<body>
+ <h1>
+ CKEditor Changelog
+ </h1>
+ <h3>
+ CKEditor 3.5</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4090">#4090</a> : Full Adobe AIR support.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5084">#5084</a> : Dialog windows are now resizable with a grip located in the footer.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5755">#5755</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.dialog_buttonsOrder">dialog_buttonsOrder</a> setting, making it possible to control the buttons order.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4648">#4648</a> : Added the new iFrame plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6010">#6010</a> : The Automatic option of the font/background color panel now represents the real color.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5654">#5654</a> : New "placeholder" plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6334">#6334</a> : CKEditor now uses <a href="http://www.w3.org/TR/2010/WD-html5-20101019/elements.html#embedding-custom-non-visible-data-with-the-data-attributes">HTML5's data-* attributes</a> for its internal attributes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6103">#6103</a> : It's now possible to control the styling of inline read-only elements with the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.disableReadonlyStyling">disableReadonlyStyling</a> setting. It's also possible to avoid inline-styling any element by setting its "data-cke-nostyle" attribute to "1".</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5404">#5404</a> : <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.fillEmptyBlocks">fillEmptyBlocks</a> configuration option of v2 is now available.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5367">#5367</a> : New <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#insertText">CKEDITOR.editor#insertText</a> method (check api.html sample page for usages) is now provided to insert plain text into editor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5367">#5915</a> : New <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.removeDialogTabs">removeDialogTabs</a> configuration option to hide certain dialog tabs.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4821">#4821</a> : Icons in the toolbar were distorted with IE and zoom != 100%.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5587">#5587</a> : Visual improvements in dialogs, reinforce field label on separate line.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4652">#4652</a> : Now it's able to disable editor context menu by simply removing the "contextmenu" plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5599">#5599</a> : Labels of "specialchar" dialog are now translated.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6419">#6419</a> : [IE] List creation by merging problem.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6502">#6502</a> : Removed IE6 image preloading, which was used to defect the duplicate request of background images.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6822">#6822</a> : Added labels to fake objects.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6898">#6898</a> : [IE6] Toolbar icons becomes invisible in RTL.</li>
+ <li>Updated the following language files:<ul>
+ <li>Hebrew</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.4.3</h3>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/6554">#6554</a> : [Webkit] cannot type after inserting Page Break.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6569">#6569</a> : Indentation now complies with text direction of the only item.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6579">#6579</a> : The jQuery adapter was not working properly and was turned on in incompatible environments.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6644">#6644</a> : Restrict <code>onmousedown</code> handler to the toolbar area.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6656">#6656</a> : Panelbutton's buttons became active when clicking on Source.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6248">#6248</a> : Whitespaces (<code>nbsp</code> elements) were incorrectly added into empty table cells and list items.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6575">#6575</a> : Tabs disappearing in Link dialog window after a specific sequence of actions.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6510">#6510</a> : Margin mirroring does not respect style configuration.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6471">#6471</a> : BIDI: Pressing Decrease Indent in an RTL bulleted list causes incorrect behaviour.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6479">#6479</a> : BIDI: Language direction is not being preserved when pressing Enter after a Paragraph Format was applied.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6670">#6670</a> : BIDI: Indent & List icons are not reversed when we apply RTL direction to a paragraph with any of Paragraph Formatting options.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6640">#6640</a> : Floating panels are now being closed when switching modes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4790">#4790</a> : Remove list with multiple items in <code>enterBr</code> doesnot preserve line breaks.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6297">#6297</a> : Floated inline elements are not taking part in behavior of blocks anymore.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6171">#6171</a> : [Firefox] Opening rich content drop-down list scrolls host page to the top when editor has a vertical scrollbar.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6330">#6330</a> : List markers from MS Word with Roman numbering are not preserved.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6720">#6720</a> : Attribute protection might detect wrong elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6580">#6580</a> : [IE9] Flash dialog window does not get filled up.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6447">#6447</a> : Decreasing indentation of a list with <code>indentClasses</code> config does not work.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5894">#5894</a> : Adding custom buttons at the bottom of a dialog window does not cause it to expand to include its contents.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6513">#6513</a> : Wrong ARIA attributes created on list options of Styles drop-down list.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6150">#6150</a> : [Safari] Color dialog window was broken.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6747">#6747</a> : Full screen layout issue caused by page element focus outside editor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6779">#6779</a> : Clicking the <code>body</code> element on elements path turns the selection on and off immediately.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6781">#6781</a> : [IE7] Dialog windows are broken with RTL, Office 2003 and v2 skins.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6798">#6798</a> : [IE7] Dialog window buttons disappearing in RTL after dragging.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6806">#6806</a> : [IE7] Dialog window buttons invisible on focus.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6588">#6588</a> : Copy and paste adds <code><span></code> if SCAYT is enabled.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6673">#6673</a> : IE Target combo for Image Link shown as blank even when we select <code><not set></code> as an option.</li>
+ <li>Updated the following language files:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/6756">#6756</a> : Hungarian;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6794">#6794</a> : Japanese;</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.4.2</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5024">#5024</a> : Added a sample that shows how to output HTML that is valid for Flash.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5237">#5237</a> : English text in dialogs' title was flipped when using RTL language (office2003 and v2 skins).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6289">#6289</a> : Deleting nested table removed the parent cell.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6341">#6341</a> : The editor contents now have the text cursor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6153">#6153</a> : Chrome: tab focus is wrong.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6261">#6261</a> : Focus and infinite loop between multiple editors.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6170">#6170</a> : Dedicated class names are removed from floating panels when opening another panel.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6339">#6339</a> : Autogrow plugin now doesn't work on maximized editors.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6237">#6237</a> : BIDI: Applying same language direction to all paragraphs not working.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6353">#6353</a> : [IE] Resize was broken with office2003 and v2 skins.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6375">#6375</a> : Avoiding errors when hiding the editor after the blur event.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6133">#6133</a> : Styled paragraphs result on buggy list creation.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5074">#5074</a> : Link target is not removed when changing to popup.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6408">#6408</a> : [IE] Autogrow now works correctly on Quirks.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6420">#6420</a> : [IE] The table properties dialog now correctly retrieves the caption text.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6141">#6141</a> : It was impossible to outdent a list when indentOffset was set to 0.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6377">#6377</a> : FF width and height are not shown for smiley in Image properties dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5399">#5399</a> : Lists pasted from Word do not maintain their nesting.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6225">#6225</a> : [FF] Cannot transform several lines to list with enterMode BR.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6467">#6467</a> : [FF] It is now possible to disable the plugin command on "mode" event.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6461">#6461</a> : Attributes are now being kept when changing block formatting.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6226">#6226</a> : BIDI: Language direction applied to a Paragraph is removed when we apply one of Paragraph formatting options.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5395">#5395</a> : [Opera] Native context menu incorrectly opened after Opera 10.2.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6444">#6444</a> : [Opera] Close panels and dialogs don't return focus to wysiwyg frame.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6332">#6332</a> : IE: V2 skin bottom dialog's border broken.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5646">#5646</a> : Parser incorrectly removes inline element when there's only one comment node enclosed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6189">#6189</a> : Minor code size reduction.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5045">#5045</a> : uiColor behaved wrong if multiple editors were used with period in their names.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5766">#5766</a> : Config entry "ignoreEmptyParagraph" should only remove one single empty paragraph in document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5931">#5931</a> : Unable to apply inline style because of nested elements with same style name.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6083">#6083</a> : Dialog close sometimes cause collapsed editor selection before the insertion.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6253">#6253</a> : BIDI: creating a Numbered/Bulleted list causing improper behavior on bidi.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4023">#4023</a> : [Opera] Maximize plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6403">#6403</a> : [Opera] Font name options are not correctly marked in dropdown list.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4534">#4534</a> : [Opera] Arrow key to navigate through combo list has side effects of window scrolling.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6534">#6534</a> : [Opera] Menu key brings up both CKEditor and browser context menu.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6534">#6534</a> : [Opera] Menu key brings up both CKEditor and browser context menu.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6416">#6416</a> : [IE9] Unable to make text selection with mouse in source area.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6417">#6417</a> : [IE9] Context menu opens at the upper-left corner always.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6501">#6501</a> : [IE9] Context menu item layout is broken.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6099">#6099</a> : BIDI: when we apply explicit language direction to Numbered/Bulleted List the corresponding BIDI Tool bar icon is not highlighted in the Toolbar.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6100">#6100</a> : BIDI: when we change Table language direction indentation of text in Table cells is not applied correctly.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6376">#6376</a> : BIDI: buttons should not toggle the base language direction.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6235">#6235</a> : BIDI: Applying direction to multi-paragraph selection within a div.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6187">#6187</a> : [IE6] Multi-instance loading produces 404s on background images.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5446">#5446</a> : Setting config.filebrowserImageBrowseUrl results in displaying also Browser Server on links.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5626">#5626</a> : CKeditor 3.2.1 : html content attached makes ckeditor crash the browser FF/IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6508">#6508</a> : BiDi: Margin mirroring logic doesn't honor CSS direction.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6043">#6043</a> : BIDI: When we apply RTL direction to a right aligned Paragraph, Paragraph is not moved to the left & Alignment of Paragraph is not changed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6485">#6485</a> : BIDI: When direction is applied on partial selected list, the style is been incorrectly applied to the entire list.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6087">#6087</a> : Cursor of input fields in dialog isn't visible in RTL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5595">#5595</a> : Extra leading spaces added in preformatted block.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6094">#6094</a> : Match full word option doesn't stop on block boundaries.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5730">#5730</a> : [Safari] Continual pastes (holding paste key) breaks document contents.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5850">#5850</a> : [IE] Inline style misbehaviors at the beginning of numbered/bulleted list.</li>
+ <li>Updated the following language files:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/6427">#6427</a> : Ukrainian;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6464">#6464</a> : Finnish;</li>
+ <li>Hebrew;</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.4.1</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5308">#5308</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.filebrowserWindowFeatures">filebrowserWindowFeatures</a> setting, making it possible to have custom window features in the file browser window.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/6027">#6027</a> : Modifying Table Properties by selecting more than one cell caused issues.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6146">#6146</a> : IE: Floating panels were being opened in the wrong place in RTL pages with horizontal scrollbars.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6055">#6055</a> : The timestamp is now added only once to each loaded file.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6097">#6097</a> : The bookmarks now use the right name.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5717">#5717</a> : Removed the scayt_contextMenuOntop setting and the SCAYT context menu options are always on top.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5956">#5956</a> : [FF] It was impossible to create an editor inside an hidden container.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5753">#5753</a> : It was impossible to have a default value for the name field in the select dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6041">#6041</a> : BIDI: Direction of Increase Indent & Decrease Indent icons are not reversed after changing Lang direction to RTL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6138">#6138</a> : List indentation is not working.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5649">#5649</a> : Image dialog too wide when many styles are set.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5715">#5715</a> : Cell color picker dialog returns focus to document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6108">#6108</a> : Fixed div style.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5336">#5336</a> : Remove object style.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6155">#6155</a> : [[FF]] Modifying Table Header Properties by selecting first Row, causing several issues.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6163">#6163</a> : Focus not going to Tabs in Image dialog when we went to Edit the Image.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6177">#6177</a> : IE we can't start Numbered/Bulleted list on a Empty page.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5413">#5413</a> : Browser error after pasting html table in CKEditor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6034">#6034</a> : Horizontal Alignment applied to Table cell is not updated correctly in the Toolbar.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6112">#6112</a> : BIDI: Alignment set to text in Table cell is not shown in the Tool bar when we press Enter to start a new Paragraph.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6117">#6117</a> : BIDI: Language direction is changing when we come out of Numbered/Bulleted list.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6182">#6182</a> : Language Direction field on the Advanced tab of Table Properties dialog has a fixed pixel width.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5487">#5487</a> : Fullpage writer problem with line-break.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6197">#6197</a> : The CKEDITOR.loader base path auto-detection was not working with the _source folder.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6240">#6240</a> : Font Names & Font Sizes should be shown Left Align even for RTL Languages.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5975">#5975</a> : Page-break should have proper Alt Text instead of Unknown object. so that JAWS reads it properly.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6255">#6255</a> : Inserting a page break as the first node triggered an error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6188">#6188</a> : [IE7] Automatic color button had the wrong cursor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6129">#6129</a> : The show blocks' labels are now shown in the right for RTL languages.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5421">#5421</a> : &shy; entity not converted when config.entities=false.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5769">#5769</a> : xhtml code generation problem &nbsp; instead of &#160; (htmlentities, entities,entities_additional,..., configuration).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4472">#4472</a> : [FF3] Browser window scrolls to loaded CKEditor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6230">#6230</a> : Fixed invalid parameter count for setTimeout function call.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5335">#5335</a> : Several lines' formatted data will be merged to one line when we apply Numbers/Bullets.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5353">#5353</a> : wrong width of editor after resize() called in Firefox 3.6.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5778">#5778</a> : [IE] Unwanted scroll on first mouse right-click.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5218">#5218</a> : [FF] Copy/paste of an image from same domain changed URL to relative URL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6265">#6265</a> : Popup window properties were visible in the link dialog's target tab when nothing was selected.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6075">#6075</a> : [FF] Newly created links didn't fill in information on edit.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6183">#6183</a> : The toolbar panels options sometimes had the contents' link color.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6192">#6192</a> : [WebKit] Inserting smileys was not working because of editor focus issues.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6178">#6178</a> : [WebKit] Inserting elements by code was failing if the editor didn't receive the focus first.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6179">#6179</a> : [WebKit] The Image dialog was not working if the editor didn't receive the focus first.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4657">#4657</a> : [Opera] Styles where not working with collapsed selections.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5839">#5839</a> : "Insert row after" was removing the ids of the elements from the clicked row.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6315">#6315</a> : DIV plugin TT #2885 regression.</li>
+ <li>Updated the following language files:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/6246">#6246</a> : Chinese Simplified;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6256">#6256</a> : Dutch;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6271">#6271</a> : English;</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.4</h3>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/6118">#6118</a> : Initial focus is now set to the tabs in the table properties dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6135">#6135</a> : The dialogadvtab plugin now uses the correct label.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6125">#6125</a> : Focus was lost after applying commands in Opera.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6137">#6137</a> : The table dialog was missing the default width value on second opening.</li>
+ </ul>
+ <h3>
+ CKEditor 3.4 Beta</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5909">#5909</a> : New BiDi feature, making it possible to switch the base language direction of block elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5268">#5268</a> : Introducing the "tableresize" plugin, which makes it possible to resize tables columns by mouse drag. It's not enabled by default, so it must be enabled in the configurations file.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/979">#979</a> : New <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enableTabKeyTools">enableTabKeyTools</a> configuration to allow using the TAB key to navigate through table cells.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4606">#4606</a> : Introduce the "autogrow" plugin, which makes the editor resize automatically, based on the contents size.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5737">#5737</a> : Added support for the <a href="http://www.w3.org/TR/html5/editing.html#contenteditable">HTML5 contenteditable attribute</a>, making it possible to define read only regions into the editor contents.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5418">#5418</a> : New "Advanced" tab introduced on the Table Properties dialog. It's based on the new dialogadvtab plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6082">#6082</a> : Introduced the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.useComputedState">useComputedState</a> setting, making it possible to control whether toolbar features, like alignment and direction, should reflect the "computed" selection states, even when the effective feature value is not applied.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5911">#5911</a> : BiDi: List items should support and retain correct base language direction</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5689">#5689</a> : Make it possible to run CKEditor inside of Firefox chrome.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6042">#6042</a> : It wasn't possible to align a paragraph with the dir attribute to the opposite direction.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6058">#6058</a> : Fixed a small style glitch with file upload fields in IE+Quirks.</li>
+ </ul>
+ <h3>
+ CKEditor 3.3.2</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5882">#5882</a> : Introduce the dialog#selectPage event, replicating the OnDialogTabChange feature available in FCKeditor 2.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5927">#5927</a> : The native controls in ui.dialog.elements can be styled with the controlStyle definition.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/1644">#1644</a> : Removed references to cursor:hand in the stylesheets.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5411">#5411</a> : Anchor, hidden fields and Page-Break objects can no longer be resized.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5456">#5456</a> : Initial focus incorect in api_dialog sample page.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5628">#5628</a> : Incorrect <pre> siblings merging.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5829">#5829</a> : Adding validation for start number field in list style dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5845">#5845</a> : Context menu on empty list item loses selection.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5860">#5860</a> : [IE] > in attribute values are incorrectly escaped.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5905">#5905</a> : SCAYT is not any more enabled by default.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5736">#5736</a> : Improved the text generated for mailto: links if no text was selected.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4779">#4779</a> : Adjust resize_minWidth and resize_minHeight if smaller than actual dimensions.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5687">#5687</a> : Navigation through colors is now compatible with RTL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4615">#4615</a> : [IE] Text fields are no longer disrupted in dialog with RTL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5887">#5887</a> : The number of columns in the smileys table is now configurable via the smiley_columns setting.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5100">#5100</a> : It was possible to drag&drop some elements like context menu items or dropdown entries.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5933">#5933</a> : Text color and background color panels don't have scrollbars anymore under office2003 and v2 skins.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5943">#5943</a> : An error is no longer generated when using percent or pixel values in the image dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5951">#5951</a> : Avoid problems with security systems due to the usage of UniversalXPConnect.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5441">#5441</a> : Avoid errors if the editor instance is removed from the DOM before calling its destroy() method.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4997">#4997</a> : Provide better access to the native input in the ui.dialog.file element.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5914">#5914</a> : Modified the Smileys dialog to make active only the images and not their borders.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5565">#5565</a> : The scrollbar does not behaves erratically when opening a rich combo in RTL page.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5843">#5843</a> : In CKEditor 3.3: When we set the focus in the 'instanceReady' event, FF3.6 is giving js error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5902">#5902</a> : paste and pastetext dialogs cannot be skinned easily.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5959">#5959</a> : Dialog auto focus does not check for hidden tabs.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5415">#5415</a> : Undo not working when we change the Table Properties for the table on a saved page.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5435">#5435</a> : IE: we can't start Numbered/Bulleted list in Tables by Clicking on Insert/Remove Numbers/Bullets Icon.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5832">#5832</a> : The JQuery adapter sample is not working properly with SSL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5728">#5728</a> : Text field & Upload Button in Upload Tab of Image Properties dialog are not shown Properly in Arabic.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5436">#5436</a> : IE: Cursor goes to next Table Cell after we insert a Smiley in the Table Cell.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5580">#5580</a> : Maximize does not work properly in the Office 2003 and V2 skins.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5495">#5495</a> : The link dialog was breaking the undo system on some situations.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5775">#5775</a> : Required field's label to contain a CSS class to allow it to be styled differently.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5999">#5999</a> : Table dialog rows and columns fields are now marked as required.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5693">#5693</a> : baseHref detection in the flash dialog now works correctly.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5690">#5690</a> : Table cell's width attribute is now respected properly.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5819">#5819</a> : Introducing the new removeFormatCleanup event and making sure remove format doesn't break the showborder plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5558">#5558</a> : After pasting on WebKit based browsers the editor now scrolls to the end of the pasted content.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5799">#5799</a> : Correct plugin dependencies for the liststyle plugin with contextMenu and dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5436">#5436</a> : IE: The cursor was moving to the wrong position when inserting inline elements at the end of cells on tables.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5984">#5984</a> : Firefox: CTRL+HOME was creating an unwanted empty paragraph at the start of the document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5634">#5634</a> : IE: It was needed to click twice in the editor to make it editable on some situations.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5338">#5338</a> : Pasting from Open Office could lead on error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5224">#5224</a> : Some invalid markup could break the editor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5455">#5455</a> : It was not possible to remove formatting from pasted content on specific cases.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5735">#5735</a> : IE: The editor was having focus issues when the previous selection got hidden by scroll operations.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5563">#5563</a> : Firefox: The disableObjectResizing and disableNativeTableHandles settings stopped working.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5781">#5781</a> : Firefox: Editing was not possible in an empty document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5293">#5293</a> : Firefox: Unwanted BR tags were being left in the editor output when it should be empty.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5280">#5280</a> : IE: Scrollbars where reacting improperly when clicking in the bar space.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5840">#5840</a> : Some dialog access keys are conflicting with "Ctrl + A", select all text behavior on text input.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6059">#6059</a> : Changing list type didn't preserve the list's attributes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5193">#5193</a> : In Firefox, the element path options had the text cursor instead of the arrow.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6073">#6073</a> : The list context menu was showing the wrong option when in a mixed list hierarchy.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6074">#6074</a> : The Insert Table Column command was duplicating the selected column cells ids.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6066">#6066</a> : The toolbar combos had the text cursor instead of the arrow.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6062">#6062</a> : The toolbar buttons had the text cursor instead of the arrow.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6068">#6068</a> : [IE7] A few labels were hidden in a RTL language.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6000">#6000</a> : Safari and Chrome where scrolling the contents to the top when moving the focus to the editor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/6090">#6090</a> : IE: Textarea with selection inside causes Link dialog issues.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5079">#5079</a> : Page break in lists move to above the list when you switch from WYSIWYG to HTML mode and back.</li>
+ <li>Updated the following language files:<ul>
+ <li>Chinese Simplified;</li>
+ <li>Hebrew;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5962">#5962</a> : German;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5645">#5645</a> : Portuguese;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5797">#5797</a> : Turkish;</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.3.1</h3>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5780">#5780</a> : Text selection lost when opening some of the dialogs.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5787">#5787</a> : Liststyle plugin wasn't packaged into the core (CKEDITOR.resourceManager.load exception).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5637">#5637</a> : Fix wrong nesting that generated "<head> must be a child of <html>" warning in Webkit.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5790">#5790</a> : Internal only attributes output on fullpage <html> tag.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5761">#5761</a> : [IE] Color dialog matrix buttons are barely clickable in quirks mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5759">#5759</a> : [IE] Clicking on the scrollbar and then on the host page causes error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5772">#5772</a> : List style dialog is missing tab page ids.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5782">#5782</a> : [FF] Wysiwyg mode is broken by 'display' style changes on editor's parent DOM tree.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5801">#5801</a> : [IE] contentEditable="false" doesn't apply in effect on inline-elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5794">#5794</a> : Empty find matching twice results in JavaScript error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5732">#5732</a> : If it isn't possible to connect to the SCAYT servers the dialogs might hang in Firefox. Fix for Firefox>=3.6.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5807">#5807</a> : [FF2] New page command results in uneditable document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5807">#5807</a> : [FF2] SCAYT plugin is disabled in Firefox2 due to selection interference.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5772">#5772</a> : [IE] Some numbered list style types are not supported by IE6/7 and causes JavaScript error.</li>
+ </ul>
+ <h3>
+ CKEditor 3.3</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/635">#635</a> : The properties dialog will now open when double clicking on objects.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3893">#3893</a> : It's now possible to indent/outdent lists when selecting the first list item.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4968">#4968</a> : The <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsLangDirection">contentsLangDirection</a> setting now has a default value 'ui' which inherit language direction from the editor UI language.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4649">#4649</a> : The color picker dialog is now accessible.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3593">#3593</a> : The editing area is now enabled by contentEditable="true" instead of designMode="on" to allow creating uneditable content elements in all browsers.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4056">#4056</a> : Hidden fields will now be displayed as fake element just like in FCKeditor 2.</li>
+ </ul>
+<h3>
+ CKEditor 3.2.2</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li>The SCAYT spell checker is now enabled by default through the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.scayt_autoStartup">autoStartup</a> setting.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5631">#5631</a> : The SCAYT context menu options can now be reorganized through the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.scayt_contextMenuItemsOrder">scayt_contextMenuItemsOrder</a> setting.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4231">#4231</a> : Introducing the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.resize_dir">resize_dir setting</a>, to be able to restrict manual resizing of the editor to only one direction (horizontal/vertical).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5479">#5479</a> : Introducing the classic ASP integration files and samples.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5024">#5024</a> : Added samples (<a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_html.html">HTML</a> and <a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_xhtml.html">XHTML</a>) to show how to output HTML using fonts and other attributes instead of styles.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4358">#4358</a> : Introduced the List Properties dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5485">#5485</a> : Adding the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsLanguage">contentsLanguage</a> configuration option to be able to set the language for the editor contents.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5330">#5330</a> : Corrected detection of CTRL and META keys in Macs for the context menu.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5434">#5434</a> : Fixed access denied issues with IE when accessing web sites through IPv6 IP addresses.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4476">#4476</a> : [IE] Inaccessible empty list item contains sub list.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4881">#4881</a> : [IE] Selection range broken because of cutting a single control type element from it.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5505">#5505</a> : Image dialog throw JavaScript error when click close dialog before preview area is loading.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5144">#5144</a> : [Chrome] Paste in Webkit sometimes leaves extra 'div' element.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5021">#5021</a> : [Firefox] Typing in empty document start from second line when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5416">#5416</a> : [IE] Delete table throws a error when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4459">#4459</a> : [IE] Select element is penetrating the maximized editor in IE6.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5559">#5559</a> : [IE] The first call to <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setData">setData</a> is affected by iframe cache when loading the wysiwyg mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5567">#5567</a> : [IE] Remove inline styles in some case doesn't join identical siblings.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5450">#5450</a> : [FireFox] Press ENTER on 'replace' button result wrong.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5121">#5121</a> : Recognizes the <br /> tag as a separator when apply block styles and <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5575">#5575</a> : <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.html#.replaceAll">CKEDITOR.replaceAll</a> should consider all kind of white spaces between class names.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5582">#5582</a> : Prevent the default behavior when click the 'x' button to close dialog box.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5584">#5584</a> : ENTER key with <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.forceEnterMode">forceEnterMode</a> turns on doesn't inherit current block attributes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4797">#4797</a> : [Opera] Press ENTER key in dialog fields to close throws JavaScript error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5578">#5578</a> : Add flash fake element align property when switch mode (source to wysiwyg).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5577">#5577</a> : Update delete column behavior when choose multiple cells in the same column.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5512">#5512</a> : Open context menu with SHIFT+F10 doesn't get correct editor selection.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5433">#5433</a> : English protocol text directions in Link dialog are not incorrect in 'rtl' UI languages.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5553">#5553</a> : Paste dialog clipboard area text direction is incorrect for 'rtl' content languages.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4734">#4734</a> : Font size resets when font name is changed in an empty numbered list.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5237">#5237</a> : English text in dialogs' title is flipped when using RTL language.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3257">#3257</a> : Create list doesn't keep blocks as headings.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5111">#5111</a> : [Firefox] JAWS doesn't respect PC cursor mode (application role) on toolbar.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5530">#5530</a> : Page break for printing can't be removed with undo.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5381">#5381</a> : Unable to place cursor between two paragraphs in body.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5568">#5568</a> : [IE6/7] Selecting a entire table cell changes the original range.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5623">#5623</a> : [Firefox] Apply style that edges another inline style result incorrect.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5586">#5586</a> : [Firefox] Maximize the second editor ruins full screen mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5617">#5617</a> : HTML filter system does not allow two 'text' filter rules.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5663">#5663</a> : General memory clean up after destroying last instance.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5461">#5461</a> : [IE] Fix Paste from Word dialog doesn't accept imput problem.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5676">#5676</a> : Make color buttons use RRGGBB instead of RGB for better compatibility with IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4948">#4948</a> : [Safari] Select the first/last cell of table to open context menu may lead to undetected table.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5591">#5591</a> : [Firefox] Select a list item makes selected element broken.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5667">#5667</a> : Pasting in a RTL page content causes shows up the horizontal scrollbar.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5688">#5688</a> : Duplicate ids are used in dialog definition.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5719">#5719</a> : [IE] 'change' dialog event should not be triggered when dialog is already closed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5747">#5747</a> : [IE] Error thrown when IE input field editing mode is turned on.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5516">#5516</a> : IE8: Toolbar buttons have higher bottom padding.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5402">#5402</a> : SHIFT-ENTER could now be used to exit from preformat block.</li>
+ <li>SCAYT plugin related:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4836">#4836</a> : Using SCAYT result in fragile elements when applying inline styles.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5425">#5425</a> : [Opera] Disable SCAYT plugin for Opera browser.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5632">#5632</a> : SCAYT word marker is not visible on text with background-color set.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4125">#4125</a> : Remove Format command incorrectly removes SCAYT word markers.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5671">#5671</a> : SCAYT bootstrap script could be added multiple times unnecessarily.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5573">#5573</a> : SCAYT move cursor position after insert element into marked word text.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5546">#5546</a> : SCAYT interferes with undo/redo commands.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5570">#5570</a> : [IE] First enabling SCAYT blind cursor in editor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5741">#5741</a> : Enable SCAYT cause error in multiple editor instances.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5744">#5744</a> : Remove editor with SCAYT enabled in source mode throws error.</li>
+ </ul></li>
+ <li>Updated the following language files:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5432">#5432</a> : Dutch;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5619">#5619</a> : Finnish;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5515">#5515</a> : Hebrew;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5588">#5588</a> : Turkish;</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.2.1</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4478">#4478</a> : Enable the SelectAll command in source mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5150">#5150</a> : Allow names in the CKEDITOR.config.colorButton_colors setting.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4810">#4810</a> : Adding configuration option for image dialog preview area filling text.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/536">#536</a> : Object style now could be applied on any parent element of current selection.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5290">#5290</a> : Unified stylesSet loading removing dependencies from the styles combo.
+ Now the configuration entry is named 'config.stylesSet' instead of config.stylesCombo_stylesSet and the default location
+ is under the 'styles' plugin instead of 'stylescombo'.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5352">#5352</a> : Allow to define the stylesSet array in the config object for the editor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5302">#5302</a> : Adding config option "forceEnterMode".</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5216">#5216</a> : Extend CKEDITOR.appendTo to allow a data parameter for the initial value.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5024">#5024</a> : Added sample to show how to output XHTML and avoid deprecated tags.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5152">#5152</a> : Indentation using class attribute doesn't work properly.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4682">#4682</a> : It wasn't possible to edit block elements in IE that had styles like width, height or float.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4750">#4750</a> : Correcting default order of buttons layout in dialogs on Mac.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4932">#4932</a> : Fixed collapse button not clickable on simple toolbar.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5228">#5228</a> : Link dialog is automatically changes protocol when URLs that starts with '?'.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4877">#4877</a> : Fixed CKEditor displays source code in one long line (IE quirks mode + office2003 skin).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5132">#5132</a> : Apply inline style leaks into sibling words which are seperated spaces.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3599">#3599</a> : Background color style on sized text displayed as narrow band behind.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4661">#4661</a> : Translation missing in link dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5240">#5240</a> : Flash alignment property is not presented visually on fake element.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4910">#4910</a> : Pasting in IE scrolls document to the end.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5041">#5041</a> : Table summary attribute can't be removed with dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5124">#5124</a> : All inline styles cannot be applied on empty spaces.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3570">#3570</a> : SCAYT marker shouldn't appear inside elements path bar.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4553">#4553</a> : Dirty check result incorrect when editor document is empty.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4555">#4555</a> : Unreleased memory when editor is created and destroyed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5118">#5118</a> : Arrow keys navigation in RTL languages is incorrect.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4721">#4721</a> : Remove attribute 'value' of checkbox in IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5278">#5278</a> : IE: Add validation to check for bad window names of popup window.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5171">#5171</a> : Dialogs contains lists don't have proper voice labels.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4791">#4791</a> : Can't place cursor inside a form that end with a checkbox/radio.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4479">#4479</a> : StylesCombo doesn't reflect the selection state until it's first opened.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4717">#4717</a> : 'Unlink' and 'Outdent' command buttons should be disabled on editor startup.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5119">#5119</a> : Disabled command buttons are not being properly styled when focused.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5307">#5307</a> : Hide dialog page cause problem when there's two tab pages remain.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5343">#5343</a> : Active list item ARIA role is wrongly placed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3599">#3599</a> : Background color style applying to text with font size style has been narrowly rendered.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4711">#4711</a> : Line break character inside preformatted text makes it unable to type text at the end of previous line.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4829">#4829</a> : [IE] Apply style from combo has wrong result on manually created selection.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4830">#4830</a> : Retrieving selected element isn't always right, especially selecting using keyboard (SHIFT+ARROW).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5128">#5128</a> : Element attribute inside preformatted text is corrupted when converting to other blocks.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5190">#5190</a> : Template list entry shouldn't gain initial focus open templates list dialog opens.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5238">#5238</a> : Menu button doesn't display arrow icon in high-contrast mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3576">#3576</a> : Non-attributed element of the same name with the applied style is incorrectly removed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5221">#5221</a> : Insert table into empty document cause JavaScript error thrown.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5242">#5242</a> : Apply 'automatic' color option of text color incorrectly removes background-color style.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4719">#4719</a> : IE does not escape attribute values properly.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5170">#5170</a> : Firefox does not insert text into styled element properly.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4026">#4026</a> : Office2003 skin has no toolbar button borders in High Contrast in IE7.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4348">#4348</a> : There should have exception thrown when 'CKEDITOR_BASEPATH' couldn't be figured out automatically.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5364">#5364</a> : Focus may not be put into dialog correctly when dialog skin file is loading slow.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4016">#4016</a> : Justify the layout of forms select dialog in Chrome and IE7.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5373">#5373</a> : Variable 'pathBlockElements' defines wrong items in CKEDITOR.dom.elementPath.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5082">#5082</a> : Ctrl key should be described as Cmd key on Mac.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5182">#5182</a> : Context menu is not been announced correctly by ATs.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4898">#4898</a> : Can't navigate outside table under the last paragraph of document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4950">#4950</a> : List commands could compromise list item attribute and styles.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5018">#5018</a> : Find result highlighting remove normal font color styles unintentionally.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5376">#5376</a> : Unable to exit list from within a empty block under list item.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5145">#5145</a> : Various SCAYT fixes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5319">#5319</a> : Match whole word doesn't work anymore after replacement has happened.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5363">#5363</a> : 'title' attribute now presents on all editor iframes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5374">#5374</a> : Unable to toggle inline style when the selection starts at the linefeed of the previous paragraph.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4513">#4513</a> : Selected link element is not always correctly detected when using keyboard arrows to perform such selection.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5372">#5372</a> : Newly created sub list should inherit nothing from the original (parent) list, except the list type.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5274">#5274</a> : [IE6] Templates preview image is displayed in wrong size.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5292">#5292</a> : Preview in font size and family doesn't work with custom styles.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5396">#5396</a> : Selection is lost when use cell properties dialog to change cell type to header.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4082">#4082</a> : [IE+Quirks] Preview text in the image dialog is not wrapping.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4197">#4197</a> : Fixing format combo don't hide when editor blur on Safari.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5401">#5401</a> : The context menu break layout with Office2003 and V2 skin on IE quirks mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4825">#4825</a> : Fixing browser context menu is opened when clicking right mouse button twice.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5356">#5356</a> : The SCAYT dialog had issues with Prototype enabled pages.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5266">#5266</a> : SCAYT was disturbing the rendering of TH elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4688">#4688</a> : SCAYT was interfering on checkDirty.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5429">#5429</a> : High Contrast mode was being mistakenly detected when loading the editor through Dojo's xhrGet.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5221">#5221</a> : Range is mangled when making collapsed selection in an empty paragraph.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5261">#5261</a> : Config option 'scayt_autoStartup' slow down editor loading.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3846">#3846</a> : Google Chrome - No Img properties after inserting.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5465">#5465</a> : ShiftEnter=DIV doesn't respect list item when pressing ENTER at end of list item.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5454">#5454</a> : After replaced success, the popup window couldn't be closed and a js error occured.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4784">#4784</a> : Incorrect cursor position after delete table cells.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5149">#5149</a> : [FF] Cursor disappears after maximize when the editor has focus.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5220">#5220</a> : DTD now shows tolerance to <style> appear inside content.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5440">#5440</a> : Mobile browsers (iPhone, Android...) are marked as incompatible as they don't support editing features.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5504">#5504</a> : [IE6/7] 'Paste' dialog will always get opened even when user allows the clipboard access dialog when using 'Paste' button.</li>
+ <li>Updated the following language files:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5326">#5326</a> : Catalan;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5370">#5370</a> : Faroese;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5392">#5392</a> : Finnish;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4580">#4580</a> : Hungarian;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5301">#5301</a> : Norwegian;</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.2</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li>Several accessibility enhancements:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4502">#4502</a> : The editor accessibility is now totally based on <a href="http://www.w3.org/WAI/intro/aria">WAI-ARIA</a>.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5015">#5015</a> : Adding accessibility help dialog plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5014">#5014</a> : Keyboard navigation compliance with screen reader suggested keys.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4595">#4595</a> : Better accessibility in the Templates dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3389">#3389</a> : Esc/Arrow Key now works for closing sub menu.</li>
+ </ul></li>
+ <li><a href="http://dev.ckeditor.com/ticket/4973">#4973</a> : The Style field in the Div Container dialog is now loading the styles defined in the default styleset used by the Styles toolbar combo.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5049">#5049</a> : Form Field list command in JAWS incorrectly lists extra fields.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5008">#5008</a> : Lock/Unlock ratio buttons in the Image dialog was poorly designed in High Contrast mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3980">#3980</a> : All labels in dialogs now use <label> instead of <div>.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5213">#5213</a> : Reorganization of some entries in the language files to make it more consistent.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5199">#5199</a> : In IE, single row toolbars didn't have the bottom padding.</li>
+ </ul>
+ <h3>
+ CKEditor 3.1.1</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4399">#4399</a> : Improved support for external file browsers by allowing executing a callback function.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4612">#4612</a> : The text of links is now updated if it matches the URL to which it points to.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4936">#4936</a> : New localization support for the Welsh language.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4272">#4272</a> : Kama skin toolbar was broken in IE+Quirks+RTL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4987">#4987</a> : Changed the url which is called by the Browser Server button in the Link tab of Image Properties dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5030">#5030</a> : The CKEDITOR.timestamp wasn't been appended to the skin.js file.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4993">#4993</a> : Removed the float style from images when the user selects 'not set' for alignment.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4944">#4944</a> : Fixed a bug where nested list structures with inconsequent levels were not being pasted correctly from MS Word.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4637">#4637</a> : Table cells' 'nowrap' attribute was not being loaded by the cell property dialog. Thanks to pomu0325.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4724">#4724</a> : Using the mouse to insert a link in IE might create incorrect results.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4640">#4640</a> : Small optimizations for the fileBrowser plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4583">#4583</a> : The "Target Frame Name" field is now visible when target is set to 'frame' only.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4863">#4863</a> : Fixing iframedialog's height doesn't stretch to 100% (except IE Quirks).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4964">#4964</a> : The BACKSPACE key positioning was not correct in some cases with Firefox.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4980">#4980</a> : Setting border, vspace and hspace of images to zero was not working.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4773">#4773</a> : The fileBrowser plugin was overwriting onClick functions eventually defined on fileButton elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4731">#4731</a> : The clipboard plugin was missing a reference to the dialog plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5051">#5051</a> : The about plugin was missing a reference to the dialog plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5146">#5146</a> : The wsc plugin was missing a reference to the dialog plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4632">#4632</a> : The print command will now properly break on the insertion point of page break for printing.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4862">#4862</a> : The English (United Kingdom) language file has been renamed to en-gb.js.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4618">#4618</a> : Selecting an emoticon or the lock and reset buttons in the image dialog fired the onBeforeUnload event in IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4678">#4678</a> : It was not possible to set tables' width to empty value.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5012">#5012</a> : Fixed dependency issues with the menu plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5040">#5040</a> : The editor will not properly ignore font related settings that have extra item separators (semi-colons).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4046">#4046</a> : Justify should respect config.enterMode = CKEDITOR.ENTER_BR.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4622">#4622</a> : Inserting tables multiple times was corrupting the undo system.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4647">#4647</a> : [IE] Selection on an element within positioned container is lost after open context-menu then click one menu item.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4683">#4683</a> : Double-quote character in attribute values was not escaped in the editor output.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4762">#4762</a> : [IE] Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor in source mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4772">#4772</a> : Text color was not being applied properly on links.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4795">#4795</a> : [IE] Press 'Del' key on horizontal line or table result in error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4824">#4824</a> : [IE] <br/> at the very first table cell breaks the editor selection.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4851">#4851</a> : [IE] Delete table rows with context-menu may cause error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4951">#4951</a> : Replacing text with empty string was throwing errors.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4963">#4963</a> : Link dialog was not opening properly for e-mail type links.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5043">#5043</a> : Removed the possibility of having an unwanted script tag being outputted with the editor contents.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3678">#3678</a> : There were issues when editing links inside floating divs with IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4763">#4763</a> : Pressing ENTER key with text selected was not deleting the text in some situations.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5096">#5096</a> : Simple ampersand attribute value doesn't work for more than one occurrence.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3494">#3494</a> : Context menu is too narrow in some translations.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5005">#5005</a> : Fixed HTML errors in PHP samples.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5123">#5123</a> : Fixed broken XHTML in User Interface Languages sample.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4893">#4893</a> : Editor now understands table cell inline styles.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4611">#4611</a> : Selection around <select> in editor doesn't cause error anymore.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4886">#4886</a> : Extra BR tags were being created in the output HTML.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4933">#4933</a> : Empty tags with BR were being left in the DOM.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5127">#5127</a> : There were errors when removing dialog definition pages through code.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4767">#4767</a> : CKEditor was not working when ckeditor_source.js is loaded in the <body> .</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5062">#5062</a> : Avoided security warning message when loading the wysiwyg area in IE6 under HTTPS.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5135">#5135</a> : The TAB key will now behave properly when in Source mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4988">#4988</a> : It wasn't possible to use forcePasteAsPlainText with Safari on Mac.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5095">#5095</a> : Safari on Mac deleted the current selection in the editor when Edit menu was clicked.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5140">#5140</a> : In High Contrast mode, arrows were now been displayed for menus with submenus.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5163">#5163</a> : The undo system was not working on some specific cases.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5162">#5162</a> : The ajax sample was throwing errors when loading data.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4999">#4999</a> : The Template dialog was not generating an undo snapshot.</li>
+ <li>Updated the following language files:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/5006">#5006</a> : Dutch;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5039">#5039</a> : Finnish;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5148">#5148</a> : Hebrew;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5071">#5071</a> : Russian;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/5147">#5147</a> : Spanish;</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.1</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4067">#4067</a> : Introduced the full page editing support (from <html> to </html>).</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4228">#4228</a> : Introduced the Shared Spaces feature.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4379">#4379</a> : Introduced the new powerful pasting system and word cleanup procedure, including enhancements to the paste as plain text feature.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/2872">#2872</a> : Introduced the new native PHP API, the first standardized server side support.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4210">#4210</a> : Added CKEditor plugin for jQuery.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/2885">#2885</a> : Added 'div' dialog and corresponding context menu options.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4574">#4574</a> : Added the table merging tools and corresponding context menu options.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4340">#4340</a> : Added the email protection option for link dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4463">#4463</a> : Added inline CSS support in all places where custom stylesheet could apply.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3881">#3881</a> : Added color dialog for 'more color' option in color buttons.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4341">#4341</a> : Added the 'showborder' plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4549">#4549</a> : Make the anti-cache query string configurable.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4708">#4708</a> : Added the 'htmlEncodeOutput' config option.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4342">#4342</a> : Introduced the bodyId and bodyClass settings to specify the id and class. to be used in the editing area at runtime.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3401">#3401</a> : Introduced the baseHref setting so it's possible to set the URL to be used to resolve absolute and relative URLs in the contents.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4729">#4729</a> : Added support to fake elements for comments.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4707">#4707</a> : Fixed invalid link is requested in image preview.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4461">#4461</a> : Fixed toolbar separator line along side combo enlarging the toolbar height.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4596">#4596</a> : Fixed image re-size lock buttons aren't accessible in high-contrast mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4676">#4676</a> : Fixed editing tables using table properties dialog overwrites original style values.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4714">#4714</a> : Fixed IE6 JavaScript error when editing flash by commit 'Flash' dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3905">#3905</a> : Fixed 'wysiwyg' mode causes unauthenticated content warnings over SSL in FF 3.5.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4768">#4768</a> : Fixed open context menu in IE throws js error when focus is not inside document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4822">#4822</a> : Fixed applying 'Headers' to existing table does not work in IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4855">#4855</a> : Fixed toolbar doesn't wrap well for 'v2' skin in all browsers.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4882">#4882</a> : Fixed auto detect paste from MS-Word is not working for Safari.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4882">#4882</a> : Fixed unexpected margin style left behind on content cleaning up from MS-Word.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4896">#4896</a> : Fixed paste nested list from MS-Word with measurement units set to cm is broken.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4899">#4899</a> : Fixed unable to undo pre-formatted style.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4900">#4900</a> : Fixed ratio-lock inconsistent between browsers.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4901">#4901</a> : Fixed unable to edit any link with popup window's features in Firefox.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4904">#4904</a> : Fixed when paste happen from dialog, it always throw JavaScript error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4905">#4905</a> : Fixed paste plain text result incorrect when content from dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4889">#4889</a> : Fixed unable to undo 'New Page' command after typing inside editor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4892">#4892</a> : Fixed table alignment style is not properly represented by the wrapping div.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4918">#4918</a> : Fixed switching mode when maximized is showing background page contents.</li>
+ </ul>
+ <h3>
+ CKEditor 3.0.2</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4343">#4343</a> : Added the configuration option 'browserContextMenuOnCtrl' so it's possible to enable the default browser context menu by holding the CTRL key.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4552">#4552</a> : Fixed float panel doesn't show up since editor instanced been destroyed once.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3918">#3918</a> : Fixed fake object is editable with Image dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4053">#4053</a> : Fixed 'Form Properties' missing from context menu when selection collapsed inside form.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4401">#4401</a> : Fixed customized by removing 'upload' tab page from 'Link dialog' cause JavaScript error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4477">#4477</a> : Adding missing tag names in object style elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4567">#4567</a> : Fixed IE throw error when pressing BACKSPACE in source mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4573">#4573</a> : Fixed 'IgnoreEmptyPargraph' config doesn't work with the config 'entities' is set to 'false'.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4614">#4614</a> : Fixed attribute protection fails because of line-break.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4546">#4546</a> : Fixed UIColor plugin doesn't work when editor id contains CSS selector preserved keywords.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4609">#4609</a> : Fixed flash object is lost when loading data from outside editor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4625">#4625</a> : Fixed editor stays visible in a div with style 'visibility:hidden'.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4621">#4621</a> : Fixed clicking below table caused an empty table been generated.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3373">#3373</a> : Fixed empty context menu when there's no menu item at all.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4473">#4473</a> : Fixed setting rules on the same element tag name throws error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4514">#4514</a> : Fixed press 'Back' button breaks wysiwyg editing mode is Firefox.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4542">#4542</a> : Fixed unable to access buttons using tab key in Safari and Opera.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4577">#4577</a> : Fixed relative link url is broken after opening 'Link' dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4597">#4597</a> : Fixed custom style with same attribute name but different attribute value doesn't work.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4651">#4651</a> : Fixed 'Deleted' and 'Inserted' text style is not rendering in wysiwyg mode and is wrong is source mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4654">#4654</a> : Fixed 'CKEDITOR.config.font_defaultLabel(fontSize_defaultLabel)' is not working.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3950">#3950</a> : Fixed table column insertion incorrect when selecting empty cell area.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3912">#3912</a> : Fixed UIColor not working in IE when page has more than 30+ editors.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4031">#4031</a> : Fixed mouse cursor on toolbar combo has more than 3 shapes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4041">#4041</a> : Fixed open context menu on multiple cells to remove them result in only one removed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4185">#4185</a> : Fixed resize handler effect doesn't affect flash object on output.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4196">#4196</a> : Fixed 'Remove Numbered/Bulleted List' on nested list doesn't work well on nested list.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4200">#4200</a> : Fixed unable to insert 'password' type filed with attributes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4530">#4530</a> : Fixed context menu couldn't open in Opera.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4536">#4536</a> : Fixed keyboard navigation doesn't work at all in IE quirks mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4584">#4584</a> : Fixed updated link Target field is not updating when updating to certain values.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4603">#4603</a> : Fixed unable to disable submenu items in contextmenu.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4672">#4672</a> : Fixed unable to redo the insertion of horizontal line.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4677">#4677</a> : Fixed 'Tab' key is trapped by hidden dialog elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4073">#4073</a> : Fixed insert template with replace option could result in empty document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4455">#4455</a> : Fixed unable to start editing when image inside document not loaded.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4517">#4517</a> : Fixed 'dialog_backgroundCoverColor' doesn't work on IE6.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3165">#3165</a> : Fixed enter key in empty list item before nested one result in collapsed line.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4527">#4527</a> : Fixed checkbox generate invalid 'checked' attribute.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/1659">#1659</a> : Fixed unable to click below content to start editing in IE with 'config.docType' setting to standard compliant.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3933">#3933</a> : Fixed extra <br> left at the end of document when the last element is a table.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4736">#4736</a> : Fixed PAGE UP and PAGE DOWN keys in standards mode are not working.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4725">#4725</a> : Fixed hitting 'enter' before html comment node produces a JavaScript error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4522">#4522</a> : Fixed unable to redo when typing after insert an image with relative url.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4594">#4594</a> : Fixed context menu goes off-screen when mouse is at right had side of screen.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4673">#4673</a> : Fixed undo not available straight away if shift key is used to enter first character.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4690">#4690</a> : Fixed the parsing of nested inline elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4450">#4450</a> : Fixed selecting multiple table cells before apply justify commands generates spurious paragraph in Firefox.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4733">#4733</a> : Fixed dialog opening sometimes hang up Firefox and Safari.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4498">#4498</a> : Fixed toolbar collapse button missing tooltip.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4738">#4738</a> : Fixed inserting table inside bold/italic/underline generates error on ENTER_BR mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4246">#4246</a> : Fixed avoid XHTML deprecated attributes for image styling.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4543">#4543</a> : Fixed unable to move cursor between table and hr.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4764">#4764</a> : Fixed wrong exception message when CKEDITOR.editor.append() to non-existing elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4521">#4521</a> : Fixed dialog layout in IE6/7 may have scroll-bar and other weird effects.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4709">#4709</a> : Fixed inconsistent scroll-bar behavior on IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4776">#4776</a> : Fixed preview page failed to open when relative URl contains in document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4812">#4812</a> : Fixed 'Esc' key not working on dialogs in Opera.</li>
+ <li>Updated the following language files:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4346">#4346</a> : Dutch;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4837">#4837</a> : Finnish;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4371">#4371</a> : Hebrew;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4371">#4607</a> <a href="http://dev.ckeditor.com/ticket/4713">#4713</a> : Japanese;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4660">#4660</a> : Norwegian.</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.0.1</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4219">#4219</a> : Added fallback mechanism for config.language.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4194">#4194</a> : Added support for using multiple css style sheets within the editor.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/3898">#3898</a> : Added validation for URL value in Image dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3528">#3528</a> : Fixed Context Menu issue when triggered using Shift+F10.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4028">#4028</a> : Maximize control's tool tip was wrong once it is maximized.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4237">#4237</a> : Toolbar is chopped off in Safari browser 3.x.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4241">#4241</a> : Float panels are left on screen while editor is destroyed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4274">#4274</a> : Double click event is incorrect handled in 'divreplace' sample.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4354">#4354</a> : Fixed TAB key on toolbar to not focus disabled buttons.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3856">#3856</a> : Fixed focus and blur events in source view mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3438">#3438</a> : Floating panels are off by (-1px, 0px) in RTL mode.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3370">#3370</a> : Refactored use of CKEDITOR.env.isCustomDomain().</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4230">#4230</a> : HC detection caused js error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3978">#3978</a> : Fixed setStyle float on IE7 strict.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4262">#4262</a> : Tab and Shift+Tab was not working to cycle through CTRL+SHIFT+F10 context menu in IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3633">#3633</a> : Default context menu isn't disabled in toolbar, status bar, panels...</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3897">#3897</a> : Now there is no image previews when the URL is empty in image dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4048">#4048</a> : Context submenu was lacking uiColor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3568">#3568</a> : Dialogs now select all text when tabbing to text inputs.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3727">#3727</a> : Cell Properties dialog was missing color selection option.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3517">#3517</a> : Fixed "Match cyclic" field in Find & Replace dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4368">#4368</a> : borderColor table cell attribute haven't worked for none-IE</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4203">#4203</a> : In IE quirks mode + toolbar collapsed + source mode editing block height was incorrect.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4387">#4387</a> : Fixed: right clicking in Kama skin can lead to a javascript error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4397">#4397</a> : Wysiwyg mode caused the host page scroll.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4385">#4385</a> : Fixed editor's auto adjusting on DOM structure were confusing the dirty checking mechanism.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4397">#4397</a> : Fixed regression of [3816] where turn on design mode was causing Firefox3 to scroll the host page.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4254">#4254</a> : Added basic API sample.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4107">#4107</a> : Normalize css font-family style text for correct comparision.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3664">#3664</a> : Insert block element in empty editor document should not create new paragraph.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4037">#4037</a> : 'id' attribute is missing with Flash dialog advanced page.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4047">#4047</a> : Delete selected control type element when 'Backspace' is pressed on it.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4191">#4191</a> : Fixed: dialog changes confirmation on image dialog appeared even when no changes have been made.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4351">#4351</a> : Dash and dot could appear in attribute names.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4355">#4355</a> : 'maximize' and 'showblock' commands shouldn't take editor focus.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4504">#4504</a> : Fixed 'Enter'/'Esc' key is not working on dialog button.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4245">#4245</a> : 'Strange Template' now come with a style attribute for width.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4512">#4512</a> : Fixed styles plugin incorrectly adding semicolons to style text.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3855">#3855</a> : Fixed loading unminified _source files when ckeditor_source.js is used.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3717">#3717</a> : Dialog settings defaults can now be overridden in-page through the CKEDITOR.config object.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4481">#4481</a> : The 'stylesCombo_stylesSet' configuration entry didn't work for full URLs.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4480">#4480</a> : Fixed scope attribute in th.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4467">#4467</a> : Fixed bug to use custom icon in context menus. Thanks to george.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4190">#4190</a> : Fixed select field dialog layout in Safari.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4518">#4518</a> : Fixed unable to open dialog without editor focus in IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4519">#4519</a> : Fixed maximize without editor focus throw error in IE.</li>
+ <li>Updated the following language files:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/3947">#3947</a> : Arabic;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4466">#4466</a> : Czech;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4363">#4363</a> : Danish;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4346">#4346</a> : Dutch;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4371">#4371</a> <a href="http://dev.ckeditor.com/ticket/4456">#4456</a> : Hebrew;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4382">#4382</a> : Polish.</li>
+ </ul></li>
+ </ul>
+ <h3>
+ CKEditor 3.0</h3>
+ <p>
+ New features:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/3188">#3188</a> : Introduce
+ <pre> formatting feature when converting from other blocks.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4445">#4445</a> : editor::setData now support an optional callback parameter.</li>
+ </ul>
+ <p>
+ Fixed issues:</p>
+ <ul>
+ <li><a href="http://dev.ckeditor.com/ticket/2856">#2856</a> : Fixed problem with inches in Paste From Word plugin.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3929">#3929</a> : Using Paste dialog,
+ the text is pasted into current selection</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3920">#3920</a> : Mouse cursor over characters in
+ Special Character dialog now is correct</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3882">#3882</a> : Fixed an issue
+ with PasteFromWord dialog in which default values was ignored</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3859">#3859</a> : Fixed Flash dialog layout in Webkit</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3852">#3852</a> : Disabled textarea resizing in dialogs</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3831">#3831</a> : The attempt to remove the contextmenu plugin
+ will not anymore break the editor</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3781">#3781</a> : Colorbutton is now disabled in 'source' mode</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3848">#3848</a> : Fixed an issue with Webkit in witch
+ elements in the Image and Link dialogs had wrong dimensions.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3808">#3808</a> : Fixed UI Color Picker dialog size in example page.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3658">#3658</a> : Editor had horizontal scrollbar in IE6.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3819">#3819</a> : The cursor was not visible
+ when applying style to collapsed selections in Firefox 2.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3809">#3809</a> : Fixed beam cursor
+ when mouse cursor is over text-only buttons in IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3815">#3815</a> : Fixed an issue
+ with the form dialog in which the "enctype" attribute is outputted as "encoding".</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3785">#3785</a> : Fixed an issue
+ in CKEDITOR.tools.htmlEncode() which incorrectly outputs &nbsp; in IE8.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3820">#3820</a> : Fixed an issue in
+ bullet list command in which a list created at the bottom of another gets merged to the top.
+ </li>
+ <li><a href="http://dev.ckeditor.com/ticket/3830">#3830</a> : Table cell properties dialog
+ doesn't apply to all selected cells.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3835">#3835</a> : Element path is not refreshed
+ after click on 'newpage'; and safari is not putting focus on document also.
+ </li>
+ <li><a href="http://dev.ckeditor.com/ticket/3821">#3821</a> : Fixed an issue with JAWS in which
+ toolbar items are read inconsistently between virtual cursor modes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3789">#3789</a> : The "src" attribute
+ was getting duplicated in some situations.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3591">#3591</a> : Protecting flash related elements
+ including '<object>', '<embed>' and '<param>'.
+ </li>
+ <li><a href="http://dev.ckeditor.com/ticket/3759">#3759</a> : Fixed CKEDITOR.dom.element::scrollIntoView
+ logic bug which scroll even element is inside viewport.
+ </li>
+ <li><a href="http://dev.ckeditor.com/ticket/3773">#3773</a> : Fixed remove list will merge lines.
+ </li>
+ <li><a href="http://dev.ckeditor.com/ticket/3829">#3829</a> : Fixed remove empty link on output data.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3730">#3730</a> : Indent is performing on the whole
+ block instead of selected lines in enterMode = BR.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3844">#3844</a> : Fixed UndoManager register keydown on obsoleted document</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3805">#3805</a> : Enabled SCAYT plugin for IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3834">#3834</a> : Context menu on table caption was incorrect.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3812">#3812</a> : Fixed an issue in which the editor
+ may show up empty or uneditable in IE7, 8 and Firefox 3.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3825">#3825</a> : Fixed JS error when opening spellingcheck.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3862">#3862</a> : Fixed html parser infinite loop on certain malformed
+ source code.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3639">#3639</a> : Button size was inconsistent.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3874">#3874</a> : Paste as plain text in Safari loosing lines.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3849">#3849</a> : Fixed IE8 crashes when applying lists and indenting.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3876">#3876</a> : Changed dialog checkbox and radio labels to explicit labels.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3843">#3843</a> : Fixed context submenu position in IE 6 & 7 RTL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3864">#3864</a> : [FF]Document is not editable after inserting element on a fresh page.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3883">#3883</a> : Fixed removing inline style logic incorrect on Firefox2.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3884">#3884</a> : Empty "href" attribute was duplicated on output data.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3858">#3858</a> : Fixed the issue where toolbars
+ break up in IE6 and IE7 after the browser is resized.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3868">#3868</a> : [chrome] SCAYT toolbar options was in reversed order.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3875">#3875</a> : Fixed an issue in Safari where
+ table row/column/cell menus are not useable when table cells are selected.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3896">#3896</a> : The editing area was
+ flashing when switching forth and back to source view.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3894">#3894</a> : Fixed an issue where editor failed to initialize when using the on-demand loading way.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3903">#3903</a> : Color button plugin doesn't read config entry from editor instance correctly.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3801">#3801</a> : Comments at the start of the document was lost in IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3871">#3871</a> : Unable to redo when undos to the front of snapshots stack.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3909">#3909</a> : Move focus from editor into a text input control is broken.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3870">#3870</a> : The empty paragraph
+ desappears when hitting ENTER after "New Page".</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3887">#3887</a> : Fixed an issue in which the create
+ list command may leak outside of a selected table cell and into the rest of document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3916">#3916</a> : Fixed maximize does not enlarge editor width when width is set.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3879">#3879</a> : [webkit] Color button panel had incorrect size on first open.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3839">#3839</a> : Update Scayt plugin to reflect the latest change from SpellChecker.net.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3742">#3742</a> : Fixed wrong dialog layout for dialogs without tab bar in IE RTL mode .</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3671">#3671</a> : Fixed body fixing should be applied to the real type under fake elements.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3836">#3836</a> : Fixed remove list in enterMode=BR will merge sibling text to one line.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3949">#3949</a> : Fixed enterKey within pre-formatted text introduce wrong line-break.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3878">#3878</a> : Whenever possible,
+ dialogs will not present scrollbars if the content is too big for its standard
+ size.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3782">#3782</a> : Remove empty list in table cell result in collapsed cell.</li>
+ <li>Updated the following language files:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4183">#4183</a> : Basque;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3837">#3837</a> : Brazilian Portuguese;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4171">#4171</a> : Catalan;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4115">#4115</a> : Chinese (Simplified);</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4179">#4179</a> : Chinese (Traditional);</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4102">#4102</a> : Croatian;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4105">#4105</a> : French;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4104">#4104</a> : German;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4116">#4116</a> : Italian;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4091">#4091</a> : Japanese;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4120">#4120</a> : Polish;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3987">#3987</a> : Spanish;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4089">#4089</a> : Ukrainian;</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4166">#4166</a> : Vietnamese.</li>
+ </ul></li>
+ <li><a href="http://dev.ckeditor.com/ticket/3984">#3984</a> : [IE]The pre-formatted style is generating error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3946">#3946</a> : Fixed unable to hide contextmenu.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3956">#3956</a> : Fixed About dialog in Source Mode for IE.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3953">#3953</a> : Fixed keystroke for close Paste dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3951">#3951</a> : Reset size and lock ratio options were not accessible in Image dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3921">#3921</a> : Fixed Container scroll issue on IE7.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3940">#3940</a> : Fixed list operation doesn't stop at table.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3891">#3891</a> : [IE] Fixed 'automatic' font color doesn't work.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3972">#3972</a> : Fixed unable to remove a single empty list in document in Firefox with enterMode=BR.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3973">#3973</a> : Fixed list creation error at the end of document.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3959">#3959</a> : Pasting styled text from word result in content lost.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3793">#3793</a> : Combined images into sprites.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3783">#3783</a> : Fixed indenting command in table cells create collapsed paragraph.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3968">#3968</a> : About dialog layout was broken with IE+Standards+RTL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3991">#3991</a> : In IE quirks, text was not visible in v2 and office2003 skins.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3983">#3983</a> : In IE, we'll now
+ silently ignore wrong toolbar definition settings which have extra commas being
+ left around.</li>
+ <li>Fixed the following test cases:<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/3992">#3992</a> : core/ckeditor2.html</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4138">#4138</a> : core/plugins.html</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3801">#3801</a> : plugins/htmldataprocessor/htmldataprocessor.html</li>
+ </ul></li>
+ <li><a href="http://dev.ckeditor.com/ticket/3989">#3989</a> : Host page horizontal scrolling a lot when on having righ-to-left direction.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4001">#4001</a> : Create link around existing image result incorrect.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3988">#3988</a> : Destroy editor on form submit event cause error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3994">#3994</a> : Insert horizontal line at end of document cause error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4074">#4074</a> : Indent error with 'indentClasses' config specified.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4057">#4057</a> : Fixed anchor is lost after switch between editing modes.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3644">#3644</a> : Image dialog was missin radio lock.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4014">#4014</a> : Firefox2 had no dialog button backgrounds.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4018">#4018</a> : Firefox2 had no richcombo text visible.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4035">#4035</a> : [IE6] Paste dialog size was too small.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4049">#4049</a> : Kama skin was too wide with config.width.</li>
+ <li>The following released files now doesn't require the _source folder<ul>
+ <li><a href="http://dev.ckeditor.com/ticket/4086">#4086</a> : _samples/ui_languages.html</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4093">#4093</a> : _tests/core/dom/document.html</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4094">#4094</a> : Smiley plugin file</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li>
+ </ul></li>
+ <li><a href="http://dev.ckeditor.com/ticket/4085">#4085</a> : Paste and Paste from Word dialogs were not well styled in IE+RTL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3982">#3982</a> : Fixed enterKey on empty list item result in weird dom structure.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4101">#4101</a> : Now it is possible to close dialog before gets focus.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4075">#4075</a> : [IE6/7]Fixed apply custom inline style with "class" attribute failed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4087">#4087</a> : [Firefox]Fixed extra blocks created on create list when full document selected.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4111">#4111</a> : Fixed apply block style after inline style applied on full document error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3622">#3622</a> : Fixed shift enter with selection not deleting highlighted text.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4092">#4092</a> : [IE6] Close button was missing for dialog without multiple tabs.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4003">#4003</a> : Markup on the image dialog was disrupted when removing the border input.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4096">#4096</a> : Editor content area was pushed down in IE RTL quirks.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4112">#4112</a> : [FF] Paste dialog had scrollbars in quirks.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4118">#4118</a> : Dialog dragging was
+ occasionally behaving strangely .</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4077">#4077</a> : The toolbar combos
+ were rendering incorrectly in some languages, like Chinese.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3622">#3622</a> : The toolbar in the v2
+ skin was wrapping improperly in some languages.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4119">#4119</a> : Unable to edit image link with image dialog.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4117">#4117</a> : Fixed dialog error when transforming image into button.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4058">#4058</a> : [FF] wysiwyg mode is sometimes not been activated.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4114">#4114</a> : [IE] RTE + IE6/IE7 Quirks = dialog mispositoned.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4123">#4123</a> : Some dialog buttons were broken in IE7 quirks.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4122">#4122</a> : [IE] The image dialog
+ was being rendered improperly when loading an image with long URL.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4144">#4144</a> : Fixed the white-spaces at the end of <pre> is incorrectly removed.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4143">#4143</a> : Fixed element id is lost when extracting contents from the range.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4007">#4007</a> : [IE] Source area overflow from editor chrome.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4145">#4145</a> : Fixed the on demand
+ ("basic") loading model of the editor.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4139">#4139</a> : Fixed list plugin regression of [3903].</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4147">#4147</a> : Unify style text normalization logic when comparing styles.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4150">#4150</a> : Fixed enlarge list result incorrect at the inner boundary of block.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4164">#4164</a> : Now it is possible to paste text
+ in Source mode even if forcePasteAsPlainText = true.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4129">#4129</a> : [FF]Unable to remove list with Ctrl-A.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4172">#4172</a> : [Safari] The trailing
+ <br> was not been always added to blank lines ending with &nbsp;.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4178">#4178</a> : It's now possible to
+ copy and paste Flash content among different editor instances.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4193">#4193</a> : Automatic font color produced empty span on Firefox 3.5.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4186">#4186</a> : [FF] Fixed First open float panel cause host page scrollbar blinking.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4227">#4227</a> : Fixed destroy editor instance created on textarea which is not within form cause error.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/4240">#4240</a> : Fixed editor name containing hyphen break editor completely.</li>
+ <li><a href="http://dev.ckeditor.com/ticket/3828">#3828</a> : Malformed nested list is now corrected by the parser.</li>
+ </ul>
+ <h3>
+ CKEditor 3.0 RC</h3>
+ <p>
+ Changelog starts at this release.</p>
+ <div id="footer">
+ <hr />
+ <p>
+ CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+ </p>
+ <p id="copy">
+ Copyright © 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+ Knabben. All rights reserved.
+ </p>
+ </div>
+</body>
+</html>
diff --git a/modules_v2/ckeditor/INSTALL.html b/modules_v2/ckeditor/INSTALL.html new file mode 100644 index 0000000000..8cf37f930f --- /dev/null +++ b/modules_v2/ckeditor/INSTALL.html @@ -0,0 +1,92 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Installation Guide - CKEditor</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <style type="text/css">
+ h3
+ {
+ border-bottom: 1px solid #AAAAAA;
+ }
+ pre
+ {
+ background-color: #F9F9F9;
+ border: 1px dashed #2F6FAB;
+ padding: 1em;
+ line-height: 1.1em;
+ }
+ #footer hr
+ {
+ margin: 10px 0 15px 0;
+ height: 1px;
+ border: solid 1px gray;
+ border-bottom: none;
+ }
+ #footer p
+ {
+ margin: 0 10px 10px 10px;
+ float: left;
+ }
+ #footer #copy
+ {
+ float: right;
+ }
+ </style>
+</head>
+<body>
+ <h1>
+ CKEditor Installation Guide</h1>
+ <h3>
+ What's CKEditor?</h3>
+ <p>
+ CKEditor is a text editor to be used inside web pages. It's not a replacement
+ for desktop text editors like Word or OpenOffice, but a component to be used as
+ part of web applications and web sites.</p>
+ <h3>
+ Installation</h3>
+ <p>
+ Installing CKEditor is an easy task. Just follow these simple steps:</p>
+ <ol>
+ <li><strong>Download</strong> the latest version of the editor from our web site: <a
+ href="http://ckeditor.com">http://ckeditor.com</a>. You should have already completed
+ this step, but be sure you have the very latest version.</li>
+ <li><strong>Extract</strong> (decompress) the downloaded file into the root of your
+ web site.</li>
+ </ol>
+ <p>
+ <strong>Note:</strong> CKEditor is by default installed in the "ckeditor"
+ folder. You can place the files in whichever you want though.</p>
+ <h3>
+ Checking Your Installation
+ </h3>
+ <p>
+ The editor comes with a few sample pages that can be used to verify that installation
+ proceeded properly. Take a look at the <a href="_samples">_samples</a> directory.</p>
+ <p>
+ To test your installation, just call the following page at your web site:</p>
+ <pre>
+http://<your site>/<CKEditor installation path>/_samples/index.html
+
+For example:
+http://www.example.com/ckeditor/_samples/index.html</pre>
+ <h3>
+ Documentation</h3>
+ <p>
+ The full editor documentation is available online at the following address:<br />
+ <a href="http://docs.cksource.com/ckeditor">http://docs.cksource.com/ckeditor</a></p>
+ <div id="footer">
+ <hr />
+ <p>
+ CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+ </p>
+ <p id="copy">
+ Copyright © 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+ Knabben. All rights reserved.
+ </p>
+ </div>
+</body>
+</html>
diff --git a/modules_v2/ckeditor/LICENSE.html b/modules_v2/ckeditor/LICENSE.html new file mode 100644 index 0000000000..ecbe06e954 --- /dev/null +++ b/modules_v2/ckeditor/LICENSE.html @@ -0,0 +1,1334 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+== BEGIN TEXT ONLY VERSION ==
+
+Software License Agreement
+==========================
+
+CKEditor - The text editor for Internet - http://ckeditor.com
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+ http://www.gnu.org/licenses/gpl.html
+ (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ http://www.gnu.org/licenses/lgpl.html
+ (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+ http://www.mozilla.org/MPL/MPL-1.1.html
+ (See Appendix C)
+
+You are not required to, but if you want to explicitly declare the
+license you have chosen to be bound to when using, reproducing,
+modifying and distributing this software, just include a text file
+titled "legal.txt" in your version of this software, indicating your
+license choice. In any case, your choice will not restrict any
+recipient of your version of this software to use, reproduce, modify
+and distribute this software under any of the above licenses.
+
+Sources of Intellectual Property Included in CKEditor
+=====================================================
+
+Where not otherwise indicated, all CKEditor content is authored by
+CKSource engineers and consists of CKSource-owned intellectual
+property. In some specific instances, CKEditor will incorporate work
+done by developers outside of CKSource with their express permission.
+
+YUI Test: At _source/tests/yuitest.js can be found part of the source
+code of YUI, which is licensed under the terms of the BSD License
+(http://developer.yahoo.com/yui/license.txt). YUI is Copyright (C)
+2008, Yahoo! Inc.
+
+Trademarks
+==========
+
+CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
+and product names are trademarks, registered trademarks or service
+marks of their respective holders.
+
+Appendix A: The GPL License
+===========================
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software-to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+
+Appendix B: The LGPL License
+============================
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software-to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages-typically libraries-of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+
+Appendix C: The MPL License
+===========================
+
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ===============
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
+
+== END TEXT ONLY VERSION ==
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>License - CKEditor</title>
+</head>
+<body>
+ <h1>
+ Software License Agreement
+ </h1>
+ <p>
+ <strong>CKEditor™</strong> - The text editor for Internet™ - <a href="http://ckeditor.com">
+ http://ckeditor.com</a><br />
+ Copyright © 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved.
+ </p>
+ <p>
+ Licensed under the terms of any of the following licenses at your choice:
+ </p>
+ <ul>
+ <li><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a> Version
+ 2 or later (the "GPL");</li>
+ <li><a href="http://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public License</a>
+ Version 2.1 or later (the "LGPL");</li>
+ <li><a href="http://www.mozilla.org/MPL/MPL-1.1.html">Mozilla Public License</a> Version
+ 1.1 or later (the "MPL").</li>
+ </ul>
+ <p>
+ You are not required to, but if you want to explicitly declare the license you have
+ chosen to be bound to when using, reproducing, modifying and distributing this software,
+ just include a text file titled "LEGAL" in your version of this software, indicating
+ your license choice. In any case, your choice will not restrict any recipient of
+ your version of this software to use, reproduce, modify and distribute this software
+ under any of the above licenses.
+ </p>
+ <h2>
+ Sources of Intellectual Property Included in CKEditor
+ </h2>
+ <p>
+ Where not otherwise indicated, all CKEditor content is authored by CKSource engineers
+ and consists of CKSource-owned intellectual property. In some specific instances,
+ CKEditor will incorporate work done by developers outside of CKSource with their
+ express permission.
+ </p>
+ <p>
+ <a href="http://developer.yahoo.com/yui/yuitest/">YUI Test</a>: At _source/tests/yuitest.js
+ can be found part of the source code of YUI, which is licensed under the terms of
+ the <a href="http://developer.yahoo.com/yui/license.txt">BSD License</a>. YUI is
+ Copyright © 2008, Yahoo! Inc.
+ </p>
+ <h2>
+ Trademarks
+ </h2>
+ <p>
+ CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product
+ names are trademarks, registered trademarks or service marks of their respective
+ holders.
+ </p>
+</body>
+</html>
diff --git a/modules_v2/ckeditor/adapters/jquery.js b/modules_v2/ckeditor/adapters/jquery.js new file mode 100644 index 0000000000..013f3838e2 --- /dev/null +++ b/modules_v2/ckeditor/adapters/jquery.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){CKEDITOR.config.jqueryOverrideVal=typeof CKEDITOR.config.jqueryOverrideVal=='undefined'?true:CKEDITOR.config.jqueryOverrideVal;var a=window.jQuery;if(typeof a=='undefined')return;a.extend(a.fn,{ckeditorGet:function(){var b=this.eq(0).data('ckeditorInstance');if(!b)throw 'CKEditor not yet initialized, use ckeditor() with callback.';return b;},ckeditor:function(b,c){if(!CKEDITOR.env.isCompatible)return this;if(!a.isFunction(b)){var d=c;c=b;b=d;}c=c||{};this.filter('textarea, div, p').each(function(){var e=a(this),f=e.data('ckeditorInstance'),g=e.data('_ckeditorInstanceLock'),h=this;if(f&&!g){if(b)b.apply(f,[this]);}else if(!g){if(c.autoUpdateElement||typeof c.autoUpdateElement=='undefined'&&CKEDITOR.config.autoUpdateElement)c.autoUpdateElementJquery=true;c.autoUpdateElement=false;e.data('_ckeditorInstanceLock',true);f=CKEDITOR.replace(h,c);e.data('ckeditorInstance',f);f.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}i.removeListener('instanceReady',this.callee);j.on('dataReady',function(){e.trigger('setData.ckeditor',[j]);});j.on('getData',function(l){e.trigger('getData.ckeditor',[j,l.data]);},999);j.on('destroy',function(){e.trigger('destroy.ckeditor',[j]);});if(j.config.autoUpdateElementJquery&&e.is('textarea')&&e.parents('form').length){var k=function(){e.ckeditor(function(){j.updateElement();});};e.parents('form').submit(k);e.parents('form').bind('form-pre-serialize',k);e.bind('destroy.ckeditor',function(){e.parents('form').unbind('submit',k);e.parents('form').unbind('form-pre-serialize',k);});}j.on('destroy',function(){e.data('ckeditorInstance',null);});e.data('_ckeditorInstanceLock',null);e.trigger('instanceReady.ckeditor',[j]);if(b)b.apply(j,[h]);},0);},null,null,9999);}else CKEDITOR.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}if(j.element.$==h)if(b)b.apply(j,[h]);},0);},null,null,9999);});return this;}});if(CKEDITOR.config.jqueryOverrideVal)a.fn.val=CKEDITOR.tools.override(a.fn.val,function(b){return function(c,d){var e=typeof c!='undefined',f;this.each(function(){var g=a(this),h=g.data('ckeditorInstance');if(!d&&g.is('textarea')&&h){if(e)h.setData(c);else{f=h.getData();return null;}}else if(e)b.call(g,c);else{f=b.call(g);return null;}return true;});return e?this:f;};});})();
diff --git a/modules_v2/ckeditor/ckeditor.js b/modules_v2/ckeditor/ckeditor.js new file mode 100644 index 0000000000..47577867d2 --- /dev/null +++ b/modules_v2/ckeditor/ckeditor.js @@ -0,0 +1,139 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'ABLC4TW',version:'3.5',revision:'6260',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;if(!d)throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/'&&!/[&?]t=/.test(d))d+=(d.indexOf('?')>=0?'&':'?')+'t='+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();var a=CKEDITOR;if(!a.event){a.event=function(){};a.event.implementOn=function(b){var c=a.event.prototype;for(var d in c){if(b[d]==undefined)b[d]=c[d];}};a.event.prototype=(function(){var b=function(d){var e=d.getPrivate&&d.getPrivate()||d._||(d._={});return e.events||(e.events={});},c=function(d){this.name=d;this.listeners=[];};c.prototype={getListenerIndex:function(d){for(var e=0,f=this.listeners;e<f.length;e++){if(f[e].fn==d)return e;}return-1;}};return{on:function(d,e,f,g,h){var i=b(this),j=i[d]||(i[d]=new c(d));if(j.getListenerIndex(e)<0){var k=j.listeners;if(!f)f=this;if(isNaN(h))h=10;var l=this,m=function(o,p,q,r){var s={name:d,sender:this,editor:o,data:p,listenerData:g,stop:q,cancel:r,removeListener:function(){l.removeListener(d,e);}};e.call(f,s);return s.data;};m.fn=e;m.priority=h;for(var n=k.length-1;n>=0;n--){if(k[n].priority<=h){k.splice(n+1,0,m);return;}}k.unshift(m);}},fire:(function(){var d=false,e=function(){d=true;},f=false,g=function(){f=true;};return function(h,i,j){var k=b(this)[h],l=d,m=f;d=f=false;if(k){var n=k.listeners;if(n.length){n=n.slice(0);for(var o=0;o<n.length;o++){var p=n[o].call(this,j,i,e,g);if(typeof p!='undefined')i=p;if(d||f)break;}}}var q=f||(typeof i=='undefined'?false:i);d=l;f=m;return q;};})(),fireOnce:function(d,e,f){var g=this.fire(d,e,f);delete b(this)[d];return g;},removeListener:function(d,e){var f=b(this)[d];if(f){var g=f.getListenerIndex(e);if(g>=0)f.listeners.splice(g,1);}},hasListeners:function(d){var e=b(this)[d];
+return e&&e.listeners.length>0;}};})();}if(!a.editor){a.ELEMENT_MODE_NONE=0;a.ELEMENT_MODE_REPLACE=1;a.ELEMENT_MODE_APPENDTO=2;a.editor=function(b,c,d,e){var f=this;f._={instanceConfig:b,element:c,data:e};f.elementMode=d||0;a.event.call(f);f._init();};a.editor.replace=function(b,c){var d=b;if(typeof d!='object'){d=document.getElementById(b);if(!d){var e=0,f=document.getElementsByName(b);while((d=f[e++])&&d.tagName.toLowerCase()!='textarea'){}}if(!d)throw '[CKEDITOR.editor.replace] The element with id or name "'+b+'" was not found.';}d.style.visibility='hidden';return new a.editor(c,d,1);};a.editor.appendTo=function(b,c,d){var e=b;if(typeof e!='object'){e=document.getElementById(b);if(!e)throw '[CKEDITOR.editor.appendTo] The element with id "'+b+'" was not found.';}return new a.editor(c,e,2,d);};a.editor.prototype={_init:function(){var b=a.editor._pending||(a.editor._pending=[]);b.push(this);},fire:function(b,c){return a.event.prototype.fire.call(this,b,c,this);},fireOnce:function(b,c){return a.event.prototype.fireOnce.call(this,b,c,this);}};a.event.implementOn(a.editor.prototype,true);}if(!a.env)a.env=(function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,d={ie:/*@cc_on!@*/false,opera:!!c&&c.version,webkit:b.indexOf(' applewebkit/')>-1,air:b.indexOf(' adobeair/')>-1,mac:b.indexOf('macintosh')>-1,quirks:document.compatMode=='BackCompat',mobile:b.indexOf('mobile')>-1,isCustomDomain:function(){if(!this.ie)return false;var g=document.domain,h=window.location.hostname;return g!=h&&g!='['+h+']';}};d.gecko=navigator.product=='Gecko'&&!d.webkit&&!d.opera;var e=0;if(d.ie){e=parseFloat(b.match(/msie (\d+)/)[1]);d.ie8=!!document.documentMode;d.ie8Compat=document.documentMode==8;d.ie7Compat=e==7&&!document.documentMode||document.documentMode==7;d.ie6Compat=e<7||d.quirks;}if(d.gecko){var f=b.match(/rv:([\d\.]+)/);if(f){f=f[1].split('.');e=f[0]*10000+(f[1]||0)*100+ +(f[2]||0);}}if(d.opera)e=parseFloat(c.version());if(d.air)e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]);if(d.webkit)e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]);d.version=e;d.isCompatible=!d.mobile&&(d.ie&&e>=6||d.gecko&&e>=10801||d.opera&&e>=9.5||d.air&&e>=1||d.webkit&&e>=522||false);d.cssClass='cke_browser_'+(d.ie?'ie':d.gecko?'gecko':d.opera?'opera':d.webkit?'webkit':'unknown');if(d.quirks)d.cssClass+=' cke_browser_quirks';if(d.ie){d.cssClass+=' cke_browser_ie'+(d.version<7?'6':d.version>=8?document.documentMode:'7');if(d.quirks)d.cssClass+=' cke_browser_iequirks';}if(d.gecko&&e<10900)d.cssClass+=' cke_browser_gecko18';
+if(d.air)d.cssClass+=' cke_browser_air';return d;})();var b=a.env;var c=b.ie;if(a.status=='unloaded')(function(){a.event.implementOn(a);a.loadFullCore=function(){if(a.status!='basic_ready'){a.loadFullCore._load=1;return;}delete a.loadFullCore;var e=document.createElement('script');e.type='text/javascript';e.src=a.basePath+'ckeditor.js';document.getElementsByTagName('head')[0].appendChild(e);};a.loadFullCoreTimeout=0;a.replaceClass='ckeditor';a.replaceByClassEnabled=1;var d=function(e,f,g,h){if(b.isCompatible){if(a.loadFullCore)a.loadFullCore();var i=g(e,f,h);a.add(i);return i;}return null;};a.replace=function(e,f){return d(e,f,a.editor.replace);};a.appendTo=function(e,f,g){return d(e,f,a.editor.appendTo,g);};a.add=function(e){var f=this._.pending||(this._.pending=[]);f.push(e);};a.replaceAll=function(){var e=document.getElementsByTagName('textarea');for(var f=0;f<e.length;f++){var g=null,h=e[f],i=h.name;if(!h.name&&!h.id)continue;if(typeof arguments[0]=='string'){var j=new RegExp('(?:^|\\s)'+arguments[0]+'(?:$|\\s)');if(!j.test(h.className))continue;}else if(typeof arguments[0]=='function'){g={};if(arguments[0](h,g)===false)continue;}this.replace(h,g);}};(function(){var e=function(){var f=a.loadFullCore,g=a.loadFullCoreTimeout;if(a.replaceByClassEnabled)a.replaceAll(a.replaceClass);a.status='basic_ready';if(f&&f._load)f();else if(g)setTimeout(function(){if(a.loadFullCore)a.loadFullCore();},g*1000);};if(window.addEventListener)window.addEventListener('load',e,false);else if(window.attachEvent)window.attachEvent('onload',e);})();a.status='basic_loaded';})();a.dom={};var d=a.dom;(function(){var e=[];a.on('reset',function(){e=[];});a.tools={arrayCompare:function(f,g){if(!f&&!g)return true;if(!f||!g||f.length!=g.length)return false;for(var h=0;h<f.length;h++){if(f[h]!=g[h])return false;}return true;},clone:function(f){var g;if(f&&f instanceof Array){g=[];for(var h=0;h<f.length;h++)g[h]=this.clone(f[h]);return g;}if(f===null||typeof f!='object'||f instanceof String||f instanceof Number||f instanceof Boolean||f instanceof Date||f instanceof RegExp)return f;g=new f.constructor();for(var i in f){var j=f[i];g[i]=this.clone(j);}return g;},capitalize:function(f){return f.charAt(0).toUpperCase()+f.substring(1).toLowerCase();},extend:function(f){var g=arguments.length,h,i;if(typeof (h=arguments[g-1])=='boolean')g--;else if(typeof (h=arguments[g-2])=='boolean'){i=arguments[g-1];g-=2;}for(var j=1;j<g;j++){var k=arguments[j];for(var l in k){if(h===true||f[l]==undefined)if(!i||l in i)f[l]=k[l];
+}}return f;},prototypedCopy:function(f){var g=function(){};g.prototype=f;return new g();},isArray:function(f){return!!f&&f instanceof Array;},isEmpty:function(f){for(var g in f){if(f.hasOwnProperty(g))return false;}return true;},cssStyleToDomStyle:(function(){var f=document.createElement('div').style,g=typeof f.cssFloat!='undefined'?'cssFloat':typeof f.styleFloat!='undefined'?'styleFloat':'float';return function(h){if(h=='float')return g;else return h.replace(/-./g,function(i){return i.substr(1).toUpperCase();});};})(),buildStyleHtml:function(f){f=[].concat(f);var g,h=[];for(var i=0;i<f.length;i++){g=f[i];if(/@import|[{}]/.test(g))h.push('<style>'+g+'</style>');else h.push('<link type="text/css" rel=stylesheet href="'+g+'">');}return h.join('');},htmlEncode:function(f){var g=function(k){var l=new d.element('span');l.setText(k);return l.getHtml();},h=g('\n').toLowerCase()=='<br>'?function(k){return g(k).replace(/<br>/gi,'\n');}:g,i=g('>')=='>'?function(k){return h(k).replace(/>/g,'>');}:h,j=g(' ')==' '?function(k){return i(k).replace(/ /g,' ');}:i;this.htmlEncode=j;return this.htmlEncode(f);},htmlEncodeAttr:function(f){return f.replace(/"/g,'"').replace(/</g,'<').replace(/>/g,'>');},getNextNumber:(function(){var f=0;return function(){return++f;};})(),getNextId:function(){return 'cke_'+this.getNextNumber();},override:function(f,g){return g(f);},setTimeout:function(f,g,h,i,j){if(!j)j=window;if(!h)h=j;return j.setTimeout(function(){if(i)f.apply(h,[].concat(i));else f.apply(h);},g||0);},trim:(function(){var f=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(f,'');};})(),ltrim:(function(){var f=/^[ \t\n\r]+/g;return function(g){return g.replace(f,'');};})(),rtrim:(function(){var f=/[ \t\n\r]+$/g;return function(g){return g.replace(f,'');};})(),indexOf:Array.prototype.indexOf?function(f,g){return f.indexOf(g);}:function(f,g){for(var h=0,i=f.length;h<i;h++){if(f[h]===g)return h;}return-1;},bind:function(f,g){return function(){return f.apply(g,arguments);};},createClass:function(f){var g=f.$,h=f.base,i=f.privates||f._,j=f.proto,k=f.statics;if(i){var l=g;g=function(){var p=this;var m=p._||(p._={});for(var n in i){var o=i[n];m[n]=typeof o=='function'?a.tools.bind(o,p):o;}l.apply(p,arguments);};}if(h){g.prototype=this.prototypedCopy(h.prototype);g.prototype['constructor']=g;g.prototype.base=function(){this.base=h.prototype.base;h.apply(this,arguments);this.base=arguments.callee;};}if(j)this.extend(g.prototype,j,true);if(k)this.extend(g,k,true);
+return g;},addFunction:function(f,g){return e.push(function(){return f.apply(g||this,arguments);})-1;},removeFunction:function(f){e[f]=null;},callFunction:function(f){var g=e[f];return g&&g.apply(window,Array.prototype.slice.call(arguments,1));},cssLength:(function(){var f=/^\d+(?:\.\d+)?$/;return function(g){return g+(f.test(g)?'px':'');};})(),repeat:function(f,g){return new Array(g+1).join(f);},tryThese:function(){var f;for(var g=0,h=arguments.length;g<h;g++){var i=arguments[g];try{f=i();break;}catch(j){}}return f;},genKey:function(){return Array.prototype.slice.call(arguments).join('-');}};})();var e=a.tools;a.dtd=(function(){var f=e.extend,g={isindex:1,fieldset:1},h={input:1,button:1,select:1,textarea:1,label:1},i=f({a:1},h),j=f({iframe:1},i),k={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1},l={ins:1,del:1,script:1,style:1},m=f({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},l),n=f({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},m),o=f({p:1},n),p=f({iframe:1},n,h),q={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1},r=f({a:1},p),s={tr:1},t={'#':1},u=f({param:1},q),v=f({form:1},g,j,k,o),w={li:1},x={style:1,script:1},y={base:1,link:1,meta:1,title:1},z=f(y,x),A={head:1,body:1},B={html:1},C={address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1};return{$nonBodyContent:f(B,A,y),$block:C,$blockLimit:{body:1,div:1,td:1,th:1,caption:1,form:1},$inline:r,$body:f({script:1,style:1},C),$cdata:{script:1,style:1},$empty:{area:1,base:1,br:1,col:1,hr:1,img:1,input:1,link:1,meta:1,param:1},$listItem:{dd:1,dt:1,li:1},$list:{ul:1,ol:1,dl:1},$nonEditable:{applet:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,script:1,textarea:1,param:1},$removeEmpty:{abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},html:A,head:z,style:t,script:t,body:v,base:{},link:{},meta:{},title:t,col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:v,td:v,br:{},th:v,center:v,kbd:r,button:f(o,k),basefont:{},h5:r,h4:r,samp:r,h6:r,ol:w,h1:r,h3:r,option:t,h2:r,form:f(g,j,k,o),select:{optgroup:1,option:1},font:r,ins:r,menu:w,abbr:r,label:r,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:r,script:t,tfoot:s,cite:r,li:v,input:{},iframe:v,strong:r,textarea:t,noframes:v,big:r,small:r,span:r,hr:{},dt:r,sub:r,optgroup:{option:1},param:{},bdo:r,'var':r,div:v,object:u,sup:r,dd:v,strike:r,area:{},dir:w,map:f({area:1,form:1,p:1},g,l,k),applet:u,dl:{dt:1,dd:1},del:r,isindex:{},fieldset:f({legend:1},q),thead:s,ul:w,acronym:r,b:r,a:p,blockquote:v,caption:r,i:r,u:r,tbody:s,s:r,address:f(j,o),tt:r,legend:r,q:r,pre:f(m,i),p:r,em:r,dfn:r};
+})();var f=a.dtd;d.event=function(g){this.$=g;};d.event.prototype={getKey:function(){return this.$.keyCode||this.$.which;},getKeystroke:function(){var h=this;var g=h.getKey();if(h.$.ctrlKey||h.$.metaKey)g+=1000;if(h.$.shiftKey)g+=2000;if(h.$.altKey)g+=4000;return g;},preventDefault:function(g){var h=this.$;if(h.preventDefault)h.preventDefault();else h.returnValue=false;if(g)this.stopPropagation();},stopPropagation:function(){var g=this.$;if(g.stopPropagation)g.stopPropagation();else g.cancelBubble=true;},getTarget:function(){var g=this.$.target||this.$.srcElement;return g?new d.node(g):null;}};a.CTRL=1000;a.SHIFT=2000;a.ALT=4000;d.domObject=function(g){if(g)this.$=g;};d.domObject.prototype=(function(){var g=function(h,i){return function(j){if(typeof a!='undefined')h.fire(i,new d.event(j));};};return{getPrivate:function(){var h;if(!(h=this.getCustomData('_')))this.setCustomData('_',h={});return h;},on:function(h){var k=this;var i=k.getCustomData('_cke_nativeListeners');if(!i){i={};k.setCustomData('_cke_nativeListeners',i);}if(!i[h]){var j=i[h]=g(k,h);if(k.$.attachEvent)k.$.attachEvent('on'+h,j);else if(k.$.addEventListener)k.$.addEventListener(h,j,!!a.event.useCapture);}return a.event.prototype.on.apply(k,arguments);},removeListener:function(h){var k=this;a.event.prototype.removeListener.apply(k,arguments);if(!k.hasListeners(h)){var i=k.getCustomData('_cke_nativeListeners'),j=i&&i[h];if(j){if(k.$.detachEvent)k.$.detachEvent('on'+h,j);else if(k.$.removeEventListener)k.$.removeEventListener(h,j,false);delete i[h];}}},removeAllListeners:function(){var k=this;var h=k.getCustomData('_cke_nativeListeners');for(var i in h){var j=h[i];if(k.$.detachEvent)k.$.detachEvent('on'+i,j);else if(k.$.removeEventListener)k.$.removeEventListener(i,j,false);delete h[i];}}};})();(function(g){var h={};a.on('reset',function(){h={};});g.equals=function(i){return i&&i.$===this.$;};g.setCustomData=function(i,j){var k=this.getUniqueId(),l=h[k]||(h[k]={});l[i]=j;return this;};g.getCustomData=function(i){var j=this.$['data-cke-expando'],k=j&&h[j];return k&&k[i];};g.removeCustomData=function(i){var j=this.$['data-cke-expando'],k=j&&h[j],l=k&&k[i];if(typeof l!='undefined')delete k[i];return l||null;};g.clearCustomData=function(){this.removeAllListeners();var i=this.$['data-cke-expando'];i&&delete h[i];};g.getUniqueId=function(){return this.$['data-cke-expando']||(this.$['data-cke-expando']=e.getNextNumber());};a.event.implementOn(g);})(d.domObject.prototype);d.window=function(g){d.domObject.call(this,g);
+};d.window.prototype=new d.domObject();e.extend(d.window.prototype,{focus:function(){if(b.webkit&&this.$.parent)this.$.parent.focus();this.$.focus();},getViewPaneSize:function(){var g=this.$.document,h=g.compatMode=='CSS1Compat';return{width:(h?g.documentElement.clientWidth:g.body.clientWidth)||0,height:(h?g.documentElement.clientHeight:g.body.clientHeight)||0};},getScrollPosition:function(){var g=this.$;if('pageXOffset' in g)return{x:g.pageXOffset||0,y:g.pageYOffset||0};else{var h=g.document;return{x:h.documentElement.scrollLeft||h.body.scrollLeft||0,y:h.documentElement.scrollTop||h.body.scrollTop||0};}}});d.document=function(g){d.domObject.call(this,g);};var g=d.document;g.prototype=new d.domObject();e.extend(g.prototype,{appendStyleSheet:function(h){if(this.$.createStyleSheet)this.$.createStyleSheet(h);else{var i=new d.element('link');i.setAttributes({rel:'stylesheet',type:'text/css',href:h});this.getHead().append(i);}},appendStyleText:function(h){var k=this;if(k.$.createStyleSheet){var i=k.$.createStyleSheet('');i.cssText=h;}else{var j=new d.element('style',k);j.append(new d.text(h,k));k.getHead().append(j);}},createElement:function(h,i){var j=new d.element(h,this);if(i){if(i.attributes)j.setAttributes(i.attributes);if(i.styles)j.setStyles(i.styles);}return j;},createText:function(h){return new d.text(h,this);},focus:function(){this.getWindow().focus();},getById:function(h){var i=this.$.getElementById(h);return i?new d.element(i):null;},getByAddress:function(h,i){var j=this.$.documentElement;for(var k=0;j&&k<h.length;k++){var l=h[k];if(!i){j=j.childNodes[l];continue;}var m=-1;for(var n=0;n<j.childNodes.length;n++){var o=j.childNodes[n];if(i===true&&o.nodeType==3&&o.previousSibling&&o.previousSibling.nodeType==3)continue;m++;if(m==l){j=o;break;}}}return j?new d.node(j):null;},getElementsByTag:function(h,i){if(!(c&&!(document.documentMode>8))&&i)h=i+':'+h;return new d.nodeList(this.$.getElementsByTagName(h));},getHead:function(){var h=this.$.getElementsByTagName('head')[0];if(!h)h=this.getDocumentElement().append(new d.element('head'),true);else h=new d.element(h);return(this.getHead=function(){return h;})();},getBody:function(){var h=new d.element(this.$.body);return(this.getBody=function(){return h;})();},getDocumentElement:function(){var h=new d.element(this.$.documentElement);return(this.getDocumentElement=function(){return h;})();},getWindow:function(){var h=new d.window(this.$.parentWindow||this.$.defaultView);return(this.getWindow=function(){return h;
+})();},write:function(h){var i=this;i.$.open('text/html','replace');b.isCustomDomain()&&(i.$.domain=document.domain);i.$.write(h);i.$.close();}});d.node=function(h){if(h){switch(h.nodeType){case 9:return new g(h);case 1:return new d.element(h);case 3:return new d.text(h);}d.domObject.call(this,h);}return this;};d.node.prototype=new d.domObject();a.NODE_ELEMENT=1;a.NODE_DOCUMENT=9;a.NODE_TEXT=3;a.NODE_COMMENT=8;a.NODE_DOCUMENT_FRAGMENT=11;a.POSITION_IDENTICAL=0;a.POSITION_DISCONNECTED=1;a.POSITION_FOLLOWING=2;a.POSITION_PRECEDING=4;a.POSITION_IS_CONTAINED=8;a.POSITION_CONTAINS=16;e.extend(d.node.prototype,{appendTo:function(h,i){h.append(this,i);return h;},clone:function(h,i){var j=this.$.cloneNode(h),k=function(l){if(l.nodeType!=1)return;if(!i)l.removeAttribute('id',false);l.removeAttribute('data-cke-expando',false);if(h){var m=l.childNodes;for(var n=0;n<m.length;n++)k(m[n]);}};k(j);return new d.node(j);},hasPrevious:function(){return!!this.$.previousSibling;},hasNext:function(){return!!this.$.nextSibling;},insertAfter:function(h){h.$.parentNode.insertBefore(this.$,h.$.nextSibling);return h;},insertBefore:function(h){h.$.parentNode.insertBefore(this.$,h.$);return h;},insertBeforeMe:function(h){this.$.parentNode.insertBefore(h.$,this.$);return h;},getAddress:function(h){var i=[],j=this.getDocument().$.documentElement,k=this.$;while(k&&k!=j){var l=k.parentNode,m=-1;if(l){for(var n=0;n<l.childNodes.length;n++){var o=l.childNodes[n];if(h&&o.nodeType==3&&o.previousSibling&&o.previousSibling.nodeType==3)continue;m++;if(o==k)break;}i.unshift(m);}k=l;}return i;},getDocument:function(){return new g(this.$.ownerDocument||this.$.parentNode.ownerDocument);},getIndex:function(){var h=this.$,i=h.parentNode&&h.parentNode.firstChild,j=-1;while(i){j++;if(i==h)return j;i=i.nextSibling;}return-1;},getNextSourceNode:function(h,i,j){if(j&&!j.call){var k=j;j=function(n){return!n.equals(k);};}var l=!h&&this.getFirst&&this.getFirst(),m;if(!l){if(this.type==1&&j&&j(this,true)===false)return null;l=this.getNext();}while(!l&&(m=(m||this).getParent())){if(j&&j(m,true)===false)return null;l=m.getNext();}if(!l)return null;if(j&&j(l)===false)return null;if(i&&i!=l.type)return l.getNextSourceNode(false,i,j);return l;},getPreviousSourceNode:function(h,i,j){if(j&&!j.call){var k=j;j=function(n){return!n.equals(k);};}var l=!h&&this.getLast&&this.getLast(),m;if(!l){if(this.type==1&&j&&j(this,true)===false)return null;l=this.getPrevious();}while(!l&&(m=(m||this).getParent())){if(j&&j(m,true)===false)return null;
+l=m.getPrevious();}if(!l)return null;if(j&&j(l)===false)return null;if(i&&l.type!=i)return l.getPreviousSourceNode(false,i,j);return l;},getPrevious:function(h){var i=this.$,j;do{i=i.previousSibling;j=i&&new d.node(i);}while(j&&h&&!h(j))return j;},getNext:function(h){var i=this.$,j;do{i=i.nextSibling;j=i&&new d.node(i);}while(j&&h&&!h(j))return j;},getParent:function(){var h=this.$.parentNode;return h&&h.nodeType==1?new d.node(h):null;},getParents:function(h){var i=this,j=[];do j[h?'push':'unshift'](i);while(i=i.getParent())return j;},getCommonAncestor:function(h){var j=this;if(h.equals(j))return j;if(h.contains&&h.contains(j))return h;var i=j.contains?j:j.getParent();do{if(i.contains(h))return i;}while(i=i.getParent())return null;},getPosition:function(h){var i=this.$,j=h.$;if(i.compareDocumentPosition)return i.compareDocumentPosition(j);if(i==j)return 0;if(this.type==1&&h.type==1){if(i.contains){if(i.contains(j))return 16+4;if(j.contains(i))return 8+2;}if('sourceIndex' in i)return i.sourceIndex<0||j.sourceIndex<0?1:i.sourceIndex<j.sourceIndex?4:2;}var k=this.getAddress(),l=h.getAddress(),m=Math.min(k.length,l.length);for(var n=0;n<=m-1;n++){if(k[n]!=l[n]){if(n<m)return k[n]<l[n]?4:2;break;}}return k.length<l.length?16+4:8+2;},getAscendant:function(h,i){var j=this.$;if(!i)j=j.parentNode;while(j){if(j.nodeName&&j.nodeName.toLowerCase()==h)return new d.node(j);j=j.parentNode;}return null;},hasAscendant:function(h,i){var j=this.$;if(!i)j=j.parentNode;while(j){if(j.nodeName&&j.nodeName.toLowerCase()==h)return true;j=j.parentNode;}return false;},move:function(h,i){h.append(this.remove(),i);},remove:function(h){var i=this.$,j=i.parentNode;if(j){if(h)for(var k;k=i.firstChild;)j.insertBefore(i.removeChild(k),i);j.removeChild(i);}return this;},replace:function(h){this.insertBefore(h);h.remove();},trim:function(){this.ltrim();this.rtrim();},ltrim:function(){var k=this;var h;while(k.getFirst&&(h=k.getFirst())){if(h.type==3){var i=e.ltrim(h.getText()),j=h.getLength();if(!i){h.remove();continue;}else if(i.length<j){h.split(j-i.length);k.$.removeChild(k.$.firstChild);}}break;}},rtrim:function(){var k=this;var h;while(k.getLast&&(h=k.getLast())){if(h.type==3){var i=e.rtrim(h.getText()),j=h.getLength();if(!i){h.remove();continue;}else if(i.length<j){h.split(i.length);k.$.lastChild.parentNode.removeChild(k.$.lastChild);}}break;}if(!c&&!b.opera){h=k.$.lastChild;if(h&&h.type==1&&h.nodeName.toLowerCase()=='br')h.parentNode.removeChild(h);}},isReadOnly:function(){var h=this;while(h){if(h.type==1){if(h.is('body')||h.getCustomData('_cke_notReadOnly'))break;
+if(h.getAttribute('contentEditable')=='false')return h;else if(h.getAttribute('contentEditable')=='true')break;}h=h.getParent();}return false;}});d.nodeList=function(h){this.$=h;};d.nodeList.prototype={count:function(){return this.$.length;},getItem:function(h){var i=this.$[h];return i?new d.node(i):null;}};d.element=function(h,i){if(typeof h=='string')h=(i?i.$:document).createElement(h);d.domObject.call(this,h);};var h=d.element;h.get=function(i){return i&&(i.$?i:new h(i));};h.prototype=new d.node();h.createFromHtml=function(i,j){var k=new h('div',j);k.setHtml(i);return k.getFirst().remove();};h.setMarker=function(i,j,k,l){var m=j.getCustomData('list_marker_id')||j.setCustomData('list_marker_id',e.getNextNumber()).getCustomData('list_marker_id'),n=j.getCustomData('list_marker_names')||j.setCustomData('list_marker_names',{}).getCustomData('list_marker_names');i[m]=j;n[k]=1;return j.setCustomData(k,l);};h.clearAllMarkers=function(i){for(var j in i)h.clearMarkers(i,i[j],1);};h.clearMarkers=function(i,j,k){var l=j.getCustomData('list_marker_names'),m=j.getCustomData('list_marker_id');for(var n in l)j.removeCustomData(n);j.removeCustomData('list_marker_names');if(k){j.removeCustomData('list_marker_id');delete i[m];}};e.extend(h.prototype,{type:1,addClass:function(i){var j=this.$.className;if(j){var k=new RegExp('(?:^|\\s)'+i+'(?:\\s|$)','');if(!k.test(j))j+=' '+i;}this.$.className=j||i;},removeClass:function(i){var j=this.getAttribute('class');if(j){var k=new RegExp('(?:^|\\s+)'+i+'(?=\\s|$)','i');if(k.test(j)){j=j.replace(k,'').replace(/^\s+/,'');if(j)this.setAttribute('class',j);else this.removeAttribute('class');}}},hasClass:function(i){var j=new RegExp('(?:^|\\s+)'+i+'(?=\\s|$)','');return j.test(this.getAttribute('class'));},append:function(i,j){var k=this;if(typeof i=='string')i=k.getDocument().createElement(i);if(j)k.$.insertBefore(i.$,k.$.firstChild);else k.$.appendChild(i.$);return i;},appendHtml:function(i){var k=this;if(!k.$.childNodes.length)k.setHtml(i);else{var j=new h('div',k.getDocument());j.setHtml(i);j.moveChildren(k);}},appendText:function(i){if(this.$.text!=undefined)this.$.text+=i;else this.append(new d.text(i));},appendBogus:function(){var k=this;var i=k.getLast();while(i&&i.type==3&&!e.rtrim(i.getText()))i=i.getPrevious();if(!i||!i.is||!i.is('br')){var j=b.opera?k.getDocument().createText(''):k.getDocument().createElement('br');b.gecko&&j.setAttribute('type','_moz');k.append(j);}},breakParent:function(i){var l=this;var j=new d.range(l.getDocument());
+j.setStartAfter(l);j.setEndAfter(i);var k=j.extractContents();j.insertNode(l.remove());k.insertAfterNode(l);},contains:c||b.webkit?function(i){var j=this.$;return i.type!=1?j.contains(i.getParent().$):j!=i.$&&j.contains(i.$);}:function(i){return!!(this.$.compareDocumentPosition(i.$)&16);},focus:(function(){function i(){try{this.$.focus();}catch(j){}};return function(j){if(j)e.setTimeout(i,100,this);else i.call(this);};})(),getHtml:function(){var i=this.$.innerHTML;return c?i.replace(/<\?[^>]*>/g,''):i;},getOuterHtml:function(){var j=this;if(j.$.outerHTML)return j.$.outerHTML.replace(/<\?[^>]*>/,'');var i=j.$.ownerDocument.createElement('div');i.appendChild(j.$.cloneNode(true));return i.innerHTML;},setHtml:function(i){return this.$.innerHTML=i;},setText:function(i){h.prototype.setText=this.$.innerText!=undefined?function(j){return this.$.innerText=j;}:function(j){return this.$.textContent=j;};return this.setText(i);},getAttribute:(function(){var i=function(j){return this.$.getAttribute(j,2);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){var n=this;switch(j){case 'class':j='className';break;case 'tabindex':var k=i.call(n,j);if(k!==0&&n.$.tabIndex===0)k=null;return k;break;case 'checked':var l=n.$.attributes.getNamedItem(j),m=l.specified?l.nodeValue:n.$.checked;return m?'checked':null;case 'hspace':return n.$.hspace;case 'style':return n.$.style.cssText;}return i.call(n,j);};else return i;})(),getChildren:function(){return new d.nodeList(this.$.childNodes);},getComputedStyle:c?function(i){return this.$.currentStyle[e.cssStyleToDomStyle(i)];}:function(i){return this.getWindow().$.getComputedStyle(this.$,'').getPropertyValue(i);},getDtd:function(){var i=f[this.getName()];this.getDtd=function(){return i;};return i;},getElementsByTag:g.prototype.getElementsByTag,getTabIndex:c?function(){var i=this.$.tabIndex;if(i===0&&!f.$tabIndex[this.getName()]&&parseInt(this.getAttribute('tabindex'),10)!==0)i=-1;return i;}:b.webkit?function(){var i=this.$.tabIndex;if(i==undefined){i=parseInt(this.getAttribute('tabindex'),10);if(isNaN(i))i=-1;}return i;}:function(){return this.$.tabIndex;},getText:function(){return this.$.textContent||this.$.innerText||'';},getWindow:function(){return this.getDocument().getWindow();},getId:function(){return this.$.id||null;},getNameAtt:function(){return this.$.name||null;},getName:function(){var i=this.$.nodeName.toLowerCase();if(c&&!(document.documentMode>8)){var j=this.$.scopeName;if(j!='HTML')i=j.toLowerCase()+':'+i;}return(this.getName=function(){return i;
+})();},getValue:function(){return this.$.value;},getFirst:function(i){var j=this.$.firstChild,k=j&&new d.node(j);if(k&&i&&!i(k))k=k.getNext(i);return k;},getLast:function(i){var j=this.$.lastChild,k=j&&new d.node(j);if(k&&i&&!i(k))k=k.getPrevious(i);return k;},getStyle:function(i){return this.$.style[e.cssStyleToDomStyle(i)];},is:function(){var i=this.getName();for(var j=0;j<arguments.length;j++){if(arguments[j]==i)return true;}return false;},isEditable:function(){var i=this.getName(),j=!f.$nonEditable[i]&&(f[i]||f.span);return j&&j['#'];},isIdentical:function(i){if(this.getName()!=i.getName())return false;var j=this.$.attributes,k=i.$.attributes,l=j.length,m=k.length;for(var n=0;n<l;n++){var o=j[n];if(o.nodeName=='_moz_dirty')continue;if((!c||o.specified&&o.nodeName!='data-cke-expando')&&o.nodeValue!=i.getAttribute(o.nodeName))return false;}if(c)for(n=0;n<m;n++){o=k[n];if(o.specified&&o.nodeName!='data-cke-expando'&&o.nodeValue!=this.getAttribute(o.nodeName))return false;}return true;},isVisible:function(){var i=!!this.$.offsetHeight&&this.getComputedStyle('visibility')!='hidden',j,k;if(i&&(b.webkit||b.opera)){j=this.getWindow();if(!j.equals(a.document.getWindow())&&(k=j.$.frameElement))i=new h(k).isVisible();}return i;},isEmptyInlineRemoveable:function(){if(!f.$removeEmpty[this.getName()])return false;var i=this.getChildren();for(var j=0,k=i.count();j<k;j++){var l=i.getItem(j);if(l.type==1&&l.data('cke-bookmark'))continue;if(l.type==1&&!l.isEmptyInlineRemoveable()||l.type==3&&e.trim(l.getText()))return false;}return true;},hasAttributes:c&&(b.ie7Compat||b.ie6Compat)?function(){var i=this.$.attributes;for(var j=0;j<i.length;j++){var k=i[j];switch(k.nodeName){case 'class':if(this.getAttribute('class'))return true;case 'data-cke-expando':continue;default:if(k.specified)return true;}}return false;}:function(){var i=this.$.attributes,j=i.length,k={'data-cke-expando':1,_moz_dirty:1};return j>0&&(j>2||!k[i[0].nodeName]||j==2&&!k[i[1].nodeName]);},hasAttribute:function(i){var j=this.$.attributes.getNamedItem(i);return!!(j&&j.specified);},hide:function(){this.setStyle('display','none');},moveChildren:function(i,j){var k=this.$;i=i.$;if(k==i)return;var l;if(j)while(l=k.lastChild)i.insertBefore(k.removeChild(l),i.firstChild);else while(l=k.firstChild)i.appendChild(k.removeChild(l));},mergeSiblings:(function(){function i(j,k,l){if(k&&k.type==1){var m=[];while(k.data('cke-bookmark')||k.isEmptyInlineRemoveable()){m.push(k);k=l?k.getNext():k.getPrevious();if(!k||k.type!=1)return;
+}if(j.isIdentical(k)){var n=l?j.getLast():j.getFirst();while(m.length)m.shift().move(j,!l);k.moveChildren(j,!l);k.remove();if(n&&n.type==1)n.mergeSiblings();}}};return function(){var j=this;if(!(f.$removeEmpty[j.getName()]||j.is('a')))return;i(j,j.getNext(),true);i(j,j.getPrevious());};})(),show:function(){this.setStyles({display:'',visibility:''});},setAttribute:(function(){var i=function(j,k){this.$.setAttribute(j,k);return this;};if(c&&(b.ie7Compat||b.ie6Compat))return function(j,k){var l=this;if(j=='class')l.$.className=k;else if(j=='style')l.$.style.cssText=k;else if(j=='tabindex')l.$.tabIndex=k;else if(j=='checked')l.$.checked=k;else i.apply(l,arguments);return l;};else return i;})(),setAttributes:function(i){for(var j in i)this.setAttribute(j,i[j]);return this;},setValue:function(i){this.$.value=i;return this;},removeAttribute:(function(){var i=function(j){this.$.removeAttribute(j);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){if(j=='class')j='className';else if(j=='tabindex')j='tabIndex';i.call(this,j);};else return i;})(),removeAttributes:function(i){if(e.isArray(i))for(var j=0;j<i.length;j++)this.removeAttribute(i[j]);else for(var k in i)i.hasOwnProperty(k)&&this.removeAttribute(k);},removeStyle:function(i){var j=this;j.setStyle(i,'');if(j.$.style.removeAttribute)j.$.style.removeAttribute(e.cssStyleToDomStyle(i));if(!j.$.style.cssText)j.removeAttribute('style');},setStyle:function(i,j){this.$.style[e.cssStyleToDomStyle(i)]=j;return this;},setStyles:function(i){for(var j in i)this.setStyle(j,i[j]);return this;},setOpacity:function(i){if(c){i=Math.round(i*100);this.setStyle('filter',i>=100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+i+')');}else this.setStyle('opacity',i);},unselectable:b.gecko?function(){this.$.style.MozUserSelect='none';this.on('dragstart',function(i){i.data.preventDefault();});}:b.webkit?function(){this.$.style.KhtmlUserSelect='none';this.on('dragstart',function(i){i.data.preventDefault();});}:function(){if(c||b.opera){var i=this.$,j,k=0;i.unselectable='on';while(j=i.all[k++])switch(j.tagName.toLowerCase()){case 'iframe':case 'textarea':case 'input':case 'select':break;default:j.unselectable='on';}}},getPositionedAncestor:function(){var i=this;while(i.getName()!='html'){if(i.getComputedStyle('position')!='static')return i;i=i.getParent();}return null;},getDocumentPosition:function(i){var D=this;var j=0,k=0,l=D.getDocument().getBody(),m=D.getDocument().$.compatMode=='BackCompat',n=D.getDocument();if(document.documentElement.getBoundingClientRect){var o=D.$.getBoundingClientRect(),p=n.$,q=p.documentElement,r=q.clientTop||l.$.clientTop||0,s=q.clientLeft||l.$.clientLeft||0,t=true;
+if(c){var u=n.getDocumentElement().contains(D),v=n.getBody().contains(D);t=m&&v||!m&&u;}if(t){j=o.left+(!m&&q.scrollLeft||l.$.scrollLeft);j-=s;k=o.top+(!m&&q.scrollTop||l.$.scrollTop);k-=r;}}else{var w=D,x=null,y;while(w&&!(w.getName()=='body'||w.getName()=='html')){j+=w.$.offsetLeft-w.$.scrollLeft;k+=w.$.offsetTop-w.$.scrollTop;if(!w.equals(D)){j+=w.$.clientLeft||0;k+=w.$.clientTop||0;}var z=x;while(z&&!z.equals(w)){j-=z.$.scrollLeft;k-=z.$.scrollTop;z=z.getParent();}x=w;w=(y=w.$.offsetParent)?new h(y):null;}}if(i){var A=D.getWindow(),B=i.getWindow();if(!A.equals(B)&&A.$.frameElement){var C=new h(A.$.frameElement).getDocumentPosition(i);j+=C.x;k+=C.y;}}if(!document.documentElement.getBoundingClientRect)if(b.gecko&&!m){j+=D.$.clientLeft?1:0;k+=D.$.clientTop?1:0;}return{x:j,y:k};},scrollIntoView:function(i){var o=this;var j=o.getWindow(),k=j.getViewPaneSize().height,l=k*-1;if(i)l+=k;else{l+=o.$.offsetHeight||0;l+=parseInt(o.getComputedStyle('marginBottom')||0,10)||0;}var m=o.getDocumentPosition();l+=m.y;l=l<0?0:l;var n=j.getScrollPosition().y;if(l>n||l<n-k)j.$.scrollTo(0,l);},setState:function(i){var j=this;switch(i){case 1:j.addClass('cke_on');j.removeClass('cke_off');j.removeClass('cke_disabled');break;case 0:j.addClass('cke_disabled');j.removeClass('cke_off');j.removeClass('cke_on');break;default:j.addClass('cke_off');j.removeClass('cke_on');j.removeClass('cke_disabled');break;}},getFrameDocument:function(){var i=this.$;try{i.contentWindow.document;}catch(j){i.src=i.src;if(c&&b.version<7)window.showModalDialog('javascript:document.write("<script>window.setTimeout(function(){window.close();},50);</script>")');}return i&&new g(i.contentWindow.document);},copyAttributes:function(i,j){var p=this;var k=p.$.attributes;j=j||{};for(var l=0;l<k.length;l++){var m=k[l],n=m.nodeName.toLowerCase(),o;if(n in j)continue;if(n=='checked'&&(o=p.getAttribute(n)))i.setAttribute(n,o);else if(m.specified||c&&m.nodeValue&&n=='value'){o=p.getAttribute(n);if(o===null)o=m.nodeValue;i.setAttribute(n,o);}}if(p.$.style.cssText!=='')i.$.style.cssText=p.$.style.cssText;},renameNode:function(i){var l=this;if(l.getName()==i)return;var j=l.getDocument(),k=new h(i,j);l.copyAttributes(k);l.moveChildren(k);l.getParent()&&l.$.parentNode.replaceChild(k.$,l.$);k.$['data-cke-expando']=l.$['data-cke-expando'];l.$=k.$;},getChild:function(i){var j=this.$;if(!i.slice)j=j.childNodes[i];else while(i.length>0&&j)j=j.childNodes[i.shift()];return j?new d.node(j):null;},getChildCount:function(){return this.$.childNodes.length;
+},disableContextMenu:function(){this.on('contextmenu',function(i){if(!i.data.getTarget().hasClass('cke_enable_context_menu'))i.data.preventDefault();});},getDirection:function(i){return i?this.getComputedStyle('direction'):this.getStyle('direction')||this.getAttribute('dir');},data:function(i,j){i='data-'+i;if(j===undefined)return this.getAttribute(i);else if(j===false)this.removeAttribute(i);else this.setAttribute(i,j);}});(function(){var i={width:['border-left-width','border-right-width','padding-left','padding-right'],height:['border-top-width','border-bottom-width','padding-top','padding-bottom']};function j(k){var l=0;for(var m=0,n=i[k].length;m<n;m++)l+=parseInt(this.getComputedStyle(i[k][m])||0,10)||0;return l;};h.prototype.setSize=function(k,l,m){if(typeof l=='number'){if(m&&!(c&&b.quirks))l-=j.call(this,k);this.setStyle(k,l+'px');}};h.prototype.getSize=function(k,l){var m=Math.max(this.$['offset'+e.capitalize(k)],this.$['client'+e.capitalize(k)])||0;if(l)m-=j.call(this,k);return m;};})();a.command=function(i,j){this.uiItems=[];this.exec=function(k){if(this.state==0)return false;if(this.editorFocus)i.focus();return j.exec.call(this,i,k)!==false;};e.extend(this,j,{modes:{wysiwyg:1},editorFocus:1,state:2});a.event.call(this);};a.command.prototype={enable:function(){var i=this;if(i.state==0)i.setState(!i.preserveState||typeof i.previousState=='undefined'?2:i.previousState);},disable:function(){this.setState(0);},setState:function(i){var j=this;if(j.state==i)return false;j.previousState=j.state;j.state=i;j.fire('state');return true;},toggleState:function(){var i=this;if(i.state==2)i.setState(1);else if(i.state==1)i.setState(2);}};a.event.implementOn(a.command.prototype,true);a.ENTER_P=1;a.ENTER_BR=2;a.ENTER_DIV=3;a.config={customConfig:'config.js',autoUpdateElement:true,baseHref:'',contentsCss:a.basePath+'contents.css',contentsLangDirection:'ui',contentsLanguage:'',language:'',defaultLanguage:'en',enterMode:1,forceEnterMode:false,shiftEnterMode:2,corePlugins:'',docType:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',bodyId:'',bodyClass:'',fullPage:false,height:200,plugins:'about,a11yhelp,basicstyles,bidi,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,dialogadvtab,div,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,iframe,image,indent,justify,keystrokes,link,list,liststyle,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,showborders,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',extraPlugins:'',removePlugins:'',protectedSource:[],tabIndex:0,theme:'default',skin:'kama',width:'',baseFloatZIndex:10000};
+var i=a.config;a.focusManager=function(j){if(j.focusManager)return j.focusManager;this.hasFocus=false;this._={editor:j};return this;};a.focusManager.prototype={focus:function(){var k=this;if(k._.timer)clearTimeout(k._.timer);if(!k.hasFocus){if(a.currentInstance)a.currentInstance.focusManager.forceBlur();var j=k._.editor;j.container.getChild(1).addClass('cke_focus');k.hasFocus=true;j.fire('focus');}},blur:function(){var j=this;if(j._.timer)clearTimeout(j._.timer);j._.timer=setTimeout(function(){delete j._.timer;j.forceBlur();},100);},forceBlur:function(){if(this.hasFocus){var j=this._.editor;j.container.getChild(1).removeClass('cke_focus');this.hasFocus=false;j.fire('blur');}}};(function(){var j={};a.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,'en-au':1,'en-ca':1,'en-gb':1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,'fr-ca':1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,is:1,it:1,ja:1,km:1,ko:1,lt:1,lv:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,'pt-br':1,pt:1,ro:1,ru:1,sk:1,sl:1,'sr-latn':1,sr:1,sv:1,th:1,tr:1,uk:1,vi:1,'zh-cn':1,zh:1},load:function(k,l,m){if(!k||!a.lang.languages[k])k=this.detect(l,k);if(!this[k])a.scriptLoader.load(a.getUrl('lang/'+k+'.js'),function(){m(k,this[k]);},this);else m(k,this[k]);},detect:function(k,l){var m=this.languages;l=l||navigator.userLanguage||navigator.language;var n=l.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),o=n[1],p=n[2];if(m[o+'-'+p])o=o+'-'+p;else if(!m[o])o=null;a.lang.detect=o?function(){return o;}:function(q){return q;};return o||k;}};})();a.scriptLoader=(function(){var j={},k={};return{load:function(l,m,n,o,p){var q=typeof l=='string';if(q)l=[l];if(!n)n=a;var r=l.length,s=[],t=[],u=function(z){if(m)if(q)m.call(n,z);else m.call(n,s,t);};if(r===0){u(true);return;}var v=function(z,A){(A?s:t).push(z);if(--r<=0){p&&a.document.getDocumentElement().removeStyle('cursor');u(A);}},w=function(z,A){j[z]=1;var B=k[z];delete k[z];for(var C=0;C<B.length;C++)B[C](z,A);},x=function(z){if(o!==true&&j[z]){v(z,true);return;}var A=k[z]||(k[z]=[]);A.push(v);if(A.length>1)return;var B=new h('script');B.setAttributes({type:'text/javascript',src:z});if(m)if(c)B.$.onreadystatechange=function(){if(B.$.readyState=='loaded'||B.$.readyState=='complete'){B.$.onreadystatechange=null;w(z,true);}};else{B.$.onload=function(){setTimeout(function(){w(z,true);},0);};B.$.onerror=function(){w(z,false);};}B.appendTo(a.document.getHead());};p&&a.document.getDocumentElement().setStyle('cursor','wait');for(var y=0;y<r;y++)x(l[y]);},loadCode:function(l){var m=new h('script');
+m.setAttribute('type','text/javascript');m.appendText(l);m.appendTo(a.document.getHead());}};})();a.resourceManager=function(j,k){var l=this;l.basePath=j;l.fileName=k;l.registered={};l.loaded={};l.externals={};l._={waitingList:{}};};a.resourceManager.prototype={add:function(j,k){if(this.registered[j])throw '[CKEDITOR.resourceManager.add] The resource name "'+j+'" is already registered.';a.fire(j+e.capitalize(this.fileName)+'Ready',this.registered[j]=k||{});},get:function(j){return this.registered[j]||null;},getPath:function(j){var k=this.externals[j];return a.getUrl(k&&k.dir||this.basePath+j+'/');},getFilePath:function(j){var k=this.externals[j];return a.getUrl(this.getPath(j)+(k&&typeof k.file=='string'?k.file:this.fileName+'.js'));},addExternal:function(j,k,l){j=j.split(',');for(var m=0;m<j.length;m++){var n=j[m];this.externals[n]={dir:k,file:l};}},load:function(j,k,l){if(!e.isArray(j))j=j?[j]:[];var m=this.loaded,n=this.registered,o=[],p={},q={};for(var r=0;r<j.length;r++){var s=j[r];if(!s)continue;if(!m[s]&&!n[s]){var t=this.getFilePath(s);o.push(t);if(!(t in p))p[t]=[];p[t].push(s);}else q[s]=this.get(s);}a.scriptLoader.load(o,function(u,v){if(v.length)throw '[CKEDITOR.resourceManager.load] Resource name "'+p[v[0]].join(',')+'" was not found at "'+v[0]+'".';for(var w=0;w<u.length;w++){var x=p[u[w]];for(var y=0;y<x.length;y++){var z=x[y];q[z]=this.get(z);m[z]=1;}}k.call(l,q);},this);}};a.plugins=new a.resourceManager('plugins/','plugin');var j=a.plugins;j.load=e.override(j.load,function(k){return function(l,m,n){var o={},p=function(q){k.call(this,q,function(r){e.extend(o,r);var s=[];for(var t in r){var u=r[t],v=u&&u.requires;if(v)for(var w=0;w<v.length;w++){if(!o[v[w]])s.push(v[w]);}}if(s.length)p.call(this,s);else{for(t in o){u=o[t];if(u.onLoad&&!u.onLoad._called){u.onLoad();u.onLoad._called=1;}}if(m)m.call(n||window,o);}},this);};p.call(this,l);};});j.setLang=function(k,l,m){var n=this.get(k),o=n.lang||(n.lang={});o[l]=m;};a.skins=(function(){var k={},l={},m=function(n,o,p,q){var r=k[o];if(!n.skin){n.skin=r;if(r.init)r.init(n);}var s=function(B){for(var C=0;C<B.length;C++)B[C]=a.getUrl(l[o]+B[C]);};function t(B,C){return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(D,E,F,G){if(/^\/|^\w?:/.test(F))return D;else return 'url('+C+E+F+G+')';});};p=r[p];var u=!p||!!p._isLoaded;if(u)q&&q();else{var v=p._pending||(p._pending=[]);v.push(q);if(v.length>1)return;var w=!p.css||!p.css.length,x=!p.js||!p.js.length,y=function(){if(w&&x){p._isLoaded=1;for(var B=0;
+B<v.length;B++){if(v[B])v[B]();}}};if(!w){var z=p.css;if(e.isArray(z)){s(z);for(var A=0;A<z.length;A++)a.document.appendStyleSheet(z[A]);}else{z=t(z,a.getUrl(l[o]));a.document.appendStyleText(z);}p.css=z;w=1;}if(!x){s(p.js);a.scriptLoader.load(p.js,function(){x=1;y();});}y();}};return{add:function(n,o){k[n]=o;o.skinPath=l[n]||(l[n]=a.getUrl('skins/'+n+'/'));},load:function(n,o,p){var q=n.skinName,r=n.skinPath;if(k[q])m(n,q,o,p);else{l[q]=r;a.scriptLoader.load(a.getUrl(r+'skin.js'),function(){m(n,q,o,p);});}}};})();a.themes=new a.resourceManager('themes/','theme');a.ui=function(k){if(k.ui)return k.ui;this._={handlers:{},items:{},editor:k};return this;};var k=a.ui;k.prototype={add:function(l,m,n){this._.items[l]={type:m,command:n.command||null,args:Array.prototype.slice.call(arguments,2)};},create:function(l){var q=this;var m=q._.items[l],n=m&&q._.handlers[m.type],o=m&&m.command&&q._.editor.getCommand(m.command),p=n&&n.create.apply(q,m.args);if(o)o.uiItems.push(p);return p;},addHandler:function(l,m){this._.handlers[l]=m;}};a.event.implementOn(k);(function(){var l=0,m=function(){var x='editor'+ ++l;return a.instances&&a.instances[x]?m():x;},n={},o=function(x){var y=x.config.customConfig;if(!y)return false;y=a.getUrl(y);var z=n[y]||(n[y]={});if(z.fn){z.fn.call(x,x.config);if(a.getUrl(x.config.customConfig)==y||!o(x))x.fireOnce('customConfigLoaded');}else a.scriptLoader.load(y,function(){if(a.editorConfig)z.fn=a.editorConfig;else z.fn=function(){};o(x);});return true;},p=function(x,y){x.on('customConfigLoaded',function(){if(y){if(y.on)for(var z in y.on)x.on(z,y.on[z]);e.extend(x.config,y,true);delete x.config.on;}q(x);});if(y&&y.customConfig!=undefined)x.config.customConfig=y.customConfig;if(!o(x))x.fireOnce('customConfigLoaded');},q=function(x){var y=x.config.skin.split(','),z=y[0],A=a.getUrl(y[1]||'skins/'+z+'/');x.skinName=z;x.skinPath=A;x.skinClass='cke_skin_'+z;x.tabIndex=x.config.tabIndex||x.element.getAttribute('tabindex')||0;x.fireOnce('configLoaded');t(x);},r=function(x){a.lang.load(x.config.language,x.config.defaultLanguage,function(y,z){x.langCode=y;x.lang=e.prototypedCopy(z);if(b.gecko&&b.version<10900&&x.lang.dir=='rtl')x.lang.dir='ltr';var A=x.config;A.contentsLangDirection=='ui'&&(A.contentsLangDirection=x.lang.dir);s(x);});},s=function(x){var y=x.config,z=y.plugins,A=y.extraPlugins,B=y.removePlugins;if(A){var C=new RegExp('(?:^|,)(?:'+A.replace(/\s*,\s*/g,'|')+')(?=,|$)','g');z=z.replace(C,'');z+=','+A;}if(B){C=new RegExp('(?:^|,)(?:'+B.replace(/\s*,\s*/g,'|')+')(?=,|$)','g');
+z=z.replace(C,'');}b.air&&(z+=',adobeair');j.load(z.split(','),function(D){var E=[],F=[],G=[];x.plugins=D;for(var H in D){var I=D[H],J=I.lang,K=j.getPath(H),L=null;I.path=K;if(J){L=e.indexOf(J,x.langCode)>=0?x.langCode:J[0];if(!I.lang[L])G.push(a.getUrl(K+'lang/'+L+'.js'));else{e.extend(x.lang,I.lang[L]);L=null;}}F.push(L);E.push(I);}a.scriptLoader.load(G,function(){var M=['beforeInit','init','afterInit'];for(var N=0;N<M.length;N++)for(var O=0;O<E.length;O++){var P=E[O];if(N===0&&F[O]&&P.lang)e.extend(x.lang,P.lang[F[O]]);if(P[M[N]])P[M[N]](x);}x.fire('pluginsLoaded');u(x);});});},t=function(x){a.skins.load(x,'editor',function(){r(x);});},u=function(x){var y=x.config.theme;a.themes.load(y,function(){var z=x.theme=a.themes.get(y);z.path=a.themes.getPath(y);z.build(x);if(x.config.autoUpdateElement)v(x);});},v=function(x){var y=x.element;if(x.elementMode==1&&y.is('textarea')){var z=y.$.form&&new h(y.$.form);if(z){function A(){x.updateElement();};z.on('submit',A);if(!z.$.submit.nodeName)z.$.submit=e.override(z.$.submit,function(B){return function(){x.updateElement();if(B.apply)B.apply(this,arguments);else B();};});x.on('destroy',function(){z.removeListener('submit',A);});}}};function w(){var x,y=this._.commands,z=this.mode;for(var A in y){x=y[A];x[x.startDisabled?'disable':x.modes[z]?'enable':'disable']();}};a.editor.prototype._init=function(){var z=this;var x=h.get(z._.element),y=z._.instanceConfig;delete z._.element;delete z._.instanceConfig;z._.commands={};z._.styles=[];z.element=x;z.name=x&&z.elementMode==1&&(x.getId()||x.getNameAtt())||m();if(z.name in a.instances)throw '[CKEDITOR.editor] The instance "'+z.name+'" already exists.';z.id=e.getNextId();z.config=e.prototypedCopy(i);z.ui=new k(z);z.focusManager=new a.focusManager(z);a.fire('instanceCreated',null,z);z.on('mode',w,null,null,1);p(z,y);};})();e.extend(a.editor.prototype,{addCommand:function(l,m){return this._.commands[l]=new a.command(this,m);},addCss:function(l){this._.styles.push(l);},destroy:function(l){var r=this;if(!l)r.updateElement();if(r.mode)r._.modes[r.mode].unload(r.getThemeSpace('contents'));r.theme.destroy(r);var m,n=0,o,p,q;if(r.toolbox){m=r.toolbox.toolbars;for(;n<m.length;n++){p=m[n].items;for(o=0;o<p.length;o++){q=p[o];if(q.clickFn)e.removeFunction(q.clickFn);if(q.keyDownFn)e.removeFunction(q.keyDownFn);if(q.index)k.button._.instances[q.index]=null;}}}if(r.contextMenu)e.removeFunction(r.contextMenu._.functionId);if(r._.filebrowserFn)e.removeFunction(r._.filebrowserFn);r.fire('destroy');
+a.remove(r);a.fire('instanceDestroyed',null,r);},execCommand:function(l,m){var n=this.getCommand(l),o={name:l,commandData:m,command:n};if(n&&n.state!=0)if(this.fire('beforeCommandExec',o)!==true){o.returnValue=n.exec(o.commandData);if(!n.async&&this.fire('afterCommandExec',o)!==true)return o.returnValue;}return false;},getCommand:function(l){return this._.commands[l];},getData:function(){var n=this;n.fire('beforeGetData');var l=n._.data;if(typeof l!='string'){var m=n.element;if(m&&n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();else l='';}l={dataValue:l};n.fire('getData',l);return l.dataValue;},getSnapshot:function(){var l=this.fire('getSnapshot');if(typeof l!='string'){var m=this.element;if(m&&this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();}return l;},loadSnapshot:function(l){this.fire('loadSnapshot',l);},setData:function(l,m){if(m)this.on('dataReady',function(o){o.removeListener();m.call(o.editor);});var n={dataValue:l};this.fire('setData',n);this._.data=n.dataValue;this.fire('afterSetData',n);},insertHtml:function(l){this.fire('insertHtml',l);},insertText:function(l){this.fire('insertText',l);},insertElement:function(l){this.fire('insertElement',l);},checkDirty:function(){return this.mayBeDirty&&this._.previousValue!==this.getSnapshot();},resetDirty:function(){if(this.mayBeDirty)this._.previousValue=this.getSnapshot();},updateElement:function(){var n=this;var l=n.element;if(l&&n.elementMode==1){var m=n.getData();if(n.config.htmlEncodeOutput)m=e.htmlEncode(m);if(l.is('textarea'))l.setValue(m);else l.setHtml(m);}}});a.on('loaded',function(){var l=a.editor._pending;if(l){delete a.editor._pending;for(var m=0;m<l.length;m++)l[m]._init();}});a.htmlParser=function(){this._={htmlPartsRegex:new RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:[^\"'>]+)|(?:\"[^\"]*\")|(?:'[^']*'))*)\\/?>))",'g')};};(function(){var l=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,m={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};a.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(n){var A=this;var o,p,q=0,r;while(o=A._.htmlPartsRegex.exec(n)){var s=o.index;if(s>q){var t=n.substring(q,s);if(r)r.push(t);else A.onText(t);}q=A._.htmlPartsRegex.lastIndex;if(p=o[1]){p=p.toLowerCase();if(r&&f.$cdata[p]){A.onCDATA(r.join(''));
+r=null;}if(!r){A.onTagClose(p);continue;}}if(r){r.push(o[0]);continue;}if(p=o[3]){p=p.toLowerCase();if(/="/.test(p))continue;var u={},v,w=o[4],x=!!(w&&w.charAt(w.length-1)=='/');if(w)while(v=l.exec(w)){var y=v[1].toLowerCase(),z=v[2]||v[3]||v[4]||'';if(!z&&m[y])u[y]=y;else u[y]=z;}A.onTagOpen(p,u,x);if(!r&&f.$cdata[p])r=[];continue;}if(p=o[2])A.onComment(p);}if(n.length>q)A.onText(n.substring(q,n.length));}};})();a.htmlParser.comment=function(l){this.value=l;this._={isBlockLike:false};};a.htmlParser.comment.prototype={type:8,writeHtml:function(l,m){var n=this.value;if(m){if(!(n=m.onComment(n,this)))return;if(typeof n!='string'){n.parent=this.parent;n.writeHtml(l,m);return;}}l.comment(n);}};(function(){var l=/[\t\r\n ]{2,}|[\t\r\n]/g;a.htmlParser.text=function(m){this.value=m;this._={isBlockLike:false};};a.htmlParser.text.prototype={type:3,writeHtml:function(m,n){var o=this.value;if(n&&!(o=n.onText(o,this)))return;m.text(o);}};})();(function(){a.htmlParser.cdata=function(l){this.value=l;};a.htmlParser.cdata.prototype={type:3,writeHtml:function(l){l.write(this.value);}};})();a.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false};};(function(){var l={colgroup:1,dd:1,dt:1,li:1,option:1,p:1,td:1,tfoot:1,th:1,thead:1,tr:1},m=e.extend({table:1,ul:1,ol:1,dl:1},f.table,f.ul,f.ol,f.dl),n=f.$list,o=f.$listItem;a.htmlParser.fragment.fromHtml=function(p,q){var r=new a.htmlParser(),s=[],t=new a.htmlParser.fragment(),u=[],v=[],w=t,x=false,y;function z(E){var F;if(u.length>0)for(var G=0;G<u.length;G++){var H=u[G],I=H.name,J=f[I],K=w.name&&f[w.name];if((!K||K[I])&&(!E||!J||J[E]||!f[E])){if(!F){A();F=1;}H=H.clone();H.parent=w;w=H;u.splice(G,1);G--;}}};function A(E){while(v.length-(E||0)>0)w.add(v.shift());};function B(E,F,G){F=F||w||t;if(q&&!F.type){var H,I;if(E.attributes&&(I=E.attributes['data-cke-real-element-type']))H=I;else H=E.name;if(H&&!(H in f.$body)&&!(H in f.$nonBodyContent)){var J=w;w=F;r.onTagOpen(q,{});F=w;if(G)w=J;}}if(E._.isBlockLike&&E.name!='pre'){var K=E.children.length,L=E.children[K-1],M;if(L&&L.type==3)if(!(M=e.rtrim(L.value)))E.children.length=K-1;else L.value=M;}F.add(E);if(E.returnPoint){w=E.returnPoint;delete E.returnPoint;}};r.onTagOpen=function(E,F,G){var H=new a.htmlParser.element(E,F);if(H.isUnknown&&G)H.isEmpty=true;if(f.$removeEmpty[E]){u.push(H);return;}else if(E=='pre')x=true;else if(E=='br'&&x){w.add(new a.htmlParser.text('\n'));return;}if(E=='br'){v.push(H);return;}var I=w.name,J=I&&(f[I]||(w._.isBlockLike?f.div:f.span));
+if(J&&!H.isUnknown&&!w.isUnknown&&!J[E]){var K=false,L;if(E in n&&I in n){var M=w.children,N=M[M.length-1];if(!(N&&N.name in o))B(N=new a.htmlParser.element('li'),w);y=w,L=N;}else if(E==I)B(w,w.parent);else if(E in f.$listItem){r.onTagOpen('ul',{});L=w;K=true;}else{if(m[I]){if(!y)y=w;}else{B(w,w.parent,true);if(!l[I])u.unshift(w);}K=true;}if(L)w=L;else w=w.returnPoint||w.parent;if(K){r.onTagOpen.apply(this,arguments);return;}}z(E);A();H.parent=w;H.returnPoint=y;y=0;if(H.isEmpty)B(H);else w=H;};r.onTagClose=function(E){for(var F=u.length-1;F>=0;F--){if(E==u[F].name){u.splice(F,1);return;}}var G=[],H=[],I=w;while(I.type&&I.name!=E){if(!I._.isBlockLike)H.unshift(I);G.push(I);I=I.parent;}if(I.type){for(F=0;F<G.length;F++){var J=G[F];B(J,J.parent);}w=I;if(w.name=='pre')x=false;if(I._.isBlockLike)A();B(I,I.parent);if(I==w)w=w.parent;u=u.concat(H);}if(E=='body')q=false;};r.onText=function(E){if(!w._.hasInlineStarted&&!x){E=e.ltrim(E);if(E.length===0)return;}A();z();if(q&&(!w.type||w.name=='body')&&e.trim(E))this.onTagOpen(q,{});if(!x)E=E.replace(/[\t\r\n ]{2,}|[\t\r\n]/g,' ');w.add(new a.htmlParser.text(E));};r.onCDATA=function(E){w.add(new a.htmlParser.cdata(E));};r.onComment=function(E){z();w.add(new a.htmlParser.comment(E));};r.parse(p);A(!c&&1);while(w.type){var C=w.parent,D=w;if(q&&(!C.type||C.name=='body')&&!f.$body[D.name]){w=C;r.onTagOpen(q,{});C=w;}C.add(D);w=C;}return t;};a.htmlParser.fragment.prototype={add:function(p){var s=this;var q=s.children.length,r=q>0&&s.children[q-1]||null;if(r){if(p._.isBlockLike&&r.type==3){r.value=e.rtrim(r.value);if(r.value.length===0){s.children.pop();s.add(p);return;}}r.next=p;}p.previous=r;p.parent=s;s.children.push(p);s._.hasInlineStarted=p.type==3||p.type==1&&!p._.isBlockLike;},writeHtml:function(p,q){var r;this.filterChildren=function(){var s=new a.htmlParser.basicWriter();this.writeChildrenHtml.call(this,s,q,true);var t=s.getHtml();this.children=new a.htmlParser.fragment.fromHtml(t).children;r=1;};!this.name&&q&&q.onFragment(this);this.writeChildrenHtml(p,r?null:q);},writeChildrenHtml:function(p,q){for(var r=0;r<this.children.length;r++)this.children[r].writeHtml(p,q);}};})();a.htmlParser.element=function(l,m){var r=this;r.name=l;r.attributes=m||(m={});r.children=[];var n=m['data-cke-real-element-type']||l,o=f,p=!!(o.$nonBodyContent[n]||o.$block[n]||o.$listItem[n]||o.$tableContent[n]||o.$nonEditable[n]||n=='br'),q=!!o.$empty[l];r.isEmpty=q;r.isUnknown=!o[l];r._={isBlockLike:p,hasInlineStarted:q||!p};};(function(){var l=function(m,n){m=m[0];
+n=n[0];return m<n?-1:m>n?1:0;};a.htmlParser.element.prototype={type:1,add:a.htmlParser.fragment.prototype.add,clone:function(){return new a.htmlParser.element(this.name,this.attributes);},writeHtml:function(m,n){var o=this.attributes,p=this,q=p.name,r,s,t,u;p.filterChildren=function(){if(!u){var z=new a.htmlParser.basicWriter();a.htmlParser.fragment.prototype.writeChildrenHtml.call(p,z,n);p.children=new a.htmlParser.fragment.fromHtml(z.getHtml()).children;u=1;}};if(n){for(;;){if(!(q=n.onElementName(q)))return;p.name=q;if(!(p=n.onElement(p)))return;p.parent=this.parent;if(p.name==q)break;if(p.type!=1){p.writeHtml(m,n);return;}q=p.name;if(!q){this.writeChildrenHtml.call(p,m,u?null:n);return;}}o=p.attributes;}m.openTag(q,o);var v=[];for(var w=0;w<2;w++)for(r in o){s=r;t=o[r];if(w==1)v.push([r,t]);else if(n){for(;;){if(!(s=n.onAttributeName(r))){delete o[r];break;}else if(s!=r){delete o[r];r=s;continue;}else break;}if(s)if((t=n.onAttribute(p,s,t))===false)delete o[s];else o[s]=t;}}if(m.sortAttributes)v.sort(l);var x=v.length;for(w=0;w<x;w++){var y=v[w];m.attribute(y[0],y[1]);}m.openTagClose(q,p.isEmpty);if(!p.isEmpty){this.writeChildrenHtml.call(p,m,u?null:n);m.closeTag(q);}},writeChildrenHtml:function(m,n){a.htmlParser.fragment.prototype.writeChildrenHtml.apply(this,arguments);}};})();(function(){a.htmlParser.filter=e.createClass({$:function(q){this._={elementNames:[],attributeNames:[],elements:{$length:0},attributes:{$length:0}};if(q)this.addRules(q,10);},proto:{addRules:function(q,r){var s=this;if(typeof r!='number')r=10;m(s._.elementNames,q.elementNames,r);m(s._.attributeNames,q.attributeNames,r);n(s._.elements,q.elements,r);n(s._.attributes,q.attributes,r);s._.text=o(s._.text,q.text,r)||s._.text;s._.comment=o(s._.comment,q.comment,r)||s._.comment;s._.root=o(s._.root,q.root,r)||s._.root;},onElementName:function(q){return l(q,this._.elementNames);},onAttributeName:function(q){return l(q,this._.attributeNames);},onText:function(q){var r=this._.text;return r?r.filter(q):q;},onComment:function(q,r){var s=this._.comment;return s?s.filter(q,r):q;},onFragment:function(q){var r=this._.root;return r?r.filter(q):q;},onElement:function(q){var v=this;var r=[v._.elements['^'],v._.elements[q.name],v._.elements.$],s,t;for(var u=0;u<3;u++){s=r[u];if(s){t=s.filter(q,v);if(t===false)return null;if(t&&t!=q)return v.onNode(t);if(q.parent&&!q.name)break;}}return q;},onNode:function(q){var r=q.type;return r==1?this.onElement(q):r==3?new a.htmlParser.text(this.onText(q.value)):r==8?new a.htmlParser.comment(this.onComment(q.value)):null;
+},onAttribute:function(q,r,s){var t=this._.attributes[r];if(t){var u=t.filter(s,q,this);if(u===false)return false;if(typeof u!='undefined')return u;}return s;}}});function l(q,r){for(var s=0;q&&s<r.length;s++){var t=r[s];q=q.replace(t[0],t[1]);}return q;};function m(q,r,s){if(typeof r=='function')r=[r];var t,u,v=q.length,w=r&&r.length;if(w){for(t=0;t<v&&q[t].pri<s;t++){}for(u=w-1;u>=0;u--){var x=r[u];if(x){x.pri=s;q.splice(t,0,x);}}}};function n(q,r,s){if(r)for(var t in r){var u=q[t];q[t]=o(u,r[t],s);if(!u)q.$length++;}};function o(q,r,s){if(r){r.pri=s;if(q){if(!q.splice){if(q.pri>s)q=[r,q];else q=[q,r];q.filter=p;}else m(q,r,s);return q;}else{r.filter=r;return r;}}};function p(q){var r=q.type||q instanceof a.htmlParser.fragment;for(var s=0;s<this.length;s++){if(r)var t=q.type,u=q.name;var v=this[s],w=v.apply(window,arguments);if(w===false)return w;if(r){if(w&&(w.name!=u||w.type!=t))return w;}else if(typeof w!='string')return w;w!=undefined&&(q=w);}return q;};})();a.htmlParser.basicWriter=e.createClass({$:function(){this._={output:[]};},proto:{openTag:function(l,m){this._.output.push('<',l);},openTagClose:function(l,m){if(m)this._.output.push(' />');else this._.output.push('>');},attribute:function(l,m){if(typeof m=='string')m=e.htmlEncodeAttr(m);this._.output.push(' ',l,'="',m,'"');},closeTag:function(l){this._.output.push('</',l,'>');},text:function(l){this._.output.push(l);},comment:function(l){this._.output.push('<!--',l,'-->');},write:function(l){this._.output.push(l);},reset:function(){this._.output=[];this._.indent=false;},getHtml:function(l){var m=this._.output.join('');if(l)this.reset();return m;}}});delete a.loadFullCore;a.instances={};a.document=new g(document);a.add=function(l){a.instances[l.name]=l;l.on('focus',function(){if(a.currentInstance!=l){a.currentInstance=l;a.fire('currentInstance');}});l.on('blur',function(){if(a.currentInstance==l){a.currentInstance=null;a.fire('currentInstance');}});};a.remove=function(l){delete a.instances[l.name];};a.on('instanceDestroyed',function(){if(e.isEmpty(this.instances))a.fire('reset');});a.TRISTATE_ON=1;a.TRISTATE_OFF=2;a.TRISTATE_DISABLED=0;d.comment=e.createClass({base:d.node,$:function(l,m){if(typeof l=='string')l=(m?m.$:document).createComment(l);this.base(l);},proto:{type:8,getOuterHtml:function(){return '<!--'+this.$.nodeValue+'-->';}}});(function(){var l={address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,dd:1},m={body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,caption:1,form:1},n=function(o){var p=o.getChildren();
+for(var q=0,r=p.count();q<r;q++){var s=p.getItem(q);if(s.type==1&&f.$block[s.getName()])return true;}return false;};d.elementPath=function(o){var u=this;var p=null,q=null,r=[],s=o;while(s){if(s.type==1){if(!u.lastElement)u.lastElement=s;var t=s.getName();if(c&&s.$.scopeName!='HTML')t=s.$.scopeName.toLowerCase()+':'+t;if(!q){if(!p&&l[t])p=s;if(m[t])if(!p&&t=='div'&&!n(s))p=s;else q=s;}r.push(s);if(t=='body')break;}s=s.getParent();}u.block=p;u.blockLimit=q;u.elements=r;};})();d.elementPath.prototype={compare:function(l){var m=this.elements,n=l&&l.elements;if(!n||m.length!=n.length)return false;for(var o=0;o<m.length;o++){if(!m[o].equals(n[o]))return false;}return true;},contains:function(l){var m=this.elements;for(var n=0;n<m.length;n++){if(m[n].getName() in l)return m[n];}return null;}};d.text=function(l,m){if(typeof l=='string')l=(m?m.$:document).createTextNode(l);this.$=l;};d.text.prototype=new d.node();e.extend(d.text.prototype,{type:3,getLength:function(){return this.$.nodeValue.length;},getText:function(){return this.$.nodeValue;},split:function(l){var q=this;if(c&&l==q.getLength()){var m=q.getDocument().createText('');m.insertAfter(q);return m;}var n=q.getDocument(),o=new d.text(q.$.splitText(l),n);if(b.ie8){var p=new d.text('',n);p.insertAfter(o);p.remove();}return o;},substring:function(l,m){if(typeof m!='number')return this.$.nodeValue.substr(l);else return this.$.nodeValue.substring(l,m);}});d.documentFragment=function(l){l=l||a.document;this.$=l.$.createDocumentFragment();};e.extend(d.documentFragment.prototype,h.prototype,{type:11,insertAfterNode:function(l){l=l.$;l.parentNode.insertBefore(this.$,l.nextSibling);}},true,{append:1,appendBogus:1,getFirst:1,getLast:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1});(function(){function l(s,t){if(this._.end)return null;var u,v=this.range,w,x=this.guard,y=this.type,z=s?'getPreviousSourceNode':'getNextSourceNode';if(!this._.start){this._.start=1;v.trim();if(v.collapsed){this.end();return null;}}if(!s&&!this._.guardLTR){var A=v.endContainer,B=A.getChild(v.endOffset);this._.guardLTR=function(F,G){return(!G||!A.equals(F))&&(!B||!F.equals(B))&&(F.type!=1||!G||F.getName()!='body');};}if(s&&!this._.guardRTL){var C=v.startContainer,D=v.startOffset>0&&C.getChild(v.startOffset-1);this._.guardRTL=function(F,G){return(!G||!C.equals(F))&&(!D||!F.equals(D))&&(F.type!=1||!G||F.getName()!='body');};}var E=s?this._.guardRTL:this._.guardLTR;
+if(x)w=function(F,G){if(E(F,G)===false)return false;return x(F,G);};else w=E;if(this.current)u=this.current[z](false,y,w);else if(s){u=v.endContainer;if(v.endOffset>0){u=u.getChild(v.endOffset-1);if(w(u)===false)u=null;}else u=w(u,true)===false?null:u.getPreviousSourceNode(true,y,w);}else{u=v.startContainer;u=u.getChild(v.startOffset);if(u){if(w(u)===false)u=null;}else u=w(v.startContainer,true)===false?null:v.startContainer.getNextSourceNode(true,y,w);}while(u&&!this._.end){this.current=u;if(!this.evaluator||this.evaluator(u)!==false){if(!t)return u;}else if(t&&this.evaluator)return false;u=u[z](false,y,w);}this.end();return this.current=null;};function m(s){var t,u=null;while(t=l.call(this,s))u=t;return u;};d.walker=e.createClass({$:function(s){this.range=s;this._={};},proto:{end:function(){this._.end=1;},next:function(){return l.call(this);},previous:function(){return l.call(this,1);},checkForward:function(){return l.call(this,0,1)!==false;},checkBackward:function(){return l.call(this,1,1)!==false;},lastForward:function(){return m.call(this);},lastBackward:function(){return m.call(this,1);},reset:function(){delete this.current;this._={};}}});var n={block:1,'list-item':1,table:1,'table-row-group':1,'table-header-group':1,'table-footer-group':1,'table-row':1,'table-column-group':1,'table-column':1,'table-cell':1,'table-caption':1};h.prototype.isBlockBoundary=function(s){var t=e.extend({},f.$block,s||{});return this.getComputedStyle('float')=='none'&&n[this.getComputedStyle('display')]||t[this.getName()];};d.walker.blockBoundary=function(s){return function(t,u){return!(t.type==1&&t.isBlockBoundary(s));};};d.walker.listItemBoundary=function(){return this.blockBoundary({br:1});};d.walker.bookmark=function(s,t){function u(v){return v&&v.getName&&v.getName()=='span'&&v.data('cke-bookmark');};return function(v){var w,x;w=v&&!v.getName&&(x=v.getParent())&&u(x);w=s?w:w||u(v);return!!(t^w);};};d.walker.whitespaces=function(s){return function(t){var u=t&&t.type==3&&!e.trim(t.getText());return!!(s^u);};};d.walker.invisible=function(s){var t=d.walker.whitespaces();return function(u){var v=t(u)||u.is&&!u.$.offsetHeight;return!!(s^v);};};var o=/^[\t\r\n ]*(?: |\xa0)$/,p=d.walker.whitespaces(1),q=d.walker.bookmark(0,1),r=function(s){return q(s)&&p(s);};h.prototype.getBogus=function(){var s=this.getLast(r);if(s&&(!c?s.is&&s.is('br'):s.getText&&o.test(s.getText())))return s;return false;};})();d.range=function(l){var m=this;m.startContainer=null;m.startOffset=null;m.endContainer=null;
+m.endOffset=null;m.collapsed=true;m.document=l;};(function(){var l=function(t){t.collapsed=t.startContainer&&t.endContainer&&t.startContainer.equals(t.endContainer)&&t.startOffset==t.endOffset;},m=function(t,u,v){t.optimizeBookmark();var w=t.startContainer,x=t.endContainer,y=t.startOffset,z=t.endOffset,A,B;if(x.type==3)x=x.split(z);else if(x.getChildCount()>0)if(z>=x.getChildCount()){x=x.append(t.document.createText(''));B=true;}else x=x.getChild(z);if(w.type==3){w.split(y);if(w.equals(x))x=w.getNext();}else if(!y){w=w.getFirst().insertBeforeMe(t.document.createText(''));A=true;}else if(y>=w.getChildCount()){w=w.append(t.document.createText(''));A=true;}else w=w.getChild(y).getPrevious();var C=w.getParents(),D=x.getParents(),E,F,G;for(E=0;E<C.length;E++){F=C[E];G=D[E];if(!F.equals(G))break;}var H=v,I,J,K,L;for(var M=E;M<C.length;M++){I=C[M];if(H&&!I.equals(w))J=H.append(I.clone());K=I.getNext();while(K){if(K.equals(D[M])||K.equals(x))break;L=K.getNext();if(u==2)H.append(K.clone(true));else{K.remove();if(u==1)H.append(K);}K=L;}if(H)H=J;}H=v;for(var N=E;N<D.length;N++){I=D[N];if(u>0&&!I.equals(x))J=H.append(I.clone());if(!C[N]||I.$.parentNode!=C[N].$.parentNode){K=I.getPrevious();while(K){if(K.equals(C[N])||K.equals(w))break;L=K.getPrevious();if(u==2)H.$.insertBefore(K.$.cloneNode(true),H.$.firstChild);else{K.remove();if(u==1)H.$.insertBefore(K.$,H.$.firstChild);}K=L;}}if(H)H=J;}if(u==2){var O=t.startContainer;if(O.type==3){O.$.data+=O.$.nextSibling.data;O.$.parentNode.removeChild(O.$.nextSibling);}var P=t.endContainer;if(P.type==3&&P.$.nextSibling){P.$.data+=P.$.nextSibling.data;P.$.parentNode.removeChild(P.$.nextSibling);}}else{if(F&&G&&(w.$.parentNode!=F.$.parentNode||x.$.parentNode!=G.$.parentNode)){var Q=G.getIndex();if(A&&G.$.parentNode==w.$.parentNode)Q--;t.setStart(G.getParent(),Q);}t.collapse(true);}if(A)w.remove();if(B&&x.$.parentNode)x.remove();},n={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1};function o(t){var u=false,v=d.walker.bookmark(true);return function(w){if(v(w))return true;if(w.type==3){if(e.trim(w.getText()).length)return false;}else if(w.type==1)if(!n[w.getName()])if(!t&&!c&&w.getName()=='br'&&!u)u=true;else return false;return true;};};function p(t){return t.type!=3&&t.getName() in f.$removeEmpty||!e.trim(t.getText())||!!t.getParent().data('cke-bookmark');};var q=new d.walker.whitespaces(),r=new d.walker.bookmark();
+function s(t){return!q(t)&&!r(t);};d.range.prototype={clone:function(){var u=this;var t=new d.range(u.document);t.startContainer=u.startContainer;t.startOffset=u.startOffset;t.endContainer=u.endContainer;t.endOffset=u.endOffset;t.collapsed=u.collapsed;return t;},collapse:function(t){var u=this;if(t){u.endContainer=u.startContainer;u.endOffset=u.startOffset;}else{u.startContainer=u.endContainer;u.startOffset=u.endOffset;}u.collapsed=true;},cloneContents:function(){var t=new d.documentFragment(this.document);if(!this.collapsed)m(this,2,t);return t;},deleteContents:function(){if(this.collapsed)return;m(this,0);},extractContents:function(){var t=new d.documentFragment(this.document);if(!this.collapsed)m(this,1,t);return t;},createBookmark:function(t){var z=this;var u,v,w,x,y=z.collapsed;u=z.document.createElement('span');u.data('cke-bookmark',1);u.setStyle('display','none');u.setHtml(' ');if(t){w='cke_bm_'+e.getNextNumber();u.setAttribute('id',w+'S');}if(!y){v=u.clone();v.setHtml(' ');if(t)v.setAttribute('id',w+'E');x=z.clone();x.collapse();x.insertNode(v);}x=z.clone();x.collapse(true);x.insertNode(u);if(v){z.setStartAfter(u);z.setEndBefore(v);}else z.moveToPosition(u,4);return{startNode:t?w+'S':u,endNode:t?w+'E':v,serializable:t,collapsed:y};},createBookmark2:function(t){var B=this;var u=B.startContainer,v=B.endContainer,w=B.startOffset,x=B.endOffset,y=B.collapsed,z,A;if(!u||!v)return{start:0,end:0};if(t){if(u.type==1){z=u.getChild(w);if(z&&z.type==3&&w>0&&z.getPrevious().type==3){u=z;w=0;}}while(u.type==3&&(A=u.getPrevious())&&A.type==3){u=A;w+=A.getLength();}if(!y){if(v.type==1){z=v.getChild(x);if(z&&z.type==3&&x>0&&z.getPrevious().type==3){v=z;x=0;}}while(v.type==3&&(A=v.getPrevious())&&A.type==3){v=A;x+=A.getLength();}}}return{start:u.getAddress(t),end:y?null:v.getAddress(t),startOffset:w,endOffset:x,normalized:t,collapsed:y,is2:true};},moveToBookmark:function(t){var B=this;if(t.is2){var u=B.document.getByAddress(t.start,t.normalized),v=t.startOffset,w=t.end&&B.document.getByAddress(t.end,t.normalized),x=t.endOffset;B.setStart(u,v);if(w)B.setEnd(w,x);else B.collapse(true);}else{var y=t.serializable,z=y?B.document.getById(t.startNode):t.startNode,A=y?B.document.getById(t.endNode):t.endNode;B.setStartBefore(z);z.remove();if(A){B.setEndBefore(A);A.remove();}else B.collapse(true);}},getBoundaryNodes:function(){var y=this;var t=y.startContainer,u=y.endContainer,v=y.startOffset,w=y.endOffset,x;if(t.type==1){x=t.getChildCount();if(x>v)t=t.getChild(v);else if(x<1)t=t.getPreviousSourceNode();
+else{t=t.$;while(t.lastChild)t=t.lastChild;t=new d.node(t);t=t.getNextSourceNode()||t;}}if(u.type==1){x=u.getChildCount();if(x>w)u=u.getChild(w).getPreviousSourceNode(true);else if(x<1)u=u.getPreviousSourceNode();else{u=u.$;while(u.lastChild)u=u.lastChild;u=new d.node(u);}}if(t.getPosition(u)&2)t=u;return{startNode:t,endNode:u};},getCommonAncestor:function(t,u){var y=this;var v=y.startContainer,w=y.endContainer,x;if(v.equals(w)){if(t&&v.type==1&&y.startOffset==y.endOffset-1)x=v.getChild(y.startOffset);else x=v;}else x=v.getCommonAncestor(w);return u&&!x.is?x.getParent():x;},optimize:function(){var v=this;var t=v.startContainer,u=v.startOffset;if(t.type!=1)if(!u)v.setStartBefore(t);else if(u>=t.getLength())v.setStartAfter(t);t=v.endContainer;u=v.endOffset;if(t.type!=1)if(!u)v.setEndBefore(t);else if(u>=t.getLength())v.setEndAfter(t);},optimizeBookmark:function(){var v=this;var t=v.startContainer,u=v.endContainer;if(t.is&&t.is('span')&&t.data('cke-bookmark'))v.setStartAt(t,3);if(u&&u.is&&u.is('span')&&u.data('cke-bookmark'))v.setEndAt(u,4);},trim:function(t,u){var B=this;var v=B.startContainer,w=B.startOffset,x=B.collapsed;if((!t||x)&&v&&v.type==3){if(!w){w=v.getIndex();v=v.getParent();}else if(w>=v.getLength()){w=v.getIndex()+1;v=v.getParent();}else{var y=v.split(w);w=v.getIndex()+1;v=v.getParent();if(B.startContainer.equals(B.endContainer))B.setEnd(y,B.endOffset-B.startOffset);else if(v.equals(B.endContainer))B.endOffset+=1;}B.setStart(v,w);if(x){B.collapse(true);return;}}var z=B.endContainer,A=B.endOffset;if(!(u||x)&&z&&z.type==3){if(!A){A=z.getIndex();z=z.getParent();}else if(A>=z.getLength()){A=z.getIndex()+1;z=z.getParent();}else{z.split(A);A=z.getIndex()+1;z=z.getParent();}B.setEnd(z,A);}},enlarge:function(t){switch(t){case 1:if(this.collapsed)return;var u=this.getCommonAncestor(),v=this.document.getBody(),w,x,y,z,A,B=false,C,D,E=this.startContainer,F=this.startOffset;if(E.type==3){if(F){E=!e.trim(E.substring(0,F)).length&&E;B=!!E;}if(E)if(!(z=E.getPrevious()))y=E.getParent();}else{if(F)z=E.getChild(F-1)||E.getLast();if(!z)y=E;}while(y||z){if(y&&!z){if(!A&&y.equals(u))A=true;if(!v.contains(y))break;if(!B||y.getComputedStyle('display')!='inline'){B=false;if(A)w=y;else this.setStartBefore(y);}z=y.getPrevious();}while(z){C=false;if(z.type==3){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;C=/[\s\ufeff]$/.test(D);}else if(z.$.offsetWidth>0&&!z.data('cke-bookmark'))if(B&&f.$removeEmpty[z.getName()]){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;else{var G=z.$.all||z.$.getElementsByTagName('*');
+for(var H=0,I;I=G[H++];){if(!f.$removeEmpty[I.nodeName.toLowerCase()]){z=null;break;}}}if(z)C=!!D.length;}else z=null;if(C)if(B){if(A)w=y;else if(y)this.setStartBefore(y);}else B=true;if(z){var J=z.getPrevious();if(!y&&!J){y=z;z=null;break;}z=J;}else y=null;}if(y)y=y.getParent();}E=this.endContainer;F=this.endOffset;y=z=null;A=B=false;if(E.type==3){E=!e.trim(E.substring(F)).length&&E;B=!(E&&E.getLength());if(E)if(!(z=E.getNext()))y=E.getParent();}else{z=E.getChild(F);if(!z)y=E;}while(y||z){if(y&&!z){if(!A&&y.equals(u))A=true;if(!v.contains(y))break;if(!B||y.getComputedStyle('display')!='inline'){B=false;if(A)x=y;else if(y)this.setEndAfter(y);}z=y.getNext();}while(z){C=false;if(z.type==3){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;C=/^[\s\ufeff]/.test(D);}else if(z.$.offsetWidth>0&&!z.data('cke-bookmark'))if(B&&f.$removeEmpty[z.getName()]){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;else{G=z.$.all||z.$.getElementsByTagName('*');for(H=0;I=G[H++];){if(!f.$removeEmpty[I.nodeName.toLowerCase()]){z=null;break;}}}if(z)C=!!D.length;}else z=null;if(C)if(B)if(A)x=y;else this.setEndAfter(y);if(z){J=z.getNext();if(!y&&!J){y=z;z=null;break;}z=J;}else y=null;}if(y)y=y.getParent();}if(w&&x){u=w.contains(x)?x:w;this.setStartBefore(u);this.setEndAfter(u);}break;case 2:case 3:var K=new d.range(this.document);v=this.document.getBody();K.setStartAt(v,1);K.setEnd(this.startContainer,this.startOffset);var L=new d.walker(K),M,N,O=d.walker.blockBoundary(t==3?{br:1}:null),P=function(R){var S=O(R);if(!S)M=R;return S;},Q=function(R){var S=P(R);if(!S&&R.is&&R.is('br'))N=R;return S;};L.guard=P;y=L.lastBackward();M=M||v;this.setStartAt(M,!M.is('br')&&(!y&&this.checkStartOfBlock()||y&&M.contains(y))?1:4);K=this.clone();K.collapse();K.setEndAt(v,2);L=new d.walker(K);L.guard=t==3?Q:P;M=null;y=L.lastForward();M=M||v;this.setEndAt(M,!y&&this.checkEndOfBlock()||y&&M.contains(y)?2:3);if(N)this.setEndAfter(N);}},shrink:function(t,u){if(!this.collapsed){t=t||2;var v=this.clone(),w=this.startContainer,x=this.endContainer,y=this.startOffset,z=this.endOffset,A=this.collapsed,B=1,C=1;if(w&&w.type==3)if(!y)v.setStartBefore(w);else if(y>=w.getLength())v.setStartAfter(w);else{v.setStartBefore(w);B=0;}if(x&&x.type==3)if(!z)v.setEndBefore(x);else if(z>=x.getLength())v.setEndAfter(x);else{v.setEndAfter(x);C=0;}var D=new d.walker(v),E=d.walker.bookmark();D.evaluator=function(I){return I.type==(t==1?1:3);};var F;D.guard=function(I,J){if(E(I))return true;if(t==1&&I.type==3)return false;if(J&&I.equals(F))return false;
+if(!J&&I.type==1)F=I;return true;};if(B){var G=D[t==1?'lastForward':'next']();G&&this.setStartAt(G,u?1:3);}if(C){D.reset();var H=D[t==1?'lastBackward':'previous']();H&&this.setEndAt(H,u?2:4);}return!!(B||C);}},insertNode:function(t){var x=this;x.optimizeBookmark();x.trim(false,true);var u=x.startContainer,v=x.startOffset,w=u.getChild(v);if(w)t.insertBefore(w);else u.append(t);if(t.getParent().equals(x.endContainer))x.endOffset++;x.setStartBefore(t);},moveToPosition:function(t,u){this.setStartAt(t,u);this.collapse(true);},selectNodeContents:function(t){this.setStart(t,0);this.setEnd(t,t.type==3?t.getLength():t.getChildCount());},setStart:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])u=t.getIndex(),t=t.getParent();v.startContainer=t;v.startOffset=u;if(!v.endContainer){v.endContainer=t;v.endOffset=u;}l(v);},setEnd:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])u=t.getIndex()+1,t=t.getParent();v.endContainer=t;v.endOffset=u;if(!v.startContainer){v.startContainer=t;v.startOffset=u;}l(v);},setStartAfter:function(t){this.setStart(t.getParent(),t.getIndex()+1);},setStartBefore:function(t){this.setStart(t.getParent(),t.getIndex());},setEndAfter:function(t){this.setEnd(t.getParent(),t.getIndex()+1);},setEndBefore:function(t){this.setEnd(t.getParent(),t.getIndex());},setStartAt:function(t,u){var v=this;switch(u){case 1:v.setStart(t,0);break;case 2:if(t.type==3)v.setStart(t,t.getLength());else v.setStart(t,t.getChildCount());break;case 3:v.setStartBefore(t);break;case 4:v.setStartAfter(t);}l(v);},setEndAt:function(t,u){var v=this;switch(u){case 1:v.setEnd(t,0);break;case 2:if(t.type==3)v.setEnd(t,t.getLength());else v.setEnd(t,t.getChildCount());break;case 3:v.setEndBefore(t);break;case 4:v.setEndAfter(t);}l(v);},fixBlock:function(t,u){var x=this;var v=x.createBookmark(),w=x.document.createElement(u);x.collapse(t);x.enlarge(2);x.extractContents().appendTo(w);w.trim();if(!c)w.appendBogus();x.insertNode(w);x.moveToBookmark(v);return w;},splitBlock:function(t){var D=this;var u=new d.elementPath(D.startContainer),v=new d.elementPath(D.endContainer),w=u.blockLimit,x=v.blockLimit,y=u.block,z=v.block,A=null;if(!w.equals(x))return null;if(t!='br'){if(!y){y=D.fixBlock(true,t);z=new d.elementPath(D.endContainer).block;}if(!z)z=D.fixBlock(false,t);}var B=y&&D.checkStartOfBlock(),C=z&&D.checkEndOfBlock();D.deleteContents();if(y&&y.equals(z))if(C){A=new d.elementPath(D.startContainer);D.moveToPosition(z,4);z=null;}else if(B){A=new d.elementPath(D.startContainer);
+D.moveToPosition(y,3);y=null;}else{z=D.splitElement(y);if(!c&&!y.is('ul','ol'))y.appendBogus();}return{previousBlock:y,nextBlock:z,wasStartOfBlock:B,wasEndOfBlock:C,elementPath:A};},splitElement:function(t){var w=this;if(!w.collapsed)return null;w.setEndAt(t,2);var u=w.extractContents(),v=t.clone(false);u.appendTo(v);v.insertAfter(t);w.moveToPosition(t,4);return v;},checkBoundaryOfElement:function(t,u){var v=u==1,w=this.clone();w.collapse(v);w[v?'setStartAt':'setEndAt'](t,v?1:2);var x=new d.walker(w);x.evaluator=p;return x[v?'checkBackward':'checkForward']();},checkStartOfBlock:function(){var z=this;var t=z.startContainer,u=z.startOffset;if(u&&t.type==3){var v=e.ltrim(t.substring(0,u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.startContainer),x=z.clone();x.collapse(true);x.setStartAt(w.block||w.blockLimit,1);var y=new d.walker(x);y.evaluator=o(true);return y.checkBackward();},checkEndOfBlock:function(){var z=this;var t=z.endContainer,u=z.endOffset;if(t.type==3){var v=e.rtrim(t.substring(u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.endContainer),x=z.clone();x.collapse(false);x.setEndAt(w.block||w.blockLimit,2);var y=new d.walker(x);y.evaluator=o(false);return y.checkForward();},moveToElementEditablePosition:function(t,u){var v;if(f.$empty[t.getName()])return false;while(t&&t.type==1){v=t.isEditable();if(v)this.moveToPosition(t,u?2:1);else if(f.$inline[t.getName()]){this.moveToPosition(t,u?4:3);return true;}if(f.$empty[t.getName()])t=t[u?'getPrevious':'getNext'](s);else t=t[u?'getLast':'getFirst'](s);if(t&&t.type==3){this.moveToPosition(t,u?4:3);return true;}}return v;},moveToElementEditStart:function(t){return this.moveToElementEditablePosition(t);},moveToElementEditEnd:function(t){return this.moveToElementEditablePosition(t,true);},getEnclosedNode:function(){var t=this.clone();t.optimize();if(t.startContainer.type!=1||t.endContainer.type!=1)return null;var u=new d.walker(t),v=d.walker.bookmark(true),w=d.walker.whitespaces(true),x=function(z){return w(z)&&v(z);};t.evaluator=x;var y=u.next();u.reset();return y&&y.equals(u.previous())?y:null;},getTouchedStartNode:function(){var t=this.startContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.startOffset)||t;},getTouchedEndNode:function(){var t=this.endContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.endOffset-1)||t;}};})();a.POSITION_AFTER_START=1;a.POSITION_BEFORE_END=2;a.POSITION_BEFORE_START=3;a.POSITION_AFTER_END=4;a.ENLARGE_ELEMENT=1;
+a.ENLARGE_BLOCK_CONTENTS=2;a.ENLARGE_LIST_ITEM_CONTENTS=3;a.START=1;a.END=2;a.STARTEND=3;a.SHRINK_ELEMENT=1;a.SHRINK_TEXT=2;(function(){d.rangeList=function(n){if(n instanceof d.rangeList)return n;if(!n)n=[];else if(n instanceof d.range)n=[n];return e.extend(n,l);};var l={createIterator:function(){var n=this,o=d.walker.bookmark(),p=function(s){return!(s.is&&s.is('tr'));},q=[],r;return{getNextRange:function(s){r=r==undefined?0:r+1;var t=n[r];if(t&&n.length>1){if(!r)for(var u=n.length-1;u>=0;u--)q.unshift(n[u].createBookmark(true));if(s){var v=0;while(n[r+v+1]){var w=t.document,x=0,y=w.getById(q[v].endNode),z=w.getById(q[v+1].startNode),A;while(1){A=y.getNextSourceNode(false);if(!z.equals(A)){if(o(A)||A.type==1&&A.isBlockBoundary()){y=A;continue;}}else x=1;break;}if(!x)break;v++;}}t.moveToBookmark(q.shift());while(v--){A=n[++r];A.moveToBookmark(q.shift());t.setEnd(A.endContainer,A.endOffset);}}return t;}};},createBookmarks:function(n){var s=this;var o=[],p;for(var q=0;q<s.length;q++){o.push(p=s[q].createBookmark(n,true));for(var r=q+1;r<s.length;r++){s[r]=m(p,s[r]);s[r]=m(p,s[r],true);}}return o;},createBookmarks2:function(n){var o=[];for(var p=0;p<this.length;p++)o.push(this[p].createBookmark2(n));return o;},moveToBookmarks:function(n){for(var o=0;o<this.length;o++)this[o].moveToBookmark(n[o]);}};function m(n,o,p){var q=n.serializable,r=o[p?'endContainer':'startContainer'],s=p?'endOffset':'startOffset',t=q?o.document.getById(n.startNode):n.startNode,u=q?o.document.getById(n.endNode):n.endNode;if(r.equals(t.getPrevious())){o.startOffset=o.startOffset-r.getLength()-u.getPrevious().getLength();r=u.getNext();}else if(r.equals(u.getPrevious())){o.startOffset=o.startOffset-r.getLength();r=u.getNext();}r.equals(t.getParent())&&o[s]++;r.equals(u.getParent())&&o[s]++;o[p?'endContainer':'startContainer']=r;return o;};})();(function(){if(b.webkit){b.hc=false;return;}var l=c&&b.version<7,m=c&&b.version==7,n=l?a.basePath+'images/spacer.gif':m?'about:blank':'data:image/png;base64,',o=h.createFromHtml('<div style="width:0px;height:0px;position:absolute;left:-10000px;background-image:url('+n+')"></div>',a.document);o.appendTo(a.document.getHead());try{b.hc=o.getComputedStyle('background-image')=='none';}catch(p){b.hc=false;}if(b.hc)b.cssClass+=' cke_hc';o.remove();})();j.load(i.corePlugins.split(','),function(){a.status='loaded';a.fire('loaded');var l=a._.pending;if(l){delete a._.pending;for(var m=0;m<l.length;m++)a.add(l[m]);}});if(c)try{document.execCommand('BackgroundImageCache',false,true);
+}catch(l){}a.skins.add('kama',(function(){var m='cke_ui_color';return{editor:{css:['editor.css']},dialog:{css:['dialog.css']},templates:{css:['templates.css']},margins:[0,0,0,0],init:function(n){if(n.config.width&&!isNaN(n.config.width))n.config.width-=12;var o=[],p=/\$color/g,q='/* UI Color Support */.cke_skin_kama .cke_menuitem .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{\tbackground-color: transparent !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuseparator{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{\tbackground-color: $color !important;}';if(b.webkit){q=q.split('}').slice(0,-1);for(var r=0;r<q.length;r++)q[r]=q[r].split('{');}function s(v){var w=v.getById(m);if(!w){w=v.getHead().append('style');w.setAttribute('id',m);w.setAttribute('type','text/css');}return w;};function t(v,w,x){var y,z,A;for(var B=0;B<v.length;B++){if(b.webkit)for(z=0;z<w.length;z++){A=w[z][1];for(y=0;y<x.length;y++)A=A.replace(x[y][0],x[y][1]);v[B].$.sheet.addRule(w[z][0],A);}else{A=w;for(y=0;y<x.length;y++)A=A.replace(x[y][0],x[y][1]);if(c)v[B].$.styleSheet.cssText+=A;else v[B].$.innerHTML+=A;}}};var u=/\$color/g;e.extend(n,{uiColor:null,getUiColor:function(){return this.uiColor;},setUiColor:function(v){var w,x=s(a.document),y='.'+n.id,z=[y+' .cke_wrapper',y+'_dialog .cke_dialog_contents',y+'_dialog a.cke_dialog_tab',y+'_dialog .cke_dialog_footer'].join(','),A='background-color: $color !important;';
+if(b.webkit)w=[[z,A]];else w=z+'{'+A+'}';return(this.setUiColor=function(B){var C=[[u,B]];n.uiColor=B;t([x],w,C);t(o,q,C);})(v);}});n.on('menuShow',function(v){var w=v.data[0],x=w.element.getElementsByTag('iframe').getItem(0).getFrameDocument();if(!x.getById('cke_ui_color')){var y=s(x);o.push(y);var z=n.getUiColor();if(z)t([y],q,[[u,z]]);}});if(n.config.uiColor)n.setUiColor(n.config.uiColor);}};})());(function(){a.dialog?m():a.on('dialogPluginReady',m);function m(){a.dialog.on('resize',function(n){var o=n.data,p=o.width,q=o.height,r=o.dialog,s=r.parts.contents;if(o.skin!='kama')return;s.setStyles({width:p+'px',height:q+'px'});setTimeout(function(){var t=r.parts.dialog.getChild([0,0,0]),u=t.getChild(0),v=t.getChild(2);v.setStyle('width',u.$.offsetWidth+'px');v=t.getChild(7);v.setStyle('width',u.$.offsetWidth-28+'px');v=t.getChild(4);v.setStyle('height',q+u.getChild(0).$.offsetHeight+'px');v=t.getChild(5);v.setStyle('height',q+u.getChild(0).$.offsetHeight+'px');},100);});};})();j.add('about',{requires:['dialog'],init:function(m){var n=m.addCommand('about',new a.dialogCommand('about'));n.modes={wysiwyg:1,source:1};n.canUndo=false;m.ui.addButton('About',{label:m.lang.about.title,command:'about'});a.dialog.add('about',this.path+'dialogs/about.js');}});(function(){var m='a11yhelp',n='a11yHelp';j.add(m,{availableLangs:{en:1,he:1},init:function(o){var p=this;o.addCommand(n,{exec:function(){var q=o.langCode;q=p.availableLangs[q]?q:'en';a.scriptLoader.load(a.getUrl(p.path+'lang/'+q+'.js'),function(){e.extend(o.lang,p.lang[q]);o.openDialog(n);});},modes:{wysiwyg:1,source:1},canUndo:false});a.dialog.add(n,this.path+'dialogs/a11yhelp.js');}});})();j.add('basicstyles',{requires:['styles','button'],init:function(m){var n=function(q,r,s,t){var u=new a.style(t);m.attachStyleStateChange(u,function(v){m.getCommand(s).setState(v);});m.addCommand(s,new a.styleCommand(u));m.ui.addButton(q,{label:r,command:s});},o=m.config,p=m.lang;n('Bold',p.bold,'bold',o.coreStyles_bold);n('Italic',p.italic,'italic',o.coreStyles_italic);n('Underline',p.underline,'underline',o.coreStyles_underline);n('Strike',p.strike,'strike',o.coreStyles_strike);n('Subscript',p.subscript,'subscript',o.coreStyles_subscript);n('Superscript',p.superscript,'superscript',o.coreStyles_superscript);}});i.coreStyles_bold={element:'strong',overrides:'b'};i.coreStyles_italic={element:'em',overrides:'i'};i.coreStyles_underline={element:'u'};i.coreStyles_strike={element:'strike'};i.coreStyles_subscript={element:'sub'};i.coreStyles_superscript={element:'sup'};
+(function(){var m={table:1,tbody:1,ul:1,ol:1,blockquote:1,div:1,tr:1},n={},o={};e.extend(n,m,{tr:1,p:1,div:1,li:1});e.extend(o,n,{td:1});function p(w){q(w);r(w);};function q(w){var x=w.editor,y=w.data.path,z=x.config.useComputedState,A;z=z===undefined||z;if(!z)A=s(y.lastElement);A=A||y.block||y.blockLimit;if(!A||A.getName()=='body')return;var B=z?A.getComputedStyle('direction'):A.getStyle('direction')||A.getAttribute('dir');x.getCommand('bidirtl').setState(B=='rtl'?1:2);x.getCommand('bidiltr').setState(B=='ltr'?1:2);};function r(w){var x=w.editor,y=x.container.getChild(1),z=w.data.path.block||w.data.path.blockLimit;if(z&&x.lang.dir!=z.getComputedStyle('direction'))y.addClass('cke_mixed_dir_content');else y.removeClass('cke_mixed_dir_content');};function s(w){while(w&&!(w.getName() in o||w.is('body'))){var x=w.getParent();if(!x)break;w=x;}return w;};function t(w,x,y,z){h.setMarker(z,w,'bidi_processed',1);var A=w;while((A=A.getParent())&&!A.is('body')){if(A.getCustomData('bidi_processed')){w.removeStyle('direction');w.removeAttribute('dir');return null;}}var B='useComputedState' in y.config?y.config.useComputedState:1,C=B?w.getComputedStyle('direction'):w.getStyle('direction')||w.hasAttribute('dir');if(C==x)return null;var D=B?C:w.getComputedStyle('direction');w.removeStyle('direction');if(B){w.removeAttribute('dir');if(x!=w.getComputedStyle('direction'))w.setAttribute('dir',x);}else w.setAttribute('dir',x);if(x!=D)y.fire('dirChanged',{node:w,dir:x});y.forceNextSelectionCheck();return null;};function u(w,x){var y=w.getCommonAncestor(false,true);w.enlarge(2);if(w.checkBoundaryOfElement(y,1)&&w.checkBoundaryOfElement(y,2)){var z;while(y&&y.type==1&&(z=y.getParent())&&z.getChildCount()==1&&(!(y.getName() in x)||z.getName() in x))y=z;return y.type==1&&y.getName() in x&&y;}};function v(w){return function(x){var y=x.getSelection(),z=x.config.enterMode,A=y.getRanges();if(A&&A.length){var B={},C=y.createBookmarks(),D=A.createIterator(),E,F=0;while(E=D.getNextRange(1)){var G=E.getEnclosedNode();if(!G||G&&!(G.type==1&&G.getName() in n))G=u(E,m);if(G&&!G.isReadOnly())t(G,w,x,B);var H,I,J=new d.walker(E),K=C[F].startNode,L=C[F++].endNode;J.evaluator=function(M){return!!(M.type==1&&M.getName() in m&&!(M.getName()==(z==1)?'p':'div'&&M.getParent().type==1&&M.getParent().getName()=='blockquote')&&M.getPosition(K)&2&&(M.getPosition(L)&4+16)==4);};while(I=J.next())t(I,w,x,B);H=E.createIterator();H.enlargeBr=z!=2;while(I=H.getNextParagraph(z==1?'p':'div'))!I.isReadOnly()&&t(I,w,x,B);
+}h.clearAllMarkers(B);x.forceNextSelectionCheck();y.selectBookmarks(C);x.focus();}};};j.add('bidi',{requires:['styles','button'],init:function(w){var x=function(z,A,B,C){w.addCommand(B,new a.command(w,{exec:C}));w.ui.addButton(z,{label:A,command:B});},y=w.lang.bidi;x('BidiLtr',y.ltr,'bidiltr',v('ltr'));x('BidiRtl',y.rtl,'bidirtl',v('rtl'));w.on('selectionChange',p);}});})();(function(){function m(q,r){var s=r.block||r.blockLimit;if(!s||s.getName()=='body')return 2;if(s.getAscendant('blockquote',true))return 1;return 2;};function n(q){var r=q.editor,s=r.getCommand('blockquote');s.state=m(r,q.data.path);s.fire('state');};function o(q){for(var r=0,s=q.getChildCount(),t;r<s&&(t=q.getChild(r));r++){if(t.type==1&&t.isBlockBoundary())return false;}return true;};var p={exec:function(q){var r=q.getCommand('blockquote').state,s=q.getSelection(),t=s&&s.getRanges(true)[0];if(!t)return;var u=s.createBookmarks();if(c){var v=u[0].startNode,w=u[0].endNode,x;if(v&&v.getParent().getName()=='blockquote'){x=v;while(x=x.getNext()){if(x.type==1&&x.isBlockBoundary()){v.move(x,true);break;}}}if(w&&w.getParent().getName()=='blockquote'){x=w;while(x=x.getPrevious()){if(x.type==1&&x.isBlockBoundary()){w.move(x);break;}}}}var y=t.createIterator(),z;if(r==2){var A=[];while(z=y.getNextParagraph())A.push(z);if(A.length<1){var B=q.document.createElement(q.config.enterMode==1?'p':'div'),C=u.shift();t.insertNode(B);B.append(new d.text('\ufeff',q.document));t.moveToBookmark(C);t.selectNodeContents(B);t.collapse(true);C=t.createBookmark();A.push(B);u.unshift(C);}var D=A[0].getParent(),E=[];for(var F=0;F<A.length;F++){z=A[F];D=D.getCommonAncestor(z.getParent());}var G={table:1,tbody:1,tr:1,ol:1,ul:1};while(G[D.getName()])D=D.getParent();var H=null;while(A.length>0){z=A.shift();while(!z.getParent().equals(D))z=z.getParent();if(!z.equals(H))E.push(z);H=z;}while(E.length>0){z=E.shift();if(z.getName()=='blockquote'){var I=new d.documentFragment(q.document);while(z.getFirst()){I.append(z.getFirst().remove());A.push(I.getLast());}I.replace(z);}else A.push(z);}var J=q.document.createElement('blockquote');J.insertBefore(A[0]);while(A.length>0){z=A.shift();J.append(z);}}else if(r==1){var K=[],L={};while(z=y.getNextParagraph()){var M=null,N=null;while(z.getParent()){if(z.getParent().getName()=='blockquote'){M=z.getParent();N=z;break;}z=z.getParent();}if(M&&N&&!N.getCustomData('blockquote_moveout')){K.push(N);h.setMarker(L,N,'blockquote_moveout',true);}}h.clearAllMarkers(L);var O=[],P=[];L={};while(K.length>0){var Q=K.shift();
+J=Q.getParent();if(!Q.getPrevious())Q.remove().insertBefore(J);else if(!Q.getNext())Q.remove().insertAfter(J);else{Q.breakParent(Q.getParent());P.push(Q.getNext());}if(!J.getCustomData('blockquote_processed')){P.push(J);h.setMarker(L,J,'blockquote_processed',true);}O.push(Q);}h.clearAllMarkers(L);for(F=P.length-1;F>=0;F--){J=P[F];if(o(J))J.remove();}if(q.config.enterMode==2){var R=true;while(O.length){Q=O.shift();if(Q.getName()=='div'){I=new d.documentFragment(q.document);var S=R&&Q.getPrevious()&&!(Q.getPrevious().type==1&&Q.getPrevious().isBlockBoundary());if(S)I.append(q.document.createElement('br'));var T=Q.getNext()&&!(Q.getNext().type==1&&Q.getNext().isBlockBoundary());while(Q.getFirst())Q.getFirst().remove().appendTo(I);if(T)I.append(q.document.createElement('br'));I.replace(Q);R=false;}}}}s.selectBookmarks(u);q.focus();}};j.add('blockquote',{init:function(q){q.addCommand('blockquote',p);q.ui.addButton('Blockquote',{label:q.lang.blockquote,command:'blockquote'});q.on('selectionChange',n);},requires:['domiterator']});})();j.add('button',{beforeInit:function(m){m.ui.addHandler(1,k.button.handler);}});a.UI_BUTTON=1;k.button=function(m){e.extend(this,m,{title:m.label,className:m.className||m.command&&'cke_button_'+m.command||'',click:m.click||(function(n){n.execCommand(m.command);})});this._={};};k.button.handler={create:function(m){return new k.button(m);}};k.button._={instances:[],keydown:function(m,n){var o=k.button._.instances[m];if(o.onkey){n=new d.event(n);return o.onkey(o,n.getKeystroke())!==false;}},focus:function(m,n){var o=k.button._.instances[m],p;if(o.onfocus)p=o.onfocus(o,new d.event(n))!==false;if(b.gecko&&b.version<10900)n.preventBubble();return p;}};(function(){var m=e.addFunction(k.button._.keydown,k.button._),n=e.addFunction(k.button._.focus,k.button._);k.button.prototype={canGroup:true,render:function(o,p){var q=b,r=this._.id=e.getNextId(),s='',t=this.command,u,v;this._.editor=o;var w={id:r,button:this,editor:o,focus:function(){var z=a.document.getById(r);z.focus();},execute:function(){this.button.click(o);}};w.clickFn=u=e.addFunction(w.execute,w);w.index=v=k.button._.instances.push(w)-1;if(this.modes){var x={};o.on('beforeModeUnload',function(){x[o.mode]=this._.state;},this);o.on('mode',function(){var z=o.mode;this.setState(this.modes[z]?x[z]!=undefined?x[z]:2:0);},this);}else if(t){t=o.getCommand(t);if(t){t.on('state',function(){this.setState(t.state);},this);s+='cke_'+(t.state==1?'on':t.state==0?'disabled':'off');}}if(!t)s+='cke_off';
+if(this.className)s+=' '+this.className;p.push('<span class="cke_button">','<a id="',r,'" class="',s,'"',q.gecko&&q.version>=10900&&!q.hc?'':'" href="javascript:void(\''+(this.title||'').replace("'",'')+"')\"",' title="',this.title,'" tabindex="-1" hidefocus="true" role="button" aria-labelledby="'+r+'_label"'+(this.hasArrow?' aria-haspopup="true"':''));if(q.opera||q.gecko&&q.mac)p.push(' onkeypress="return false;"');if(q.gecko)p.push(' onblur="this.style.cssText = this.style.cssText;"');p.push(' onkeydown="return CKEDITOR.tools.callFunction(',m,', ',v,', event);" onfocus="return CKEDITOR.tools.callFunction(',n,', ',v,', event);" onclick="CKEDITOR.tools.callFunction(',u,', this); return false;"><span class="cke_icon"');if(this.icon){var y=(this.iconOffset||0)*-16;p.push(' style="background-image:url(',a.getUrl(this.icon),');background-position:0 '+y+'px;"');}p.push('> </span><span id="',r,'_label" class="cke_label">',this.label,'</span>');if(this.hasArrow)p.push('<span class="cke_buttonarrow">'+(b.hc?'▼':' ')+'</span>');p.push('</a>','</span>');if(this.onRender)this.onRender();return w;},setState:function(o){if(this._.state==o)return false;this._.state=o;var p=a.document.getById(this._.id);if(p){p.setState(o);o==0?p.setAttribute('aria-disabled',true):p.removeAttribute('aria-disabled');o==1?p.setAttribute('aria-pressed',true):p.removeAttribute('aria-pressed');return true;}else return false;}};})();k.prototype.addButton=function(m,n){this.add(m,1,n);};a.on('reset',function(){k.button._.instances=[];});(function(){var m=function(t,u){var v=t.document,w=v.getBody(),x=0,y=function(){x=1;};w.on(u,y);(b.version>7?v.$:v.$.selection.createRange()).execCommand(u);w.removeListener(u,y);return x;},n=c?function(t,u){return m(t,u);}:function(t,u){try{return t.document.$.execCommand(u,false,null);}catch(v){return false;}},o=function(t){this.type=t;this.canUndo=this.type=='cut';};o.prototype={exec:function(t,u){this.type=='cut'&&s(t);var v=n(t,this.type);if(!v)alert(t.lang.clipboard[this.type+'Error']);return v;}};var p={canUndo:false,exec:c?function(t){t.focus();if(!t.document.getBody().fire('beforepaste')&&!m(t,'paste')){t.fire('pasteDialog');return false;}}:function(t){try{if(!t.document.getBody().fire('beforepaste')&&!t.document.$.execCommand('Paste',false,null))throw 0;}catch(u){setTimeout(function(){t.fire('pasteDialog');},0);return false;}}},q=function(t){if(this.mode!='wysiwyg')return;switch(t.data.keyCode){case 1000+86:case 2000+45:var u=this.document.getBody();
+if(!c&&u.fire('beforepaste'))t.cancel();else if(b.opera||b.gecko&&b.version<10900)u.fire('paste');return;case 1000+88:case 2000+46:var v=this;this.fire('saveSnapshot');setTimeout(function(){v.fire('saveSnapshot');},0);}};function r(t,u,v){var w=this.document;if(w.getById('cke_pastebin'))return;if(u=='text'&&t.data&&t.data.$.clipboardData){var x=t.data.$.clipboardData.getData('text/plain');if(x){t.data.preventDefault();v(x);return;}}var y=this.getSelection(),z=new d.range(w),A=new h(u=='text'?'textarea':b.webkit?'body':'div',w);A.setAttribute('id','cke_pastebin');b.webkit&&A.append(w.createText('\xa0'));w.getBody().append(A);A.setStyles({position:'absolute',top:y.getStartElement().getDocumentPosition().y+'px',width:'1px',height:'1px',overflow:'hidden'});A.setStyle(this.config.contentsLangDirection=='ltr'?'left':'right','-1000px');var B=y.createBookmarks();if(u=='text'){if(c){var C=w.getBody().$.createTextRange();C.moveToElementText(A.$);C.execCommand('Paste');t.data.preventDefault();}else{w.$.designMode='off';A.$.focus();}}else{z.setStartAt(A,1);z.setEndAt(A,2);z.select(true);}window.setTimeout(function(){u=='text'&&!c&&(w.$.designMode='on');A.remove();var D;A=b.webkit&&(D=A.getFirst())&&D.is&&D.hasClass('Apple-style-span')?D:A;y.selectBookmarks(B);v(A['get'+(u=='text'?'Value':'Html')]());},0);};function s(t){if(!c||b.quirks)return;var u=t.getSelection(),v;if(u.getType()==3&&(v=u.getSelectedElement())){var w=u.getRanges()[0],x=t.document.createText('');x.insertBefore(v);w.setStartBefore(x);w.setEndAfter(v);u.selectRanges([w]);setTimeout(function(){if(v.getParent()){x.remove();u.selectElement(v);}},0);}};j.add('clipboard',{requires:['dialog','htmldataprocessor'],init:function(t){t.on('paste',function(y){var z=y.data;if(z.html)t.insertHtml(z.html);else if(z.text)t.insertText(z.text);},null,null,1000);t.on('pasteDialog',function(y){setTimeout(function(){t.openDialog('paste');},0);});function u(y,z,A,B){var C=t.lang[z];t.addCommand(z,A);t.ui.addButton(y,{label:C,command:z});if(t.addMenuItems)t.addMenuItem(z,{label:C,command:z,group:'clipboard',order:B});};u('Cut','cut',new o('cut'),1);u('Copy','copy',new o('copy'),4);u('Paste','paste',p,8);a.dialog.add('paste',a.getUrl(this.path+'dialogs/paste.js'));t.on('key',q,t);var v=t.config.forcePasteAsPlainText?'text':'html';t.on('contentDom',function(){var y=t.document.getBody();y.on(v=='text'&&c||b.webkit?'paste':'beforepaste',function(z){if(w)return;r.call(t,z,v,function(A){if(!A)return;var B={};B[v]=A;t.fire('paste',B);
+});});y.on('beforecut',function(){!w&&s(t);});});if(t.contextMenu){var w;function x(y){c&&(w=1);var z=t.document.$.queryCommandEnabled(y)?2:0;w=0;return z;};t.contextMenu.addListener(function(y,z){var A=z.getCommonAncestor().isReadOnly();return{cut:!A&&x('Cut'),copy:x('Copy'),paste:!A&&(b.webkit?2:x('Paste'))};});}}});})();j.add('colorbutton',{requires:['panelbutton','floatpanel','styles'],init:function(m){var n=m.config,o=m.lang.colorButton,p;if(!b.hc){q('TextColor','fore',o.textColorTitle);q('BGColor','back',o.bgColorTitle);}function q(t,u,v){var w=e.getNextId()+'_colorBox';m.ui.add(t,4,{label:v,title:v,className:'cke_button_'+t.toLowerCase(),modes:{wysiwyg:1},panel:{css:m.skin.editor.css,attributes:{role:'listbox','aria-label':o.panelTitle}},onBlock:function(x,y){y.autoSize=true;y.element.addClass('cke_colorblock');y.element.setHtml(r(x,u,w));y.element.getDocument().getBody().setStyle('overflow','hidden');k.fire('ready',this);var z=y.keys,A=m.lang.dir=='rtl';z[A?37:39]='next';z[40]='next';z[9]='next';z[A?39:37]='prev';z[38]='prev';z[2000+9]='prev';z[32]='click';},onOpen:function(){var x=m.getSelection(),y=x&&x.getStartElement(),z=new d.elementPath(y),A;y=z.block||z.blockLimit;do A=y&&y.getComputedStyle(u=='back'?'background-color':'color')||'transparent';while(u=='back'&&A=='transparent'&&(y=y.getParent()))if(!A||A=='transparent')A='#ffffff';this._.panel._.iframe.getFrameDocument().getById(w).setStyle('background-color',A);}});};function r(t,u,v){var w=[],x=n.colorButton_colors.split(','),y=x.length+(n.colorButton_enableMore?2:1),z=e.addFunction(function(F,G){if(F=='?'){var H=arguments.callee;function I(K){this.removeListener('ok',I);this.removeListener('cancel',I);K.name=='ok'&&H(this.getContentElement('picker','selectedColor').getValue(),G);};m.openDialog('colordialog',function(){this.on('ok',I);this.on('cancel',I);});return;}m.focus();t.hide();m.fire('saveSnapshot');new a.style(n['colorButton_'+G+'Style'],{color:'inherit'}).remove(m.document);if(F){var J=n['colorButton_'+G+'Style'];J.childRule=G=='back'?function(K){return s(K);}:function(K){return K.getName()!='a'||s(K);};new a.style(J,{color:F}).apply(m.document);}m.fire('saveSnapshot');});w.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="',o.auto,'" onclick="CKEDITOR.tools.callFunction(',z,",null,'",u,"');return false;\" href=\"javascript:void('",o.auto,'\')" role="option" aria-posinset="1" aria-setsize="',y,'"><table role="presentation" cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" id="',v,'"></span></td><td colspan=7 align=center>',o.auto,'</td></tr></table></a><table role="presentation" cellspacing=0 cellpadding=0 width="100%">');
+for(var A=0;A<x.length;A++){if(A%8===0)w.push('</tr><tr>');var B=x[A].split('/'),C=B[0],D=B[1]||C;if(!B[1])C='#'+C.replace(/^(.)(.)(.)$/,'$1$1$2$2$3$3');var E=m.lang.colors[D]||D;w.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="',E,'" onclick="CKEDITOR.tools.callFunction(',z,",'",C,"','",u,"'); return false;\" href=\"javascript:void('",E,'\')" role="option" aria-posinset="',A+2,'" aria-setsize="',y,'"><span class="cke_colorbox" style="background-color:#',D,'"></span></a></td>');}if(n.colorButton_enableMore===undefined||n.colorButton_enableMore)w.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="',o.more,'" onclick="CKEDITOR.tools.callFunction(',z,",'?','",u,"');return false;\" href=\"javascript:void('",o.more,"')\"",' role="option" aria-posinset="',y,'" aria-setsize="',y,'">',o.more,'</a></td>');w.push('</tr></table>');return w.join('');};function s(t){return t.getAttribute('contentEditable')=='false'||t.getAttribute('data-cke-nostyle');};}});i.colorButton_colors='000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF';i.colorButton_foreStyle={element:'span',styles:{color:'#(color)'},overrides:[{element:'font',attributes:{color:null}}]};i.colorButton_backStyle={element:'span',styles:{'background-color':'#(color)'}};(function(){j.colordialog={init:function(m){m.addCommand('colordialog',new a.dialogCommand('colordialog'));a.dialog.add('colordialog',this.path+'dialogs/colordialog.js');}};j.add('colordialog',j.colordialog);})();j.add('contextmenu',{requires:['menu'],onLoad:function(){j.contextMenu=e.createClass({base:a.menu,$:function(m){this.base.call(this,m,{panel:{className:m.skinClass+' cke_contextmenu',attributes:{'aria-label':m.lang.contextmenu.options}}});},proto:{addTarget:function(m,n){if(b.opera&&!('oncontextmenu' in document.body)){var o;m.on('mousedown',function(s){s=s.data;if(s.$.button!=2){if(s.getKeystroke()==1000+1)m.fire('contextmenu',s);return;}if(n&&(b.mac?s.$.metaKey:s.$.ctrlKey))return;var t=s.getTarget();if(!o){var u=t.getDocument();o=u.createElement('input');o.$.type='button';u.getBody().append(o);}o.setAttribute('style','position:absolute;top:'+(s.$.clientY-2)+'px;left:'+(s.$.clientX-2)+'px;width:5px;height:5px;opacity:0.01');});m.on('mouseup',function(s){if(o){o.remove();
+o=undefined;m.fire('contextmenu',s.data);}});}m.on('contextmenu',function(s){var t=s.data;if(n&&(b.webkit?p:b.mac?t.$.metaKey:t.$.ctrlKey))return;t.preventDefault();var u=t.getTarget().getDocument().getDocumentElement(),v=t.$.clientX,w=t.$.clientY;e.setTimeout(function(){this.open(u,null,v,w);},0,this);},this);if(b.opera)m.on('keypress',function(s){var t=s.data;if(t.$.keyCode===0)t.preventDefault();});if(b.webkit){var p,q=function(s){p=b.mac?s.data.$.metaKey:s.data.$.ctrlKey;},r=function(){p=0;};m.on('keydown',q);m.on('keyup',r);m.on('contextmenu',r);}},open:function(m,n,o,p){this.editor.focus();m=m||a.document.getDocumentElement();this.show(m,n,o,p);}}});},beforeInit:function(m){m.contextMenu=new j.contextMenu(m);m.addCommand('contextMenu',{exec:function(){m.contextMenu.open(m.document.getBody());}});}});(function(){function m(o){var p=this.att,q=o&&o.hasAttribute(p)&&o.getAttribute(p)||'';if(q!==undefined)this.setValue(q);};function n(){var o;for(var p=0;p<arguments.length;p++){if(arguments[p] instanceof h){o=arguments[p];break;}}if(o){var q=this.att,r=this.getValue();if(q=='dir'){var s=o.getAttribute(q);if(s!=r&&o.getParent())this._.dialog._.editor.fire('dirChanged',{node:o,dir:r||o.getDirection(1)});}if(r)o.setAttribute(q,r);else o.removeAttribute(q,r);}};j.add('dialogadvtab',{createAdvancedTab:function(o,p){if(!p)p={id:1,dir:1,classes:1,styles:1};var q=o.lang.common,r={id:'advanced',label:q.advancedTab,title:q.advancedTab,elements:[{type:'vbox',padding:1,children:[]}]},s=[];if(p.id||p.dir){if(p.id)s.push({id:'advId',att:'id',type:'text',label:q.id,setup:m,commit:n});if(p.dir)s.push({id:'advLangDir',att:'dir',type:'select',label:q.langDir,'default':'',style:'width:100%',items:[[q.notSet,''],[q.langDirLTR,'ltr'],[q.langDirRTL,'rtl']],setup:m,commit:n});r.elements[0].children.push({type:'hbox',widths:['50%','50%'],children:[].concat(s)});}if(p.styles||p.classes){s=[];if(p.styles)s.push({id:'advStyles',att:'style',type:'text',label:q.styles,'default':'',getStyle:function(t,u){var v=this.getValue().match(new RegExp(t+'\\s*:s*([^;]*)','i'));return v?v[1]:u;},updateStyle:function(t,u){var v=this.getValue();if(v)v=v.replace(new RegExp('\\s*'+t+'s*:[^;]*(?:$|;s*)','i'),'').replace(/^[;\s]+/,'').replace(/\s+$/,'');if(u){v&&!/;\s*$/.test(v)&&(v+='; ');v+=t+': '+u;}this.setValue(v,1);},setup:m,commit:n});if(p.classes)s.push({type:'hbox',widths:['45%','55%'],children:[{id:'advCSSClasses',att:'class',type:'text',label:q.cssClasses,'default':'',setup:m,commit:n}]});r.elements[0].children.push({type:'hbox',widths:['50%','50%'],children:[].concat(s)});
+}return r;}});})();(function(){j.add('div',{requires:['editingblock','domiterator','styles'],init:function(m){var n=m.lang.div;m.addCommand('creatediv',new a.dialogCommand('creatediv'));m.addCommand('editdiv',new a.dialogCommand('editdiv'));m.addCommand('removediv',{exec:function(o){var p=o.getSelection(),q=p&&p.getRanges(),r,s=p.createBookmarks(),t,u=[];function v(x){var y=new d.elementPath(x),z=y.blockLimit,A=z.is('div')&&z;if(A&&!A.data('cke-div-added')){u.push(A);A.data('cke-div-added');}};for(var w=0;w<q.length;w++){r=q[w];if(r.collapsed)v(p.getStartElement());else{t=new d.walker(r);t.evaluator=v;t.lastForward();}}for(w=0;w<u.length;w++)u[w].remove(true);p.selectBookmarks(s);}});m.ui.addButton('CreateDiv',{label:n.toolbar,command:'creatediv'});if(m.addMenuItems){m.addMenuItems({editdiv:{label:n.edit,command:'editdiv',group:'div',order:1},removediv:{label:n.remove,command:'removediv',group:'div',order:5}});if(m.contextMenu)m.contextMenu.addListener(function(o,p){if(!o||o.isReadOnly())return null;var q=new d.elementPath(o),r=q.blockLimit;if(r&&r.getAscendant('div',true))return{editdiv:2,removediv:2};return null;});}a.dialog.add('creatediv',this.path+'dialogs/div.js');a.dialog.add('editdiv',this.path+'dialogs/div.js');}});})();(function(){var m={toolbarFocus:{exec:function(o){var p=o._.elementsPath.idBase,q=a.document.getById(p+'0');q&&q.focus(c||b.air);}}},n='<span class="cke_empty"> </span>';j.add('elementspath',{requires:['selection'],init:function(o){var p='cke_path_'+o.name,q,r=function(){if(!q)q=a.document.getById(p);return q;},s='cke_elementspath_'+e.getNextNumber()+'_';o._.elementsPath={idBase:s,filters:[]};o.on('themeSpace',function(w){if(w.data.space=='bottom')w.data.html+='<span id="'+p+'_label" class="cke_voice_label">'+o.lang.elementsPath.eleLabel+'</span>'+'<div id="'+p+'" class="cke_path" role="group" aria-labelledby="'+p+'_label">'+n+'</div>';});function t(w){o.focus();var x=o._.elementsPath.list[w];if(x.is('body')){var y=new d.range(o.document);y.selectNodeContents(x);y.select();}else o.getSelection().selectElement(x);};var u=e.addFunction(t),v=e.addFunction(function(w,x){var y=o._.elementsPath.idBase,z;x=new d.event(x);var A=o.lang.dir=='rtl';switch(x.getKeystroke()){case A?39:37:case 9:z=a.document.getById(y+(w+1));if(!z)z=a.document.getById(y+'0');z.focus();return false;case A?37:39:case 2000+9:z=a.document.getById(y+(w-1));if(!z)z=a.document.getById(y+(o._.elementsPath.list.length-1));z.focus();return false;case 27:o.focus();return false;
+case 13:case 32:t(w);return false;}return true;});o.on('selectionChange',function(w){var x=b,y=w.data.selection,z=y.getStartElement(),A=[],B=w.editor,C=B._.elementsPath.list=[],D=B._.elementsPath.filters;while(z){var E=0;for(var F=0;F<D.length;F++){if(D[F](z)===false){E=1;break;}}if(!E){var G=C.push(z)-1,H;if(z.data('cke-real-element-type'))H=z.data('cke-real-element-type');else H=z.getName();var I='';if(x.opera||x.gecko&&x.mac)I+=' onkeypress="return false;"';if(x.gecko)I+=' onblur="this.style.cssText = this.style.cssText;"';var J=B.lang.elementsPath.eleTitle.replace(/%1/,H);A.unshift('<a id="',s,G,'" href="javascript:void(\'',H,'\')" tabindex="-1" title="',J,'"'+(b.gecko&&b.version<10900?' onfocus="event.preventBubble();"':'')+' hidefocus="true" '+' onkeydown="return CKEDITOR.tools.callFunction(',v,',',G,', event );"'+I,' onclick="CKEDITOR.tools.callFunction('+u,',',G,'); return false;"',' role="button" aria-labelledby="'+s+G+'_label">',H,'<span id="',s,G,'_label" class="cke_label">'+J+'</span>','</a>');}if(H=='body')break;z=z.getParent();}var K=r();K.setHtml(A.join('')+n);B.fire('elementsPathUpdate',{space:K});});o.on('contentDomUnload',function(){q&&q.setHtml(n);});o.addCommand('elementsPathFocus',m.toolbarFocus);}});})();(function(){j.add('enterkey',{requires:['keystrokes','indent'],init:function(t){var u=t.specialKeys;u[13]=r;u[2000+13]=q;}});j.enterkey={enterBlock:function(t,u,v,w){v=v||s(t);if(!v)return;var x=v.document;if(v.checkStartOfBlock()&&v.checkEndOfBlock()){var y=new d.elementPath(v.startContainer),z=y.block;if(z&&(z.is('li')||z.getParent().is('li'))){t.execCommand('outdent');return;}}var A=u==3?'div':'p',B=v.splitBlock(A);if(!B)return;var C=B.previousBlock,D=B.nextBlock,E=B.wasStartOfBlock,F=B.wasEndOfBlock,G;if(D){G=D.getParent();if(G.is('li')){D.breakParent(G);D.move(D.getNext(),1);}}else if(C&&(G=C.getParent())&&G.is('li')){C.breakParent(G);v.moveToElementEditStart(C.getNext());C.move(C.getPrevious());}if(!E&&!F){if(D.is('li')&&(G=D.getFirst(d.walker.invisible(true)))&&G.is&&G.is('ul','ol'))(c?x.createText('\xa0'):x.createElement('br')).insertBefore(G);if(D)v.moveToElementEditStart(D);}else{var H,I;if(C){if(C.is('li')||!p.test(C.getName()))H=C.clone();}else if(D)H=D.clone();if(!H){H=x.createElement(A);if(C&&(I=C.getDirection()))H.setAttribute('dir',I);}else if(w&&!H.is('li'))H.renameNode(A);var J=B.elementPath;if(J)for(var K=0,L=J.elements.length;K<L;K++){var M=J.elements[K];if(M.equals(J.block)||M.equals(J.blockLimit))break;if(f.$removeEmpty[M.getName()]){M=M.clone();
+H.moveChildren(M);H.append(M);}}if(!c)H.appendBogus();v.insertNode(H);if(c&&E&&(!F||!C.getChildCount())){v.moveToElementEditStart(F?C:H);v.select();}v.moveToElementEditStart(E&&!F?D:H);}if(!c)if(D){var N=x.createElement('span');N.setHtml(' ');v.insertNode(N);N.scrollIntoView();v.deleteContents();}else H.scrollIntoView();v.select();},enterBr:function(t,u,v,w){v=v||s(t);if(!v)return;var x=v.document,y=u==3?'div':'p',z=v.checkEndOfBlock(),A=new d.elementPath(t.getSelection().getStartElement()),B=A.block,C=B&&A.block.getName(),D=false;if(!w&&C=='li'){o(t,u,v,w);return;}if(!w&&z&&p.test(C)){var E,F;if(F=B.getDirection()){E=x.createElement('div');E.setAttribute('dir',F);E.insertAfter(B);v.setStart(E,0);}else{x.createElement('br').insertAfter(B);if(b.gecko)x.createText('').insertAfter(B);v.setStartAt(B.getNext(),c?3:1);}}else{var G;D=C=='pre';if(D&&!b.gecko)G=x.createText(c?'\r':'\n');else G=x.createElement('br');v.deleteContents();v.insertNode(G);if(!c)x.createText('\ufeff').insertAfter(G);if(z&&!c)G.getParent().appendBogus();if(!c)G.getNext().$.nodeValue='';if(c)v.setStartAt(G,4);else v.setStartAt(G.getNext(),1);if(!c){var H=null;if(!b.gecko){H=x.createElement('span');H.setHtml(' ');}else H=x.createElement('br');H.insertBefore(G.getNext());H.scrollIntoView();H.remove();}}v.collapse(true);v.select(D);}};var m=j.enterkey,n=m.enterBr,o=m.enterBlock,p=/^h[1-6]$/;function q(t){if(t.mode!='wysiwyg')return false;if(t.getSelection().getStartElement().hasAscendant('pre',true)){setTimeout(function(){o(t,t.config.enterMode,null,true);},0);return true;}else return r(t,t.config.shiftEnterMode,1);};function r(t,u,v){v=t.config.forceEnterMode||v;if(t.mode!='wysiwyg')return false;if(!u)u=t.config.enterMode;setTimeout(function(){t.fire('saveSnapshot');if(u==2||t.getSelection().getStartElement().hasAscendant('pre',1))n(t,u,null,v);else o(t,u,null,v);},0);return true;};function s(t){var u=t.getSelection().getRanges(true);for(var v=u.length-1;v>0;v--)u[v].deleteContents();return u[0];};})();(function(){var m='nbsp,gt,lt,quot',n='iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro',o='Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml',p='Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv';
+function q(r,s){var t={},u=[],v={nbsp:'\xa0',shy:'',gt:'>',lt:'<'};r=r.replace(/\b(nbsp|shy|gt|lt|amp)(?:,|$)/g,function(A,B){var C=s?'&'+B+';':v[B],D=s?v[B]:'&'+B+';';t[C]=D;u.push(C);return '';});if(!s){r=r.split(',');var w=document.createElement('div'),x;w.innerHTML='&'+r.join(';&')+';';x=w.innerHTML;w=null;for(var y=0;y<x.length;y++){var z=x.charAt(y);t[z]='&'+r[y]+';';u.push(z);}}t.regex=u.join(s?'|':'');return t;};j.add('entities',{afterInit:function(r){var s=r.config,t=r.dataProcessor,u=t&&t.htmlFilter;if(u){var v=m;if(s.entities){v+=','+n;if(s.entities_latin)v+=','+o;if(s.entities_greek)v+=','+p;if(s.entities_additional)v+=','+s.entities_additional;}var w=q(v),x='['+w.regex+']';delete w.regex;if(s.entities&&s.entities_processNumerical)x='[^ -~]|'+x;x=new RegExp(x,'g');function y(C){return s.entities_processNumerical=='force'||!w[C]?'&#'+C.charCodeAt(0)+';':w[C];};var z=q([m,'shy'].join(','),true),A=new RegExp(z.regex,'g');function B(C){return z[C];};u.addRules({text:function(C){return C.replace(A,B).replace(x,y);}});}}});})();i.entities=true;i.entities_latin=true;i.entities_greek=true;i.entities_additional='#39';(function(){function m(v,w){var x=[];if(!w)return v;else for(var y in w)x.push(y+'='+encodeURIComponent(w[y]));return v+(v.indexOf('?')!=-1?'&':'?')+x.join('&');};function n(v){v+='';var w=v.charAt(0).toUpperCase();return w+v.substr(1);};function o(v){var C=this;var w=C.getDialog(),x=w.getParentEditor();x._.filebrowserSe=C;var y=x.config['filebrowser'+n(w.getName())+'WindowWidth']||x.config.filebrowserWindowWidth||'80%',z=x.config['filebrowser'+n(w.getName())+'WindowHeight']||x.config.filebrowserWindowHeight||'70%',A=C.filebrowser.params||{};A.CKEditor=x.name;A.CKEditorFuncNum=x._.filebrowserFn;if(!A.langCode)A.langCode=x.langCode;var B=m(C.filebrowser.url,A);x.popup(B,y,z,x.config.fileBrowserWindowFeatures);};function p(v){var y=this;var w=y.getDialog(),x=w.getParentEditor();x._.filebrowserSe=y;if(!w.getContentElement(y['for'][0],y['for'][1]).getInputElement().$.value)return false;if(!w.getContentElement(y['for'][0],y['for'][1]).getAction())return false;return true;};function q(v,w,x){var y=x.params||{};y.CKEditor=v.name;y.CKEditorFuncNum=v._.filebrowserFn;if(!y.langCode)y.langCode=v.langCode;w.action=m(x.url,y);w.filebrowser=x;};function r(v,w,x,y){var z,A;for(var B in y){z=y[B];if(z.type=='hbox'||z.type=='vbox')r(v,w,x,z.children);if(!z.filebrowser)continue;if(typeof z.filebrowser=='string'){var C={action:z.type=='fileButton'?'QuickUpload':'Browse',target:z.filebrowser};
+z.filebrowser=C;}if(z.filebrowser.action=='Browse'){var D=z.filebrowser.url;if(D===undefined){D=v.config['filebrowser'+n(w)+'BrowseUrl'];if(D===undefined)D=v.config.filebrowserBrowseUrl;}if(D){z.onClick=o;z.filebrowser.url=D;z.hidden=false;}}else if(z.filebrowser.action=='QuickUpload'&&z['for']){D=z.filebrowser.url;if(D===undefined){D=v.config['filebrowser'+n(w)+'UploadUrl'];if(D===undefined)D=v.config.filebrowserUploadUrl;}if(D){var E=z.onClick;z.onClick=function(F){var G=F.sender;if(E&&E.call(G,F)===false)return false;return p.call(G,F);};z.filebrowser.url=D;z.hidden=false;q(v,x.getContents(z['for'][0]).get(z['for'][1]),z.filebrowser);}}}};function s(v,w){var x=w.getDialog(),y=w.filebrowser.target||null;v=v.replace(/#/g,'%23');if(y){var z=y.split(':'),A=x.getContentElement(z[0],z[1]);if(A){A.setValue(v);x.selectPage(z[0]);}}};function t(v,w,x){if(x.indexOf(';')!==-1){var y=x.split(';');for(var z=0;z<y.length;z++){if(t(v,w,y[z]))return true;}return false;}var A=v.getContents(w).get(x).filebrowser;return A&&A.url;};function u(v,w){var A=this;var x=A._.filebrowserSe.getDialog(),y=A._.filebrowserSe['for'],z=A._.filebrowserSe.filebrowser.onSelect;if(y)x.getContentElement(y[0],y[1]).reset();if(typeof w=='function'&&w.call(A._.filebrowserSe)===false)return;if(z&&z.call(A._.filebrowserSe,v,w)===false)return;if(typeof w=='string'&&w)alert(w);if(v)s(v,A._.filebrowserSe);};j.add('filebrowser',{init:function(v,w){v._.filebrowserFn=e.addFunction(u,v);}});a.on('dialogDefinition',function(v){var w=v.data.definition,x;for(var y in w.contents){if(x=w.contents[y]){r(v.editor,v.data.name,w,x.elements);if(x.hidden&&x.filebrowser)x.hidden=!t(w,x.id,x.filebrowser);}}});})();j.add('find',{init:function(m){var n=j.find;m.ui.addButton('Find',{label:m.lang.findAndReplace.find,command:'find'});var o=m.addCommand('find',new a.dialogCommand('find'));o.canUndo=false;m.ui.addButton('Replace',{label:m.lang.findAndReplace.replace,command:'replace'});var p=m.addCommand('replace',new a.dialogCommand('replace'));p.canUndo=false;a.dialog.add('find',this.path+'dialogs/find.js');a.dialog.add('replace',this.path+'dialogs/find.js');},requires:['styles']});i.find_highlight={element:'span',styles:{'background-color':'#004',color:'#fff'}};(function(){var m=/\.swf(?:$|\?)/i,n=e.cssLength;function o(q){var r=q.attributes;return r.type=='application/x-shockwave-flash'||m.test(r.src||'');};function p(q,r){var s=q.createFakeParserElement(r,'cke_flash','flash',true),t=s.attributes.style||'',u=r.attributes.width,v=r.attributes.height;
+if(typeof u!='undefined')t=s.attributes.style=t+'width:'+n(u)+';';if(typeof v!='undefined')t=s.attributes.style=t+'height:'+n(v)+';';return s;};j.add('flash',{init:function(q){q.addCommand('flash',new a.dialogCommand('flash'));q.ui.addButton('Flash',{label:q.lang.common.flash,command:'flash'});a.dialog.add('flash',this.path+'dialogs/flash.js');q.addCss('img.cke_flash{background-image: url('+a.getUrl(this.path+'images/placeholder.png')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 80px;'+'height: 80px;'+'}');if(q.addMenuItems)q.addMenuItems({flash:{label:q.lang.flash.properties,command:'flash',group:'flash'}});q.on('doubleclick',function(r){var s=r.data.element;if(s.is('img')&&s.data('cke-real-element-type')=='flash')r.data.dialog='flash';});if(q.contextMenu)q.contextMenu.addListener(function(r,s){if(r&&r.is('img')&&!r.isReadOnly()&&r.data('cke-real-element-type')=='flash')return{flash:2};});},afterInit:function(q){var r=q.dataProcessor,s=r&&r.dataFilter;if(s)s.addRules({elements:{'cke:object':function(t){var u=t.attributes,v=u.classid&&String(u.classid).toLowerCase();if(!v){for(var w=0;w<t.children.length;w++){if(t.children[w].name=='cke:embed'){if(!o(t.children[w]))return null;return p(q,t);}}return null;}return p(q,t);},'cke:embed':function(t){if(!o(t))return null;return p(q,t);}}},5);},requires:['fakeobjects']});})();e.extend(i,{flashEmbedTagOnly:false,flashAddEmbedTag:true,flashConvertOnEdit:false});(function(){function m(n,o,p,q,r,s,t){var u=n.config,v=r.split(';'),w=[],x={};for(var y=0;y<v.length;y++){var z=v[y];if(z){z=z.split('/');var A={},B=v[y]=z[0];A[p]=w[y]=z[1]||B;x[B]=new a.style(t,A);x[B]._.definition.name=B;}else v.splice(y--,1);}n.ui.addRichCombo(o,{label:q.label,title:q.panelTitle,className:'cke_'+(p=='size'?'fontSize':'font'),panel:{css:n.skin.editor.css.concat(u.contentsCss),multiSelect:false,attributes:{'aria-label':q.panelTitle}},init:function(){this.startGroup(q.panelTitle);for(var C=0;C<v.length;C++){var D=v[C];this.add(D,x[D].buildPreview(),D);}},onClick:function(C){n.focus();n.fire('saveSnapshot');var D=x[C];if(this.getValue()==C)D.remove(n.document);else D.apply(n.document);n.fire('saveSnapshot');},onRender:function(){n.on('selectionChange',function(C){var D=this.getValue(),E=C.data.path,F=E.elements;for(var G=0,H;G<F.length;G++){H=F[G];for(var I in x){if(x[I].checkElementRemovable(H,true)){if(I!=D)this.setValue(I);return;}}}this.setValue('',s);},this);}});};j.add('font',{requires:['richcombo','styles'],init:function(n){var o=n.config;
+m(n,'Font','family',n.lang.font,o.font_names,o.font_defaultLabel,o.font_style);m(n,'FontSize','size',n.lang.fontSize,o.fontSize_sizes,o.fontSize_defaultLabel,o.fontSize_style);}});})();i.font_names='Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif';i.font_defaultLabel='';i.font_style={element:'span',styles:{'font-family':'#(family)'},overrides:[{element:'font',attributes:{face:null}}]};i.fontSize_sizes='8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px';i.fontSize_defaultLabel='';i.fontSize_style={element:'span',styles:{'font-size':'#(size)'},overrides:[{element:'font',attributes:{size:null}}]};j.add('format',{requires:['richcombo','styles'],init:function(m){var n=m.config,o=m.lang.format,p=n.format_tags.split(';'),q={};for(var r=0;r<p.length;r++){var s=p[r];q[s]=new a.style(n['format_'+s]);q[s]._.enterMode=m.config.enterMode;}m.ui.addRichCombo('Format',{label:o.label,title:o.panelTitle,className:'cke_format',panel:{css:m.skin.editor.css.concat(n.contentsCss),multiSelect:false,attributes:{'aria-label':o.panelTitle}},init:function(){this.startGroup(o.panelTitle);for(var t in q){var u=o['tag_'+t];this.add(t,'<'+t+'>'+u+'</'+t+'>',u);}},onClick:function(t){m.focus();m.fire('saveSnapshot');q[t].apply(m.document);setTimeout(function(){m.fire('saveSnapshot');},0);},onRender:function(){m.on('selectionChange',function(t){var u=this.getValue(),v=t.data.path;for(var w in q){if(q[w].checkActive(v)){if(w!=u)this.setValue(w,m.lang.format['tag_'+w]);return;}}this.setValue('');},this);}});}});i.format_tags='p;h1;h2;h3;h4;h5;h6;pre;address;div';i.format_p={element:'p'};i.format_div={element:'div'};i.format_pre={element:'pre'};i.format_address={element:'address'};i.format_h1={element:'h1'};i.format_h2={element:'h2'};i.format_h3={element:'h3'};i.format_h4={element:'h4'};i.format_h5={element:'h5'};i.format_h6={element:'h6'};j.add('forms',{init:function(m){var n=m.lang;m.addCss('form{border: 1px dotted #FF0000;padding: 2px;}\n');m.addCss('img.cke_hidden{background-image: url('+a.getUrl(this.path+'images/hiddenfield.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 16px !important;'+'height: 16px !important;'+'}');
+var o=function(q,r,s){m.addCommand(r,new a.dialogCommand(r));m.ui.addButton(q,{label:n.common[q.charAt(0).toLowerCase()+q.slice(1)],command:r});a.dialog.add(r,s);},p=this.path+'dialogs/';o('Form','form',p+'form.js');o('Checkbox','checkbox',p+'checkbox.js');o('Radio','radio',p+'radio.js');o('TextField','textfield',p+'textfield.js');o('Textarea','textarea',p+'textarea.js');o('Select','select',p+'select.js');o('Button','button',p+'button.js');o('ImageButton','imagebutton',j.getPath('image')+'dialogs/image.js');o('HiddenField','hiddenfield',p+'hiddenfield.js');if(m.addMenuItems)m.addMenuItems({form:{label:n.form.menu,command:'form',group:'form'},checkbox:{label:n.checkboxAndRadio.checkboxTitle,command:'checkbox',group:'checkbox'},radio:{label:n.checkboxAndRadio.radioTitle,command:'radio',group:'radio'},textfield:{label:n.textfield.title,command:'textfield',group:'textfield'},hiddenfield:{label:n.hidden.title,command:'hiddenfield',group:'hiddenfield'},imagebutton:{label:n.image.titleButton,command:'imagebutton',group:'imagebutton'},button:{label:n.button.title,command:'button',group:'button'},select:{label:n.select.title,command:'select',group:'select'},textarea:{label:n.textarea.title,command:'textarea',group:'textarea'}});if(m.contextMenu){m.contextMenu.addListener(function(q){if(q&&q.hasAscendant('form',true)&&!q.isReadOnly())return{form:2};});m.contextMenu.addListener(function(q){if(q&&!q.isReadOnly()){var r=q.getName();if(r=='select')return{select:2};if(r=='textarea')return{textarea:2};if(r=='input'){var s=q.getAttribute('type');if(s=='text'||s=='password')return{textfield:2};if(s=='button'||s=='submit'||s=='reset')return{button:2};if(s=='checkbox')return{checkbox:2};if(s=='radio')return{radio:2};if(s=='image')return{imagebutton:2};}if(r=='img'&&q.data('cke-real-element-type')=='hiddenfield')return{hiddenfield:2};}});}m.on('doubleclick',function(q){var r=q.data.element;if(r.is('form'))q.data.dialog='form';else if(r.is('select'))q.data.dialog='select';else if(r.is('textarea'))q.data.dialog='textarea';else if(r.is('img')&&r.data('cke-real-element-type')=='hiddenfield')q.data.dialog='hiddenfield';else if(r.is('input')){var s=r.getAttribute('type');switch(s){case 'text':case 'password':q.data.dialog='textfield';break;case 'button':case 'submit':case 'reset':q.data.dialog='button';break;case 'checkbox':q.data.dialog='checkbox';break;case 'radio':q.data.dialog='radio';break;case 'image':q.data.dialog='imagebutton';break;}}});},afterInit:function(m){var n=m.dataProcessor,o=n&&n.htmlFilter,p=n&&n.dataFilter;
+if(c)o&&o.addRules({elements:{input:function(q){var r=q.attributes,s=r.type;if(s=='checkbox'||s=='radio')r.value=='on'&&delete r.value;}}});if(p)p.addRules({elements:{input:function(q){if(q.attributes.type=='hidden')return m.createFakeParserElement(q,'cke_hidden','hiddenfield');}}});},requires:['image','fakeobjects']});if(c)h.prototype.hasAttribute=function(m){var p=this;var n=p.$.attributes.getNamedItem(m);if(p.getName()=='input')switch(m){case 'class':return p.$.className.length>0;case 'checked':return!!p.$.checked;case 'value':var o=p.getAttribute('type');if(o=='checkbox'||o=='radio')return p.$.value!='on';break;default:}return!!(n&&n.specified);};(function(){var m={canUndo:false,exec:function(o){o.insertElement(o.document.createElement('hr'));}},n='horizontalrule';j.add(n,{init:function(o){o.addCommand(n,m);o.ui.addButton('HorizontalRule',{label:o.lang.horizontalrule,command:n});}});})();(function(){var m=/^[\t\r\n ]*(?: |\xa0)$/,n='{cke_protected}';function o(R){var S=R.children.length,T=R.children[S-1];while(T&&T.type==3&&!e.trim(T.value))T=R.children[--S];return T;};function p(R,S){var T=R.children,U=o(R);if(U){if((S||!c)&&U.type==1&&U.name=='br')T.pop();if(U.type==3&&m.test(U.value))T.pop();}};function q(R,S,T){if(!S&&(!T||typeof T=='function'&&T(R)===false))return false;if(S&&c&&(document.documentMode>7||R.name in f.tr||R.name in f.$listItem))return false;var U=o(R);return!U||U&&(U.type==1&&U.name=='br'||R.name=='form'&&U.name=='input');};function r(R,S){return function(T){p(T,!R);if(q(T,!R,S))if(R||c)T.add(new a.htmlParser.text('\xa0'));else T.add(new a.htmlParser.element('br',{}));};};var s=f,t=e.extend({},s.$block,s.$listItem,s.$tableContent);for(var u in t){if(!('br' in s[u]))delete t[u];}delete t.pre;var v={elements:{},attributeNames:[[/^on/,'data-cke-pa-on']]},w={elements:{}};for(u in t)w.elements[u]=r();var x={elementNames:[[/^cke:/,''],[/^\?xml:namespace$/,'']],attributeNames:[[/^data-cke-(saved|pa)-/,''],[/^data-cke.*/,''],['hidefocus','']],elements:{$:function(R){var S=R.attributes;if(S){if(S['data-cke-temp'])return false;var T=['name','href','src'],U;for(var V=0;V<T.length;V++){U='data-cke-saved-'+T[V];U in S&&delete S[T[V]];}}return R;},embed:function(R){var S=R.parent;if(S&&S.name=='object'){var T=S.attributes.width,U=S.attributes.height;T&&(R.attributes.width=T);U&&(R.attributes.height=U);}},param:function(R){R.children=[];R.isEmpty=true;return R;},a:function(R){if(!(R.children.length||R.attributes.name||R.attributes['data-cke-saved-name']))return false;
+},span:function(R){if(R.attributes['class']=='Apple-style-span')delete R.name;},html:function(R){delete R.attributes.contenteditable;delete R.attributes['class'];},body:function(R){delete R.attributes.spellcheck;delete R.attributes.contenteditable;},style:function(R){var S=R.children[0];S&&S.value&&(S.value=e.trim(S.value));if(!R.attributes.type)R.attributes.type='text/css';},title:function(R){var S=R.children[0];S&&(S.value=R.attributes['data-cke-title']||'');}},attributes:{'class':function(R,S){return e.ltrim(R.replace(/(?:^|\s+)cke_[^\s]*/g,''))||false;}},comment:function(R){if(R.substr(0,n.length)==n){if(R.substr(n.length,3)=='{C}')R=R.substr(n.length+3);else R=R.substr(n.length);return new a.htmlParser.cdata(decodeURIComponent(R));}return R;}};if(c)x.attributes.style=function(R,S){return R.toLowerCase();};function y(R){R.attributes.contenteditable='false';};function z(R){delete R.attributes.contenteditable;};for(u in {input:1,textarea:1}){v.elements[u]=y;x.elements[u]=z;}var A=/<((?:a|area|img|input)\b[\s\S]*?\s)((href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))([^>]*)>/gi,B=/\sdata-cke-saved-src\s*=/,C=/(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,D=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,E=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,F=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,G=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi;function H(R){return R.replace(A,function(S,T,U,V,W){if(V=='src'&&B.test(S))return S;else return '<'+T+U+' data-cke-saved-'+U+W+'>';});};function I(R){return R.replace(C,function(S){return '<cke:encoded>'+encodeURIComponent(S)+'</cke:encoded>';});};function J(R){return R.replace(D,function(S,T){return decodeURIComponent(T);});};function K(R){return R.replace(E,'$1cke:$2');};function L(R){return R.replace(F,'$1$2');};function M(R){return R.replace(G,'<cke:$1$2></cke:$1>');};function N(R){return R.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,'$1$2$2');};function O(R){return R.replace(/<!--(?!{cke_protected})[\s\S]+?-->/g,function(S){return '<!--'+n+'{C}'+encodeURIComponent(S).replace(/--/g,'%2D%2D')+'-->';});};function P(R){return R.replace(/<!--\{cke_protected\}\{C\}([\s\S]+?)-->/g,function(S,T){return decodeURIComponent(T);});};function Q(R,S){var T=[],U=/<\!--\{cke_temp(comment)?\}(\d*?)-->/g,V=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi].concat(S);R=R.replace(/<!--[\s\S]*?-->/g,function(X){return '<!--{cke_tempcomment}'+(T.push(X)-1)+'-->';});for(var W=0;
+W<V.length;W++)R=R.replace(V[W],function(X){X=X.replace(U,function(Y,Z,aa){return T[aa];});return '<!--{cke_temp}'+(T.push(X)-1)+'-->';});R=R.replace(U,function(X,Y,Z){return '<!--'+n+(Y?'{C}':'')+encodeURIComponent(T[Z]).replace(/--/g,'%2D%2D')+'-->';});return R;};j.add('htmldataprocessor',{requires:['htmlwriter'],init:function(R){var S=R.dataProcessor=new a.htmlDataProcessor(R);S.writer.forceSimpleAmpersand=R.config.forceSimpleAmpersand;S.dataFilter.addRules(v);S.dataFilter.addRules(w);S.htmlFilter.addRules(x);var T={elements:{}};for(u in t)T.elements[u]=r(true,R.config.fillEmptyBlocks);S.htmlFilter.addRules(T);},onLoad:function(){!('fillEmptyBlocks' in i)&&(i.fillEmptyBlocks=1);}});a.htmlDataProcessor=function(R){var S=this;S.editor=R;S.writer=new a.htmlWriter();S.dataFilter=new a.htmlParser.filter();S.htmlFilter=new a.htmlParser.filter();};a.htmlDataProcessor.prototype={toHtml:function(R,S){R=Q(R,this.editor.config.protectedSource);R=H(R);R=I(R);R=K(R);R=M(R);R=N(R);var T=new h('div');T.setHtml('a'+R);R=T.getHtml().substr(1);R=L(R);R=J(R);R=P(R);var U=a.htmlParser.fragment.fromHtml(R,S),V=new a.htmlParser.basicWriter();U.writeHtml(V,this.dataFilter);R=V.getHtml(true);R=O(R);return R;},toDataFormat:function(R,S){var T=this.writer,U=a.htmlParser.fragment.fromHtml(R,S);T.reset();U.writeHtml(T,this.htmlFilter);return T.getHtml(true);}};})();(function(){function m(n,o){var p=n.createFakeParserElement(o,'cke_iframe','iframe',true),q=p.attributes.style||'',r=o.attributes.width,s=o.attributes.height;if(typeof r!='undefined')q+='width:'+e.cssLength(r)+';';if(typeof s!='undefined')q+='height:'+e.cssLength(s)+';';p.attributes.style=q;return p;};j.add('iframe',{requires:['dialog','fakeobjects'],init:function(n){var o='iframe',p=n.lang.iframe;a.dialog.add(o,this.path+'dialogs/iframe.js');n.addCommand(o,new a.dialogCommand(o));n.addCss('img.cke_iframe{background-image: url('+a.getUrl(this.path+'images/placeholder.png')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 80px;'+'height: 80px;'+'}');n.ui.addButton('Iframe',{label:p.toolbar,command:o});n.on('doubleclick',function(q){var r=q.data.element;if(r.is('img')&&r.data('cke-real-element-type')=='iframe')q.data.dialog='iframe';});if(n.addMenuItems)n.addMenuItems({iframe:{label:p.title,command:'iframe',group:'image'}});if(n.contextMenu)n.contextMenu.addListener(function(q,r){if(q&&q.is('img')&&q.data('cke-real-element-type')=='iframe')return{iframe:2};});},afterInit:function(n){var o=n.dataProcessor,p=o&&o.dataFilter;
+if(p)p.addRules({elements:{iframe:function(q){return m(n,q);}}});}});})();j.add('image',{init:function(m){var n='image';a.dialog.add(n,this.path+'dialogs/image.js');m.addCommand(n,new a.dialogCommand(n));m.ui.addButton('Image',{label:m.lang.common.image,command:n});m.on('doubleclick',function(o){var p=o.data.element;if(p.is('img')&&!p.data('cke-realelement'))o.data.dialog='image';});if(m.addMenuItems)m.addMenuItems({image:{label:m.lang.image.menu,command:'image',group:'image'}});if(m.contextMenu)m.contextMenu.addListener(function(o,p){if(!o||!o.is('img')||o.data('cke-realelement')||o.isReadOnly())return null;return{image:2};});}});i.image_removeLinkByEmptyURL=true;(function(){var m={ol:1,ul:1},n=d.walker.whitespaces(true),o=d.walker.bookmark(false,true);function p(u,v){u.getCommand(this.name).setState(v);};function q(u){var D=this;var v=u.editor,w=u.data.path,x=w&&w.contains(m);if(x)return p.call(D,v,2);if(!D.useIndentClasses&&D.name=='indent')return p.call(D,v,2);var y=u.data.path,z=y.block||y.blockLimit;if(!z)return p.call(D,v,0);if(D.useIndentClasses){var A=z.$.className.match(D.classNameRegex),B=0;if(A){A=A[1];B=D.indentClassMap[A];}if(D.name=='outdent'&&!B||D.name=='indent'&&B==v.config.indentClasses.length)return p.call(D,v,0);return p.call(D,v,2);}else{var C=parseInt(z.getStyle(s(z)),10);if(isNaN(C))C=0;if(C<=0)return p.call(D,v,0);return p.call(D,v,2);}};function r(u,v){var x=this;x.name=v;x.useIndentClasses=u.config.indentClasses&&u.config.indentClasses.length>0;if(x.useIndentClasses){x.classNameRegex=new RegExp('(?:^|\\s+)('+u.config.indentClasses.join('|')+')(?=$|\\s)');x.indentClassMap={};for(var w=0;w<u.config.indentClasses.length;w++)x.indentClassMap[u.config.indentClasses[w]]=w+1;}x.startDisabled=v=='outdent';};function s(u,v){return(v||u.getComputedStyle('direction'))=='ltr'?'margin-left':'margin-right';};function t(u){return u.type=1&&u.is('li');};r.prototype={exec:function(u){var v=this,w={};function x(N){var O=D.startContainer,P=D.endContainer;while(O&&!O.getParent().equals(N))O=O.getParent();while(P&&!P.getParent().equals(N))P=P.getParent();if(!O||!P)return;var Q=O,R=[],S=false;while(!S){if(Q.equals(P))S=true;R.push(Q);Q=Q.getNext();}if(R.length<1)return;var T=N.getParents(true);for(var U=0;U<T.length;U++){if(T[U].getName&&m[T[U].getName()]){N=T[U];break;}}var V=v.name=='indent'?1:-1,W=R[0],X=R[R.length-1],Y=j.list.listToArray(N,w),Z=Y[X.getCustomData('listarray_index')].indent;for(U=W.getCustomData('listarray_index');U<=X.getCustomData('listarray_index');
+U++){Y[U].indent+=V;var aa=Y[U].parent;Y[U].parent=new h(aa.getName(),aa.getDocument());}for(U=X.getCustomData('listarray_index')+1;U<Y.length&&Y[U].indent>Z;U++)Y[U].indent+=V;var ab=j.list.arrayToList(Y,w,null,u.config.enterMode,N.getDirection());if(v.name=='outdent'){var ac;if((ac=N.getParent())&&ac.is('li')){var ad=ab.listNode.getChildren(),ae=[],af=ad.count(),ag;for(U=af-1;U>=0;U--){if((ag=ad.getItem(U))&&ag.is&&ag.is('li'))ae.push(ag);}}}if(ab)ab.listNode.replace(N);if(ae&&ae.length)for(U=0;U<ae.length;U++){var ah=ae[U],ai=ah;while((ai=ai.getNext())&&ai.is&&ai.getName() in m){if(c&&!ah.getFirst(function(aj){return n(aj)&&o(aj);}))ah.append(D.document.createText('\xa0'));ah.append(ai);}ah.insertAfter(ac);}};function y(){var N=D.createIterator(),O=u.config.enterMode;N.enforceRealBlocks=true;N.enlargeBr=O!=2;var P;while(P=N.getNextParagraph())z(P);};function z(N,O){if(N.getCustomData('indent_processed'))return false;if(v.useIndentClasses){var P=N.$.className.match(v.classNameRegex),Q=0;if(P){P=P[1];Q=v.indentClassMap[P];}if(v.name=='outdent')Q--;else Q++;if(Q<0)return false;Q=Math.min(Q,u.config.indentClasses.length);Q=Math.max(Q,0);N.$.className=e.ltrim(N.$.className.replace(v.classNameRegex,''));if(Q>0)N.addClass(u.config.indentClasses[Q-1]);}else{var R=s(N,O),S=parseInt(N.getStyle(R),10);if(isNaN(S))S=0;var T=u.config.indentOffset||40;S+=(v.name=='indent'?1:-1)*T;if(S<0)return false;S=Math.max(S,0);S=Math.ceil(S/T)*T;N.setStyle(R,S?S+(u.config.indentUnit||'px'):'');if(N.getAttribute('style')==='')N.removeAttribute('style');}h.setMarker(w,N,'indent_processed',1);return true;};var A=u.getSelection(),B=A.createBookmarks(1),C=A&&A.getRanges(1),D,E=C.createIterator();while(D=E.getNextRange()){var F=D.getCommonAncestor(),G=F;while(G&&!(G.type==1&&m[G.getName()]))G=G.getParent();if(!G){var H=D.getEnclosedNode();if(H&&H.type==1&&H.getName() in m){D.setStartAt(H,1);D.setEndAt(H,2);G=H;}}if(G&&D.startContainer.type==1&&D.startContainer.getName() in m){var I=new d.walker(D);I.evaluator=t;D.startContainer=I.next();}if(G&&D.endContainer.type==1&&D.endContainer.getName() in m){I=new d.walker(D);I.evaluator=t;D.endContainer=I.previous();}if(G){var J=G.getFirst(t),K=!!J.getNext(t),L=D.startContainer,M=J.equals(L)||J.contains(L);if(!(M&&(v.name=='indent'||v.useIndentClasses||parseInt(G.getStyle(s(G)),10))&&z(G,!K&&J.getDirection())))x(G);}else y();}h.clearAllMarkers(w);u.forceNextSelectionCheck();A.selectBookmarks(B);}};j.add('indent',{init:function(u){var v=new r(u,'indent'),w=new r(u,'outdent');
+u.addCommand('indent',v);u.addCommand('outdent',w);u.ui.addButton('Indent',{label:u.lang.indent,command:'indent'});u.ui.addButton('Outdent',{label:u.lang.outdent,command:'outdent'});u.on('selectionChange',e.bind(q,v));u.on('selectionChange',e.bind(q,w));if(b.ie6Compat||b.ie7Compat)u.addCss('ul,ol{\tmargin-left: 0px;\tpadding-left: 40px;}');u.on('dirChanged',function(x){var y=new d.range(u.document);y.setStartBefore(x.data.node);y.setEndAfter(x.data.node);var z=new d.walker(y),A;while(A=z.next()){if(A.type==1){if(!A.equals(x.data.node)&&A.getDirection()){y.setStartAfter(A);z=new d.walker(y);continue;}var B=u.config.indentClasses;if(B){var C=x.data.dir=='ltr'?['_rtl','']:['','_rtl'];for(var D=0;D<B.length;D++){if(A.hasClass(B[D]+C[0])){A.removeClass(B[D]+C[0]);A.addClass(B[D]+C[1]);}}}var E=A.getStyle('margin-right'),F=A.getStyle('margin-left');E?A.setStyle('margin-left',E):A.removeStyle('margin-left');F?A.setStyle('margin-right',F):A.removeStyle('margin-right');}}});},requires:['domiterator','list']});})();(function(){function m(r,s){var t=s.block||s.blockLimit;if(!t||t.getName()=='body')return 2;return n(t,r.config.useComputedState)==this.value?1:2;};function n(r,s){s=s===undefined||s;var t;if(s)t=r.getComputedStyle('text-align');else{while(!r.hasAttribute||!(r.hasAttribute('align')||r.getStyle('text-align'))){var u=r.getParent();if(!u)break;r=u;}t=r.getStyle('text-align')||r.getAttribute('align')||'';}t&&(t=t.replace(/-moz-|-webkit-|start|auto/i,''));!t&&s&&(t=r.getComputedStyle('direction')=='rtl'?'right':'left');return t;};function o(r){var s=r.editor.getCommand(this.name);s.state=m.call(this,r.editor,r.data.path);s.fire('state');};function p(r,s,t){var v=this;v.name=s;v.value=t;var u=r.config.justifyClasses;if(u){switch(t){case 'left':v.cssClassName=u[0];break;case 'center':v.cssClassName=u[1];break;case 'right':v.cssClassName=u[2];break;case 'justify':v.cssClassName=u[3];break;}v.cssClassRegex=new RegExp('(?:^|\\s+)(?:'+u.join('|')+')(?=$|\\s)');}};function q(r){var s=r.editor,t=new d.range(s.document);t.setStartBefore(r.data.node);t.setEndAfter(r.data.node);var u=new d.walker(t),v;while(v=u.next()){if(v.type==1){if(!v.equals(r.data.node)&&v.getDirection()){t.setStartAfter(v);u=new d.walker(t);continue;}var w=s.config.justifyClasses;if(w)if(v.hasClass(w[0])){v.removeClass(w[0]);v.addClass(w[2]);}else if(v.hasClass(w[2])){v.removeClass(w[2]);v.addClass(w[0]);}var x='text-align',y=v.getStyle(x);if(y=='left')v.setStyle(x,'right');else if(y=='right')v.setStyle(x,'left');
+}}};p.prototype={exec:function(r){var D=this;var s=r.getSelection(),t=r.config.enterMode;if(!s)return;var u=s.createBookmarks(),v=s.getRanges(true),w=D.cssClassName,x,y,z=r.config.useComputedState;z=z===undefined||z;for(var A=v.length-1;A>=0;A--){x=v[A].createIterator();x.enlargeBr=t!=2;while(y=x.getNextParagraph()){y.removeAttribute('align');y.removeStyle('text-align');var B=w&&(y.$.className=e.ltrim(y.$.className.replace(D.cssClassRegex,''))),C=D.state==2&&(!z||n(y,true)!=D.value);if(w){if(C)y.addClass(w);else if(!B)y.removeAttribute('class');}else if(C)y.setStyle('text-align',D.value);}}r.focus();r.forceNextSelectionCheck();s.selectBookmarks(u);}};j.add('justify',{init:function(r){var s=new p(r,'justifyleft','left'),t=new p(r,'justifycenter','center'),u=new p(r,'justifyright','right'),v=new p(r,'justifyblock','justify');r.addCommand('justifyleft',s);r.addCommand('justifycenter',t);r.addCommand('justifyright',u);r.addCommand('justifyblock',v);r.ui.addButton('JustifyLeft',{label:r.lang.justify.left,command:'justifyleft'});r.ui.addButton('JustifyCenter',{label:r.lang.justify.center,command:'justifycenter'});r.ui.addButton('JustifyRight',{label:r.lang.justify.right,command:'justifyright'});r.ui.addButton('JustifyBlock',{label:r.lang.justify.block,command:'justifyblock'});r.on('selectionChange',e.bind(o,s));r.on('selectionChange',e.bind(o,u));r.on('selectionChange',e.bind(o,t));r.on('selectionChange',e.bind(o,v));r.on('dirChanged',q);},requires:['domiterator']});})();j.add('keystrokes',{beforeInit:function(m){m.keystrokeHandler=new a.keystrokeHandler(m);m.specialKeys={};},init:function(m){var n=m.config.keystrokes,o=m.config.blockedKeystrokes,p=m.keystrokeHandler.keystrokes,q=m.keystrokeHandler.blockedKeystrokes;for(var r=0;r<n.length;r++)p[n[r][0]]=n[r][1];for(r=0;r<o.length;r++)q[o[r]]=1;}});a.keystrokeHandler=function(m){var n=this;if(m.keystrokeHandler)return m.keystrokeHandler;n.keystrokes={};n.blockedKeystrokes={};n._={editor:m};return n;};(function(){var m,n=function(p){p=p.data;var q=p.getKeystroke(),r=this.keystrokes[q],s=this._.editor;m=s.fire('key',{keyCode:q})===true;if(!m){if(r){var t={from:'keystrokeHandler'};m=s.execCommand(r,t)!==false;}if(!m){var u=s.specialKeys[q];m=u&&u(s)===true;if(!m)m=!!this.blockedKeystrokes[q];}}if(m)p.preventDefault(true);return!m;},o=function(p){if(m){m=false;p.data.preventDefault(true);}};a.keystrokeHandler.prototype={attach:function(p){p.on('keydown',n,this);if(b.opera||b.gecko&&b.mac)p.on('keypress',o,this);}};})();
+i.blockedKeystrokes=[1000+66,1000+73,1000+85];i.keystrokes=[[4000+121,'toolbarFocus'],[4000+122,'elementsPathFocus'],[2000+121,'contextMenu'],[1000+2000+121,'contextMenu'],[1000+90,'undo'],[1000+89,'redo'],[1000+2000+90,'redo'],[1000+76,'link'],[1000+66,'bold'],[1000+73,'italic'],[1000+85,'underline'],[4000+109,'toolbarCollapse'],[4000+48,'a11yHelp']];j.add('link',{init:function(m){m.addCommand('link',new a.dialogCommand('link'));m.addCommand('anchor',new a.dialogCommand('anchor'));m.addCommand('unlink',new a.unlinkCommand());m.ui.addButton('Link',{label:m.lang.link.toolbar,command:'link'});m.ui.addButton('Unlink',{label:m.lang.unlink,command:'unlink'});m.ui.addButton('Anchor',{label:m.lang.anchor.toolbar,command:'anchor'});a.dialog.add('link',this.path+'dialogs/link.js');a.dialog.add('anchor',this.path+'dialogs/anchor.js');m.addCss('img.cke_anchor{background-image: url('+a.getUrl(this.path+'images/anchor.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 18px !important;'+'height: 18px !important;'+'}\n'+'a.cke_anchor'+'{'+'background-image: url('+a.getUrl(this.path+'images/anchor.gif')+');'+'background-position: 0 center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'padding-left: 18px;'+'}');m.on('selectionChange',function(n){var o=m.getCommand('unlink'),p=n.data.path.lastElement&&n.data.path.lastElement.getAscendant('a',true);if(p&&p.getName()=='a'&&p.getAttribute('href'))o.setState(2);else o.setState(0);});m.on('doubleclick',function(n){var o=j.link.getSelectedLink(m)||n.data.element;if(!o.isReadOnly())if(o.is('a'))n.data.dialog=o.getAttribute('name')&&!o.getAttribute('href')?'anchor':'link';else if(o.is('img')&&o.data('cke-real-element-type')=='anchor')n.data.dialog='anchor';});if(m.addMenuItems)m.addMenuItems({anchor:{label:m.lang.anchor.menu,command:'anchor',group:'anchor'},link:{label:m.lang.link.menu,command:'link',group:'link',order:1},unlink:{label:m.lang.unlink,command:'unlink',group:'link',order:5}});if(m.contextMenu)m.contextMenu.addListener(function(n,o){if(!n||n.isReadOnly())return null;var p=n.is('img')&&n.data('cke-real-element-type')=='anchor';if(!p){if(!(n=j.link.getSelectedLink(m)))return null;p=n.getAttribute('name')&&!n.getAttribute('href');}return p?{anchor:2}:{link:2,unlink:2};});},afterInit:function(m){var n=m.dataProcessor,o=n&&n.dataFilter;if(o)o.addRules({elements:{a:function(p){var q=p.attributes;if(q.name&&!q.href)return m.createFakeParserElement(p,'cke_anchor','anchor');
+}}});},requires:['fakeobjects']});j.link={getSelectedLink:function(m){try{var n=m.getSelection();if(n.getType()==3){var o=n.getSelectedElement();if(o.is('a'))return o;}var p=n.getRanges(true)[0];p.shrink(2);var q=p.getCommonAncestor();return q.getAscendant('a',true);}catch(r){return null;}}};a.unlinkCommand=function(){};a.unlinkCommand.prototype={exec:function(m){var n=m.getSelection(),o=n.createBookmarks(),p=n.getRanges(),q,r;for(var s=0;s<p.length;s++){q=p[s].getCommonAncestor(true);r=q.getAscendant('a',true);if(!r)continue;p[s].selectNodeContents(r);}n.selectRanges(p);m.document.$.execCommand('unlink',false,null);n.selectBookmarks(o);},startDisabled:true};e.extend(i,{linkShowAdvancedTab:true,linkShowTargetTab:true});(function(){var m={ol:1,ul:1},n=/^[\n\r\t ]*$/,o=d.walker.whitespaces(),p=d.walker.bookmark(),q=function(F){return!(o(F)||p(F));};j.list={listToArray:function(F,G,H,I,J){if(!m[F.getName()])return[];if(!I)I=0;if(!H)H=[];for(var K=0,L=F.getChildCount();K<L;K++){var M=F.getChild(K);if(M.$.nodeName.toLowerCase()!='li')continue;var N={parent:F,indent:I,element:M,contents:[]};if(!J){N.grandparent=F.getParent();if(N.grandparent&&N.grandparent.$.nodeName.toLowerCase()=='li')N.grandparent=N.grandparent.getParent();}else N.grandparent=J;if(G)h.setMarker(G,M,'listarray_index',H.length);H.push(N);for(var O=0,P=M.getChildCount(),Q;O<P;O++){Q=M.getChild(O);if(Q.type==1&&m[Q.getName()])j.list.listToArray(Q,G,H,I+1,N.grandparent);else N.contents.push(Q);}}return H;},arrayToList:function(F,G,H,I,J){if(!H)H=0;if(!F||F.length<H+1)return null;var K=F[H].parent.getDocument(),L=new d.documentFragment(K),M=null,N=H,O=Math.max(F[H].indent,0),P=null,Q=I==1?'p':'div';while(1){var R=F[N];if(R.indent==O){if(!M||F[N].parent.getName()!=M.getName()){M=F[N].parent.clone(false,1);J&&M.setAttribute('dir',J);L.append(M);}P=M.append(R.element.clone(0,1));for(var S=0;S<R.contents.length;S++)P.append(R.contents[S].clone(1,1));N++;}else if(R.indent==Math.max(O,0)+1){var T=j.list.arrayToList(F,null,N,I);P.append(T.listNode);N=T.nextIndex;}else if(R.indent==-1&&!H&&R.grandparent){P;if(m[R.grandparent.getName()])P=R.element.clone(false,true);else if(J||R.element.hasAttributes()||I!=2&&R.grandparent.getName()!='td'){P=K.createElement(Q);R.element.copyAttributes(P,{type:1,value:1});J&&P.setAttribute('dir',J);if(!J&&I==2&&!P.hasAttributes())P=new d.documentFragment(K);}else P=new d.documentFragment(K);for(S=0;S<R.contents.length;S++)P.append(R.contents[S].clone(1,1));if(P.type==11&&N!=F.length-1){var U=P.getLast();
+if(U&&U.type==1&&U.getAttribute('type')=='_moz')U.remove();if(!(U=P.getLast(q)&&U.type==1&&U.getName() in f.$block))P.append(K.createElement('br'));}if(P.type==1&&P.getName()==Q&&P.$.firstChild){P.trim();var V=P.getFirst();if(V.type==1&&V.isBlockBoundary()){var W=new d.documentFragment(K);P.moveChildren(W);P=W;}}var X=P.$.nodeName.toLowerCase();if(!c&&(X=='div'||X=='p'))P.appendBogus();L.append(P);M=null;N++;}else return null;if(F.length<=N||Math.max(F[N].indent,0)<O)break;}if(G){var Y=L.getFirst();while(Y){if(Y.type==1)h.clearMarkers(G,Y);Y=Y.getNextSourceNode();}}return{listNode:L,nextIndex:N};}};function r(F,G){F.getCommand(this.name).setState(G);};function s(F){var G=F.data.path,H=G.blockLimit,I=G.elements,J;for(var K=0;K<I.length&&(J=I[K])&&!J.equals(H);K++){if(m[I[K].getName()])return r.call(this,F.editor,this.type==I[K].getName()?1:2);}return r.call(this,F.editor,2);};function t(F,G,H,I){var J=j.list.listToArray(G.root,H),K=[];for(var L=0;L<G.contents.length;L++){var M=G.contents[L];M=M.getAscendant('li',true);if(!M||M.getCustomData('list_item_processed'))continue;K.push(M);h.setMarker(H,M,'list_item_processed',true);}var N=G.root,O=N.getDocument().createElement(this.type);N.copyAttributes(O,{start:1,type:1});O.removeStyle('list-style-type');for(L=0;L<K.length;L++){var P=K[L].getCustomData('listarray_index');J[P].parent=O;}var Q=j.list.arrayToList(J,H,null,F.config.enterMode),R,S=Q.listNode.getChildCount();for(L=0;L<S&&(R=Q.listNode.getChild(L));L++){if(R.getName()==this.type)I.push(R);}Q.listNode.replace(G.root);};var u=/^h[1-6]$/;function v(F,G,H){var I=G.contents,J=G.root.getDocument(),K=[];if(I.length==1&&I[0].equals(G.root)){var L=J.createElement('div');I[0].moveChildren&&I[0].moveChildren(L);I[0].append(L);I[0]=L;}var M=G.contents[0].getParent();for(var N=0;N<I.length;N++)M=M.getCommonAncestor(I[N].getParent());var O=F.config.useComputedState,P,Q;O=O===undefined||O;for(N=0;N<I.length;N++){var R=I[N],S;while(S=R.getParent()){if(S.equals(M)){K.push(R);if(!Q&&R.getDirection())Q=1;var T=R.getDirection(O);if(P!==null)if(P&&P!=T)P=null;else P=T;break;}R=S;}}if(K.length<1)return;var U=K[K.length-1].getNext(),V=J.createElement(this.type);H.push(V);var W,X;while(K.length){W=K.shift();X=J.createElement('li');if(W.is('pre')||u.test(W.getName()))W.appendTo(X);else{if(P&&W.getDirection()){W.removeStyle('direction');W.removeAttribute('dir');}W.copyAttributes(X);W.moveChildren(X);W.remove();}X.appendTo(V);}if(P&&Q)V.setAttribute('dir',P);if(U)V.insertBefore(U);
+else V.appendTo(M);};function w(F,G,H){var I=j.list.listToArray(G.root,H),J=[];for(var K=0;K<G.contents.length;K++){var L=G.contents[K];L=L.getAscendant('li',true);if(!L||L.getCustomData('list_item_processed'))continue;J.push(L);h.setMarker(H,L,'list_item_processed',true);}var M=null;for(K=0;K<J.length;K++){var N=J[K].getCustomData('listarray_index');I[N].indent=-1;M=N;}for(K=M+1;K<I.length;K++){if(I[K].indent>I[K-1].indent+1){var O=I[K-1].indent+1-I[K].indent,P=I[K].indent;while(I[K]&&I[K].indent>=P){I[K].indent+=O;K++;}K--;}}var Q=j.list.arrayToList(I,H,null,F.config.enterMode,G.root.getAttribute('dir')),R=Q.listNode,S,T;function U(V){if((S=R[V?'getFirst':'getLast']())&&!(S.is&&S.isBlockBoundary())&&(T=G.root[V?'getPrevious':'getNext'](d.walker.whitespaces(true)))&&!(T.is&&T.isBlockBoundary({br:1})))F.document.createElement('br')[V?'insertBefore':'insertAfter'](S);};U(true);U();R.replace(G.root);};function x(F,G){this.name=F;this.type=G;};x.prototype={exec:function(F){F.focus();var G=F.document,H=F.getSelection(),I=H&&H.getRanges(true);if(!I||I.length<1)return;if(this.state==2){var J=G.getBody();J.trim();if(!J.getFirst()){var K=G.createElement(F.config.enterMode==1?'p':F.config.enterMode==3?'div':'br');K.appendTo(J);I=new d.rangeList([new d.range(G)]);if(K.is('br')){I[0].setStartBefore(K);I[0].setEndAfter(K);}else I[0].selectNodeContents(K);H.selectRanges(I);}else{var L=I.length==1&&I[0],M=L&&L.getEnclosedNode();if(M&&M.is&&this.type==M.getName())r.call(this,F,1);}}var N=H.createBookmarks(true),O=[],P={},Q=I.createIterator(),R=0;while((L=Q.getNextRange())&&++R){var S=L.getBoundaryNodes(),T=S.startNode,U=S.endNode;if(T.type==1&&T.getName()=='td')L.setStartAt(S.startNode,1);if(U.type==1&&U.getName()=='td')L.setEndAt(S.endNode,2);var V=L.createIterator(),W;V.forceBrBreak=this.state==2;while(W=V.getNextParagraph()){if(W.getCustomData('list_block'))continue;else h.setMarker(P,W,'list_block',1);var X=new d.elementPath(W),Y=X.elements,Z=Y.length,aa=null,ab=0,ac=X.blockLimit,ad;for(var ae=Z-1;ae>=0&&(ad=Y[ae]);ae--){if(m[ad.getName()]&&ac.contains(ad)){ac.removeCustomData('list_group_object_'+R);var af=ad.getCustomData('list_group_object');if(af)af.contents.push(W);else{af={root:ad,contents:[W]};O.push(af);h.setMarker(P,ad,'list_group_object',af);}ab=1;break;}}if(ab)continue;var ag=ac;if(ag.getCustomData('list_group_object_'+R))ag.getCustomData('list_group_object_'+R).contents.push(W);else{af={root:ag,contents:[W]};h.setMarker(P,ag,'list_group_object_'+R,af);O.push(af);
+}}}var ah=[];while(O.length>0){af=O.shift();if(this.state==2){if(m[af.root.getName()])t.call(this,F,af,P,ah);else v.call(this,F,af,ah);}else if(this.state==1&&m[af.root.getName()])w.call(this,F,af,P);}for(ae=0;ae<ah.length;ae++){aa=ah[ae];var ai,aj=this;(ai=function(ak){var al=aa[ak?'getPrevious':'getNext'](d.walker.whitespaces(true));if(al&&al.getName&&al.getName()==aj.type){al.remove();al.moveChildren(aa,ak);}})();ai(1);}h.clearAllMarkers(P);H.selectBookmarks(N);F.focus();}};var y=f,z=/[\t\r\n ]*(?: |\xa0)$/;function A(F,G){var H,I=F.children,J=I.length;for(var K=0;K<J;K++){H=I[K];if(H.name&&H.name in G)return K;}return J;};function B(F){return function(G){var H=G.children,I=A(G,y.$list),J=H[I],K=J&&J.previous,L;if(K&&(K.name&&K.name=='br'||K.value&&(L=K.value.match(z)))){var M=K;if(!(L&&L.index)&&M==H[0])H[0]=F||c?new a.htmlParser.text('\xa0'):new a.htmlParser.element('br',{});else if(M.name=='br')H.splice(I-1,1);else M.value=M.value.replace(z,'');}};};var C={elements:{}};for(var D in y.$listItem)C.elements[D]=B();var E={elements:{}};for(D in y.$listItem)E.elements[D]=B(true);j.add('list',{init:function(F){var G=new x('numberedlist','ol'),H=new x('bulletedlist','ul');F.addCommand('numberedlist',G);F.addCommand('bulletedlist',H);F.ui.addButton('NumberedList',{label:F.lang.numberedlist,command:'numberedlist'});F.ui.addButton('BulletedList',{label:F.lang.bulletedlist,command:'bulletedlist'});F.on('selectionChange',e.bind(s,G));F.on('selectionChange',e.bind(s,H));},afterInit:function(F){var G=F.dataProcessor;if(G){G.dataFilter.addRules(C);G.htmlFilter.addRules(E);}},requires:['domiterator']});})();(function(){j.liststyle={requires:['dialog'],init:function(m){m.addCommand('numberedListStyle',new a.dialogCommand('numberedListStyle'));a.dialog.add('numberedListStyle',this.path+'dialogs/liststyle.js');m.addCommand('bulletedListStyle',new a.dialogCommand('bulletedListStyle'));a.dialog.add('bulletedListStyle',this.path+'dialogs/liststyle.js');if(m.addMenuItems){m.addMenuGroup('list',108);m.addMenuItems({numberedlist:{label:m.lang.list.numberedTitle,group:'list',command:'numberedListStyle'},bulletedlist:{label:m.lang.list.bulletedTitle,group:'list',command:'bulletedListStyle'}});}if(m.contextMenu)m.contextMenu.addListener(function(n,o){if(!n||n.isReadOnly())return null;while(n){var p=n.getName();if(p=='ol')return{numberedlist:2};else if(p=='ul')return{bulletedlist:2};n=n.getParent();}return null;});}};j.add('liststyle',j.liststyle);})();(function(){function m(s){if(!s||s.type!=1||s.getName()!='form')return[];
+var t=[],u=['style','className'];for(var v=0;v<u.length;v++){var w=u[v],x=s.$.elements.namedItem(w);if(x){var y=new h(x);t.push([y,y.nextSibling]);y.remove();}}return t;};function n(s,t){if(!s||s.type!=1||s.getName()!='form')return;if(t.length>0)for(var u=t.length-1;u>=0;u--){var v=t[u][0],w=t[u][1];if(w)v.insertBefore(w);else v.appendTo(s);}};function o(s,t){var u=m(s),v={},w=s.$;if(!t){v['class']=w.className||'';w.className='';}v.inline=w.style.cssText||'';if(!t)w.style.cssText='position: static; overflow: visible';n(u);return v;};function p(s,t){var u=m(s),v=s.$;if('class' in t)v.className=t['class'];if('inline' in t)v.style.cssText=t.inline;n(u);};function q(s){var t=a.instances;for(var u in t){var v=t[u];if(v.mode=='wysiwyg'){var w=v.document.getBody();w.setAttribute('contentEditable',false);w.setAttribute('contentEditable',true);}}if(s.focusManager.hasFocus){s.toolbox.focus();s.focus();}};function r(s){if(!c||b.version>6)return null;var t=h.createFromHtml('<iframe frameborder="0" tabindex="-1" src="javascript:void((function(){document.open();'+(b.isCustomDomain()?"document.domain='"+this.getDocument().$.domain+"';":'')+'document.close();'+'})())"'+' style="display:block;position:absolute;z-index:-1;'+'progid:DXImageTransform.Microsoft.Alpha(opacity=0);'+'"></iframe>');return s.append(t,true);};j.add('maximize',{init:function(s){var t=s.lang,u=a.document,v=u.getWindow(),w,x,y,z;function A(){var C=v.getViewPaneSize();z&&z.setStyles({width:C.width+'px',height:C.height+'px'});s.resize(C.width,C.height,null,true);};var B=2;s.addCommand('maximize',{modes:{wysiwyg:1,source:1},editorFocus:false,exec:function(){var C=s.container.getChild(1),D=s.getThemeSpace('contents');if(s.mode=='wysiwyg'){var E=s.getSelection();w=E&&E.getRanges();x=v.getScrollPosition();}else{var F=s.textarea.$;w=!c&&[F.selectionStart,F.selectionEnd];x=[F.scrollLeft,F.scrollTop];}if(this.state==2){v.on('resize',A);y=v.getScrollPosition();var G=s.container;while(G=G.getParent()){G.setCustomData('maximize_saved_styles',o(G));G.setStyle('z-index',s.config.baseFloatZIndex-1);}D.setCustomData('maximize_saved_styles',o(D,true));C.setCustomData('maximize_saved_styles',o(C,true));var H=v.getViewPaneSize(),I={overflow:'hidden',width:0,height:0};u.getDocumentElement().setStyles(I);!b.gecko&&u.getDocumentElement().setStyle('position','fixed');u.getBody().setStyles(I);c?setTimeout(function(){v.$.scrollTo(0,0);},0):v.$.scrollTo(0,0);C.setStyle('position','absolute');C.$.offsetLeft;C.setStyles({'z-index':s.config.baseFloatZIndex-1,left:'0px',top:'0px'});
+z=r(C);C.addClass('cke_maximized');A();var J=C.getDocumentPosition();C.setStyles({left:-1*J.x+'px',top:-1*J.y+'px'});b.gecko&&q(s);}else if(this.state==1){v.removeListener('resize',A);var K=[D,C];for(var L=0;L<K.length;L++){p(K[L],K[L].getCustomData('maximize_saved_styles'));K[L].removeCustomData('maximize_saved_styles');}G=s.container;while(G=G.getParent()){p(G,G.getCustomData('maximize_saved_styles'));G.removeCustomData('maximize_saved_styles');}c?setTimeout(function(){v.$.scrollTo(y.x,y.y);},0):v.$.scrollTo(y.x,y.y);C.removeClass('cke_maximized');if(z){z.remove();z=null;}s.fire('resize');}this.toggleState();var M=this.uiItems[0],N=this.state==2?t.maximize:t.minimize,O=s.element.getDocument().getById(M._.id);O.getChild(1).setHtml(N);O.setAttribute('title',N);O.setAttribute('href','javascript:void("'+N+'");');if(s.mode=='wysiwyg'){if(w){b.gecko&&q(s);s.getSelection().selectRanges(w);var P=s.getSelection().getStartElement();P&&P.scrollIntoView(true);}else v.$.scrollTo(x.x,x.y);}else{if(w){F.selectionStart=w[0];F.selectionEnd=w[1];}F.scrollLeft=x[0];F.scrollTop=x[1];}w=x=null;B=this.state;},canUndo:false});s.ui.addButton('Maximize',{label:t.maximize,command:'maximize'});s.on('mode',function(){var C=s.getCommand('maximize');C.setState(C.state==0?0:B);},null,null,100);}});})();j.add('newpage',{init:function(m){m.addCommand('newpage',{modes:{wysiwyg:1,source:1},exec:function(n){var o=this;n.setData(n.config.newpage_html||'',function(){setTimeout(function(){n.fire('afterCommandExec',{name:o.name,command:o});},200);});n.focus();},async:true});m.ui.addButton('NewPage',{label:m.lang.newPage,command:'newpage'});}});j.add('pagebreak',{init:function(m){m.addCommand('pagebreak',j.pagebreakCmd);m.ui.addButton('PageBreak',{label:m.lang.pagebreak,command:'pagebreak'});m.addCss('img.cke_pagebreak{background-image: url('+a.getUrl(this.path+'images/pagebreak.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'clear: both;'+'display: block;'+'float: none;'+'width:100% !important; _width:99.9% !important;'+'border-top: #999999 1px dotted;'+'border-bottom: #999999 1px dotted;'+'height: 5px !important;'+'page-break-after: always;'+'}');},afterInit:function(m){var n=m.dataProcessor,o=n&&n.dataFilter;if(o)o.addRules({elements:{div:function(p){var q=p.attributes,r=q&&q.style,s=r&&p.children.length==1&&p.children[0],t=s&&s.name=='span'&&s.attributes.style;if(t&&/page-break-after\s*:\s*always/i.test(r)&&/display\s*:\s*none/i.test(t)){var u=m.createFakeParserElement(p,'cke_pagebreak','div'),v=m.lang.pagebreakAlt;
+u.attributes.alt=v;u.attributes['aria-label']=v;return u;}}}});},requires:['fakeobjects']});j.pagebreakCmd={exec:function(m){var n=m.lang.pagebreakAlt,o=h.createFromHtml('<div style="page-break-after: always;"><span style="display: none;"> </span></div>');o=m.createFakeElement(o,'cke_pagebreak','div');o.setAttributes({alt:n,'aria-label':n,title:n});var p=m.getSelection().getRanges(true);m.fire('saveSnapshot');for(var q,r=p.length-1;r>=0;r--){q=p[r];if(r<p.length-1)o=o.clone(true);q.splitBlock('p');q.insertNode(o);if(r==p.length-1){q.moveToPosition(o,4);q.select();}var s=o.getPrevious();if(s&&f[s.getName()].div)o.move(s);}m.fire('saveSnapshot');}};(function(){j.add('pastefromword',{init:function(m){var n=0,o=function(){setTimeout(function(){n=0;},0);};m.addCommand('pastefromword',{canUndo:false,exec:function(){n=1;if(m.execCommand('paste')===false)m.on('dialogHide',function(p){p.removeListener();o();});else o();}});m.ui.addButton('PasteFromWord',{label:m.lang.pastefromword.toolbar,command:'pastefromword'});m.on('paste',function(p){var q=p.data,r;if((r=q.html)&&(n||/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(r))){var s=this.loadFilterRules(function(){if(s)m.fire('paste',q);else if(!m.config.pasteFromWordPromptCleanup||n||confirm(m.lang.pastefromword.confirmCleanup))q.html=a.cleanWord(r,m);});s&&p.cancel();}},this);},loadFilterRules:function(m){var n=a.cleanWord;if(n)m();else{var o=a.getUrl(i.pasteFromWordCleanupFile||this.path+'filter/default.js');a.scriptLoader.load(o,m,null,false,true);}return!n;}});})();(function(){var m={exec:function(n){var o=e.tryThese(function(){var p=window.clipboardData.getData('Text');if(!p)throw 0;return p;});if(!o){n.openDialog('pastetext');return false;}else n.fire('paste',{text:o});return true;}};j.add('pastetext',{init:function(n){var o='pastetext',p=n.addCommand(o,m);n.ui.addButton('PasteText',{label:n.lang.pasteText.button,command:o});a.dialog.add(o,a.getUrl(this.path+'dialogs/pastetext.js'));if(n.config.forcePasteAsPlainText)n.on('beforeCommandExec',function(q){if(q.data.name=='paste'){n.execCommand('pastetext');q.cancel();}},null,null,0);},requires:['clipboard']});})();j.add('popup');e.extend(a.editor.prototype,{popup:function(m,n,o,p){n=n||'80%';o=o||'70%';if(typeof n=='string'&&n.length>1&&n.substr(n.length-1,1)=='%')n=parseInt(window.screen.width*parseInt(n,10)/100,10);if(typeof o=='string'&&o.length>1&&o.substr(o.length-1,1)=='%')o=parseInt(window.screen.height*parseInt(o,10)/100,10);if(n<640)n=640;if(o<420)o=420;
+var q=parseInt((window.screen.height-o)/2,10),r=parseInt((window.screen.width-n)/2,10);p=(p||'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes')+',width='+n+',height='+o+',top='+q+',left='+r;var s=window.open('',null,p,true);if(!s)return false;try{s.moveTo(r,q);s.resizeTo(n,o);s.focus();s.location.href=m;}catch(t){s=window.open(m,null,p,true);}return true;}});(function(){var m={modes:{wysiwyg:1,source:1},canUndo:false,exec:function(o){var p,q=o.config,r=q.baseHref?'<base href="'+q.baseHref+'"/>':'',s=b.isCustomDomain();if(q.fullPage)p=o.getData().replace(/<head>/,'$&'+r).replace(/[^>]*(?=<\/title>)/,o.lang.preview);else{var t='<body ',u=o.document&&o.document.getBody();if(u){if(u.getAttribute('id'))t+='id="'+u.getAttribute('id')+'" ';if(u.getAttribute('class'))t+='class="'+u.getAttribute('class')+'" ';}t+='>';p=o.config.docType+'<html dir="'+o.config.contentsLangDirection+'">'+'<head>'+r+'<title>'+o.lang.preview+'</title>'+e.buildStyleHtml(o.config.contentsCss)+'</head>'+t+o.getData()+'</body></html>';}var v=640,w=420,x=80;try{var y=window.screen;v=Math.round(y.width*0.8);w=Math.round(y.height*0.7);x=Math.round(y.width*0.1);}catch(B){}var z='';if(s){window._cke_htmlToLoad=p;z='javascript:void( (function(){document.open();document.domain="'+document.domain+'";'+'document.write( window.opener._cke_htmlToLoad );'+'document.close();'+'window.opener._cke_htmlToLoad = null;'+'})() )';}var A=window.open(z,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+v+',height='+w+',left='+x);if(!s){A.document.open();A.document.write(p);A.document.close();}}},n='preview';j.add(n,{init:function(o){o.addCommand(n,m);o.ui.addButton('Preview',{label:o.lang.preview,command:n});}});})();j.add('print',{init:function(m){var n='print',o=m.addCommand(n,j.print);m.ui.addButton('Print',{label:m.lang.print,command:n});}});j.print={exec:function(m){if(b.opera)return;else if(b.gecko)m.window.$.print();else m.document.$.execCommand('Print');},canUndo:false,modes:{wysiwyg:!b.opera}};j.add('removeformat',{requires:['selection'],init:function(m){m.addCommand('removeFormat',j.removeformat.commands.removeformat);m.ui.addButton('RemoveFormat',{label:m.lang.removeFormat,command:'removeFormat'});m._.removeFormat={filters:[]};}});j.removeformat={commands:{removeformat:{exec:function(m){var n=m._.removeFormatRegex||(m._.removeFormatRegex=new RegExp('^(?:'+m.config.removeFormatTags.replace(/,/g,'|')+')$','i')),o=m._.removeAttributes||(m._.removeAttributes=m.config.removeFormatAttributes.split(',')),p=j.removeformat.filter,q=m.getSelection().getRanges(1),r=q.createIterator(),s;
+while(s=r.getNextRange()){if(s.collapsed)continue;s.enlarge(1);var t=s.createBookmark(),u=t.startNode,v=t.endNode,w=function(z){var A=new d.elementPath(z),B=A.elements;for(var C=1,D;D=B[C];C++){if(D.equals(A.block)||D.equals(A.blockLimit))break;if(n.test(D.getName())&&p(m,D))z.breakParent(D);}};w(u);w(v);var x=u.getNextSourceNode(true,1);while(x){if(x.equals(v))break;var y=x.getNextSourceNode(false,1);if(!(x.getName()=='img'&&x.data('cke-realelement'))&&p(m,x))if(n.test(x.getName()))x.remove(1);else{x.removeAttributes(o);m.fire('removeFormatCleanup',x);}x=y;}s.moveToBookmark(t);}m.getSelection().selectRanges(q);}}},filter:function(m,n){var o=m._.removeFormat.filters;for(var p=0;p<o.length;p++){if(o[p](n)===false)return false;}return true;}};a.editor.prototype.addRemoveFormatFilter=function(m){this._.removeFormat.filters.push(m);};i.removeFormatTags='b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var';i.removeFormatAttributes='class,style,lang,width,height,align,hspace,valign';j.add('resize',{init:function(m){var n=m.config;!n.resize_dir&&(n.resize_dir='both');n.resize_maxWidth==undefined&&(n.resize_maxWidth=3000);n.resize_maxHeight==undefined&&(n.resize_maxHeight=3000);n.resize_minWidth==undefined&&(n.resize_minWidth=750);n.resize_minHeight==undefined&&(n.resize_minHeight=250);if(n.resize_enabled!==false){var o=null,p,q,r=(n.resize_dir=='both'||n.resize_dir=='horizontal')&&n.resize_minWidth!=n.resize_maxWidth,s=(n.resize_dir=='both'||n.resize_dir=='vertical')&&n.resize_minHeight!=n.resize_maxHeight;function t(w){var x=w.data.$.screenX-p.x,y=w.data.$.screenY-p.y,z=q.width,A=q.height,B=z+x*(m.lang.dir=='rtl'?-1:1),C=A+y;if(r)z=Math.max(n.resize_minWidth,Math.min(B,n.resize_maxWidth));if(s)A=Math.max(n.resize_minHeight,Math.min(C,n.resize_maxHeight));m.resize(z,A);};function u(w){a.document.removeListener('mousemove',t);a.document.removeListener('mouseup',u);if(m.document){m.document.removeListener('mousemove',t);m.document.removeListener('mouseup',u);}};var v=e.addFunction(function(w){if(!o)o=m.getResizable();q={width:o.$.offsetWidth||0,height:o.$.offsetHeight||0};p={x:w.screenX,y:w.screenY};n.resize_minWidth>q.width&&(n.resize_minWidth=q.width);n.resize_minHeight>q.height&&(n.resize_minHeight=q.height);a.document.on('mousemove',t);a.document.on('mouseup',u);if(m.document){m.document.on('mousemove',t);m.document.on('mouseup',u);}});m.on('destroy',function(){e.removeFunction(v);});m.on('themeSpace',function(w){if(w.data.space=='bottom'){var x='';
+if(r&&!s)x=' cke_resizer_horizontal';if(!r&&s)x=' cke_resizer_vertical';w.data.html+='<div class="cke_resizer'+x+'"'+' title="'+e.htmlEncode(m.lang.resize)+'"'+' onmousedown="CKEDITOR.tools.callFunction('+v+', event)"'+'></div>';}},m,null,100);}}});(function(){var m={modes:{wysiwyg:1,source:1},exec:function(o){var p=o.element.$.form;if(p)try{p.submit();}catch(q){if(p.submit.click)p.submit.click();}}},n='save';j.add(n,{init:function(o){var p=o.addCommand(n,m);p.modes={wysiwyg:!!o.element.$.form};o.ui.addButton('Save',{label:o.lang.save,command:n});}});})();(function(){var m='scaytcheck',n='';function o(t,u){var v=0,w;for(w in u){if(u[w]==t){v=1;break;}}return v;};var p=function(){var t=this,u=function(){var y=t.config,z={};z.srcNodeRef=t.document.getWindow().$.frameElement;z.assocApp='CKEDITOR.'+a.version+'@'+a.revision;z.customerid=y.scayt_customerid||'1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2';z.customDictionaryIds=y.scayt_customDictionaryIds||'';z.userDictionaryName=y.scayt_userDictionaryName||'';z.sLang=y.scayt_sLang||'en_US';z.onLoad=function(){if(!(c&&b.version<8))this.addStyle(this.selectorCss(),'padding-bottom: 2px !important;');if(t.focusManager.hasFocus&&!q.isControlRestored(t))this.focus();};z.onBeforeChange=function(){if(q.getScayt(t)&&!t.checkDirty())setTimeout(function(){t.resetDirty();},0);};var A=window.scayt_custom_params;if(typeof A=='object')for(var B in A)z[B]=A[B];if(q.getControlId(t))z.id=q.getControlId(t);var C=new window.scayt(z);C.afterMarkupRemove.push(function(J){new h(J,C.document).mergeSiblings();});var D=q.instances[t.name];if(D){C.sLang=D.sLang;C.option(D.option());C.paused=D.paused;}q.instances[t.name]=C;var E='scaytButton',F=window.scayt.uiTags,G=[];for(var H=0,I=4;H<I;H++)G.push(F[H]&&q.uiTabs[H]);q.uiTabs=G;try{C.setDisabled(q.isPaused(t)===false);}catch(J){}t.fire('showScaytState');};t.on('contentDom',u);t.on('contentDomUnload',function(){var y=a.document.getElementsByTag('script'),z=/^dojoIoScript(\d+)$/i,A=/^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i;for(var B=0;B<y.count();B++){var C=y.getItem(B),D=C.getId(),E=C.getAttribute('src');if(D&&E&&D.match(z)&&E.match(A))C.remove();}});t.on('beforeCommandExec',function(y){if((y.data.name=='source'||y.data.name=='newpage')&&t.mode=='wysiwyg'){var z=q.getScayt(t);if(z){q.setPaused(t,!z.disabled);q.setControlId(t,z.id);z.destroy(true);delete q.instances[t.name];}}else if(y.data.name=='source'&&t.mode=='source')q.markControlRestore(t);
+});t.on('afterCommandExec',function(y){if(!q.isScaytEnabled(t))return;if(t.mode=='wysiwyg'&&(y.data.name=='undo'||y.data.name=='redo'))window.setTimeout(function(){q.getScayt(t).refresh();},10);});t.on('destroy',function(y){var z=y.editor,A=q.getScayt(z);if(!A)return;delete q.instances[z.name];q.setControlId(z,A.id);A.destroy(true);});t.on('afterSetData',function(){if(q.isScaytEnabled(t))window.setTimeout(function(){var y=q.getScayt(t);y&&y.refresh();},10);});t.on('insertElement',function(){var y=q.getScayt(t);if(q.isScaytEnabled(t)){if(c)t.getSelection().unlock(true);window.setTimeout(function(){y.focus();y.refresh();},10);}},this,null,50);t.on('insertHtml',function(){var y=q.getScayt(t);if(q.isScaytEnabled(t)){if(c)t.getSelection().unlock(true);window.setTimeout(function(){y.focus();y.refresh();},10);}},this,null,50);t.on('scaytDialog',function(y){y.data.djConfig=window.djConfig;y.data.scayt_control=q.getScayt(t);y.data.tab=n;y.data.scayt=window.scayt;});var v=t.dataProcessor,w=v&&v.htmlFilter;if(w)w.addRules({elements:{span:function(y){if(y.attributes['data-scayt_word']&&y.attributes['data-scaytid']){delete y.name;return y;}}}});var x=j.undo.Image.prototype;x.equals=e.override(x.equals,function(y){return function(z){var E=this;var A=E.contents,B=z.contents,C=q.getScayt(E.editor);if(C&&q.isScaytReady(E.editor)){E.contents=C.reset(A)||'';z.contents=C.reset(B)||'';}var D=y.apply(E,arguments);E.contents=A;z.contents=B;return D;};});if(t.document)u();};j.scayt={engineLoaded:false,instances:{},controlInfo:{},setControlInfo:function(t,u){if(t&&t.name&&typeof this.controlInfo[t.name]!='object')this.controlInfo[t.name]={};for(var v in u)this.controlInfo[t.name][v]=u[v];},isControlRestored:function(t){if(t&&t.name&&this.controlInfo[t.name])return this.controlInfo[t.name].restored;return false;},markControlRestore:function(t){this.setControlInfo(t,{restored:true});},setControlId:function(t,u){this.setControlInfo(t,{id:u});},getControlId:function(t){if(t&&t.name&&this.controlInfo[t.name]&&this.controlInfo[t.name].id)return this.controlInfo[t.name].id;return null;},setPaused:function(t,u){this.setControlInfo(t,{paused:u});},isPaused:function(t){if(t&&t.name&&this.controlInfo[t.name])return this.controlInfo[t.name].paused;return undefined;},getScayt:function(t){return this.instances[t.name];},isScaytReady:function(t){return this.engineLoaded===true&&'undefined'!==typeof window.scayt&&this.getScayt(t);},isScaytEnabled:function(t){var u=this.getScayt(t);return u?u.disabled===false:false;
+},loadEngine:function(t){if(b.gecko&&b.version<10900||b.opera||b.air)return t.fire('showScaytState');if(this.engineLoaded===true)return p.apply(t);else if(this.engineLoaded==-1)return a.on('scaytReady',function(){p.apply(t);});a.on('scaytReady',p,t);a.on('scaytReady',function(){this.engineLoaded=true;},this,null,0);this.engineLoaded=-1;var u=document.location.protocol;u=u.search(/https?:/)!=-1?u:'http:';var v='svc.spellchecker.net/scayt26/loader__base.js',w=t.config.scayt_srcUrl||u+'//'+v,x=q.parseUrl(w).path+'/';if(window.scayt==undefined){a._djScaytConfig={baseUrl:x,addOnLoad:[function(){a.fireOnce('scaytReady');}],isDebug:false};a.document.getHead().append(a.document.createElement('script',{attributes:{type:'text/javascript',async:'true',src:w}}));}else a.fireOnce('scaytReady');return null;},parseUrl:function(t){var u;if(t.match&&(u=t.match(/(.*)[\/\\](.*?\.\w+)$/)))return{path:u[1],file:u[2]};else return t;}};var q=j.scayt,r=function(t,u,v,w,x,y,z){t.addCommand(w,x);t.addMenuItem(w,{label:v,command:w,group:y,order:z});},s={preserveState:true,editorFocus:false,canUndo:false,exec:function(t){if(q.isScaytReady(t)){var u=q.isScaytEnabled(t);this.setState(u?2:1);var v=q.getScayt(t);v.focus();v.setDisabled(u);}else if(!t.config.scayt_autoStartup&&q.engineLoaded>=0){this.setState(0);q.loadEngine(t);}}};j.add('scayt',{requires:['menubutton'],beforeInit:function(t){var u=t.config.scayt_contextMenuItemsOrder||'suggest|moresuggest|control',v='';u=u.split('|');if(u&&u.length)for(var w=0;w<u.length;w++)v+='scayt_'+u[w]+(u.length!=parseInt(w,10)+1?',':'');t.config.menu_groups=v+','+t.config.menu_groups;},init:function(t){var u={},v={},w=t.addCommand(m,s);a.dialog.add(m,a.getUrl(this.path+'dialogs/options.js'));var x=t.config.scayt_uiTabs||'1,1,1',y=[];x=x.split(',');for(var z=0,A=3;z<A;z++){var B=parseInt(x[z]||'1',10);y.push(B);}var C='scaytButton';t.addMenuGroup(C);var D={},E=t.lang.scayt;D.scaytToggle={label:E.enable,command:m,group:C};if(y[0]==1)D.scaytOptions={label:E.options,group:C,onClick:function(){n='options';t.openDialog(m);}};if(y[1]==1)D.scaytLangs={label:E.langs,group:C,onClick:function(){n='langs';t.openDialog(m);}};if(y[2]==1)D.scaytDict={label:E.dictionariesTab,group:C,onClick:function(){n='dictionaries';t.openDialog(m);}};D.scaytAbout={label:t.lang.scayt.about,group:C,onClick:function(){n='about';t.openDialog(m);}};y[3]=1;q.uiTabs=y;t.addMenuItems(D);t.ui.add('Scayt',5,{label:E.title,title:b.opera?E.opera_title:E.title,className:'cke_button_scayt',modes:{wysiwyg:1},onRender:function(){w.on('state',function(){this.setState(w.state);
+},this);},onMenu:function(){var G=q.isScaytEnabled(t);t.getMenuItem('scaytToggle').label=E[G?'disable':'enable'];return{scaytToggle:2,scaytOptions:G&&q.uiTabs[0]?2:0,scaytLangs:G&&q.uiTabs[1]?2:0,scaytDict:G&&q.uiTabs[2]?2:0,scaytAbout:G&&q.uiTabs[3]?2:0};}});if(t.contextMenu&&t.addMenuItems)t.contextMenu.addListener(function(G,H){if(!q.isScaytEnabled(t)||H.getCommonAncestor().isReadOnly())return null;var I=q.getScayt(t),J=I.getScaytNode();if(!J)return null;var K=I.getWord(J);if(!K)return null;var L=I.getLang(),M={},N=window.scayt.getSuggestion(K,L);if(!N||!N.length)return null;for(z in u){delete t._.menuItems[z];delete t._.commands[z];}for(z in v){delete t._.menuItems[z];delete t._.commands[z];}u={};v={};var O=t.config.scayt_moreSuggestions||'on',P=false,Q=t.config.scayt_maxSuggestions;typeof Q!='number'&&(Q=5);!Q&&(Q=N.length);var R=t.config.scayt_contextCommands||'all';R=R.split('|');for(var S=0,T=N.length;S<T;S+=1){var U='scayt_suggestion_'+N[S].replace(' ','_'),V=(function(Z,aa){return{exec:function(){I.replace(Z,aa);}};})(J,N[S]);if(S<Q){r(t,'button_'+U,N[S],U,V,'scayt_suggest',S+1);M[U]=2;v[U]=2;}else if(O=='on'){r(t,'button_'+U,N[S],U,V,'scayt_moresuggest',S+1);u[U]=2;P=true;}}if(P){t.addMenuItem('scayt_moresuggest',{label:E.moreSuggestions,group:'scayt_moresuggest',order:10,getItems:function(){return u;}});v.scayt_moresuggest=2;}if(o('all',R)||o('ignore',R)){var W={exec:function(){I.ignore(J);}};r(t,'ignore',E.ignore,'scayt_ignore',W,'scayt_control',1);v.scayt_ignore=2;}if(o('all',R)||o('ignoreall',R)){var X={exec:function(){I.ignoreAll(J);}};r(t,'ignore_all',E.ignoreAll,'scayt_ignore_all',X,'scayt_control',2);v.scayt_ignore_all=2;}if(o('all',R)||o('add',R)){var Y={exec:function(){window.scayt.addWordToUserDictionary(J);}};r(t,'add_word',E.addWord,'scayt_add_word',Y,'scayt_control',3);v.scayt_add_word=2;}if(I.fireOnContextMenu)I.fireOnContextMenu(t);return v;});var F=function(){t.removeListener('showScaytState',F);if(!b.opera&&!b.air)w.setState(q.isScaytEnabled(t)?1:2);else w.setState(0);};t.on('showScaytState',F);if(b.opera||b.air)t.on('instanceReady',function(){F();});if(t.config.scayt_autoStartup)t.on('instanceReady',function(){q.loadEngine(t);});},afterInit:function(t){var u,v=function(w){if(w.hasAttribute('data-scaytid'))return false;};if(t._.elementsPath&&(u=t._.elementsPath.filters))u.push(v);t.addRemoveFormatFilter&&t.addRemoveFormatFilter(v);}});})();j.add('smiley',{requires:['dialog'],init:function(m){m.config.smiley_path=m.config.smiley_path||this.path+'images/';
+m.addCommand('smiley',new a.dialogCommand('smiley'));m.ui.addButton('Smiley',{label:m.lang.smiley.toolbar,command:'smiley'});a.dialog.add('smiley',this.path+'dialogs/smiley.js');}});i.smiley_images=['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'];i.smiley_descriptions=['smiley','sad','wink','laugh','frown','cheeky','blush','surprise','indecision','angry','angel','cool','devil','crying','enlightened','no','yes','heart','broken heart','kiss','mail'];(function(){var m='.%2 p,.%2 div,.%2 pre,.%2 address,.%2 blockquote,.%2 h1,.%2 h2,.%2 h3,.%2 h4,.%2 h5,.%2 h6{background-repeat: no-repeat;background-position: top %3;border: 1px dotted gray;padding-top: 8px;padding-%3: 8px;}.%2 p{%1p.png);}.%2 div{%1div.png);}.%2 pre{%1pre.png);}.%2 address{%1address.png);}.%2 blockquote{%1blockquote.png);}.%2 h1{%1h1.png);}.%2 h2{%1h2.png);}.%2 h3{%1h3.png);}.%2 h4{%1h4.png);}.%2 h5{%1h5.png);}.%2 h6{%1h6.png);}',n=/%1/g,o=/%2/g,p=/%3/g,q={preserveState:true,editorFocus:false,exec:function(r){this.toggleState();this.refresh(r);},refresh:function(r){var s=this.state==1?'addClass':'removeClass';r.document.getBody()[s]('cke_show_blocks');}};j.add('showblocks',{requires:['wysiwygarea'],init:function(r){var s=r.addCommand('showblocks',q);s.canUndo=false;if(r.config.startupOutlineBlocks)s.setState(1);r.addCss(m.replace(n,'background-image: url('+a.getUrl(this.path)+'images/block_').replace(o,'cke_show_blocks ').replace(p,r.lang.dir=='rtl'?'right':'left'));r.ui.addButton('ShowBlocks',{label:r.lang.showBlocks,command:'showblocks'});r.on('mode',function(){if(s.state!=0)s.refresh(r);});r.on('contentDom',function(){if(s.state!=0)s.refresh(r);});}});})();(function(){var m='cke_show_border',n,o=(b.ie6Compat?['.%1 table.%2,','.%1 table.%2 td, .%1 table.%2 th,','{','border : #d3d3d3 1px dotted','}']:['.%1 table.%2,','.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,','.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,','.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,','.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th','{','border : #d3d3d3 1px dotted','}']).join('');n=o.replace(/%2/g,m).replace(/%1/g,'cke_show_borders ');var p={preserveState:true,editorFocus:false,exec:function(q){this.toggleState();
+this.refresh(q);},refresh:function(q){var r=this.state==1?'addClass':'removeClass';q.document.getBody()[r]('cke_show_borders');}};j.add('showborders',{requires:['wysiwygarea'],modes:{wysiwyg:1},init:function(q){var r=q.addCommand('showborders',p);r.canUndo=false;if(q.config.startupShowBorders!==false)r.setState(1);q.addCss(n);q.on('mode',function(){if(r.state!=0)r.refresh(q);},null,null,100);q.on('contentDom',function(){if(r.state!=0)r.refresh(q);});q.on('removeFormatCleanup',function(s){var t=s.data;if(q.getCommand('showborders').state==1&&t.is('table')&&(!t.hasAttribute('border')||parseInt(t.getAttribute('border'),10)<=0))t.addClass(m);});},afterInit:function(q){var r=q.dataProcessor,s=r&&r.dataFilter,t=r&&r.htmlFilter;if(s)s.addRules({elements:{table:function(u){var v=u.attributes,w=v['class'],x=parseInt(v.border,10);if(!x||x<=0)v['class']=(w||'')+' '+m;}}});if(t)t.addRules({elements:{table:function(u){var v=u.attributes,w=v['class'];w&&(v['class']=w.replace(m,'').replace(/\s{2}/,' ').replace(/^\s+|\s+$/,''));}}});}});a.on('dialogDefinition',function(q){var r=q.data.name;if(r=='table'||r=='tableProperties'){var s=q.data.definition,t=s.getContents('info'),u=t.get('txtBorder'),v=u.commit;u.commit=e.override(v,function(y){return function(z,A){y.apply(this,arguments);var B=parseInt(this.getValue(),10);A[!B||B<=0?'addClass':'removeClass'](m);};});var w=s.getContents('advanced'),x=w&&w.get('advCSSClasses');if(x){x.setup=e.override(x.setup,function(y){return function(){y.apply(this,arguments);this.setValue(this.getValue().replace(/cke_show_border/,''));};});x.commit=e.override(x.commit,function(y){return function(z,A){y.apply(this,arguments);if(!parseInt(A.getAttribute('border'),10))A.addClass('cke_show_border');};});}}});})();j.add('sourcearea',{requires:['editingblock'],init:function(m){var n=j.sourcearea,o=a.document.getWindow();m.on('editingBlockReady',function(){var p,q;m.addMode('source',{load:function(r,s){if(c&&b.version<8)r.setStyle('position','relative');m.textarea=p=new h('textarea');p.setAttributes({dir:'ltr',tabIndex:b.webkit?-1:m.tabIndex,role:'textbox','aria-label':m.lang.editorTitle.replace('%1',m.name)});p.addClass('cke_source');p.addClass('cke_enable_context_menu');var t={width:b.ie7Compat?'99%':'100%',height:'100%',resize:'none',outline:'none','text-align':'left'};if(c){q=function(){p.hide();p.setStyle('height',r.$.clientHeight+'px');p.setStyle('width',r.$.clientWidth+'px');p.show();};m.on('resize',q);o.on('resize',q);setTimeout(q,0);}r.setHtml('');
+r.append(p);p.setStyles(t);m.fire('ariaWidget',p);p.on('blur',function(){m.focusManager.blur();});p.on('focus',function(){m.focusManager.focus();});m.mayBeDirty=true;this.loadData(s);var u=m.keystrokeHandler;if(u)u.attach(p);setTimeout(function(){m.mode='source';m.fire('mode');},b.gecko||b.webkit?100:0);},loadData:function(r){p.setValue(r);m.fire('dataReady');},getData:function(){return p.getValue();},getSnapshotData:function(){return p.getValue();},unload:function(r){p.clearCustomData();m.textarea=p=null;if(q){m.removeListener('resize',q);o.removeListener('resize',q);}if(c&&b.version<8)r.removeStyle('position');},focus:function(){p.focus();}});});m.addCommand('source',n.commands.source);if(m.ui.addButton)m.ui.addButton('Source',{label:m.lang.source,command:'source'});m.on('mode',function(){m.getCommand('source').setState(m.mode=='source'?1:2);});}});j.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:false,exec:function(m){if(m.mode=='wysiwyg')m.fire('saveSnapshot');m.getCommand('source').setState(0);m.setMode(m.mode=='source'?'wysiwyg':'source');},canUndo:false}}};(function(){j.add('stylescombo',{requires:['richcombo','styles'],init:function(n){var o=n.config,p=n.lang.stylesCombo,q={},r=[];function s(t){n.getStylesSet(function(u){if(!r.length){var v,w;for(var x=0,y=u.length;x<y;x++){var z=u[x];w=z.name;v=q[w]=new a.style(z);v._name=w;v._.enterMode=o.enterMode;r.push(v);}r.sort(m);}t&&t();});};n.ui.addRichCombo('Styles',{label:p.label,title:p.panelTitle,className:'cke_styles',panel:{css:n.skin.editor.css.concat(o.contentsCss),multiSelect:true,attributes:{'aria-label':p.panelTitle}},init:function(){var t=this;s(function(){var u,v,w;for(var x=0,y=r.length;x<y;x++){u=r[x];v=u._name;var z=u.type;if(z!=w){t.startGroup(p['panelTitle'+String(z)]);w=z;}t.add(v,u.type==3?v:u.buildPreview(),v);}t.commit();t.onOpen();});},onClick:function(t){n.focus();n.fire('saveSnapshot');var u=q[t],v=n.getSelection(),w=new d.elementPath(v.getStartElement());if(u.type==2&&u.checkActive(w))u.remove(n.document);else if(u.type==3&&u.checkActive(w))u.remove(n.document);else u.apply(n.document);n.fire('saveSnapshot');},onRender:function(){n.on('selectionChange',function(t){var u=this.getValue(),v=t.data.path,w=v.elements;for(var x=0,y=w.length,z;x<y;x++){z=w[x];for(var A in q){if(q[A].checkElementRemovable(z,true)){if(A!=u)this.setValue(A);return;}}}this.setValue('');},this);},onOpen:function(){var A=this;if(c||b.webkit)n.focus();var t=n.getSelection(),u=t.getSelectedElement(),v=new d.elementPath(u||t.getStartElement()),w=[0,0,0,0];
+A.showAll();A.unmarkAll();for(var x in q){var y=q[x],z=y.type;if(y.checkActive(v))A.mark(x);else if(z==3&&!y.checkApplicable(v)){A.hideItem(x);w[z]--;}w[z]++;}if(!w[1])A.hideGroup(p['panelTitle'+String(1)]);if(!w[2])A.hideGroup(p['panelTitle'+String(2)]);if(!w[3])A.hideGroup(p['panelTitle'+String(3)]);}});n.on('instanceReady',function(){s();});}});function m(n,o){var p=n.type,q=o.type;return p==q?0:p==3?-1:q==3?1:q==1?1:-1;};})();j.add('table',{init:function(m){var n=j.table,o=m.lang.table;m.addCommand('table',new a.dialogCommand('table'));m.addCommand('tableProperties',new a.dialogCommand('tableProperties'));m.ui.addButton('Table',{label:o.toolbar,command:'table'});a.dialog.add('table',this.path+'dialogs/table.js');a.dialog.add('tableProperties',this.path+'dialogs/table.js');if(m.addMenuItems)m.addMenuItems({table:{label:o.menu,command:'tableProperties',group:'table',order:5},tabledelete:{label:o.deleteTable,command:'tableDelete',group:'table',order:1}});m.on('doubleclick',function(p){var q=p.data.element;if(q.is('table'))p.data.dialog='tableProperties';});if(m.contextMenu)m.contextMenu.addListener(function(p,q){if(!p||p.isReadOnly())return null;var r=p.hasAscendant('table',1);if(r)return{tabledelete:2,table:2};return null;});}});(function(){function m(G,H){if(c)G.removeAttribute(H);else delete G[H];};var n=/^(?:td|th)$/;function o(G){var H=G.createBookmarks(),I=G.getRanges(),J=[],K={};function L(T){if(J.length>0)return;if(T.type==1&&n.test(T.getName())&&!T.getCustomData('selected_cell')){h.setMarker(K,T,'selected_cell',true);J.push(T);}};for(var M=0;M<I.length;M++){var N=I[M];if(N.collapsed){var O=N.getCommonAncestor(),P=O.getAscendant('td',true)||O.getAscendant('th',true);if(P)J.push(P);}else{var Q=new d.walker(N),R;Q.guard=L;while(R=Q.next()){var S=R.getParent();if(S&&n.test(S.getName())&&!S.getCustomData('selected_cell')){h.setMarker(K,S,'selected_cell',true);J.push(S);}}}}h.clearAllMarkers(K);G.selectBookmarks(H);return J;};function p(G){var H=0,I=G.length-1,J={},K,L,M;while(K=G[H++])h.setMarker(J,K,'delete_cell',true);H=0;while(K=G[H++]){if((L=K.getPrevious())&&!L.getCustomData('delete_cell')||(L=K.getNext())&&!L.getCustomData('delete_cell')){h.clearAllMarkers(J);return L;}}h.clearAllMarkers(J);M=G[0].getParent();if(M=M.getPrevious())return M.getLast();M=G[I].getParent();if(M=M.getNext())return M.getChild(0);return null;};function q(G){var H=G.cells;for(var I=0;I<H.length;I++){H[I].innerHTML='';if(!c)new h(H[I]).appendBogus();}};function r(G,H){var I=G.getStartElement().getAscendant('tr');
+if(!I)return;var J=I.clone(1);H?J.insertBefore(I):J.insertAfter(I);q(J.$);};function s(G){if(G instanceof d.selection){var H=o(G),I=H.length,J=[],K,L,M;for(var N=0;N<I;N++){var O=H[N].getParent(),P=O.$.rowIndex;!N&&(L=P-1);J[P]=O;N==I-1&&(M=P+1);}var Q=O.getAscendant('table'),R=Q.$.rows,S=R.length;K=new h(M<S&&Q.$.rows[M]||L>0&&Q.$.rows[L]||Q.$.parentNode);for(N=J.length;N>=0;N--){if(J[N])s(J[N]);}return K;}else if(G instanceof h){Q=G.getAscendant('table');if(Q.$.rows.length==1)Q.remove();else G.remove();}return 0;};function t(G,H){var I=G.getStartElement(),J=I.getAscendant('td',1)||I.getAscendant('th',1);if(!J)return;var K=J.getAscendant('table'),L=J.$.cellIndex;for(var M=0;M<K.$.rows.length;M++){var N=K.$.rows[M];if(N.cells.length<L+1)continue;J=new h(N.cells[L]).clone(0);if(!c)J.appendBogus();var O=new h(N.cells[L]);if(H)J.insertBefore(O);else J.insertAfter(O);}};function u(G){var H=[],I=G[0]&&G[0].getAscendant('table'),J,K,L,M;for(J=0,K=G.length;J<K;J++)H.push(G[J].$.cellIndex);H.sort();for(J=1,K=H.length;J<K;J++){if(H[J]-H[J-1]>1){L=H[J-1]+1;break;}}if(!L)L=H[0]>0?H[0]-1:H[H.length-1]+1;var N=I.$.rows;for(J=0,K=N.length;J<K;J++){M=N[J].cells[L];if(M)break;}return M?new h(M):I.getPrevious();};function v(G){if(G instanceof d.selection){var H=o(G),I=u(H);for(var J=H.length-1;J>=0;J--){if(H[J])v(H[J]);}return I;}else if(G instanceof h){var K=G.getAscendant('table');if(!K)return null;var L=G.$.cellIndex;for(J=K.$.rows.length-1;J>=0;J--){var M=new h(K.$.rows[J]);if(!L&&M.$.cells.length==1){s(M);continue;}if(M.$.cells[L])M.$.removeChild(M.$.cells[L]);}}return null;};function w(G,H){var I=G.getStartElement(),J=I.getAscendant('td',1)||I.getAscendant('th',1);if(!J)return;var K=J.clone();if(!c)K.appendBogus();if(H)K.insertBefore(J);else K.insertAfter(J);};function x(G){if(G instanceof d.selection){var H=o(G),I=H[0]&&H[0].getAscendant('table'),J=p(H);for(var K=H.length-1;K>=0;K--)x(H[K]);if(J)z(J,true);else if(I)I.remove();}else if(G instanceof h){var L=G.getParent();if(L.getChildCount()==1)L.remove();else G.remove();}};function y(G){var H=G.getBogus();H&&H.remove();G.trim();};function z(G,H){var I=new d.range(G.getDocument());if(!I['moveToElementEdit'+(H?'End':'Start')](G)){I.selectNodeContents(G);I.collapse(H?false:true);}I.select(true);};function A(G,H,I){var J=G[H];if(typeof I=='undefined')return J;for(var K=0;J&&K<J.length;K++){if(I.is&&J[K]==I.$)return K;else if(K==I)return new h(J[K]);}return I.is?-1:null;};function B(G,H,I){var J=[];for(var K=0;K<G.length;
+K++){var L=G[K];if(typeof I=='undefined')J.push(L[H]);else if(I.is&&L[H]==I.$)return K;else if(K==I)return new h(L[H]);}return typeof I=='undefined'?J:I.is?-1:null;};function C(G,H,I){var J=o(G),K;if((H?J.length!=1:J.length<2)||(K=G.getCommonAncestor())&&K.type==1&&K.is('table'))return false;var L,M=J[0],N=M.getAscendant('table'),O=e.buildTableMap(N),P=O.length,Q=O[0].length,R=M.getParent().$.rowIndex,S=A(O,R,M);if(H){var T;try{T=O[H=='up'?R-1:H=='down'?R+1:R][H=='left'?S-1:H=='right'?S+1:S];}catch(al){return false;}if(!T||M.$==T)return false;J[H=='up'||H=='left'?'unshift':'push'](new h(T));}var U=M.getDocument(),V=R,W=0,X=0,Y=!I&&new d.documentFragment(U),Z=0;for(var aa=0;aa<J.length;aa++){L=J[aa];var ab=L.getParent(),ac=L.getFirst(),ad=L.$.colSpan,ae=L.$.rowSpan,af=ab.$.rowIndex,ag=A(O,af,L);Z+=ad*ae;X=Math.max(X,ag-S+ad);W=Math.max(W,af-R+ae);if(!I){if(y(L),L.getChildren().count()){if(af!=V&&ac&&!(ac.isBlockBoundary&&ac.isBlockBoundary({br:1}))){var ah=Y.getLast(d.walker.whitespaces(true));if(ah&&!(ah.is&&ah.is('br')))Y.append(new h('br'));}L.moveChildren(Y);}aa?L.remove():L.setHtml('');}V=af;}if(!I){Y.moveChildren(M);if(!c)M.appendBogus();if(X>=Q)M.removeAttribute('rowSpan');else M.$.rowSpan=W;if(W>=P)M.removeAttribute('colSpan');else M.$.colSpan=X;var ai=new d.nodeList(N.$.rows),aj=ai.count();for(aa=aj-1;aa>=0;aa--){var ak=ai.getItem(aa);if(!ak.$.cells.length){ak.remove();aj++;continue;}}return M;}else return W*X==Z;};function D(G,H){var I=o(G);if(I.length>1)return false;else if(H)return true;var J=I[0],K=J.getParent(),L=K.getAscendant('table'),M=e.buildTableMap(L),N=K.$.rowIndex,O=A(M,N,J),P=J.$.rowSpan,Q,R,S,T;if(P>1){R=Math.ceil(P/2);S=Math.floor(P/2);T=N+R;var U=new h(L.$.rows[T]),V=A(M,T),W;Q=J.clone();for(var X=0;X<V.length;X++){W=V[X];if(W.parentNode==U.$&&X>O){Q.insertBefore(new h(W));break;}else W=null;}if(!W)U.append(Q,true);}else{S=R=1;U=K.clone();U.insertAfter(K);U.append(Q=J.clone());var Y=A(M,N);for(var Z=0;Z<Y.length;Z++)Y[Z].rowSpan++;}if(!c)Q.appendBogus();J.$.rowSpan=R;Q.$.rowSpan=S;if(R==1)J.removeAttribute('rowSpan');if(S==1)Q.removeAttribute('rowSpan');return Q;};function E(G,H){var I=o(G);if(I.length>1)return false;else if(H)return true;var J=I[0],K=J.getParent(),L=K.getAscendant('table'),M=e.buildTableMap(L),N=K.$.rowIndex,O=A(M,N,J),P=J.$.colSpan,Q,R,S;if(P>1){R=Math.ceil(P/2);S=Math.floor(P/2);}else{S=R=1;var T=B(M,O);for(var U=0;U<T.length;U++)T[U].colSpan++;}Q=J.clone();Q.insertAfter(J);if(!c)Q.appendBogus();J.$.colSpan=R;Q.$.colSpan=S;
+if(R==1)J.removeAttribute('colSpan');if(S==1)Q.removeAttribute('colSpan');return Q;};var F={thead:1,tbody:1,tfoot:1,td:1,tr:1,th:1};j.tabletools={init:function(G){var H=G.lang.table;G.addCommand('cellProperties',new a.dialogCommand('cellProperties'));a.dialog.add('cellProperties',this.path+'dialogs/tableCell.js');G.addCommand('tableDelete',{exec:function(I){var J=I.getSelection(),K=J&&J.getStartElement(),L=K&&K.getAscendant('table',1);if(!L)return;J.selectElement(L);var M=J.getRanges()[0];M.collapse();J.selectRanges([M]);var N=L.getParent();if(N.getChildCount()==1&&!N.is('body','td','th'))N.remove();else L.remove();}});G.addCommand('rowDelete',{exec:function(I){var J=I.getSelection();z(s(J));}});G.addCommand('rowInsertBefore',{exec:function(I){var J=I.getSelection();r(J,true);}});G.addCommand('rowInsertAfter',{exec:function(I){var J=I.getSelection();r(J);}});G.addCommand('columnDelete',{exec:function(I){var J=I.getSelection(),K=v(J);K&&z(K,true);}});G.addCommand('columnInsertBefore',{exec:function(I){var J=I.getSelection();t(J,true);}});G.addCommand('columnInsertAfter',{exec:function(I){var J=I.getSelection();t(J);}});G.addCommand('cellDelete',{exec:function(I){var J=I.getSelection();x(J);}});G.addCommand('cellMerge',{exec:function(I){z(C(I.getSelection()),true);}});G.addCommand('cellMergeRight',{exec:function(I){z(C(I.getSelection(),'right'),true);}});G.addCommand('cellMergeDown',{exec:function(I){z(C(I.getSelection(),'down'),true);}});G.addCommand('cellVerticalSplit',{exec:function(I){z(D(I.getSelection()));}});G.addCommand('cellHorizontalSplit',{exec:function(I){z(E(I.getSelection()));}});G.addCommand('cellInsertBefore',{exec:function(I){var J=I.getSelection();w(J,true);}});G.addCommand('cellInsertAfter',{exec:function(I){var J=I.getSelection();w(J);}});if(G.addMenuItems)G.addMenuItems({tablecell:{label:H.cell.menu,group:'tablecell',order:1,getItems:function(){var I=G.getSelection(),J=o(I);return{tablecell_insertBefore:2,tablecell_insertAfter:2,tablecell_delete:2,tablecell_merge:C(I,null,true)?2:0,tablecell_merge_right:C(I,'right',true)?2:0,tablecell_merge_down:C(I,'down',true)?2:0,tablecell_split_vertical:D(I,true)?2:0,tablecell_split_horizontal:E(I,true)?2:0,tablecell_properties:J.length>0?2:0};}},tablecell_insertBefore:{label:H.cell.insertBefore,group:'tablecell',command:'cellInsertBefore',order:5},tablecell_insertAfter:{label:H.cell.insertAfter,group:'tablecell',command:'cellInsertAfter',order:10},tablecell_delete:{label:H.cell.deleteCell,group:'tablecell',command:'cellDelete',order:15},tablecell_merge:{label:H.cell.merge,group:'tablecell',command:'cellMerge',order:16},tablecell_merge_right:{label:H.cell.mergeRight,group:'tablecell',command:'cellMergeRight',order:17},tablecell_merge_down:{label:H.cell.mergeDown,group:'tablecell',command:'cellMergeDown',order:18},tablecell_split_horizontal:{label:H.cell.splitHorizontal,group:'tablecell',command:'cellHorizontalSplit',order:19},tablecell_split_vertical:{label:H.cell.splitVertical,group:'tablecell',command:'cellVerticalSplit',order:20},tablecell_properties:{label:H.cell.title,group:'tablecellproperties',command:'cellProperties',order:21},tablerow:{label:H.row.menu,group:'tablerow',order:1,getItems:function(){return{tablerow_insertBefore:2,tablerow_insertAfter:2,tablerow_delete:2};
+}},tablerow_insertBefore:{label:H.row.insertBefore,group:'tablerow',command:'rowInsertBefore',order:5},tablerow_insertAfter:{label:H.row.insertAfter,group:'tablerow',command:'rowInsertAfter',order:10},tablerow_delete:{label:H.row.deleteRow,group:'tablerow',command:'rowDelete',order:15},tablecolumn:{label:H.column.menu,group:'tablecolumn',order:1,getItems:function(){return{tablecolumn_insertBefore:2,tablecolumn_insertAfter:2,tablecolumn_delete:2};}},tablecolumn_insertBefore:{label:H.column.insertBefore,group:'tablecolumn',command:'columnInsertBefore',order:5},tablecolumn_insertAfter:{label:H.column.insertAfter,group:'tablecolumn',command:'columnInsertAfter',order:10},tablecolumn_delete:{label:H.column.deleteColumn,group:'tablecolumn',command:'columnDelete',order:15}});if(G.contextMenu)G.contextMenu.addListener(function(I,J){if(!I||I.isReadOnly())return null;while(I){if(I.getName() in F)return{tablecell:2,tablerow:2,tablecolumn:2};I=I.getParent();}return null;});},getSelectedCells:o};j.add('tabletools',j.tabletools);})();e.buildTableMap=function(m){var n=m.$.rows,o=-1,p=[];for(var q=0;q<n.length;q++){o++;!p[o]&&(p[o]=[]);var r=-1;for(var s=0;s<n[q].cells.length;s++){var t=n[q].cells[s];r++;while(p[o][r])r++;var u=isNaN(t.colSpan)?1:t.colSpan,v=isNaN(t.rowSpan)?1:t.rowSpan;for(var w=0;w<v;w++){if(!p[o+w])p[o+w]=[];for(var x=0;x<u;x++)p[o+w][r+x]=n[q].cells[s];}r+=u-1;}}return p;};j.add('specialchar',{availableLangs:{en:1},init:function(m){var n='specialchar',o=this;a.dialog.add(n,this.path+'dialogs/specialchar.js');m.addCommand(n,{exec:function(){var p=m.langCode;p=o.availableLangs[p]?p:'en';a.scriptLoader.load(a.getUrl(o.path+'lang/'+p+'.js'),function(){e.extend(m.lang.specialChar,o.lang[p]);m.openDialog(n);});},modes:{wysiwyg:1},canUndo:false});m.ui.addButton('SpecialChar',{label:m.lang.specialChar.toolbar,command:n});}});i.specialChars=['!','"','#','$','%','&',"'",'(',')','*','+','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[',']','^','_','`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','€','‘','’','“','”','–','—','¡','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','®','¯','°','&','²','³','´','µ','¶','·','¸','¹','º','&','¼','½','¾','¿','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','×','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ü','ý','þ','ÿ','Œ','œ','Ŵ','Ŷ','ŵ','ŷ','‚','‛','„','…','™','►','•','→','⇒','⇔','♦','≈'];
+(function(){var m={editorFocus:false,modes:{wysiwyg:1,source:1}},n={exec:function(q){q.container.focusNext(true,q.tabIndex);}},o={exec:function(q){q.container.focusPrevious(true,q.tabIndex);}};function p(q){return{editorFocus:false,canUndo:false,modes:{wysiwyg:1},exec:function(r){if(r.focusManager.hasFocus){var s=r.getSelection(),t=s.getCommonAncestor(),u;if(u=t.getAscendant('td',true)||t.getAscendant('th',true)){var v=new d.range(r.document),w=e.tryThese(function(){var D=u.getParent(),E=D.$.cells[u.$.cellIndex+(q?-1:1)];E.parentNode.parentNode;return E;},function(){var D=u.getParent(),E=D.getAscendant('table'),F=E.$.rows[D.$.rowIndex+(q?-1:1)];return F.cells[q?F.cells.length-1:0];});if(!(w||q)){var x=u.getAscendant('table').$,y=u.getParent().$.cells,z=new h(x.insertRow(-1),r.document);for(var A=0,B=y.length;A<B;A++){var C=z.append(new h(y[A],r.document).clone(false,false));!c&&C.appendBogus();}v.moveToElementEditStart(z);}else if(w){w=new h(w);v.moveToElementEditStart(w);if(!(v.checkStartOfBlock()&&v.checkEndOfBlock()))v.selectNodeContents(w);}else return true;v.select(true);return true;}}return false;}};};j.add('tab',{requires:['keystrokes'],init:function(q){var r=q.config.enableTabKeyTools!==false,s=q.config.tabSpaces||0,t='';while(s--)t+='\xa0';if(t)q.on('key',function(u){if(u.data.keyCode==9){q.insertHtml(t);u.cancel();}});if(r)q.on('key',function(u){if(u.data.keyCode==9&&q.execCommand('selectNextCell')||u.data.keyCode==2000+9&&q.execCommand('selectPreviousCell'))u.cancel();});if(b.webkit||b.gecko)q.on('key',function(u){var v=u.data.keyCode;if(v==9&&!t){u.cancel();q.execCommand('blur');}if(v==2000+9){q.execCommand('blurBack');u.cancel();}});q.addCommand('blur',e.extend(n,m));q.addCommand('blurBack',e.extend(o,m));q.addCommand('selectNextCell',p());q.addCommand('selectPreviousCell',p(true));}});})();h.prototype.focusNext=function(m,n){var w=this;var o=w.$,p=n===undefined?w.getTabIndex():n,q,r,s,t,u,v;if(p<=0){u=w.getNextSourceNode(m,1);while(u){if(u.isVisible()&&u.getTabIndex()===0){s=u;break;}u=u.getNextSourceNode(false,1);}}else{u=w.getDocument().getBody().getFirst();while(u=u.getNextSourceNode(false,1)){if(!q)if(!r&&u.equals(w)){r=true;if(m){if(!(u=u.getNextSourceNode(true,1)))break;q=1;}}else if(r&&!w.contains(u))q=1;if(!u.isVisible()||(v=u.getTabIndex())<0)continue;if(q&&v==p){s=u;break;}if(v>p&&(!s||!t||v<t)){s=u;t=v;}else if(!s&&v===0){s=u;t=v;}}}if(s)s.focus();};h.prototype.focusPrevious=function(m,n){var w=this;var o=w.$,p=n===undefined?w.getTabIndex():n,q,r,s,t=0,u,v=w.getDocument().getBody().getLast();
+while(v=v.getPreviousSourceNode(false,1)){if(!q)if(!r&&v.equals(w)){r=true;if(m){if(!(v=v.getPreviousSourceNode(true,1)))break;q=1;}}else if(r&&!w.contains(v))q=1;if(!v.isVisible()||(u=v.getTabIndex())<0)continue;if(p<=0){if(q&&u===0){s=v;break;}if(u>t){s=v;t=u;}}else{if(q&&u==p){s=v;break;}if(u<p&&(!s||u>t)){s=v;t=u;}}}if(s)s.focus();};(function(){j.add('templates',{requires:['dialog'],init:function(o){a.dialog.add('templates',a.getUrl(this.path+'dialogs/templates.js'));o.addCommand('templates',new a.dialogCommand('templates'));o.ui.addButton('Templates',{label:o.lang.templates.button,command:'templates'});}});var m={},n={};a.addTemplates=function(o,p){m[o]=p;};a.getTemplates=function(o){return m[o];};a.loadTemplates=function(o,p){var q=[];for(var r=0,s=o.length;r<s;r++){if(!n[o[r]]){q.push(o[r]);n[o[r]]=1;}}if(q.length)a.scriptLoader.load(q,p);else setTimeout(p,0);};})();i.templates_files=[a.getUrl('plugins/templates/templates/default.js')];i.templates_replaceContent=true;(function(){var m=function(){this.toolbars=[];this.focusCommandExecuted=false;};m.prototype.focus=function(){for(var o=0,p;p=this.toolbars[o++];)for(var q=0,r;r=p.items[q++];){if(r.focus){r.focus();return;}}};var n={toolbarFocus:{modes:{wysiwyg:1,source:1},exec:function(o){if(o.toolbox){o.toolbox.focusCommandExecuted=true;if(c||b.air)setTimeout(function(){o.toolbox.focus();},100);else o.toolbox.focus();}}}};j.add('toolbar',{init:function(o){var p=function(q,r){var s,t,u,v=o.lang.dir=='rtl';switch(r){case v?37:39:case 9:do{s=q.next;if(!s){t=q.toolbar.next;u=t&&t.items.length;while(u===0){t=t.next;u=t&&t.items.length;}if(t)s=t.items[0];}q=s;}while(q&&!q.focus)if(q)q.focus();else o.toolbox.focus();return false;case v?39:37:case 2000+9:do{s=q.previous;if(!s){t=q.toolbar.previous;u=t&&t.items.length;while(u===0){t=t.previous;u=t&&t.items.length;}if(t)s=t.items[u-1];}q=s;}while(q&&!q.focus)if(q)q.focus();else{var w=o.toolbox.toolbars[o.toolbox.toolbars.length-1].items;w[w.length-1].focus();}return false;case 27:o.focus();return false;case 13:case 32:q.execute();return false;}return true;};o.on('themeSpace',function(q){if(q.data.space==o.config.toolbarLocation){o.toolbox=new m();var r=e.getNextId(),s=['<div class="cke_toolbox" role="toolbar" aria-labelledby="',r,'" onmousedown="return false;"'],t=o.config.toolbarStartupExpanded!==false,u;s.push(t?'>':' style="display:none">');s.push('<span id="',r,'" class="cke_voice_label">',o.lang.toolbar,'</span>');var v=o.toolbox.toolbars,w=o.config.toolbar instanceof Array?o.config.toolbar:o.config['toolbar_'+o.config.toolbar];
+for(var x=0;x<w.length;x++){var y=w[x];if(!y)continue;var z=e.getNextId(),A={id:z,items:[]};if(u){s.push('</div>');u=0;}if(y==='/'){s.push('<div class="cke_break"></div>');continue;}s.push('<span id="',z,'" class="cke_toolbar" role="presentation"><span class="cke_toolbar_start"></span>');var B=v.push(A)-1;if(B>0){A.previous=v[B-1];A.previous.next=A;}for(var C=0;C<y.length;C++){var D,E=y[C];if(E=='-')D=k.separator;else D=o.ui.create(E);if(D){if(D.canGroup){if(!u){s.push('<span class="cke_toolgroup" role="presentation">');u=1;}}else if(u){s.push('</span>');u=0;}var F=D.render(o,s);B=A.items.push(F)-1;if(B>0){F.previous=A.items[B-1];F.previous.next=F;}F.toolbar=A;F.onkey=p;F.onfocus=function(){if(!o.toolbox.focusCommandExecuted)o.focus();};}}if(u){s.push('</span>');u=0;}s.push('<span class="cke_toolbar_end"></span></span>');}s.push('</div>');if(o.config.toolbarCanCollapse){var G=e.addFunction(function(){o.execCommand('toolbarCollapse');});o.on('destroy',function(){e.removeFunction(G);});var H=e.getNextId();o.addCommand('toolbarCollapse',{exec:function(I){var J=a.document.getById(H),K=J.getPrevious(),L=I.getThemeSpace('contents'),M=K.getParent(),N=parseInt(L.$.style.height,10),O=M.$.offsetHeight,P=!K.isVisible();if(!P){K.hide();J.addClass('cke_toolbox_collapser_min');J.setAttribute('title',I.lang.toolbarExpand);}else{K.show();J.removeClass('cke_toolbox_collapser_min');J.setAttribute('title',I.lang.toolbarCollapse);}J.getFirst().setText(P?'▲':'◀');var Q=M.$.offsetHeight-O;L.setStyle('height',N-Q+'px');I.fire('resize');},modes:{wysiwyg:1,source:1}});s.push('<a title="'+(t?o.lang.toolbarCollapse:o.lang.toolbarExpand)+'" id="'+H+'" tabIndex="-1" class="cke_toolbox_collapser');if(!t)s.push(' cke_toolbox_collapser_min');s.push('" onclick="CKEDITOR.tools.callFunction('+G+')">','<span>▲</span>','</a>');}q.data.html+=s.join('');}});o.addCommand('toolbarFocus',n.toolbarFocus);}});})();k.separator={render:function(m,n){n.push('<span class="cke_separator" role="separator"></span>');return{};}};i.toolbarLocation='top';i.toolbar_Basic=[['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','About']];i.toolbar_Full=[['Source','-','Save','NewPage','Preview','-','Templates'],['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print','SpellChecker','Scayt'],['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],'/',['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['BidiLtr','BidiRtl'],['Link','Unlink','Anchor'],['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe'],'/',['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Maximize','ShowBlocks','-','About']];
+i.toolbar='Full';i.toolbarCanCollapse=true;(function(){j.add('undo',{requires:['selection','wysiwygarea'],init:function(s){var t=new o(s),u=s.addCommand('undo',{exec:function(){if(t.undo()){s.selectionChange();this.fire('afterUndo');}},state:0,canUndo:false}),v=s.addCommand('redo',{exec:function(){if(t.redo()){s.selectionChange();this.fire('afterRedo');}},state:0,canUndo:false});t.onChange=function(){u.setState(t.undoable()?2:0);v.setState(t.redoable()?2:0);};function w(x){if(t.enabled&&x.data.command.canUndo!==false)t.save();};s.on('beforeCommandExec',w);s.on('afterCommandExec',w);s.on('saveSnapshot',function(){t.save();});s.on('contentDom',function(){s.document.on('keydown',function(x){if(!x.data.$.ctrlKey&&!x.data.$.metaKey)t.type(x);});});s.on('beforeModeUnload',function(){s.mode=='wysiwyg'&&t.save(true);});s.on('mode',function(){t.enabled=s.mode=='wysiwyg';t.onChange();});s.ui.addButton('Undo',{label:s.lang.undo,command:'undo'});s.ui.addButton('Redo',{label:s.lang.redo,command:'redo'});s.resetUndo=function(){t.reset();s.fire('saveSnapshot');};s.on('updateSnapshot',function(){if(t.currentImage&&new m(s).equals(t.currentImage))setTimeout(function(){t.update();},0);});}});j.undo={};var m=j.undo.Image=function(s){this.editor=s;var t=s.getSnapshot(),u=t&&s.getSelection();c&&t&&(t=t.replace(/\s+data-cke-expando=".*?"/g,''));this.contents=t;this.bookmarks=u&&u.createBookmarks2(true);},n=/\b(?:href|src|name)="[^"]*?"/gi;m.prototype={equals:function(s,t){var u=this.contents,v=s.contents;if(c&&(b.ie7Compat||b.ie6Compat)){u=u.replace(n,'');v=v.replace(n,'');}if(u!=v)return false;if(t)return true;var w=this.bookmarks,x=s.bookmarks;if(w||x){if(!w||!x||w.length!=x.length)return false;for(var y=0;y<w.length;y++){var z=w[y],A=x[y];if(z.startOffset!=A.startOffset||z.endOffset!=A.endOffset||!e.arrayCompare(z.start,A.start)||!e.arrayCompare(z.end,A.end))return false;}}return true;}};function o(s){this.editor=s;this.reset();};var p={8:1,46:1},q={16:1,17:1,18:1},r={37:1,38:1,39:1,40:1};o.prototype={type:function(s){var t=s&&s.data.getKey(),u=t in q,v=t in p,w=this.lastKeystroke in p,x=v&&t==this.lastKeystroke,y=t in r,z=this.lastKeystroke in r,A=!v&&!y,B=v&&!x,C=!(u||this.typing)||A&&(w||z);if(C||B){var D=new m(this.editor);e.setTimeout(function(){var F=this;var E=F.editor.getSnapshot();if(c)E=E.replace(/\s+data-cke-expando=".*?"/g,'');if(D.contents!=E){F.typing=true;if(!F.save(false,D,false))F.snapshots.splice(F.index+1,F.snapshots.length-F.index-1);F.hasUndo=true;F.hasRedo=false;
+F.typesCount=1;F.modifiersCount=1;F.onChange();}},0,this);}this.lastKeystroke=t;if(v){this.typesCount=0;this.modifiersCount++;if(this.modifiersCount>25){this.save(false,null,false);this.modifiersCount=1;}}else if(!y){this.modifiersCount=0;this.typesCount++;if(this.typesCount>25){this.save(false,null,false);this.typesCount=1;}}},reset:function(){var s=this;s.lastKeystroke=0;s.snapshots=[];s.index=-1;s.limit=s.editor.config.undoStackSize||20;s.currentImage=null;s.hasUndo=false;s.hasRedo=false;s.resetType();},resetType:function(){var s=this;s.typing=false;delete s.lastKeystroke;s.typesCount=0;s.modifiersCount=0;},fireChange:function(){var s=this;s.hasUndo=!!s.getNextImage(true);s.hasRedo=!!s.getNextImage(false);s.resetType();s.onChange();},save:function(s,t,u){var w=this;var v=w.snapshots;if(!t)t=new m(w.editor);if(t.contents===false)return false;if(w.currentImage&&t.equals(w.currentImage,s))return false;v.splice(w.index+1,v.length-w.index-1);if(v.length==w.limit)v.shift();w.index=v.push(t)-1;w.currentImage=t;if(u!==false)w.fireChange();return true;},restoreImage:function(s){var u=this;u.editor.loadSnapshot(s.contents);if(s.bookmarks)u.editor.getSelection().selectBookmarks(s.bookmarks);else if(c){var t=u.editor.document.getBody().$.createTextRange();t.collapse(true);t.select();}u.index=s.index;u.update();u.fireChange();},getNextImage:function(s){var x=this;var t=x.snapshots,u=x.currentImage,v,w;if(u)if(s)for(w=x.index-1;w>=0;w--){v=t[w];if(!u.equals(v,true)){v.index=w;return v;}}else for(w=x.index+1;w<t.length;w++){v=t[w];if(!u.equals(v,true)){v.index=w;return v;}}return null;},redoable:function(){return this.enabled&&this.hasRedo;},undoable:function(){return this.enabled&&this.hasUndo;},undo:function(){var t=this;if(t.undoable()){t.save(true);var s=t.getNextImage(true);if(s)return t.restoreImage(s),true;}return false;},redo:function(){var t=this;if(t.redoable()){t.save(true);if(t.redoable()){var s=t.getNextImage(false);if(s)return t.restoreImage(s),true;}}return false;},update:function(){var s=this;s.snapshots.splice(s.index,1,s.currentImage=new m(s.editor));}};})();(function(){var m={table:1,pre:1},n=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,o=d.walker.whitespaces(true);function p(E){return E.getName() in m||E.isBlockBoundary()&&f.$empty[E.getName()];};function q(E){if(E.getType()==3)return E.getSelectedElement().isReadOnly();else return E.getCommonAncestor().isReadOnly();};
+function r(E){return function(F){if(this.mode=='wysiwyg'){this.focus();var G=this.getSelection();if(q(G))return;this.fire('saveSnapshot');E.call(this,F.data);e.setTimeout(function(){this.fire('saveSnapshot');},0,this);}};};function s(E){var K=this;if(K.dataProcessor)E=K.dataProcessor.toHtml(E);var F=K.getSelection();if(c){var G=F.isLocked;if(G)F.unlock();var H=F.getNative();if(H.type=='Control')H.clear();else if(F.getType()==2){var I=F.getRanges()[0],J=I&&I.endContainer;if(J&&J.type==1&&J.getAttribute('contenteditable')=='false'&&I.checkBoundaryOfElement(J,2)){I.setEndAfter(I.endContainer);I.deleteContents();}}try{H.createRange().pasteHTML(E);}catch(L){}if(G)K.getSelection().lock();}else K.document.$.execCommand('inserthtml',false,E);if(b.webkit){F=K.getSelection();F.scrollIntoView();}};function t(E){var F=this.getSelection(),G=F.getStartElement().hasAscendant('pre',true)?2:this.config.enterMode,H=G==2,I=e.htmlEncode(E.replace(/\r\n|\r/g,'\n'));I=I.replace(/^[ \t]+|[ \t]+$/g,function(O,P,Q){if(O.length==1)return ' ';else if(!P)return e.repeat(' ',O.length-1)+' ';else return ' '+e.repeat(' ',O.length-1);});I=I.replace(/[ \t]{2,}/g,function(O){return e.repeat(' ',O.length-1)+' ';});var J=G==1?'p':'div';if(!H)I=I.replace(/(\n{2})([\s\S]*?)(?:$|\1)/g,function(O,P,Q){return '<'+J+'>'+Q+'</'+J+'>';});I=I.replace(/\n/g,'<br>');if(!(H||c))I=I.replace(new RegExp('<br>(?=</'+J+'>)'),function(O){return e.repeat(O,2);});if(b.gecko||b.webkit){var K=new d.elementPath(F.getStartElement()),L=[];for(var M=0;M<K.elements.length;M++){var N=K.elements[M].getName();if(N in f.$inline)L.unshift(K.elements[M].getOuterHtml().match(/^<.*?>/));else if(N in f.$block)break;}I=L.join('')+I;}s.call(this,I);};function u(E){var F=this.getSelection(),G=F.getRanges(),H=E.getName(),I=f.$block[H],J=F.isLocked;if(J)F.unlock();var K,L,M,N;for(var O=G.length-1;O>=0;O--){K=G[O];K.deleteContents();L=!O&&E||E.clone(1);var P,Q;if(I)while((P=K.getCommonAncestor(0,1))&&(Q=f[P.getName()])&&!(Q&&Q[H])){if(P.getName() in f.span)K.splitElement(P);else if(K.checkStartOfBlock()&&K.checkEndOfBlock()){K.setStartBefore(P);K.collapse(true);P.remove();}else K.splitBlock();}K.insertNode(L);if(!M)M=L;}K.moveToPosition(M,4);if(I){var R=M.getNext(o),S=R&&R.type==1&&R.getName();if(S&&f.$block[S]&&f[S]['#'])K.moveToElementEditStart(R);}F.selectRanges([K]);if(J)this.getSelection().lock();};function v(E){if(!E.checkDirty())setTimeout(function(){E.resetDirty();},0);};var w=d.walker.whitespaces(true),x=d.walker.bookmark(false,true);
+function y(E){return w(E)&&x(E);};function z(E){return E.type==3&&e.trim(E.getText()).match(/^(?: |\xa0)$/);};function A(E){if(E.isLocked){E.unlock();setTimeout(function(){E.lock();},0);}};function B(E){return E.getOuterHtml().match(n);};w=d.walker.whitespaces(true);function C(E){var F=E.window,G=E.document,H=E.document.getBody(),I=H.getChildren().count();if(!I||I==1&&H.getFirst().hasAttribute('_moz_editor_bogus_node')){v(E);var J=E.element.getDocument(),K=J.getDocumentElement(),L=K.$.scrollTop,M=K.$.scrollLeft,N=G.$.createEvent('KeyEvents');N.initKeyEvent('keypress',true,true,F.$,false,false,false,false,0,32);G.$.dispatchEvent(N);if(L!=K.$.scrollTop||M!=K.$.scrollLeft)J.getWindow().$.scrollTo(M,L);I&&H.getFirst().remove();G.getBody().appendBogus();var O=new d.range(G);O.setStartAt(H,1);O.select();}};function D(E){var F=E.editor,G=E.data.path,H=G.blockLimit,I=E.data.selection,J=I.getRanges()[0],K=F.document.getBody(),L=F.config.enterMode;b.gecko&&C(F);if(L!=2&&J.collapsed&&H.getName()=='body'&&!G.block){F.fire('updateSnapshot');v(F);c&&A(I);var M=J.fixBlock(true,F.config.enterMode==3?'div':'p');if(c){var N=M.getFirst(y);N&&z(N)&&N.remove();}if(B(M)){var O=M.getNext(w);if(O&&O.type==1&&!p(O)){J.moveToElementEditStart(O);M.remove();}else{O=M.getPrevious(w);if(O&&O.type==1&&!p(O)){J.moveToElementEditEnd(O);M.remove();}}}J.select();if(!c)F.selectionChange();}var P=new d.range(F.document),Q=new d.walker(P);P.selectNodeContents(K);Q.evaluator=function(S){return S.type==1&&S.getName() in m;};Q.guard=function(S,T){return!(S.type==3&&w(S)||T);};if(Q.previous()){F.fire('updateSnapshot');v(F);c&&A(I);var R;if(L!=2)R=K.append(new h(L==1?'p':'div'));else R=K;if(!c)R.appendBogus();}};j.add('wysiwygarea',{requires:['editingblock'],init:function(E){var F=E.config.enterMode!=2?E.config.enterMode==3?'div':'p':false,G=E.lang.editorTitle.replace('%1',E.name),H;E.on('editingBlockReady',function(){var N,O,P,Q,R,S,T=b.isCustomDomain(),U=function(X){if(O)O.remove();var Y='document.open();'+(T?'document.domain="'+document.domain+'";':'')+'document.close();';Y=b.air?'javascript:void(0)':c?'javascript:void(function(){'+encodeURIComponent(Y)+'}())':'';O=h.createFromHtml('<iframe style="width:100%;height:100%" frameBorder="0" title="'+G+'"'+' src="'+Y+'"'+' tabIndex="'+(b.webkit?-1:E.tabIndex)+'"'+' allowTransparency="true"'+'></iframe>');if(document.location.protocol=='chrome:')a.event.useCapture=true;O.on('load',function(ac){R=1;ac.removeListener();var ad=O.getFrameDocument();ad.write(X);
+b.air&&W(ad.getWindow().$);});if(document.location.protocol=='chrome:')a.event.useCapture=false;var Z=E.element,aa=b.gecko&&!Z.isVisible(),ab={};if(aa){Z.show();ab={position:Z.getStyle('position'),top:Z.getStyle('top')};Z.setStyles({position:'absolute',top:'-3000px'});}N.append(O);if(aa)setTimeout(function(){Z.hide();Z.setStyles(ab);},1000);};H=e.addFunction(W);var V='<script id="cke_actscrpt" type="text/javascript" data-cke-temp="1">'+(T?'document.domain="'+document.domain+'";':'')+'window.parent.CKEDITOR.tools.callFunction( '+H+', window );'+'</script>';function W(X){if(!R)return;R=0;E.fire('ariaWidget',O);var Y=X.document,Z=Y.body,aa=Y.getElementById('cke_actscrpt');aa&&aa.parentNode.removeChild(aa);Z.spellcheck=!E.config.disableNativeSpellChecker;if(c){Z.hideFocus=true;Z.disabled=true;Z.contentEditable=true;Z.removeAttribute('disabled');}else setTimeout(function(){if(b.gecko&&b.version>=10900||b.opera)Y.$.body.contentEditable=true;else if(b.webkit)Y.$.body.parentNode.contentEditable=true;else Y.$.designMode='on';},0);b.gecko&&e.setTimeout(C,0,null,E);X=E.window=new d.window(X);Y=E.document=new g(Y);Y.on('dblclick',function(af){var ag=af.data.getTarget(),ah={element:ag,dialog:''};E.fire('doubleclick',ah);ah.dialog&&E.openDialog(ah.dialog);});if(!(c||b.opera))Y.on('mousedown',function(af){var ag=af.data.getTarget();if(ag.is('img','hr','input','textarea','select'))E.getSelection().selectElement(ag);});if(b.gecko)Y.on('mouseup',function(af){if(af.data.$.button==2){var ag=af.data.getTarget();if(!ag.getOuterHtml().replace(n,'')){var ah=new d.range(Y);ah.moveToElementEditStart(ag);ah.select(true);}}});Y.on('click',function(af){af=af.data;if(af.getTarget().is('a')&&af.$.button!=2)af.preventDefault();});if(b.webkit){Y.on('click',function(af){if(af.data.getTarget().is('input','select'))af.data.preventDefault();});Y.on('mouseup',function(af){if(af.data.getTarget().is('input','textarea'))af.data.preventDefault();});}if(c&&Y.$.compatMode=='CSS1Compat'||b.gecko||b.opera){var ab=Y.getDocumentElement();ab.on('mousedown',function(af){if(af.data.getTarget().equals(ab)){if(b.gecko&&b.version>=10900)L();M.focus();}});}X.on('blur',function(){E.focusManager.blur();});var ac;X.on('focus',function(){var af=E.document;if(b.gecko&&b.version>=10900)L();else if(b.opera)af.getBody().focus();else if(b.webkit)if(!ac){E.document.getDocumentElement().focus();ac=1;}E.focusManager.focus();});var ad=E.keystrokeHandler;if(ad)ad.attach(Y);if(c){Y.getDocumentElement().addClass(Y.$.compatMode);
+Y.on('keydown',function(af){var ag=af.data.getKeystroke();if(ag in {8:1,46:1}){var ah=E.getSelection(),ai=ah.getSelectedElement();if(ai){E.fire('saveSnapshot');var aj=ah.getRanges()[0].createBookmark();ai.remove();ah.selectBookmarks([aj]);E.fire('saveSnapshot');af.data.preventDefault();}}});if(Y.$.compatMode=='CSS1Compat'){var ae={33:1,34:1};Y.on('keydown',function(af){if(af.data.getKeystroke() in ae)setTimeout(function(){E.getSelection().scrollIntoView();},0);});}}if(E.contextMenu)E.contextMenu.addTarget(Y,E.config.browserContextMenuOnCtrl!==false);setTimeout(function(){E.fire('contentDom');if(S){E.mode='wysiwyg';E.fire('mode');S=false;}P=false;if(Q){E.focus();Q=false;}setTimeout(function(){E.fire('dataReady');},0);try{E.document.$.execCommand('enableObjectResizing',false,!E.config.disableObjectResizing);}catch(af){}try{E.document.$.execCommand('enableInlineTableEditing',false,!E.config.disableNativeTableHandles);}catch(ag){}if(c)setTimeout(function(){if(E.document){var ah=E.document.$.body;ah.runtimeStyle.marginBottom='0px';ah.runtimeStyle.marginBottom='';}},1000);},0);};E.addMode('wysiwyg',{load:function(X,Y,Z){N=X;if(c&&b.quirks)X.setStyle('position','relative');E.mayBeDirty=true;S=true;if(Z)this.loadSnapshotData(Y);else this.loadData(Y);},loadData:function(X){P=true;var Y=E.config,Z=Y.fullPage,aa=Y.docType,ab='<style type="text/css" data-cke-temp="1">'+E._.styles.join('\n')+'</style>';!Z&&(ab=e.buildStyleHtml(E.config.contentsCss)+ab);var ac=Y.baseHref?'<base href="'+Y.baseHref+'" data-cke-temp="1" />':'';if(Z)X=X.replace(/<!DOCTYPE[^>]*>/i,function(ad){E.docType=aa=ad;return '';});if(E.dataProcessor)X=E.dataProcessor.toHtml(X,F);if(Z){if(!/<body[\s|>]/.test(X))X='<body>'+X;if(!/<html[\s|>]/.test(X))X='<html>'+X+'</html>';if(!/<head[\s|>]/.test(X))X=X.replace(/<html[^>]*>/,'$&<head><title></title></head>');else if(!/<title[\s|>]/.test(X))X=X.replace(/<head[^>]*>/,'$&<title></title>');ac&&(X=X.replace(/<head>/,'$&'+ac));X=X.replace(/<\/head\s*>/,ab+'$&');X=aa+X;}else X=Y.docType+'<html dir="'+Y.contentsLangDirection+'"'+' lang="'+(Y.contentsLanguage||E.langCode)+'">'+'<head>'+'<title>'+G+'</title>'+ac+ab+'</head>'+'<body'+(Y.bodyId?' id="'+Y.bodyId+'"':'')+(Y.bodyClass?' class="'+Y.bodyClass+'"':'')+'>'+X+'</html>';X+=V;this.onDispose();U(X);},getData:function(){var X=E.config,Y=X.fullPage,Z=Y&&E.docType,aa=O.getFrameDocument(),ab=Y?aa.getDocumentElement().getOuterHtml():aa.getBody().getHtml();if(E.dataProcessor)ab=E.dataProcessor.toDataFormat(ab,F);if(X.ignoreEmptyParagraph)ab=ab.replace(n,function(ac,ad){return ad;
+});if(Z)ab=Z+'\n'+ab;return ab;},getSnapshotData:function(){return O.getFrameDocument().getBody().getHtml();},loadSnapshotData:function(X){O.getFrameDocument().getBody().setHtml(X);},onDispose:function(){if(!E.document)return;E.document.getDocumentElement().clearCustomData();E.document.getBody().clearCustomData();E.window.clearCustomData();E.document.clearCustomData();O.clearCustomData();O.remove();},unload:function(X){this.onDispose();E.window=E.document=O=N=Q=null;E.fire('contentDomUnload');},focus:function(){var X=E.window;if(P)Q=true;else if(b.opera&&E.document){var Y=E.window.$.frameElement;Y.blur(),Y.focus();E.document.getBody().focus();E.selectionChange();}else if(!b.opera&&X){b.air?setTimeout(function(){X.focus();},0):X.focus();E.selectionChange();}}});E.on('insertHtml',r(s),null,null,20);E.on('insertElement',r(u),null,null,20);E.on('insertText',r(t),null,null,20);E.on('selectionChange',D,null,null,1);});var I;E.on('contentDom',function(){var N=E.document.getElementsByTag('title').getItem(0);N.data('cke-title',E.document.$.title);E.document.$.title=G;});if(b.ie8Compat){E.addCss('html.CSS1Compat [contenteditable=false]{ min-height:0 !important;}');var J=[];for(var K in f.$removeEmpty)J.push('html.CSS1Compat '+K+'[contenteditable=false]');E.addCss(J.join(',')+'{ display:inline-block;}');}else if(b.gecko)E.addCss('html { height: 100% !important; }');function L(N){e.tryThese(function(){E.document.$.designMode='on';setTimeout(function(){E.document.$.designMode='off';if(a.currentInstance==E)E.document.getBody().focus();},50);},function(){E.document.$.designMode='off';var O=E.document.getBody();O.setAttribute('contentEditable',false);O.setAttribute('contentEditable',true);!N&&L(1);});};if(b.gecko||c||b.opera){var M;E.on('uiReady',function(){M=E.container.append(h.createFromHtml('<span tabindex="-1" style="position:absolute;" role="presentation"></span>'));M.on('focus',function(){E.focus();});});E.on('destroy',function(){e.removeFunction(H);M.clearCustomData();});}E.on('insertElement',function(N){var O=N.data;if(O.type==1&&(O.is('input')||O.is('textarea')))if(!O.isReadOnly()){O.setAttribute('contentEditable',false);O.setCustomData('_cke_notReadOnly',1);}});}});if(b.gecko)(function(){var E=document.body;if(!E)window.addEventListener('load',arguments.callee,false);else{var F=E.getAttribute('onpageshow');E.setAttribute('onpageshow',(F?F+';':'')+'event.persisted && (function(){'+'var allInstances = CKEDITOR.instances, editor, doc;'+'for ( var i in allInstances )'+'{'+'\teditor = allInstances[ i ];'+'\tdoc = editor.document;'+'\tif ( doc )'+'\t{'+'\t\tdoc.$.designMode = "off";'+'\t\tdoc.$.designMode = "on";'+'\t}'+'}'+'})();');
+}})();})();i.disableObjectResizing=false;i.disableNativeTableHandles=true;i.disableNativeSpellChecker=true;i.ignoreEmptyParagraph=true;j.add('wsc',{requires:['dialog'],init:function(m){var n='checkspell',o=m.addCommand(n,new a.dialogCommand(n));o.modes={wysiwyg:!b.opera&&!b.air&&document.domain==window.location.hostname};m.ui.addButton('SpellChecker',{label:m.lang.spellCheck.toolbar,command:n});a.dialog.add(n,this.path+'dialogs/wsc.js');}});i.wsc_customerId=i.wsc_customerId||'1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk';i.wsc_customLoaderScript=i.wsc_customLoaderScript||null;a.DIALOG_RESIZE_NONE=0;a.DIALOG_RESIZE_WIDTH=1;a.DIALOG_RESIZE_HEIGHT=2;a.DIALOG_RESIZE_BOTH=3;(function(){var m=e.cssLength;function n(P){return!!this._.tabs[P][0].$.offsetHeight;};function o(){var T=this;var P=T._.currentTabId,Q=T._.tabIdList.length,R=e.indexOf(T._.tabIdList,P)+Q;for(var S=R-1;S>R-Q;S--){if(n.call(T,T._.tabIdList[S%Q]))return T._.tabIdList[S%Q];}return null;};function p(){var T=this;var P=T._.currentTabId,Q=T._.tabIdList.length,R=e.indexOf(T._.tabIdList,P);for(var S=R+1;S<R+Q;S++){if(n.call(T,T._.tabIdList[S%Q]))return T._.tabIdList[S%Q];}return null;};function q(P,Q){var R=P.$.getElementsByTagName('input');for(var S=0,T=R.length;S<T;S++){var U=new h(R[S]);if(U.getAttribute('type').toLowerCase()=='text')if(Q){U.setAttribute('value',U.getCustomData('fake_value')||'');U.removeCustomData('fake_value');}else{U.setCustomData('fake_value',U.getAttribute('value'));U.setAttribute('value','');}}};a.dialog=function(P,Q){var R=a.dialog._.dialogDefinitions[Q],S=e.clone(s),T=P.config.dialog_buttonsOrder||'OS',U=P.lang.dir;if(T=='OS'&&b.mac||T=='rtl'&&U=='ltr'||T=='ltr'&&U=='rtl')S.buttons.reverse();R=e.extend(R(P),S);R=e.clone(R);R=new w(this,R);var V=a.document,W=P.theme.buildDialog(P);this._={editor:P,element:W.element,name:Q,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:false,focusList:[],currentFocusIndex:0,hasFocus:false};this.parts=W.parts;e.setTimeout(function(){P.fire('ariaWidget',this.parts.contents);},0,this);this.parts.dialog.setStyles({position:b.ie6Compat?'absolute':'fixed',top:0,left:0,visibility:'hidden'});a.event.call(this);this.definition=R=a.fire('dialogDefinition',{name:Q,definition:R},P).definition;var X={};if(!('removeDialogTabs' in P._)&&P.config.removeDialogTabs){var Y=P.config.removeDialogTabs.split(';');
+for(i=0;i<Y.length;i++){var Z=Y[i].split(':');if(Z.length==2){var aa=Z[0];if(!X[aa])X[aa]=[];X[aa].push(Z[1]);}}P._.removeDialogTabs=X;}if(P._.removeDialogTabs&&(X=P._.removeDialogTabs[Q]))for(i=0;i<X.length;i++)R.removeContents(X[i]);if(R.onLoad)this.on('load',R.onLoad);if(R.onShow)this.on('show',R.onShow);if(R.onHide)this.on('hide',R.onHide);if(R.onOk)this.on('ok',function(an){P.fire('saveSnapshot');setTimeout(function(){P.fire('saveSnapshot');},0);if(R.onOk.call(this,an)===false)an.data.hide=false;});if(R.onCancel)this.on('cancel',function(an){if(R.onCancel.call(this,an)===false)an.data.hide=false;});var ab=this,ac=function(an){var ao=ab._.contents,ap=false;for(var aq in ao)for(var ar in ao[aq]){ap=an.call(this,ao[aq][ar]);if(ap)return;}};this.on('ok',function(an){ac(function(ao){if(ao.validate){var ap=ao.validate(this);if(typeof ap=='string'){alert(ap);ap=false;}if(ap===false){if(ao.select)ao.select();else ao.focus();an.data.hide=false;an.stop();return true;}}});},this,null,0);this.on('cancel',function(an){ac(function(ao){if(ao.isChanged()){if(!confirm(P.lang.common.confirmCancel))an.data.hide=false;return true;}});},this,null,0);this.parts.close.on('click',function(an){if(this.fire('cancel',{hide:true}).hide!==false)this.hide();an.data.preventDefault();},this);function ad(){var an=ab._.focusList;an.sort(function(aq,ar){if(aq.tabIndex!=ar.tabIndex)return ar.tabIndex-aq.tabIndex;else return aq.focusIndex-ar.focusIndex;});var ao=an.length;for(var ap=0;ap<ao;ap++)an[ap].focusIndex=ap;};function ae(an){var ao=ab._.focusList,ap=an?1:-1;if(ao.length<1)return;var aq=ab._.currentFocusIndex;try{ao[aq].getInputElement().$.blur();}catch(at){}var ar=(aq+ap+ao.length)%ao.length,as=ar;while(!ao[as].isFocusable()){as=(as+ap+ao.length)%ao.length;if(as==ar)break;}ao[as].focus();if(ao[as].type=='text')ao[as].select();};this.changeFocus=ae;var af;function ag(an){var as=this;if(ab!=a.dialog._.currentTop)return;var ao=an.data.getKeystroke(),ap=P.lang.dir=='rtl';af=0;if(ao==9||ao==2000+9){var aq=ao==2000+9;if(ab._.tabBarMode){var ar=aq?o.call(ab):p.call(ab);ab.selectPage(ar);ab._.tabs[ar][0].focus();}else ae(!aq);af=1;}else if(ao==4000+121&&!ab._.tabBarMode&&ab.getPageCount()>1){ab._.tabBarMode=true;ab._.tabs[ab._.currentTabId][0].focus();af=1;}else if((ao==37||ao==39)&&ab._.tabBarMode){ar=ao==(ap?39:37)?o.call(ab):p.call(ab);ab.selectPage(ar);ab._.tabs[ar][0].focus();af=1;}else if((ao==13||ao==32)&&ab._.tabBarMode){as.selectPage(as._.currentTabId);as._.tabBarMode=false;as._.currentFocusIndex=-1;
+ae(true);af=1;}if(af){an.stop();an.data.preventDefault();}};function ah(an){af&&an.data.preventDefault();};var ai=this._.element;this.on('show',function(){ai.on('keydown',ag,this,null,0);if(b.opera||b.gecko&&b.mac)ai.on('keypress',ah,this);});this.on('hide',function(){ai.removeListener('keydown',ag);if(b.opera||b.gecko&&b.mac)ai.removeListener('keypress',ah);});this.on('iframeAdded',function(an){var ao=new g(an.data.iframe.$.contentWindow.document);ao.on('keydown',ag,this,null,0);});this.on('show',function(){var ar=this;ad();if(P.config.dialog_startupFocusTab&&ab._.pageCount>1){ab._.tabBarMode=true;ab._.tabs[ab._.currentTabId][0].focus();}else if(!ar._.hasFocus){ar._.currentFocusIndex=-1;if(R.onFocus){var an=R.onFocus.call(ar);an&&an.focus();}else ae(true);if(ar._.editor.mode=='wysiwyg'&&c){var ao=P.document.$.selection,ap=ao.createRange();if(ap)if(ap.parentElement&&ap.parentElement().ownerDocument==P.document.$||ap.item&&ap.item(0).ownerDocument==P.document.$){var aq=document.body.createTextRange();aq.moveToElementText(ar.getElement().getFirst().$);aq.collapse(true);aq.select();}}}},this,null,4294967295);if(b.ie6Compat)this.on('load',function(an){var ao=this.getElement(),ap=ao.getFirst();ap.remove();ap.appendTo(ao);},this);y(this);z(this);new d.text(R.title,a.document).appendTo(this.parts.title);for(var aj=0;aj<R.contents.length;aj++){var ak=R.contents[aj];ak&&this.addPage(ak);}this.parts.tabs.on('click',function(an){var aq=this;var ao=an.data.getTarget();if(ao.hasClass('cke_dialog_tab')){var ap=ao.$.id;aq.selectPage(ap.substring(4,ap.lastIndexOf('_')));if(aq._.tabBarMode){aq._.tabBarMode=false;aq._.currentFocusIndex=-1;ae(true);}an.data.preventDefault();}},this);var al=[],am=a.dialog._.uiElementBuilders.hbox.build(this,{type:'hbox',className:'cke_dialog_footer_buttons',widths:[],children:R.buttons},al).getChild();this.parts.footer.setHtml(al.join(''));for(aj=0;aj<am.length;aj++)this._.buttons[am[aj].id]=am[aj];};function r(P,Q,R){this.element=Q;this.focusIndex=R;this.tabIndex=0;this.isFocusable=function(){return!Q.getAttribute('disabled')&&Q.isVisible();};this.focus=function(){P._.currentFocusIndex=this.focusIndex;this.element.focus();};Q.on('keydown',function(S){if(S.data.getKeystroke() in {32:1,13:1})this.fire('click');});Q.on('focus',function(){this.fire('mouseover');});Q.on('blur',function(){this.fire('mouseout');});};a.dialog.prototype={destroy:function(){this.hide();this._.element.remove();},resize:(function(){return function(P,Q){var R=this;if(R._.contentSize&&R._.contentSize.width==P&&R._.contentSize.height==Q)return;
+a.dialog.fire('resize',{dialog:R,skin:R._.editor.skinName,width:P,height:Q},R._.editor);R._.contentSize={width:P,height:Q};};})(),getSize:function(){var P=this._.element.getFirst();return{width:P.$.offsetWidth||0,height:P.$.offsetHeight||0};},move:(function(){var P;return function(Q,R,S){var V=this;var T=V._.element.getFirst();if(P===undefined)P=T.getComputedStyle('position')=='fixed';if(P&&V._.position&&V._.position.x==Q&&V._.position.y==R)return;V._.position={x:Q,y:R};if(!P){var U=a.document.getWindow().getScrollPosition();Q+=U.x;R+=U.y;}T.setStyles({left:(Q>0?Q:0)+'px',top:(R>0?R:0)+'px'});S&&(V._.moved=1);};})(),getPosition:function(){return e.extend({},this._.position);},show:function(){var P=this._.editor;if(P.mode=='wysiwyg'&&c){var Q=P.getSelection();Q&&Q.lock();}var R=this._.element,S=this.definition;if(!(R.getParent()&&R.getParent().equals(a.document.getBody())))R.appendTo(a.document.getBody());else R.setStyle('display','block');if(b.gecko&&b.version<10900){var T=this.parts.dialog;T.setStyle('position','absolute');setTimeout(function(){T.setStyle('position','fixed');},0);}this.resize(this._.contentSize&&this._.contentSize.width||S.minWidth,this._.contentSize&&this._.contentSize.height||S.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);if(a.dialog._.currentZIndex===null)a.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex;this._.element.getFirst().setStyle('z-index',a.dialog._.currentZIndex+=10);if(a.dialog._.currentTop===null){a.dialog._.currentTop=this;this._.parentDialog=null;D(this._.editor);R.on('keydown',H);R.on(b.opera?'keypress':'keyup',I);for(var U in {keyup:1,keydown:1,keypress:1})R.on(U,O);}else{this._.parentDialog=a.dialog._.currentTop;var V=this._.parentDialog.getElement().getFirst();V.$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2);a.dialog._.currentTop=this;}J(this,this,'\x1b',null,function(){this.getButton('cancel')&&this.getButton('cancel').click();});this._.hasFocus=false;e.setTimeout(function(){this.layout();this.parts.dialog.setStyle('visibility','');this.fireOnce('load',{});k.fire('ready',this);this.fire('show',{});this._.editor.fire('dialogShow',this);this.foreach(function(W){W.setInitValue&&W.setInitValue();});},100,this);},layout:function(){var R=this;var P=a.document.getWindow().getViewPaneSize(),Q=R.getSize();R.move(R._.moved?R._.position.x:(P.width-Q.width)/2,R._.moved?R._.position.y:(P.height-Q.height)/2);},foreach:function(P){var S=this;for(var Q in S._.contents)for(var R in S._.contents[Q])P(S._.contents[Q][R]);
+return S;},reset:(function(){var P=function(Q){if(Q.reset)Q.reset(1);};return function(){this.foreach(P);return this;};})(),setupContent:function(){var P=arguments;this.foreach(function(Q){if(Q.setup)Q.setup.apply(Q,P);});},commitContent:function(){var P=arguments;this.foreach(function(Q){if(Q.commit)Q.commit.apply(Q,P);});},hide:function(){if(!this.parts.dialog.isVisible())return;this.fire('hide',{});this._.editor.fire('dialogHide',this);var P=this._.element;P.setStyle('display','none');this.parts.dialog.setStyle('visibility','hidden');K(this);while(a.dialog._.currentTop!=this)a.dialog._.currentTop.hide();if(!this._.parentDialog)E();else{var Q=this._.parentDialog.getElement().getFirst();Q.setStyle('z-index',parseInt(Q.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2));}a.dialog._.currentTop=this._.parentDialog;if(!this._.parentDialog){a.dialog._.currentZIndex=null;P.removeListener('keydown',H);P.removeListener(b.opera?'keypress':'keyup',I);for(var R in {keyup:1,keydown:1,keypress:1})P.removeListener(R,O);var S=this._.editor;S.focus();if(S.mode=='wysiwyg'&&c){var T=S.getSelection();T&&T.unlock(true);}}else a.dialog._.currentZIndex-=10;delete this._.parentDialog;this.foreach(function(U){U.resetInitValue&&U.resetInitValue();});},addPage:function(P){var ab=this;var Q=[],R=P.label?' title="'+e.htmlEncode(P.label)+'"':'',S=P.elements,T=a.dialog._.uiElementBuilders.vbox.build(ab,{type:'vbox',className:'cke_dialog_page_contents',children:P.elements,expand:!!P.expand,padding:P.padding,style:P.style||'width: 100%;'},Q),U=h.createFromHtml(Q.join(''));U.setAttribute('role','tabpanel');var V=b,W='cke_'+P.id+'_'+e.getNextNumber(),X=h.createFromHtml(['<a class="cke_dialog_tab"',ab._.pageCount>0?' cke_last':'cke_first',R,!!P.hidden?' style="display:none"':'',' id="',W,'"',V.gecko&&V.version>=10900&&!V.hc?'':' href="javascript:void(0)"',' tabIndex="-1"',' hidefocus="true"',' role="tab">',P.label,'</a>'].join(''));U.setAttribute('aria-labelledby',W);ab._.tabs[P.id]=[X,U];ab._.tabIdList.push(P.id);!P.hidden&&ab._.pageCount++;ab._.lastTab=X;ab.updateStyle();var Y=ab._.contents[P.id]={},Z,aa=T.getChild();while(Z=aa.shift()){Y[Z.id]=Z;if(typeof Z.getChild=='function')aa.push.apply(aa,Z.getChild());}U.setAttribute('name',P.id);U.appendTo(ab.parts.contents);X.unselectable();ab.parts.tabs.append(X);if(P.accessKey){J(ab,ab,'CTRL+'+P.accessKey,M,L);ab._.accessKeyMap['CTRL+'+P.accessKey]=P.id;}},selectPage:function(P){if(this._.currentTabId==P)return;if(this.fire('selectPage',{page:P,currentPage:this._.currentTabId})===true)return;
+for(var Q in this._.tabs){var R=this._.tabs[Q][0],S=this._.tabs[Q][1];if(Q!=P){R.removeClass('cke_dialog_tab_selected');S.hide();}S.setAttribute('aria-hidden',Q!=P);}var T=this._.tabs[P];T[0].addClass('cke_dialog_tab_selected');if(b.ie6Compat||b.ie7Compat){q(T[1]);T[1].show();setTimeout(function(){q(T[1],1);},0);}else T[1].show();this._.currentTabId=P;this._.currentTabIndex=e.indexOf(this._.tabIdList,P);},updateStyle:function(){this.parts.dialog[(this._.pageCount===1?'add':'remove')+'Class']('cke_single_page');},hidePage:function(P){var R=this;var Q=R._.tabs[P]&&R._.tabs[P][0];if(!Q||R._.pageCount==1||!Q.isVisible())return;else if(P==R._.currentTabId)R.selectPage(o.call(R));Q.hide();R._.pageCount--;R.updateStyle();},showPage:function(P){var R=this;var Q=R._.tabs[P]&&R._.tabs[P][0];if(!Q)return;Q.show();R._.pageCount++;R.updateStyle();},getElement:function(){return this._.element;},getName:function(){return this._.name;},getContentElement:function(P,Q){var R=this._.contents[P];return R&&R[Q];},getValueOf:function(P,Q){return this.getContentElement(P,Q).getValue();},setValueOf:function(P,Q,R){return this.getContentElement(P,Q).setValue(R);},getButton:function(P){return this._.buttons[P];},click:function(P){return this._.buttons[P].click();},disableButton:function(P){return this._.buttons[P].disable();},enableButton:function(P){return this._.buttons[P].enable();},getPageCount:function(){return this._.pageCount;},getParentEditor:function(){return this._.editor;},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement();},addFocusable:function(P,Q){var S=this;if(typeof Q=='undefined'){Q=S._.focusList.length;S._.focusList.push(new r(S,P,Q));}else{S._.focusList.splice(Q,0,new r(S,P,Q));for(var R=Q+1;R<S._.focusList.length;R++)S._.focusList[R].focusIndex++;}}};e.extend(a.dialog,{add:function(P,Q){if(!this._.dialogDefinitions[P]||typeof Q=='function')this._.dialogDefinitions[P]=Q;},exists:function(P){return!!this._.dialogDefinitions[P];},getCurrent:function(){return a.dialog._.currentTop;},okButton:(function(){var P=function(Q,R){R=R||{};return e.extend({id:'ok',type:'button',label:Q.lang.common.ok,'class':'cke_dialog_ui_button_ok',onClick:function(S){var T=S.data.dialog;if(T.fire('ok',{hide:true}).hide!==false)T.hide();}},R,true);};P.type='button';P.override=function(Q){return e.extend(function(R){return P(R,Q);},{type:'button'},true);};return P;})(),cancelButton:(function(){var P=function(Q,R){R=R||{};return e.extend({id:'cancel',type:'button',label:Q.lang.common.cancel,'class':'cke_dialog_ui_button_cancel',onClick:function(S){var T=S.data.dialog;
+if(T.fire('cancel',{hide:true}).hide!==false)T.hide();}},R,true);};P.type='button';P.override=function(Q){return e.extend(function(R){return P(R,Q);},{type:'button'},true);};return P;})(),addUIElement:function(P,Q){this._.uiElementBuilders[P]=Q;}});a.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};a.event.implementOn(a.dialog);a.event.implementOn(a.dialog.prototype,true);var s={resizable:3,minWidth:600,minHeight:400,buttons:[a.dialog.okButton,a.dialog.cancelButton]},t=function(P,Q,R){for(var S=0,T;T=P[S];S++){if(T.id==Q)return T;if(R&&T[R]){var U=t(T[R],Q,R);if(U)return U;}}return null;},u=function(P,Q,R,S,T){if(R){for(var U=0,V;V=P[U];U++){if(V.id==R){P.splice(U,0,Q);return Q;}if(S&&V[S]){var W=u(V[S],Q,R,S,true);if(W)return W;}}if(T)return null;}P.push(Q);return Q;},v=function(P,Q,R){for(var S=0,T;T=P[S];S++){if(T.id==Q)return P.splice(S,1);if(R&&T[R]){var U=v(T[R],Q,R);if(U)return U;}}return null;},w=function(P,Q){this.dialog=P;var R=Q.contents;for(var S=0,T;T=R[S];S++)R[S]=T&&new x(P,T);e.extend(this,Q);};w.prototype={getContents:function(P){return t(this.contents,P);},getButton:function(P){return t(this.buttons,P);},addContents:function(P,Q){return u(this.contents,P,Q);},addButton:function(P,Q){return u(this.buttons,P,Q);},removeContents:function(P){v(this.contents,P);},removeButton:function(P){v(this.buttons,P);}};function x(P,Q){this._={dialog:P};e.extend(this,Q);};x.prototype={get:function(P){return t(this.elements,P,'children');},add:function(P,Q){return u(this.elements,P,Q,'children');},remove:function(P){v(this.elements,P,'children');}};function y(P){var Q=null,R=null,S=P.getElement().getFirst(),T=P.getParentEditor(),U=T.config.dialog_magnetDistance,V=T.skin.margins||[0,0,0,0];if(typeof U=='undefined')U=20;function W(Y){var Z=P.getSize(),aa=a.document.getWindow().getViewPaneSize(),ab=Y.data.$.screenX,ac=Y.data.$.screenY,ad=ab-Q.x,ae=ac-Q.y,af,ag;Q={x:ab,y:ac};R.x+=ad;R.y+=ae;if(R.x+V[3]<U)af=-V[3];else if(R.x-V[1]>aa.width-Z.width-U)af=aa.width-Z.width+(T.lang.dir=='rtl'?0:V[1]);else af=R.x;if(R.y+V[0]<U)ag=-V[0];else if(R.y-V[2]>aa.height-Z.height-U)ag=aa.height-Z.height+V[2];else ag=R.y;P.move(af,ag,1);Y.data.preventDefault();};function X(Y){a.document.removeListener('mousemove',W);a.document.removeListener('mouseup',X);if(b.ie6Compat){var Z=C.getChild(0).getFrameDocument();Z.removeListener('mousemove',W);Z.removeListener('mouseup',X);}};P.parts.title.on('mousedown',function(Y){Q={x:Y.data.$.screenX,y:Y.data.$.screenY};
+a.document.on('mousemove',W);a.document.on('mouseup',X);R=P.getPosition();if(b.ie6Compat){var Z=C.getChild(0).getFrameDocument();Z.on('mousemove',W);Z.on('mouseup',X);}Y.data.preventDefault();},P);};function z(P){var Q=P.definition,R=Q.resizable;if(R==0)return;var S=P.getParentEditor(),T,U,V,W,X;function Y(ac){if(P._.moved&&S.lang.dir=='rtl'){var ad=P._.element.getFirst();ad.setStyle('right',ac+'px');ad.removeStyle('left');}else if(!P._.moved)P.layout();};var Z=e.addFunction(function(ac){X=P.getSize();U=X.height-P.parts.contents.getSize('height',!(b.gecko||b.opera||c&&b.quirks));T=X.width-P.parts.contents.getSize('width',1);W={x:ac.screenX,y:ac.screenY};V=a.document.getWindow().getViewPaneSize();a.document.on('mousemove',aa);a.document.on('mouseup',ab);if(b.ie6Compat){var ad=C.getChild(0).getFrameDocument();ad.on('mousemove',aa);ad.on('mouseup',ab);}ac.preventDefault&&ac.preventDefault();});P.on('load',function(){var ac='';if(R==1)ac=' cke_resizer_horizontal';else if(R==2)ac=' cke_resizer_vertical';var ad=h.createFromHtml('<div class="cke_resizer'+ac+'"'+' title="'+e.htmlEncode(S.lang.resize)+'"'+' onmousedown="CKEDITOR.tools.callFunction('+Z+', event )"></div>');P.parts.footer.append(ad,1);});S.on('destroy',function(){e.removeFunction(Z);});function aa(ac){var ad=S.lang.dir=='rtl',ae=(ac.data.$.screenX-W.x)*(ad?-1:1),af=ac.data.$.screenY-W.y,ag=X.width,ah=X.height,ai=ag+ae*(P._.moved?1:2),aj=ah+af*(P._.moved?1:2),ak=P._.element.getFirst(),al=ad&&ak.getComputedStyle('right'),am=P.getPosition();if(al)al=al=='auto'?V.width-(am.x||0)-ak.getSize('width'):parseInt(al,10);if(am.y+aj>V.height)aj=V.height-am.y;if((ad?al:am.x)+ai>V.width)ai=V.width-(ad?al:am.x);if((R==1||R==3)&&!(ad&&ae>0&&!am.x))ag=Math.max(Q.minWidth||0,ai-T);if(R==2||R==3)ah=Math.max(Q.minHeight||0,aj-U);P.resize(ag,ah);Y(al);ac.data.preventDefault();};function ab(){a.document.removeListener('mouseup',ab);a.document.removeListener('mousemove',aa);if(b.ie6Compat){var ac=C.getChild(0).getFrameDocument();ac.removeListener('mouseup',ab);ac.removeListener('mousemove',aa);}if(S.lang.dir=='rtl'){var ad=P._.element.getFirst(),ae=ad.getComputedStyle('left');if(ae=='auto')ae=V.width-parseInt(ad.getStyle('right'),10)-P.getSize().width;else ae=parseInt(ae,10);ad.removeStyle('right');P._.position.x+=1;P.move(ae,P._.position.y);}};};var A,B={},C;function D(P){var Q=a.document.getWindow(),R=P.config,S=R.dialog_backgroundCoverColor||'white',T=R.dialog_backgroundCoverOpacity,U=R.baseFloatZIndex,V=e.genKey(S,T,U),W=B[V];
+if(!W){var X=['<div style="position: ',b.ie6Compat?'absolute':'fixed','; z-index: ',U,'; top: 0px; left: 0px; ',!b.ie6Compat?'background-color: '+S:'','" class="cke_dialog_background_cover">'];if(b.ie6Compat){var Y=b.isCustomDomain(),Z="<html><body style=\\'background-color:"+S+";\\'></body></html>";X.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:');X.push('void((function(){document.open();'+(Y?"document.domain='"+document.domain+"';":'')+"document.write( '"+Z+"' );"+'document.close();'+'})())');X.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>');}X.push('</div>');W=h.createFromHtml(X.join(''));W.setOpacity(T!=undefined?T:0.5);W.appendTo(a.document.getBody());B[V]=W;}else W.show();C=W;var aa=function(){var ad=Q.getViewPaneSize();W.setStyles({width:ad.width+'px',height:ad.height+'px'});},ab=function(){var ad=Q.getScrollPosition(),ae=a.dialog._.currentTop;W.setStyles({left:ad.x+'px',top:ad.y+'px'});do{var af=ae.getPosition();ae.move(af.x,af.y);}while(ae=ae._.parentDialog)};A=aa;Q.on('resize',aa);aa();if(b.ie6Compat){var ac=function(){ab();arguments.callee.prevScrollHandler.apply(this,arguments);};Q.$.setTimeout(function(){ac.prevScrollHandler=window.onscroll||(function(){});window.onscroll=ac;},0);ab();}};function E(){if(!C)return;var P=a.document.getWindow();C.hide();P.removeListener('resize',A);if(b.ie6Compat)P.$.setTimeout(function(){var Q=window.onscroll&&window.onscroll.prevScrollHandler;window.onscroll=Q||null;},0);A=null;};function F(){for(var P in B)B[P].remove();B={};};var G={},H=function(P){var Q=P.data.$.ctrlKey||P.data.$.metaKey,R=P.data.$.altKey,S=P.data.$.shiftKey,T=String.fromCharCode(P.data.$.keyCode),U=G[(Q?'CTRL+':'')+(R?'ALT+':'')+(S?'SHIFT+':'')+T];if(!U||!U.length)return;U=U[U.length-1];U.keydown&&U.keydown.call(U.uiElement,U.dialog,U.key);P.data.preventDefault();},I=function(P){var Q=P.data.$.ctrlKey||P.data.$.metaKey,R=P.data.$.altKey,S=P.data.$.shiftKey,T=String.fromCharCode(P.data.$.keyCode),U=G[(Q?'CTRL+':'')+(R?'ALT+':'')+(S?'SHIFT+':'')+T];if(!U||!U.length)return;U=U[U.length-1];if(U.keyup){U.keyup.call(U.uiElement,U.dialog,U.key);P.data.preventDefault();}},J=function(P,Q,R,S,T){var U=G[R]||(G[R]=[]);U.push({uiElement:P,dialog:Q,key:R,keyup:T||P.accessKeyUp,keydown:S||P.accessKeyDown});},K=function(P){for(var Q in G){var R=G[Q];for(var S=R.length-1;S>=0;S--){if(R[S].dialog==P||R[S].uiElement==P)R.splice(S,1);
+}if(R.length===0)delete G[Q];}},L=function(P,Q){if(P._.accessKeyMap[Q])P.selectPage(P._.accessKeyMap[Q]);},M=function(P,Q){},N={27:1,13:1},O=function(P){if(P.data.getKeystroke() in N)P.data.stopPropagation();};(function(){k.dialog={uiElement:function(P,Q,R,S,T,U,V){if(arguments.length<4)return;var W=(S.call?S(Q):S)||'div',X=['<',W,' '],Y=(T&&T.call?T(Q):T)||{},Z=(U&&U.call?U(Q):U)||{},aa=(V&&V.call?V.call(this,P,Q):V)||'',ab=this.domId=Z.id||e.getNextId()+'_uiElement',ac=this.id=Q.id,ad;Z.id=ab;var ae={};if(Q.type)ae['cke_dialog_ui_'+Q.type]=1;if(Q.className)ae[Q.className]=1;var af=Z['class']&&Z['class'].split?Z['class'].split(' '):[];for(ad=0;ad<af.length;ad++){if(af[ad])ae[af[ad]]=1;}var ag=[];for(ad in ae)ag.push(ad);Z['class']=ag.join(' ');if(Q.title)Z.title=Q.title;var ah=(Q.style||'').split(';');for(ad in Y)ah.push(ad+':'+Y[ad]);if(Q.hidden)ah.push('display:none');for(ad=ah.length-1;ad>=0;ad--){if(ah[ad]==='')ah.splice(ad,1);}if(ah.length>0)Z.style=(Z.style?Z.style+'; ':'')+ah.join('; ');for(ad in Z)X.push(ad+'="'+e.htmlEncode(Z[ad])+'" ');X.push('>',aa,'</',W,'>');R.push(X.join(''));(this._||(this._={})).dialog=P;if(typeof Q.isChanged=='boolean')this.isChanged=function(){return Q.isChanged;};if(typeof Q.isChanged=='function')this.isChanged=Q.isChanged;a.event.implementOn(this);this.registerEvents(Q);if(this.accessKeyUp&&this.accessKeyDown&&Q.accessKey)J(this,P,'CTRL+'+Q.accessKey);var ai=this;P.on('load',function(){if(ai.getInputElement())ai.getInputElement().on('focus',function(){P._.tabBarMode=false;P._.hasFocus=true;ai.fire('focus');},ai);});if(this.keyboardFocusable){this.tabIndex=Q.tabIndex||0;this.focusIndex=P._.focusList.push(this)-1;this.on('focus',function(){P._.currentFocusIndex=ai.focusIndex;});}e.extend(this,Q);},hbox:function(P,Q,R,S,T){if(arguments.length<4)return;this._||(this._={});var U=this._.children=Q,V=T&&T.widths||null,W=T&&T.height||null,X={},Y,Z=function(){var ab=['<tbody><tr class="cke_dialog_ui_hbox">'];for(Y=0;Y<R.length;Y++){var ac='cke_dialog_ui_hbox_child',ad=[];if(Y===0)ac='cke_dialog_ui_hbox_first';if(Y==R.length-1)ac='cke_dialog_ui_hbox_last';ab.push('<td class="',ac,'" role="presentation" ');if(V){if(V[Y])ad.push('width:'+m(V[Y]));}else ad.push('width:'+Math.floor(100/R.length)+'%');if(W)ad.push('height:'+m(W));if(T&&T.padding!=undefined)ad.push('padding:'+m(T.padding));if(ad.length>0)ab.push('style="'+ad.join('; ')+'" ');ab.push('>',R[Y],'</td>');}ab.push('</tr></tbody>');return ab.join('');},aa={role:'presentation'};
+T&&T.align&&(aa.align=T.align);k.dialog.uiElement.call(this,P,T||{type:'hbox'},S,'table',X,aa,Z);},vbox:function(P,Q,R,S,T){if(arguments.length<3)return;this._||(this._={});var U=this._.children=Q,V=T&&T.width||null,W=T&&T.heights||null,X=function(){var Y=['<table role="presentation" cellspacing="0" border="0" '];Y.push('style="');if(T&&T.expand)Y.push('height:100%;');Y.push('width:'+m(V||'100%'),';');Y.push('"');Y.push('align="',e.htmlEncode(T&&T.align||(P.getParentEditor().lang.dir=='ltr'?'left':'right')),'" ');Y.push('><tbody>');for(var Z=0;Z<R.length;Z++){var aa=[];Y.push('<tr><td role="presentation" ');if(V)aa.push('width:'+m(V||'100%'));if(W)aa.push('height:'+m(W[Z]));else if(T&&T.expand)aa.push('height:'+Math.floor(100/R.length)+'%');if(T&&T.padding!=undefined)aa.push('padding:'+m(T.padding));if(aa.length>0)Y.push('style="',aa.join('; '),'" ');Y.push(' class="cke_dialog_ui_vbox_child">',R[Z],'</td></tr>');}Y.push('</tbody></table>');return Y.join('');};k.dialog.uiElement.call(this,P,T||{type:'vbox'},S,'div',null,{role:'presentation'},X);}};})();k.dialog.uiElement.prototype={getElement:function(){return a.document.getById(this.domId);},getInputElement:function(){return this.getElement();},getDialog:function(){return this._.dialog;},setValue:function(P,Q){this.getInputElement().setValue(P);!Q&&this.fire('change',{value:P});return this;},getValue:function(){return this.getInputElement().getValue();},isChanged:function(){return false;},selectParentTab:function(){var S=this;var P=S.getInputElement(),Q=P,R;while((Q=Q.getParent())&&Q.$.className.search('cke_dialog_page_contents')==-1){}if(!Q)return S;R=Q.getAttribute('name');if(S._.dialog._.currentTabId!=R)S._.dialog.selectPage(R);return S;},focus:function(){this.selectParentTab().getInputElement().focus();return this;},registerEvents:function(P){var Q=/^on([A-Z]\w+)/,R,S=function(U,V,W,X){V.on('load',function(){U.getInputElement().on(W,X,U);});};for(var T in P){if(!(R=T.match(Q)))continue;if(this.eventProcessors[T])this.eventProcessors[T].call(this,this._.dialog,P[T]);else S(this,this._.dialog,R[1].toLowerCase(),P[T]);}return this;},eventProcessors:{onLoad:function(P,Q){P.on('load',Q,this);},onShow:function(P,Q){P.on('show',Q,this);},onHide:function(P,Q){P.on('hide',Q,this);}},accessKeyDown:function(P,Q){this.focus();},accessKeyUp:function(P,Q){},disable:function(){var P=this.getInputElement();P.setAttribute('disabled','true');P.addClass('cke_disabled');},enable:function(){var P=this.getInputElement();P.removeAttribute('disabled');
+P.removeClass('cke_disabled');},isEnabled:function(){return!this.getInputElement().getAttribute('disabled');},isVisible:function(){return this.getInputElement().isVisible();},isFocusable:function(){if(!this.isEnabled()||!this.isVisible())return false;return true;}};k.dialog.hbox.prototype=e.extend(new k.dialog.uiElement(),{getChild:function(P){var Q=this;if(arguments.length<1)return Q._.children.concat();if(!P.splice)P=[P];if(P.length<2)return Q._.children[P[0]];else return Q._.children[P[0]]&&Q._.children[P[0]].getChild?Q._.children[P[0]].getChild(P.slice(1,P.length)):null;}},true);k.dialog.vbox.prototype=new k.dialog.hbox();(function(){var P={build:function(Q,R,S){var T=R.children,U,V=[],W=[];for(var X=0;X<T.length&&(U=T[X]);X++){var Y=[];V.push(Y);W.push(a.dialog._.uiElementBuilders[U.type].build(Q,U,Y));}return new k.dialog[R.type](Q,W,V,S,R);}};a.dialog.addUIElement('hbox',P);a.dialog.addUIElement('vbox',P);})();a.dialogCommand=function(P){this.dialogName=P;};a.dialogCommand.prototype={exec:function(P){P.openDialog(this.dialogName);},canUndo:false,editorFocus:c||b.webkit};(function(){var P=/^([a]|[^a])+$/,Q=/^\d*$/,R=/^\d*(?:\.\d+)?$/;a.VALIDATE_OR=1;a.VALIDATE_AND=2;a.dialog.validate={functions:function(){return function(){var Y=this;var S=Y&&Y.getValue?Y.getValue():arguments[0],T=undefined,U=2,V=[],W;for(W=0;W<arguments.length;W++){if(typeof arguments[W]=='function')V.push(arguments[W]);else break;}if(W<arguments.length&&typeof arguments[W]=='string'){T=arguments[W];W++;}if(W<arguments.length&&typeof arguments[W]=='number')U=arguments[W];var X=U==2?true:false;for(W=0;W<V.length;W++){if(U==2)X=X&&V[W](S);else X=X||V[W](S);}if(!X){if(T!==undefined)alert(T);if(Y&&(Y.select||Y.focus))Y.select||Y.focus();return false;}return true;};},regex:function(S,T){return function(){var V=this;var U=V&&V.getValue?V.getValue():arguments[0];if(!S.test(U)){if(T!==undefined)alert(T);if(V&&(V.select||V.focus))if(V.select)V.select();else V.focus();return false;}return true;};},notEmpty:function(S){return this.regex(P,S);},integer:function(S){return this.regex(Q,S);},number:function(S){return this.regex(R,S);},equals:function(S,T){return this.functions(function(U){return U==S;},T);},notEqual:function(S,T){return this.functions(function(U){return U!=S;},T);}};a.on('instanceDestroyed',function(S){if(e.isEmpty(a.instances)){var T;while(T=a.dialog._.currentTop)T.hide();F();}var U=S.editor._.storedDialogs;for(var V in U)U[V].destroy();});})();})();e.extend(a.editor.prototype,{openDialog:function(m,n){var o=a.dialog._.dialogDefinitions[m],p=this.skin.dialog;
+if(typeof o=='function'&&p._isLoaded){var q=this._.storedDialogs||(this._.storedDialogs={}),r=q[m]||(q[m]=new a.dialog(this,m));n&&n.call(r,r);r.show();return r;}else if(o=='failed')throw new Error('[CKEDITOR.dialog.openDialog] Dialog "'+m+'" failed when loading definition.');var s=a.document.getBody(),t=s.$.style.cursor,u=this;s.setStyle('cursor','wait');function v(x){var y=a.dialog._.dialogDefinitions[m],z=u.skin.dialog;if(!z._isLoaded||w&&typeof x=='undefined')return;if(typeof y!='function')a.dialog._.dialogDefinitions[m]='failed';u.openDialog(m,n);s.setStyle('cursor',t);};if(typeof o=='string'){var w=1;a.scriptLoader.load(a.getUrl(o),v);}a.skins.load(this,'dialog',v);return null;}});j.add('dialog',{requires:['dialogui']});j.add('styles',{requires:['selection'],init:function(m){m.on('contentDom',function(){m.document.setCustomData('cke_includeReadonly',!m.config.disableReadonlyStyling);});}});a.editor.prototype.attachStyleStateChange=function(m,n){var o=this._.styleStateChangeCallbacks;if(!o){o=this._.styleStateChangeCallbacks=[];this.on('selectionChange',function(p){for(var q=0;q<o.length;q++){var r=o[q],s=r.style.checkActive(p.data.path)?1:2;if(r.state!==s){r.fn.call(this,s);r.state=s;}}});}o.push({style:m,fn:n});};a.STYLE_BLOCK=1;a.STYLE_INLINE=2;a.STYLE_OBJECT=3;(function(){var m={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1},n={a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1},o=/\s*(?:;\s*|$)/;a.style=function(R,S){if(S){R=e.clone(R);J(R.attributes,S);J(R.styles,S);}var T=this.element=(R.element||'*').toLowerCase();this.type=T=='#'||m[T]?1:n[T]?3:2;this._={definition:R};};a.style.prototype={apply:function(R){Q.call(this,R,false);},remove:function(R){Q.call(this,R,true);},applyToRange:function(R){var S=this;return(S.applyToRange=S.type==2?q:S.type==1?u:S.type==3?s:null).call(S,R);},removeFromRange:function(R){var S=this;return(S.removeFromRange=S.type==2?r:S.type==3?t:null).call(S,R);},applyToObject:function(R){H(R,this);},checkActive:function(R){var V=this;switch(V.type){case 1:return V.checkElementRemovable(R.block||R.blockLimit,true);case 3:case 2:var S=R.elements;for(var T=0,U;T<S.length;T++){U=S[T];if(V.type==2&&(U==R.block||U==R.blockLimit))continue;if(V.type==3&&!(U.getName() in n))continue;if(V.checkElementRemovable(U,true))return true;}}return false;},checkApplicable:function(R){switch(this.type){case 2:case 1:break;case 3:return R.lastElement.getAscendant(this.element,true);}return true;
+},checkElementRemovable:function(R,S){if(!R)return false;var T=this._.definition,U;if(R.getName()==this.element){if(!S&&!R.hasAttributes())return true;U=K(T);if(U._length){for(var V in U){if(V=='_length')continue;var W=R.getAttribute(V)||'';if(V=='style'?P(U[V],N(W,false)):U[V]==W){if(!S)return true;}else if(S)return false;}if(S)return true;}else return true;}var X=L(this)[R.getName()];if(X){if(!(U=X.attributes))return true;for(var Y=0;Y<U.length;Y++){V=U[Y][0];var Z=R.getAttribute(V);if(Z){var aa=U[Y][1];if(aa===null||typeof aa=='string'&&Z==aa||aa.test(Z))return true;}}}return false;},buildPreview:function(){var R=this._.definition,S=[],T=R.element;if(T=='bdo')T='span';S=['<',T];var U=R.attributes;if(U)for(var V in U)S.push(' ',V,'="',U[V],'"');var W=a.style.getStyleText(R);if(W)S.push(' style="',W,'"');S.push('>',R.name,'</',T,'>');return S.join('');}};a.style.getStyleText=function(R){var S=R._ST;if(S)return S;S=R.styles;var T=R.attributes&&R.attributes.style||'',U='';if(T.length)T=T.replace(o,';');for(var V in S){var W=S[V],X=(V+':'+W).replace(o,';');if(W=='inherit')U+=X;else T+=X;}if(T.length)T=N(T);T+=U;return R._ST=T;};function p(R){var S,T;while(R=R.getParent()){if(R.getName()=='body')break;if(R.getAttribute('data-cke-nostyle'))S=R;else if(!T){var U=R.getAttribute('contentEditable');if(U=='false')S=R;else if(U=='true')T=1;}}return S;};function q(R){var av=this;var S=R.document;if(R.collapsed){var T=G(av,S);R.insertNode(T);R.moveToPosition(T,2);return;}var U=av.element,V=av._.definition,W,X=V.includeReadonly;if(X==undefined)X=S.getCustomData('cke_includeReadonly');var Y=f[U]||(W=true,f.span);R.enlarge(1);R.trim();var Z=R.createBookmark(),aa=Z.startNode,ab=Z.endNode,ac=aa,ad,ae=p(aa),af=p(ab);if(ae)ac=ae.getNextSourceNode(true);if(af)ab=af;if(ac.getPosition(ab)==2)ac=0;while(ac){var ag=false;if(ac.equals(ab)){ac=null;ag=true;}else{var ah=ac.type,ai=ah==1?ac.getName():null,aj=ai&&ac.getAttribute('contentEditable')=='false',ak=ai&&ac.getAttribute('data-cke-nostyle');if(ai&&ac.data('cke-bookmark')){ac=ac.getNextSourceNode(true);continue;}if(!ai||Y[ai]&&!ak&&(!aj||X)&&(ac.getPosition(ab)|4|0|8)==4+0+8&&(!V.childRule||V.childRule(ac))){var al=ac.getParent();if(al&&((al.getDtd()||f.span)[U]||W)&&(!V.parentRule||V.parentRule(al))){if(!ad&&(!ai||!f.$removeEmpty[ai]||(ac.getPosition(ab)|4|0|8)==4+0+8)){ad=new d.range(S);ad.setStartBefore(ac);}if(ah==3||aj||ah==1&&!ac.getChildCount()){var am=ac,an;while(!am.$.nextSibling&&(an=am.getParent(),Y[an.getName()])&&(an.getPosition(aa)|2|0|8)==2+0+8&&(!V.childRule||V.childRule(an)))am=an;
+ad.setEndAfter(am);if(!am.$.nextSibling)ag=true;}}else ag=true;}else ag=true;ac=ac.getNextSourceNode(ak||aj);}if(ag&&ad&&!ad.collapsed){var ao=G(av,S),ap=ao.hasAttributes(),aq=ad.getCommonAncestor(),ar={styles:{},attrs:{},blockedStyles:{},blockedAttrs:{}},as,at,au;while(ao&&aq){if(aq.getName()==U){for(as in V.attributes){if(ar.blockedAttrs[as]||!(au=aq.getAttribute(at)))continue;if(ao.getAttribute(as)==au)ar.attrs[as]=1;else ar.blockedAttrs[as]=1;}for(at in V.styles){if(ar.blockedStyles[at]||!(au=aq.getStyle(at)))continue;if(ao.getStyle(at)==au)ar.styles[at]=1;else ar.blockedStyles[at]=1;}}aq=aq.getParent();}for(as in ar.attrs)ao.removeAttribute(as);for(at in ar.styles)ao.removeStyle(at);if(ap&&!ao.hasAttributes())ao=null;if(ao){ad.extractContents().appendTo(ao);D(av,ao);ad.insertNode(ao);ao.mergeSiblings();if(!c)ao.$.normalize();}else{ao=new h('span');ad.extractContents().appendTo(ao);ad.insertNode(ao);D(av,ao);ao.remove(true);}ad=null;}}R.moveToBookmark(Z);R.shrink(2);};function r(R){R.enlarge(1);var S=R.createBookmark(),T=S.startNode;if(R.collapsed){var U=new d.elementPath(T.getParent()),V;for(var W=0,X;W<U.elements.length&&(X=U.elements[W]);W++){if(X==U.block||X==U.blockLimit)break;if(this.checkElementRemovable(X)){var Y;if(R.collapsed&&(R.checkBoundaryOfElement(X,2)||(Y=R.checkBoundaryOfElement(X,1)))){V=X;V.match=Y?'start':'end';}else{X.mergeSiblings();C(this,X);}}}if(V){var Z=T;for(W=0;true;W++){var aa=U.elements[W];if(aa.equals(V))break;else if(aa.match)continue;else aa=aa.clone();aa.append(Z);Z=aa;}Z[V.match=='start'?'insertBefore':'insertAfter'](V);}}else{var ab=S.endNode,ac=this;function ad(){var ag=new d.elementPath(T.getParent()),ah=new d.elementPath(ab.getParent()),ai=null,aj=null;for(var ak=0;ak<ag.elements.length;ak++){var al=ag.elements[ak];if(al==ag.block||al==ag.blockLimit)break;if(ac.checkElementRemovable(al))ai=al;}for(ak=0;ak<ah.elements.length;ak++){al=ah.elements[ak];if(al==ah.block||al==ah.blockLimit)break;if(ac.checkElementRemovable(al))aj=al;}if(aj)ab.breakParent(aj);if(ai)T.breakParent(ai);};ad();var ae=T.getNext();while(!ae.equals(ab)){var af=ae.getNextSourceNode();if(ae.type==1&&this.checkElementRemovable(ae)){if(ae.getName()==this.element)C(this,ae);else E(ae,L(this)[ae.getName()]);if(af.type==1&&af.contains(T)){ad();af=T.getNext();}}ae=af;}}R.moveToBookmark(S);};function s(R){var S=R.getCommonAncestor(true,true),T=S.getAscendant(this.element,true);T&&H(T,this);};function t(R){var S=R.getCommonAncestor(true,true),T=S.getAscendant(this.element,true);
+if(!T)return;var U=this,V=U._.definition,W=V.attributes,X=a.style.getStyleText(V);if(W)for(var Y in W)T.removeAttribute(Y,W[Y]);if(V.styles)for(var Z in V.styles){if(!V.styles.hasOwnProperty(Z))continue;T.removeStyle(Z);}};function u(R){var S=R.createBookmark(true),T=R.createIterator();T.enforceRealBlocks=true;if(this._.enterMode)T.enlargeBr=this._.enterMode!=2;var U,V=R.document,W;while(U=T.getNextParagraph()){var X=G(this,V,U);v(U,X);}R.moveToBookmark(S);};function v(R,S){var T=S.is('pre'),U=R.is('pre'),V=T&&!U,W=!T&&U;if(V)S=B(R,S);else if(W)S=A(y(R),S);else R.moveChildren(S);S.replace(R);if(T)x(S);};var w=d.walker.whitespaces(true);function x(R){var S;if(!((S=R.getPrevious(w))&&S.is&&S.is('pre')))return;var T=z(S.getHtml(),/\n$/,'')+'\n\n'+z(R.getHtml(),/^\n/,'');if(c)R.$.outerHTML='<pre>'+T+'</pre>';else R.setHtml(T);S.remove();};function y(R){var S=/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,T=R.getName(),U=z(R.getOuterHtml(),S,function(W,X,Y){return X+'</pre>'+Y+'<pre>';}),V=[];U.replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(W,X){V.push(X);});return V;};function z(R,S,T){var U='',V='';R=R.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(W,X,Y){X&&(U=X);Y&&(V=Y);return '';});return U+R.replace(S,T)+V;};function A(R,S){var T=new d.documentFragment(S.getDocument());for(var U=0;U<R.length;U++){var V=R[U];V=V.replace(/(\r\n|\r)/g,'\n');V=z(V,/^[ \t]*\n/,'');V=z(V,/\n$/,'');V=z(V,/^[ \t]+|[ \t]+$/g,function(X,Y,Z){if(X.length==1)return ' ';else if(!Y)return e.repeat(' ',X.length-1)+' ';else return ' '+e.repeat(' ',X.length-1);});V=V.replace(/\n/g,'<br>');V=V.replace(/[ \t]{2,}/g,function(X){return e.repeat(' ',X.length-1)+' ';});var W=S.clone();W.setHtml(V);T.append(W);}return T;};function B(R,S){var T=R.getHtml();T=z(T,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,'');T=T.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,'$1');T=T.replace(/([ \t\n\r]+| )/g,' ');T=T.replace(/<br\b[^>]*>/gi,'\n');if(c){var U=R.getDocument().createElement('div');U.append(S);S.$.outerHTML='<pre>'+T+'</pre>';S=U.getFirst().remove();}else S.setHtml(T);return S;};function C(R,S){var T=R._.definition,U=e.extend({},T.attributes,L(R)[S.getName()]),V=T.styles,W=e.isEmpty(U)&&e.isEmpty(V);for(var X in U){if((X=='class'||R._.definition.fullMatch)&&S.getAttribute(X)!=M(X,U[X]))continue;W=S.hasAttribute(X);S.removeAttribute(X);}for(var Y in V){if(R._.definition.fullMatch&&S.getStyle(Y)!=M(Y,V[Y],true))continue;
+W=W||!!S.getStyle(Y);S.removeStyle(Y);}W&&F(S);};function D(R,S){var T=R._.definition,U=T.attributes,V=T.styles,W=L(R),X=S.getElementsByTag(R.element);for(var Y=X.count();--Y>=0;)C(R,X.getItem(Y));for(var Z in W){if(Z!=R.element){X=S.getElementsByTag(Z);for(Y=X.count()-1;Y>=0;Y--){var aa=X.getItem(Y);E(aa,W[Z]);}}}};function E(R,S){var T=S&&S.attributes;if(T)for(var U=0;U<T.length;U++){var V=T[U][0],W;if(W=R.getAttribute(V)){var X=T[U][1];if(X===null||X.test&&X.test(W)||typeof X=='string'&&W==X)R.removeAttribute(V);}}F(R);};function F(R){if(!R.hasAttributes()){var S=R.getFirst(),T=R.getLast();R.remove(true);if(S){S.type==1&&S.mergeSiblings();if(T&&!S.equals(T)&&T.type==1)T.mergeSiblings();}}};function G(R,S,T){var U,V=R._.definition,W=R.element;if(W=='*')W='span';U=new h(W,S);if(T)T.copyAttributes(U);return H(U,R);};function H(R,S){var T=S._.definition,U=T.attributes,V=a.style.getStyleText(T);if(U)for(var W in U)R.setAttribute(W,U[W]);if(V)R.setAttribute('style',V);return R;};var I=/#\((.+?)\)/g;function J(R,S){for(var T in R)R[T]=R[T].replace(I,function(U,V){return S[V];});};function K(R){var S=R._AC;if(S)return S;S={};var T=0,U=R.attributes;if(U)for(var V in U){T++;S[V]=U[V];}var W=a.style.getStyleText(R);if(W){if(!S.style)T++;S.style=W;}S._length=T;return R._AC=S;};function L(R){if(R._.overrides)return R._.overrides;var S=R._.overrides={},T=R._.definition.overrides;if(T){if(!e.isArray(T))T=[T];for(var U=0;U<T.length;U++){var V=T[U],W,X,Y;if(typeof V=='string')W=V.toLowerCase();else{W=V.element?V.element.toLowerCase():R.element;Y=V.attributes;}X=S[W]||(S[W]={});if(Y){var Z=X.attributes=X.attributes||[];for(var aa in Y)Z.push([aa.toLowerCase(),Y[aa]]);}}}return S;};function M(R,S,T){var U=new h('span');U[T?'setStyle':'setAttribute'](R,S);return U[T?'getStyle':'getAttribute'](R);};function N(R,S){var T;if(S!==false){var U=new h('span');U.setAttribute('style',R);T=U.getAttribute('style')||'';}else T=R;return T.replace(/\s*([;:])\s*/,'$1').replace(/([^\s;])$/,'$1;').replace(/,\s+/g,',').replace(/\"/g,'').toLowerCase();};function O(R){var S={};R.replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(T,U,V){S[U]=V;});return S;};function P(R,S){typeof R=='string'&&(R=O(R));typeof S=='string'&&(S=O(S));for(var T in R){if(!(T in S&&(S[T]==R[T]||R[T]=='inherit'||S[T]=='inherit')))return false;}return true;};function Q(R,S){var T=R.getSelection(),U=T.createBookmarks(1),V=T.getRanges(),W=S?this.removeFromRange:this.applyToRange,X,Y=V.createIterator();
+while(X=Y.getNextRange())W.call(this,X);if(U.length==1&&U[0].collapsed){T.selectRanges(V);R.getById(U[0].startNode).remove();}else T.selectBookmarks(U);};})();a.styleCommand=function(m){this.style=m;};a.styleCommand.prototype.exec=function(m){var o=this;m.focus();var n=m.document;if(n)if(o.state==2)o.style.apply(n);else if(o.state==1)o.style.remove(n);return!!n;};a.stylesSet=new a.resourceManager('','stylesSet');a.addStylesSet=e.bind(a.stylesSet.add,a.stylesSet);a.loadStylesSet=function(m,n,o){a.stylesSet.addExternal(m,n,'');a.stylesSet.load(m,o);};a.editor.prototype.getStylesSet=function(m){if(!this._.stylesDefinitions){var n=this,o=n.config.stylesCombo_stylesSet||n.config.stylesSet||'default';if(o instanceof Array){n._.stylesDefinitions=o;m(o);return;}var p=o.split(':'),q=p[0],r=p[1],s=j.registered.styles.path;a.stylesSet.addExternal(q,r?p.slice(1).join(':'):s+'styles/'+q+'.js','');a.stylesSet.load(q,function(t){n._.stylesDefinitions=t[q];m(n._.stylesDefinitions);});}else m(this._.stylesDefinitions);};j.add('domiterator');(function(){function m(p){var q=this;if(arguments.length<1)return;q.range=p;q.forceBrBreak=0;q.enlargeBr=1;q.enforceRealBlocks=0;q._||(q._={});};var n=/^[\r\n\t ]+$/,o=d.walker.bookmark();m.prototype={getNextParagraph:function(p){var q,r,s,t,u,v;if(!this._.lastNode){r=this.range.clone();r.shrink(1,true);t=r.endContainer.hasAscendant('pre',true)||r.startContainer.hasAscendant('pre',true);r.enlarge(this.forceBrBreak&&!t||!this.enlargeBr?3:2);var w=new d.walker(r),x=d.walker.bookmark(true,true);w.evaluator=x;this._.nextNode=w.next();w=new d.walker(r);w.evaluator=x;var y=w.previous();this._.lastNode=y.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==3&&!e.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){var z=new d.range(r.document);z.moveToPosition(this._.lastNode,4);if(z.checkEndOfBlock()){var A=new d.elementPath(z.endContainer),B=A.block||A.blockLimit;this._.lastNode=B.getNextSourceNode(true);}}if(!this._.lastNode){this._.lastNode=this._.docEndMarker=r.document.createText('');this._.lastNode.insertAfter(y);}r=null;}var C=this._.nextNode;y=this._.lastNode;this._.nextNode=null;while(C){var D=0,E=C.hasAscendant('pre'),F=C.type!=1,G=0;if(!F){var H=C.getName();if(C.isBlockBoundary(this.forceBrBreak&&!E&&{br:1})){if(H=='br')F=1;else if(!r&&!C.getChildCount()&&H!='hr'){q=C;s=C.equals(y);break;}if(r){r.setEndAt(C,3);if(H!='br')this._.nextNode=C;}D=1;}else{if(C.getFirst()){if(!r){r=new d.range(this.range.document);
+r.setStartAt(C,3);}C=C.getFirst();continue;}F=1;}}else if(C.type==3)if(n.test(C.getText()))F=0;if(F&&!r){r=new d.range(this.range.document);r.setStartAt(C,3);}s=(!D||F)&&C.equals(y);if(r&&!D)while(!C.getNext()&&!s){var I=C.getParent();if(I.isBlockBoundary(this.forceBrBreak&&!E&&{br:1})){D=1;s=s||I.equals(y);break;}C=I;F=1;s=C.equals(y);G=1;}if(F)r.setEndAt(C,4);C=C.getNextSourceNode(G,null,y);s=!C;if(s||D&&r)break;}if(!q){if(!r){this._.docEndMarker&&this._.docEndMarker.remove();this._.nextNode=null;return null;}var J=new d.elementPath(r.startContainer),K=J.blockLimit,L={div:1,th:1,td:1};q=J.block;if(!q&&!this.enforceRealBlocks&&L[K.getName()]&&r.checkStartOfBlock()&&r.checkEndOfBlock())q=K;else if(!q||this.enforceRealBlocks&&q.getName()=='li'){q=this.range.document.createElement(p||'p');r.extractContents().appendTo(q);q.trim();r.insertNode(q);u=v=true;}else if(q.getName()!='li'){if(!r.checkStartOfBlock()||!r.checkEndOfBlock()){q=q.clone(false);r.extractContents().appendTo(q);q.trim();var M=r.splitBlock();u=!M.wasStartOfBlock;v=!M.wasEndOfBlock;r.insertNode(q);}}else if(!s)this._.nextNode=q.equals(y)?null:r.getBoundaryNodes().endNode.getNextSourceNode(true,null,y);}var N=d.walker.bookmark(false,true);if(u){var O=q.getPrevious();if(O&&O.type==1)if(O.getName()=='br')O.remove();else if(O.getLast()&&O.getLast().$.nodeName.toLowerCase()=='br')O.getLast().remove();}if(v){var P=q.getLast();if(P&&P.type==1&&P.getName()=='br')if(c||P.getPrevious(N)||P.getNext(N))P.remove();}if(!this._.nextNode)this._.nextNode=s||q.equals(y)?null:q.getNextSourceNode(true,null,y);if(!N(this._.nextNode))this._.nextNode=this._.nextNode.getNextSourceNode(true,null,function(Q){return!Q.equals(y)&&N(Q);});return q;}};d.range.prototype.createIterator=function(){return new m(this);};})();j.add('panelbutton',{requires:['button'],beforeInit:function(m){m.ui.addHandler(4,k.panelButton.handler);}});a.UI_PANELBUTTON=4;(function(){var m=function(n){var p=this;var o=p._;if(o.state==0)return;p.createPanel(n);if(o.on){o.panel.hide();return;}o.panel.showBlock(p._.id,p.document.getById(p._.id),4);};k.panelButton=e.createClass({base:k.button,$:function(n){var p=this;var o=n.panel;delete n.panel;p.base(n);p.document=o&&o.parent&&o.parent.getDocument()||a.document;o.block={attributes:o.attributes};p.hasArrow=true;p.click=m;p._={panelDefinition:o};},statics:{handler:{create:function(n){return new k.panelButton(n);}}},proto:{createPanel:function(n){var o=this._;if(o.panel)return;var p=this._.panelDefinition||{},q=this._.panelDefinition.block,r=p.parent||a.document.getBody(),s=this._.panel=new k.floatPanel(n,r,p),t=s.addBlock(o.id,q),u=this;
+s.onShow=function(){if(u.className)this.element.getFirst().addClass(u.className+'_panel');u.setState(1);o.on=1;if(u.onOpen)u.onOpen();};s.onHide=function(v){if(u.className)this.element.getFirst().removeClass(u.className+'_panel');u.setState(u.modes&&u.modes[n.mode]?2:0);o.on=0;if(!v&&u.onClose)u.onClose();};s.onEscape=function(){s.hide();u.document.getById(o.id).focus();};if(this.onBlock)this.onBlock(s,t);t.onHide=function(){o.on=0;u.setState(2);};}}});})();j.add('floatpanel',{requires:['panel']});(function(){var m={},n=false;function o(p,q,r,s,t){var u=e.genKey(q.getUniqueId(),r.getUniqueId(),p.skinName,p.lang.dir,p.uiColor||'',s.css||'',t||''),v=m[u];if(!v){v=m[u]=new k.panel(q,s);v.element=r.append(h.createFromHtml(v.renderHtml(p),q));v.element.setStyles({display:'none',position:'absolute'});}return v;};k.floatPanel=e.createClass({$:function(p,q,r,s){r.forceIFrame=1;var t=q.getDocument(),u=o(p,t,q,r,s||0),v=u.element,w=v.getFirst().getFirst();this.element=v;this._={panel:u,parentElement:q,definition:r,document:t,iframe:w,children:[],dir:p.lang.dir};p.on('mode',function(){this.hide();},this);},proto:{addBlock:function(p,q){return this._.panel.addBlock(p,q);},addListBlock:function(p,q){return this._.panel.addListBlock(p,q);},getBlock:function(p){return this._.panel.getBlock(p);},showBlock:function(p,q,r,s,t){var u=this._.panel,v=u.showBlock(p);this.allowBlur(false);n=1;var w=this.element,x=this._.iframe,y=this._.definition,z=q.getDocumentPosition(w.getDocument()),A=this._.dir=='rtl',B=z.x+(s||0),C=z.y+(t||0);if(A&&(r==1||r==4))B+=q.$.offsetWidth;else if(!A&&(r==2||r==3))B+=q.$.offsetWidth-1;if(r==3||r==4)C+=q.$.offsetHeight-1;this._.panel._.offsetParentId=q.getId();w.setStyles({top:C+'px',left:0,display:''});w.setOpacity(0);w.getFirst().removeStyle('width');if(!this._.blurSet){var D=c?x:new d.window(x.$.contentWindow);a.event.useCapture=true;D.on('blur',function(E){var G=this;if(!G.allowBlur())return;var F;if(c&&!G.allowBlur()||(F=E.data.getTarget())&&F.getName&&F.getName()!='iframe')return;if(G.visible&&!G._.activeChild&&!n)G.hide();},this);D.on('focus',function(){this._.focused=true;this.hideChild();this.allowBlur(true);},this);a.event.useCapture=false;this._.blurSet=1;}u.onEscape=e.bind(function(E){if(this.onEscape&&this.onEscape(E)===false)return false;},this);e.setTimeout(function(){if(A)B-=w.$.offsetWidth;var E=e.bind(function(){var F=w.getFirst();if(v.autoSize){var G=v.element.$;if(b.gecko||b.opera)G=G.parentNode;if(c)G=G.document.body;var H=G.scrollWidth;
+if(c&&b.quirks&&H>0)H+=(F.$.offsetWidth||0)-(F.$.clientWidth||0);H+=4;F.setStyle('width',H+'px');v.element.addClass('cke_frameLoaded');var I=v.element.$.scrollHeight;if(c&&b.quirks&&I>0)I+=(F.$.offsetHeight||0)-(F.$.clientHeight||0);F.setStyle('height',I+'px');u._.currentBlock.element.setStyle('display','none').removeStyle('display');}else F.removeStyle('height');var J=u.element,K=J.getWindow(),L=K.getScrollPosition(),M=K.getViewPaneSize(),N={height:J.$.offsetHeight,width:J.$.offsetWidth};if(A?B<0:B+N.width>M.width+L.x)B+=N.width*(A?1:-1);if(C+N.height>M.height+L.y)C-=N.height;if(c){var O=new h(w.$.offsetParent),P=O;if(P.getName()=='html')P=P.getDocument().getBody();if(P.getComputedStyle('direction')=='rtl')if(b.ie8Compat)B-=w.getDocument().getDocumentElement().$.scrollLeft*2;else B-=O.$.scrollWidth-O.$.clientWidth;}var Q=w.getFirst(),R;if(R=Q.getCustomData('activePanel'))R.onHide&&R.onHide.call(this,1);Q.setCustomData('activePanel',this);w.setStyles({top:C+'px',left:B+'px'});w.setOpacity(1);},this);u.isLoaded?E():u.onLoad=E;e.setTimeout(function(){x.$.contentWindow.focus();this.allowBlur(true);},0,this);},b.air?200:0,this);this.visible=1;if(this.onShow)this.onShow.call(this);n=0;},hide:function(){var p=this;if(p.visible&&(!p.onHide||p.onHide.call(p)!==true)){p.hideChild();p.element.setStyle('display','none');p.visible=0;p.element.getFirst().removeCustomData('activePanel');}},allowBlur:function(p){var q=this._.panel;if(p!=undefined)q.allowBlur=p;return q.allowBlur;},showAsChild:function(p,q,r,s,t,u){if(this._.activeChild==p&&p._.panel._.offsetParentId==r.getId())return;this.hideChild();p.onHide=e.bind(function(){e.setTimeout(function(){if(!this._.focused)this.hide();},0,this);},this);this._.activeChild=p;this._.focused=false;p.showBlock(q,r,s,t,u);if(b.ie7Compat||b.ie8&&b.ie6Compat)setTimeout(function(){p.element.getChild(0).$.style.cssText+='';},100);},hideChild:function(){var p=this._.activeChild;if(p){delete p.onHide;delete this._.activeChild;p.hide();}}}});a.on('instanceDestroyed',function(){var p=e.isEmpty(a.instances);for(var q in m){var r=m[q];if(p)r.destroy();else r.element.hide();}p&&(m={});});})();j.add('menu',{beforeInit:function(m){var n=m.config.menu_groups.split(','),o=m._.menuGroups={},p=m._.menuItems={};for(var q=0;q<n.length;q++)o[n[q]]=q+1;m.addMenuGroup=function(r,s){o[r]=s||100;};m.addMenuItem=function(r,s){if(o[s.group])p[r]=new a.menuItem(this,r,s);};m.addMenuItems=function(r){for(var s in r)this.addMenuItem(s,r[s]);};m.getMenuItem=function(r){return p[r];
+};},requires:['floatpanel']});(function(){a.menu=e.createClass({$:function(n,o){var r=this;o=r._.definition=o||{};r.id='cke_'+e.getNextNumber();r.editor=n;r.items=[];r._.listeners=[];r._.level=o.level||1;var p=e.extend({},o.panel,{css:n.skin.editor.css,level:r._.level-1,block:{}}),q=p.block.attributes=p.attributes||{};!q.role&&(q.role='menu');r._.panelDefinition=p;},_:{onShow:function(){var v=this;var n=v.editor.getSelection();if(c)n&&n.lock();var o=n&&n.getStartElement(),p=v._.listeners,q=[];v.removeAll();for(var r=0;r<p.length;r++){var s=p[r](o,n);if(s)for(var t in s){var u=v.editor.getMenuItem(t);if(u){u.state=s[t];v.add(u);}}}},onClick:function(n){this.hide();if(n.onClick)n.onClick();else if(n.command)this.editor.execCommand(n.command);},onEscape:function(n){var o=this.parent;if(o){o._.panel.hideChild();var p=o._.panel._.panel._.currentBlock,q=p._.focusIndex;p._.markItem(q);}else if(n==27){this.hide();this.editor.focus();}return false;},onHide:function(){if(c){var n=this.editor.getSelection();n&&n.unlock();}this.onHide&&this.onHide();},showSubMenu:function(n){var v=this;var o=v._.subMenu,p=v.items[n],q=p.getItems&&p.getItems();if(!q){v._.panel.hideChild();return;}var r=v._.panel.getBlock(v.id);r._.focusIndex=n;if(o)o.removeAll();else{o=v._.subMenu=new a.menu(v.editor,e.extend({},v._.definition,{level:v._.level+1},true));o.parent=v;o._.onClick=e.bind(v._.onClick,v);}for(var s in q){var t=v.editor.getMenuItem(s);if(t){t.state=q[s];o.add(t);}}var u=v._.panel.getBlock(v.id).element.getDocument().getById(v.id+String(n));o.show(u,2);}},proto:{add:function(n){if(!n.order)n.order=this.items.length;this.items.push(n);},removeAll:function(){this.items=[];},show:function(n,o,p,q){if(!this.parent){this._.onShow();if(!this.items.length)return;}o=o||(this.editor.lang.dir=='rtl'?2:1);var r=this.items,s=this.editor,t=this._.panel,u=this._.element;if(!t){t=this._.panel=new k.floatPanel(this.editor,a.document.getBody(),this._.panelDefinition,this._.level);t.onEscape=e.bind(function(F){if(this._.onEscape(F)===false)return false;},this);t.onHide=e.bind(function(){this._.onHide&&this._.onHide();},this);var v=t.addBlock(this.id,this._.panelDefinition.block);v.autoSize=true;var w=v.keys;w[40]='next';w[9]='next';w[38]='prev';w[2000+9]='prev';w[32]='click';w[s.lang.dir=='rtl'?37:39]='click';u=this._.element=v.element;u.addClass(s.skinClass);var x=u.getDocument();x.getBody().setStyle('overflow','hidden');x.getElementsByTag('html').getItem(0).setStyle('overflow','hidden');this._.itemOverFn=e.addFunction(function(F){var G=this;
+clearTimeout(G._.showSubTimeout);G._.showSubTimeout=e.setTimeout(G._.showSubMenu,s.config.menu_subMenuDelay||400,G,[F]);},this);this._.itemOutFn=e.addFunction(function(F){clearTimeout(this._.showSubTimeout);},this);this._.itemClickFn=e.addFunction(function(F){var H=this;var G=H.items[F];if(G.state==0){H.hide();return;}if(G.getItems)H._.showSubMenu(F);else H._.onClick(G);},this);}m(r);var y=s.container.getChild(1),z=y.hasClass('cke_mixed_dir_content')?' cke_mixed_dir_content':'',A=['<div class="cke_menu'+z+'" role="presentation">'],B=r.length,C=B&&r[0].group;for(var D=0;D<B;D++){var E=r[D];if(C!=E.group){A.push('<div class="cke_menuseparator" role="separator"></div>');C=E.group;}E.render(this,D,A);}A.push('</div>');u.setHtml(A.join(''));k.fire('ready',this);if(this.parent)this.parent._.panel.showAsChild(t,this.id,n,o,p,q);else t.showBlock(this.id,n,o,p,q);s.fire('menuShow',[t]);},addListener:function(n){this._.listeners.push(n);},hide:function(){var n=this;n._.onHide&&n._.onHide();n._.panel&&n._.panel.hide();}}});function m(n){n.sort(function(o,p){if(o.group<p.group)return-1;else if(o.group>p.group)return 1;return o.order<p.order?-1:o.order>p.order?1:0;});};a.menuItem=e.createClass({$:function(n,o,p){var q=this;e.extend(q,p,{order:0,className:'cke_button_'+o});q.group=n._.menuGroups[q.group];q.editor=n;q.name=o;},proto:{render:function(n,o,p){var w=this;var q=n.id+String(o),r=typeof w.state=='undefined'?2:w.state,s=' cke_'+(r==1?'on':r==0?'disabled':'off'),t=w.label;if(w.className)s+=' '+w.className;var u=w.getItems;p.push('<span class="cke_menuitem"><a id="',q,'" class="',s,'" href="javascript:void(\'',(w.label||'').replace("'",''),'\')" title="',w.label,'" tabindex="-1"_cke_focus=1 hidefocus="true" role="menuitem"'+(u?'aria-haspopup="true"':'')+(r==0?'aria-disabled="true"':'')+(r==1?'aria-pressed="true"':''));if(b.opera||b.gecko&&b.mac)p.push(' onkeypress="return false;"');if(b.gecko)p.push(' onblur="this.style.cssText = this.style.cssText;"');var v=(w.iconOffset||0)*-16;p.push(' onmouseover="CKEDITOR.tools.callFunction(',n._.itemOverFn,',',o,');" onmouseout="CKEDITOR.tools.callFunction(',n._.itemOutFn,',',o,');" onclick="CKEDITOR.tools.callFunction(',n._.itemClickFn,',',o,'); return false;"><span class="cke_icon_wrapper"><span class="cke_icon"'+(w.icon?' style="background-image:url('+a.getUrl(w.icon)+');background-position:0 '+v+'px;"':'')+'></span></span>'+'<span class="cke_label">');if(u)p.push('<span class="cke_menuarrow">','<span>&#',w.editor.lang.dir=='rtl'?'9668':'9658',';</span>','</span>');
+p.push(t,'</span></a></span>');}}});})();i.menu_groups='clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div';(function(){var m=function(o,p){return o._.modes&&o._.modes[p||o.mode];},n;j.add('editingblock',{init:function(o){if(!o.config.editingBlock)return;o.on('themeSpace',function(p){if(p.data.space=='contents')p.data.html+='<br>';});o.on('themeLoaded',function(){o.fireOnce('editingBlockReady');});o.on('uiReady',function(){o.setMode(o.config.startupMode);});o.on('afterSetData',function(){if(!n){function p(){n=true;m(o).loadData(o.getData());n=false;};if(o.mode)p();else o.on('mode',function(){p();o.removeListener('mode',arguments.callee);});}});o.on('beforeGetData',function(){if(!n&&o.mode){n=true;o.setData(m(o).getData());n=false;}});o.on('getSnapshot',function(p){if(o.mode)p.data=m(o).getSnapshotData();});o.on('loadSnapshot',function(p){if(o.mode)m(o).loadSnapshotData(p.data);});o.on('mode',function(p){p.removeListener();b.webkit&&o.container.on('focus',function(){o.focus();});if(o.config.startupFocus)o.focus();setTimeout(function(){o.fireOnce('instanceReady');a.fire('instanceReady',null,o);},0);});}});a.editor.prototype.mode='';a.editor.prototype.addMode=function(o,p){p.name=o;(this._.modes||(this._.modes={}))[o]=p;};a.editor.prototype.setMode=function(o){var p,q=this.getThemeSpace('contents'),r=this.checkDirty();if(this.mode){if(o==this.mode)return;this.fire('beforeModeUnload');var s=m(this);p=s.getData();s.unload(q);this.mode='';}q.setHtml('');var t=m(this,o);if(!t)throw '[CKEDITOR.editor.setMode] Unknown mode "'+o+'".';if(!r)this.on('mode',function(){this.resetDirty();this.removeListener('mode',arguments.callee);});t.load(q,typeof p!='string'?this.getData():p);};a.editor.prototype.focus=function(){var o=m(this);if(o)o.focus();};})();i.startupMode='wysiwyg';i.editingBlock=true;(function(){function m(){var w=this;try{var t=w.getSelection();if(!t||!t.document.getWindow().$)return;var u=t.getStartElement(),v=new d.elementPath(u);if(!v.compare(w._.selectionPreviousPath)){w._.selectionPreviousPath=v;w.fire('selectionChange',{selection:t,path:v,element:u});}}catch(x){}};var n,o;function p(){o=true;if(n)return;q.call(this);n=e.setTimeout(q,200,this);};function q(){n=null;if(o){e.setTimeout(m,0,this);o=false;}};var r={modes:{wysiwyg:1,source:1},exec:function(t){switch(t.mode){case 'wysiwyg':t.document.$.execCommand('SelectAll',false,null);break;
+case 'source':var u=t.textarea.$;if(c)u.createTextRange().execCommand('SelectAll');else{u.selectionStart=0;u.selectionEnd=u.value.length;}u.focus();}},canUndo:false};j.add('selection',{init:function(t){t.on('contentDom',function(){var u=t.document,v=u.getBody(),w=u.getDocumentElement();if(c){var x,y,z=1;v.on('focusin',function(D){if(D.data.$.srcElement.nodeName!='BODY')return;if(x){var E=u.getCustomData('cke_locked_selection');if(z&&!E)try{x.select();}catch(F){}x=null;}});v.on('focus',function(){y=1;C();});v.on('beforedeactivate',function(D){if(D.data.$.toElement)return;y=0;z=1;});if(c&&b.version<8)t.on('blur',function(D){try{t.document&&t.document.$.selection.empty();}catch(E){}});w.on('mousedown',function(){z=0;});w.on('mouseup',function(){z=1;});if(c&&(b.ie7Compat||b.version<8||b.quirks))w.on('click',function(D){if(D.data.getTarget().getName()=='html')t.getSelection().getRanges()[0].select();});var A;v.on('mousedown',function(D){if(D.data.$.button==2){var E=t.document.$.selection;if(E.type=='None')A=t.window.getScrollPosition();}B();});v.on('mouseup',function(D){if(D.data.$.button==2&&A){t.document.$.documentElement.scrollLeft=A.x;t.document.$.documentElement.scrollTop=A.y;}A=null;y=1;setTimeout(function(){C(true);},0);});v.on('keydown',B);v.on('keyup',function(){y=1;C();});u.on('selectionchange',C);function B(){y=0;};function C(D){if(y){var E=t.document,F=t.getSelection(),G=F&&F.getNative();if(D&&G&&G.type=='None')if(!E.$.queryCommandEnabled('InsertImage')){e.setTimeout(C,50,this,true);return;}var H;if(G&&G.type&&G.type!='Control'&&(H=G.createRange())&&(H=H.parentElement())&&(H=H.nodeName)&&H.toLowerCase() in {input:1,textarea:1})return;x=G&&F.getRanges()[0];p.call(t);}};}else{u.on('mouseup',p,t);u.on('keyup',p,t);}});t.addCommand('selectAll',r);t.ui.addButton('SelectAll',{label:t.lang.selectAll,command:'selectAll'});t.selectionChange=p;}});a.editor.prototype.getSelection=function(){return this.document&&this.document.getSelection();};a.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath;};g.prototype.getSelection=function(){var t=new d.selection(this);return!t||t.isInvalid?null:t;};a.SELECTION_NONE=1;a.SELECTION_TEXT=2;a.SELECTION_ELEMENT=3;d.selection=function(t){var w=this;var u=t.getCustomData('cke_locked_selection');if(u)return u;w.document=t;w.isLocked=0;w._={cache:{}};if(c){var v=w.getNative().createRange();if(!v||v.item&&v.item(0).ownerDocument!=w.document.$||v.parentElement&&v.parentElement().ownerDocument!=w.document.$)w.isInvalid=true;
+}return w;};var s={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,th:1,thead:1,tfoot:1};d.selection.prototype={getNative:c?function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.$.selection);}:function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.getWindow().$.getSelection());},getType:c?function(){var t=this._.cache;if(t.type)return t.type;var u=1;try{var v=this.getNative(),w=v.type;if(w=='Text')u=2;if(w=='Control')u=3;if(v.createRange().parentElement)u=2;}catch(x){}return t.type=u;}:function(){var t=this._.cache;if(t.type)return t.type;var u=2,v=this.getNative();if(!v)u=1;else if(v.rangeCount==1){var w=v.getRangeAt(0),x=w.startContainer;if(x==w.endContainer&&x.nodeType==1&&w.endOffset-w.startOffset==1&&s[x.childNodes[w.startOffset].nodeName.toLowerCase()])u=3;}return t.type=u;},getRanges:(function(){var t=c?(function(){var u=function(v,w){v=v.duplicate();v.collapse(w);var x=v.parentElement(),y=x.childNodes,z;for(var A=0;A<y.length;A++){var B=y[A];if(B.nodeType==1){z=v.duplicate();z.moveToElementText(B);var C=z.compareEndPoints('StartToStart',v),D=z.compareEndPoints('EndToStart',v);z.collapse();if(C>0)break;else if(!C||D==1&&C==-1)return{container:x,offset:A};else if(!D)return{container:x,offset:A+1};z=null;}}if(!z){z=v.duplicate();z.moveToElementText(x);z.collapse(false);}z.setEndPoint('StartToStart',v);var E=z.text.replace(/(\r\n|\r)/g,'\n').length;try{while(E>0)E-=y[--A].nodeValue.length;}catch(F){E=0;}if(E===0)return{container:x,offset:A};else return{container:y[A],offset:-E};};return function(){var F=this;var v=F.getNative(),w=v&&v.createRange(),x=F.getType(),y;if(!v)return[];if(x==2){y=new d.range(F.document);var z=u(w,true);y.setStart(new d.node(z.container),z.offset);z=u(w);y.setEnd(new d.node(z.container),z.offset);if(y.endContainer.getPosition(y.startContainer)&4&&y.endOffset<=y.startContainer.getIndex())y.collapse();return[y];}else if(x==3){var A=[];for(var B=0;B<w.length;B++){var C=w.item(B),D=C.parentNode,E=0;y=new d.range(F.document);for(;E<D.childNodes.length&&D.childNodes[E]!=C;E++){}y.setStart(new d.node(D),E);y.setEnd(new d.node(D),E+1);A.push(y);}return A;}return[];};})():function(){var u=[],v,w=this.document,x=this.getNative();if(!x)return u;if(!x.rangeCount){v=new d.range(w);v.moveToElementEditStart(w.getBody());u.push(v);}for(var y=0;y<x.rangeCount;y++){var z=x.getRangeAt(y);v=new d.range(w);v.setStart(new d.node(z.startContainer),z.startOffset);
+v.setEnd(new d.node(z.endContainer),z.endOffset);u.push(v);}return u;};return function(u){var v=this._.cache;if(v.ranges&&!u)return v.ranges;else if(!v.ranges)v.ranges=new d.rangeList(t.call(this));if(u){var w=v.ranges;for(var x=0;x<w.length;x++){var y=w[x],z=y.getCommonAncestor();if(z.isReadOnly())w.splice(x,1);if(y.collapsed)continue;var A=y.startContainer,B=y.endContainer,C=y.startOffset,D=y.endOffset,E=y.clone(),F;if(F=A.isReadOnly())y.setStartAfter(F);if(A&&A.type==3)if(C>=A.getLength())E.setStartAfter(A);else E.setStartBefore(A);if(B&&B.type==3)if(!D)E.setEndBefore(B);else E.setEndAfter(B);var G=new d.walker(E);G.evaluator=function(H){if(H.type==1&&H.getAttribute('contenteditable')=='false'){var I=y.clone();y.setEndBefore(H);if(y.collapsed)w.splice(x--,1);if(!(H.getPosition(E.endContainer)&16)){I.setStartAfter(H);if(!I.collapsed)w.splice(x+1,0,I);}return true;}return false;};G.next();}}return v.ranges;};})(),getStartElement:function(){var A=this;var t=A._.cache;if(t.startElement!==undefined)return t.startElement;var u,v=A.getNative();switch(A.getType()){case 3:return A.getSelectedElement();case 2:var w=A.getRanges()[0];if(w){if(!w.collapsed){w.optimize();while(1){var x=w.startContainer,y=w.startOffset;if(y==(x.getChildCount?x.getChildCount():x.getLength())&&!x.isBlockBoundary())w.setStartAfter(x);else break;}u=w.startContainer;if(u.type!=1)return u.getParent();u=u.getChild(w.startOffset);if(!u||u.type!=1)u=w.startContainer;else{var z=u.getFirst();while(z&&z.type==1){u=z;z=z.getFirst();}}}else{u=w.startContainer;if(u.type!=1)u=u.getParent();}u=u.$;}}return t.startElement=u?new h(u):null;},getSelectedElement:function(){var t=this._.cache;if(t.selectedElement!==undefined)return t.selectedElement;var u=this,v=e.tryThese(function(){return u.getNative().createRange().item(0);},function(){var w=u.getRanges()[0],x,y;for(var z=2;z&&!((x=w.getEnclosedNode())&&x.type==1&&s[x.getName()]&&(y=x));z--)w.shrink(1);return y.$;});return t.selectedElement=v?new h(v):null;},lock:function(){var t=this;t.getRanges();t.getStartElement();t.getSelectedElement();t._.cache.nativeSel={};t.isLocked=1;t.document.setCustomData('cke_locked_selection',t);},unlock:function(t){var y=this;var u=y.document,v=u.getCustomData('cke_locked_selection');if(v){u.setCustomData('cke_locked_selection',null);if(t){var w=v.getSelectedElement(),x=!w&&v.getRanges();y.isLocked=0;y.reset();u.getBody().focus();if(w)y.selectElement(w);else y.selectRanges(x);}}if(!v||!t){y.isLocked=0;y.reset();}},reset:function(){this._.cache={};
+},selectElement:function(t){var w=this;if(w.isLocked){var u=new d.range(w.document);u.setStartBefore(t);u.setEndAfter(t);w._.cache.selectedElement=t;w._.cache.startElement=t;w._.cache.ranges=new d.rangeList(u);w._.cache.type=3;return;}if(c){w.getNative().empty();try{u=w.document.$.body.createControlRange();u.addElement(t.$);u.select();}catch(x){u=w.document.$.body.createTextRange();u.moveToElementText(t.$);u.select();}finally{w.document.fire('selectionchange');}w.reset();}else{u=w.document.$.createRange();u.selectNode(t.$);var v=w.getNative();v.removeAllRanges();v.addRange(u);w.reset();}},selectRanges:function(t){var D=this;if(D.isLocked){D._.cache.selectedElement=null;D._.cache.startElement=t[0]&&t[0].getTouchedStartNode();D._.cache.ranges=new d.rangeList(t);D._.cache.type=2;return;}if(c){if(t.length>1){var u=t[t.length-1];t[0].setEnd(u.endContainer,u.endOffset);t.length=1;}if(t[0])t[0].select();D.reset();}else{var v=D.getNative();if(t.length)v.removeAllRanges();for(var w=0;w<t.length;w++){if(w<t.length-1){var x=t[w],y=t[w+1],z=x.clone();z.setStart(x.endContainer,x.endOffset);z.setEnd(y.startContainer,y.startOffset);if(!z.collapsed){z.shrink(1,true);if(z.getCommonAncestor().isReadOnly()){y.setStart(x.startContainer,x.startOffset);t.splice(w--,1);continue;}}}var A=t[w],B=D.document.$.createRange(),C=A.startContainer;if(A.collapsed&&(b.opera||b.gecko&&b.version<10900)&&C.type==1&&!C.getChildCount())C.appendText('');B.setStart(C.$,A.startOffset);B.setEnd(A.endContainer.$,A.endOffset);v.addRange(B);}D.reset();}},createBookmarks:function(t){return this.getRanges().createBookmarks(t);},createBookmarks2:function(t){return this.getRanges().createBookmarks2(t);},selectBookmarks:function(t){var u=[];for(var v=0;v<t.length;v++){var w=new d.range(this.document);w.moveToBookmark(t[v]);u.push(w);}this.selectRanges(u);return this;},getCommonAncestor:function(){var t=this.getRanges(),u=t[0].startContainer,v=t[t.length-1].endContainer;return u.getCommonAncestor(v);},scrollIntoView:function(){var t=this.getStartElement();t.scrollIntoView();}};})();(function(){var m=d.walker.whitespaces(true),n=/\ufeff|\u00a0/,o={table:1,tbody:1,tr:1};d.range.prototype.select=c?function(p){var z=this;var q=z.collapsed,r,s;if(z.startContainer.type==1&&z.startContainer.getName() in o||z.endContainer.type==1&&z.endContainer.getName() in o)z.shrink(1,true);var t=z.createBookmark(),u=t.startNode,v;if(!q)v=t.endNode;var w=z.document.$.body.createTextRange();w.moveToElementText(u.$);w.moveStart('character',1);
+if(v){var x=z.document.$.body.createTextRange();x.moveToElementText(v.$);w.setEndPoint('EndToEnd',x);w.moveEnd('character',-1);}else{var y=u.getNext(m);r=!(y&&y.getText&&y.getText().match(n))&&(p||!u.hasPrevious()||u.getPrevious().is&&u.getPrevious().is('br'));s=z.document.createElement('span');s.setHtml('');s.insertBefore(u);if(r)z.document.createText('\ufeff').insertBefore(u);}z.setStartBefore(u);u.remove();if(q){if(r){w.moveStart('character',-1);w.select();z.document.$.selection.clear();}else w.select();z.moveToPosition(s,3);s.remove();}else{z.setEndBefore(v);v.remove();w.select();}z.document.fire('selectionchange');}:function(){var s=this;var p=s.startContainer;if(s.collapsed&&p.type==1&&!p.getChildCount())p.append(new d.text(''));var q=s.document.$.createRange();q.setStart(p.$,s.startOffset);try{q.setEnd(s.endContainer.$,s.endOffset);}catch(t){if(t.toString().indexOf('NS_ERROR_ILLEGAL_VALUE')>=0){s.collapse(true);q.setEnd(s.endContainer.$,s.endOffset);}else throw t;}var r=s.document.getSelection().getNative();r.removeAllRanges();r.addRange(q);};})();(function(){var m={elements:{$:function(n){var o=n.attributes,p=o&&o['data-cke-realelement'],q=p&&new a.htmlParser.fragment.fromHtml(decodeURIComponent(p)),r=q&&q.children[0];if(r&&n.attributes['data-cke-resizable']){var s=n.attributes.style;if(s){var t=/(?:^|\s)width\s*:\s*(\d+)/i.exec(s),u=t&&t[1];t=/(?:^|\s)height\s*:\s*(\d+)/i.exec(s);var v=t&&t[1];if(u)r.attributes.width=u;if(v)r.attributes.height=v;}}return r;}}};j.add('fakeobjects',{requires:['htmlwriter'],afterInit:function(n){var o=n.dataProcessor,p=o&&o.htmlFilter;if(p)p.addRules(m);}});})();a.editor.prototype.createFakeElement=function(m,n,o,p){var q=this.lang.fakeobjects,r=q[o]||q.unknown,s={'class':n,src:a.getUrl('images/spacer.gif'),'data-cke-realelement':encodeURIComponent(m.getOuterHtml()),'data-cke-real-node-type':m.type,alt:r,title:r,align:m.getAttribute('align')||''};if(o)s['data-cke-real-element-type']=o;if(p)s['data-cke-resizable']=p;return this.document.createElement('img',{attributes:s});};a.editor.prototype.createFakeParserElement=function(m,n,o,p){var q=this.lang.fakeobjects,r=q[o]||q.unknown,s,t=new a.htmlParser.basicWriter();m.writeHtml(t);s=t.getHtml();var u={'class':n,src:a.getUrl('images/spacer.gif'),'data-cke-realelement':encodeURIComponent(s),'data-cke-real-node-type':m.type,alt:r,title:r,align:m.attributes.align||''};if(o)u['data-cke-real-element-type']=o;if(p)u['data-cke-resizable']=p;return new a.htmlParser.element('img',u);
+};a.editor.prototype.restoreRealElement=function(m){if(m.data('cke-real-node-type')!=1)return null;return h.createFromHtml(decodeURIComponent(m.data('cke-realelement')),this.document);};j.add('richcombo',{requires:['floatpanel','listblock','button'],beforeInit:function(m){m.ui.addHandler(3,k.richCombo.handler);}});a.UI_RICHCOMBO=3;k.richCombo=e.createClass({$:function(m){var o=this;e.extend(o,m,{title:m.label,modes:{wysiwyg:1}});var n=o.panel||{};delete o.panel;o.id=e.getNextNumber();o.document=n&&n.parent&&n.parent.getDocument()||a.document;n.className=(n.className||'')+' cke_rcombopanel';n.block={multiSelect:n.multiSelect,attributes:n.attributes};o._={panelDefinition:n,items:{},state:2};},statics:{handler:{create:function(m){return new k.richCombo(m);}}},proto:{renderHtml:function(m){var n=[];this.render(m,n);return n.join('');},render:function(m,n){var o=b,p='cke_'+this.id,q=e.addFunction(function(t){var w=this;var u=w._;if(u.state==0)return;w.createPanel(m);if(u.on){u.panel.hide();return;}w.commit();var v=w.getValue();if(v)u.list.mark(v);else u.list.unmarkAll();u.panel.showBlock(w.id,new h(t),4);},this),r={id:p,combo:this,focus:function(){var t=a.document.getById(p).getChild(1);t.focus();},clickFn:q};m.on('mode',function(){this.setState(this.modes[m.mode]?2:0);},this);var s=e.addFunction(function(t,u){t=new d.event(t);var v=t.getKeystroke();switch(v){case 13:case 32:case 40:e.callFunction(q,u);break;default:r.onkey(r,v);}t.preventDefault();});r.keyDownFn=s;n.push('<span class="cke_rcombo">','<span id=',p);if(this.className)n.push(' class="',this.className,' cke_off"');n.push('>','<span id="'+p+'_label" class=cke_label>',this.label,'</span>','<a hidefocus=true title="',this.title,'" tabindex="-1"',o.gecko&&o.version>=10900&&!o.hc?'':" href=\"javascript:void('"+this.label+"')\"",' role="button" aria-labelledby="',p,'_label" aria-describedby="',p,'_text" aria-haspopup="true"');if(b.opera||b.gecko&&b.mac)n.push(' onkeypress="return false;"');if(b.gecko)n.push(' onblur="this.style.cssText = this.style.cssText;"');n.push(' onkeydown="CKEDITOR.tools.callFunction( ',s,', event, this );" onclick="CKEDITOR.tools.callFunction(',q,', this); return false;"><span><span id="'+p+'_text" class="cke_text cke_inline_label">'+this.label+'</span>'+'</span>'+'<span class=cke_openbutton>'+(b.hc?'<span>▼</span>':b.air?' ':'')+'</span>'+'</a>'+'</span>'+'</span>');if(this.onRender)this.onRender();return r;},createPanel:function(m){if(this._.panel)return;var n=this._.panelDefinition,o=this._.panelDefinition.block,p=n.parent||a.document.getBody(),q=new k.floatPanel(m,p,n),r=q.addListBlock(this.id,o),s=this;
+q.onShow=function(){if(s.className)this.element.getFirst().addClass(s.className+'_panel');s.setState(1);r.focus(!s.multiSelect&&s.getValue());s._.on=1;if(s.onOpen)s.onOpen();};q.onHide=function(t){if(s.className)this.element.getFirst().removeClass(s.className+'_panel');s.setState(s.modes&&s.modes[m.mode]?2:0);s._.on=0;if(!t&&s.onClose)s.onClose();};q.onEscape=function(){q.hide();s.document.getById('cke_'+s.id).getFirst().getNext().focus();};r.onClick=function(t,u){s.document.getWindow().focus();if(s.onClick)s.onClick.call(s,t,u);if(u)s.setValue(t,s._.items[t]);else s.setValue('');q.hide();};this._.panel=q;this._.list=r;q.getBlock(this.id).onHide=function(){s._.on=0;s.setState(2);};if(this.init)this.init();},setValue:function(m,n){var p=this;p._.value=m;var o=p.document.getById('cke_'+p.id+'_text');if(!(m||n)){n=p.label;o.addClass('cke_inline_label');}else o.removeClass('cke_inline_label');o.setHtml(typeof n!='undefined'?n:m);},getValue:function(){return this._.value||'';},unmarkAll:function(){this._.list.unmarkAll();},mark:function(m){this._.list.mark(m);},hideItem:function(m){this._.list.hideItem(m);},hideGroup:function(m){this._.list.hideGroup(m);},showAll:function(){this._.list.showAll();},add:function(m,n,o){this._.items[m]=o||m;this._.list.add(m,n,o);},startGroup:function(m){this._.list.startGroup(m);},commit:function(){var m=this;if(!m._.committed){m._.list.commit();m._.committed=1;k.fire('ready',m);}m._.committed=1;},setState:function(m){var n=this;if(n._.state==m)return;n.document.getById('cke_'+n.id).setState(m);n._.state=m;}}});k.prototype.addRichCombo=function(m,n){this.add(m,3,n);};j.add('htmlwriter');a.htmlWriter=e.createClass({base:a.htmlParser.basicWriter,$:function(){var o=this;o.base();o.indentationChars='\t';o.selfClosingEnd=' />';o.lineBreakChars='\n';o.forceSimpleAmpersand=0;o.sortAttributes=1;o._.indent=0;o._.indentation='';o._.inPre=0;o._.rules={};var m=f;for(var n in e.extend({},m.$nonBodyContent,m.$block,m.$listItem,m.$tableContent))o.setRules(n,{indent:1,breakBeforeOpen:1,breakAfterOpen:1,breakBeforeClose:!m[n]['#'],breakAfterClose:1});o.setRules('br',{breakAfterOpen:1});o.setRules('title',{indent:0,breakAfterOpen:0});o.setRules('style',{indent:0,breakBeforeClose:1});o.setRules('pre',{indent:0});},proto:{openTag:function(m,n){var p=this;var o=p._.rules[m];if(p._.indent)p.indentation();else if(o&&o.breakBeforeOpen){p.lineBreak();p.indentation();}p._.output.push('<',m);},openTagClose:function(m,n){var p=this;var o=p._.rules[m];if(n)p._.output.push(p.selfClosingEnd);
+else{p._.output.push('>');if(o&&o.indent)p._.indentation+=p.indentationChars;}if(o&&o.breakAfterOpen)p.lineBreak();m=='pre'&&(p._.inPre=1);},attribute:function(m,n){if(typeof n=='string'){this.forceSimpleAmpersand&&(n=n.replace(/&/g,'&'));n=e.htmlEncodeAttr(n);}this._.output.push(' ',m,'="',n,'"');},closeTag:function(m){var o=this;var n=o._.rules[m];if(n&&n.indent)o._.indentation=o._.indentation.substr(o.indentationChars.length);if(o._.indent)o.indentation();else if(n&&n.breakBeforeClose){o.lineBreak();o.indentation();}o._.output.push('</',m,'>');m=='pre'&&(o._.inPre=0);if(n&&n.breakAfterClose)o.lineBreak();},text:function(m){var n=this;if(n._.indent){n.indentation();!n._.inPre&&(m=e.ltrim(m));}n._.output.push(m);},comment:function(m){if(this._.indent)this.indentation();this._.output.push('<!--',m,'-->');},lineBreak:function(){var m=this;if(!m._.inPre&&m._.output.length>0)m._.output.push(m.lineBreakChars);m._.indent=1;},indentation:function(){var m=this;if(!m._.inPre)m._.output.push(m._.indentation);m._.indent=0;},setRules:function(m,n){var o=this._.rules[m];if(o)e.extend(o,n,true);else this._.rules[m]=n;}}});j.add('menubutton',{requires:['button','menu'],beforeInit:function(m){m.ui.addHandler(5,k.menuButton.handler);}});a.UI_MENUBUTTON=5;(function(){var m=function(n){var o=this._;if(o.state===0)return;o.previousState=o.state;var p=o.menu;if(!p){p=o.menu=new a.menu(n,{panel:{className:n.skinClass+' cke_contextmenu',attributes:{'aria-label':n.lang.common.options}}});p.onHide=e.bind(function(){this.setState(this.modes&&this.modes[n.mode]?o.previousState:0);},this);if(this.onMenu)p.addListener(this.onMenu);}if(o.on){p.hide();return;}this.setState(1);p.show(a.document.getById(this._.id),4);};k.menuButton=e.createClass({base:k.button,$:function(n){var o=n.panel;delete n.panel;this.base(n);this.hasArrow=true;this.click=m;},statics:{handler:{create:function(n){return new k.menuButton(n);}}}});})();j.add('dialogui');(function(){var m=function(u){var x=this;x._||(x._={});x._['default']=x._.initValue=u['default']||'';x._.required=u.required||false;var v=[x._];for(var w=1;w<arguments.length;w++)v.push(arguments[w]);v.push(true);e.extend.apply(e,v);return x._;},n={build:function(u,v,w){return new k.dialog.textInput(u,v,w);}},o={build:function(u,v,w){return new k.dialog[v.type](u,v,w);}},p={build:function(u,v,w){var x=v.children,y,z=[],A=[];for(var B=0;B<x.length&&(y=x[B]);B++){var C=[];z.push(C);A.push(a.dialog._.uiElementBuilders[y.type].build(u,y,C));}return new k.dialog[v.type](u,A,z,w,v);
+}},q={isChanged:function(){return this.getValue()!=this.getInitValue();},reset:function(u){this.setValue(this.getInitValue(),u);},setInitValue:function(){this._.initValue=this.getValue();},resetInitValue:function(){this._.initValue=this._['default'];},getInitValue:function(){return this._.initValue;}},r=e.extend({},k.dialog.uiElement.prototype.eventProcessors,{onChange:function(u,v){if(!this._.domOnChangeRegistered){u.on('load',function(){this.getInputElement().on('change',function(){if(!u.parts.dialog.isVisible())return;this.fire('change',{value:this.getValue()});},this);},this);this._.domOnChangeRegistered=true;}this.on('change',v);}},true),s=/^on([A-Z]\w+)/,t=function(u){for(var v in u){if(s.test(v)||v=='title'||v=='type')delete u[v];}return u;};e.extend(k.dialog,{labeledElement:function(u,v,w,x){if(arguments.length<4)return;var y=m.call(this,v);y.labelId=e.getNextId()+'_label';var z=this._.children=[],A=function(){var B=[],C=v.required?' cke_required':'';if(v.labelLayout!='horizontal')B.push('<label class="cke_dialog_ui_labeled_label'+C+'" ',' id="'+y.labelId+'"',' for="'+y.inputId+'"',' style="'+v.labelStyle+'">',v.label,'</label>','<div class="cke_dialog_ui_labeled_content" role="presentation">',x.call(this,u,v),'</div>');else{var D={type:'hbox',widths:v.widths,padding:0,children:[{type:'html',html:'<label class="cke_dialog_ui_labeled_label'+C+'"'+' id="'+y.labelId+'"'+' for="'+y.inputId+'"'+' style="'+v.labelStyle+'">'+e.htmlEncode(v.label)+'</span>'},{type:'html',html:'<span class="cke_dialog_ui_labeled_content">'+x.call(this,u,v)+'</span>'}]};a.dialog._.uiElementBuilders.hbox.build(u,D,B);}return B.join('');};k.dialog.uiElement.call(this,u,v,w,'div',null,{role:'presentation'},A);},textInput:function(u,v,w){if(arguments.length<3)return;m.call(this,v);var x=this._.inputId=e.getNextId()+'_textInput',y={'class':'cke_dialog_ui_input_'+v.type,id:x,type:'text'},z;if(v.validate)this.validate=v.validate;if(v.maxLength)y.maxlength=v.maxLength;if(v.size)y.size=v.size;if(v.controlStyle)y.style=v.controlStyle;var A=this,B=false;u.on('load',function(){A.getInputElement().on('keydown',function(D){if(D.data.getKeystroke()==13)B=true;});A.getInputElement().on('keyup',function(D){if(D.data.getKeystroke()==13&&B){u.getButton('ok')&&setTimeout(function(){u.getButton('ok').click();},0);B=false;}},null,null,1000);});var C=function(){var D=['<div class="cke_dialog_ui_input_',v.type,'" role="presentation"'];if(v.width)D.push('style="width:'+v.width+'" ');D.push('><input ');
+y['aria-labelledby']=this._.labelId;this._.required&&(y['aria-required']=this._.required);for(var E in y)D.push(E+'="'+y[E]+'" ');D.push(' /></div>');return D.join('');};k.dialog.labeledElement.call(this,u,v,w,C);},textarea:function(u,v,w){if(arguments.length<3)return;m.call(this,v);var x=this,y=this._.inputId=e.getNextId()+'_textarea',z={};if(v.validate)this.validate=v.validate;z.rows=v.rows||5;z.cols=v.cols||20;var A=function(){z['aria-labelledby']=this._.labelId;this._.required&&(z['aria-required']=this._.required);var B=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea class="cke_dialog_ui_input_textarea" id="',y,'" '];for(var C in z)B.push(C+'="'+e.htmlEncode(z[C])+'" ');B.push('>',e.htmlEncode(x._['default']),'</textarea></div>');return B.join('');};k.dialog.labeledElement.call(this,u,v,w,A);},checkbox:function(u,v,w){if(arguments.length<3)return;var x=m.call(this,v,{'default':!!v['default']});if(v.validate)this.validate=v.validate;var y=function(){var z=e.extend({},v,{id:v.id?v.id+'_checkbox':e.getNextId()+'_checkbox'},true),A=[],B=e.getNextId()+'_label',C={'class':'cke_dialog_ui_checkbox_input',type:'checkbox','aria-labelledby':B};t(z);if(v['default'])C.checked='checked';if(typeof z.controlStyle!='undefined')z.style=z.controlStyle;x.checkbox=new k.dialog.uiElement(u,z,A,'input',null,C);A.push(' <label id="',B,'" for="',C.id,'">',e.htmlEncode(v.label),'</label>');return A.join('');};k.dialog.uiElement.call(this,u,v,w,'span',null,null,y);},radio:function(u,v,w){if(arguments.length<3)return;m.call(this,v);if(!this._['default'])this._['default']=this._.initValue=v.items[0][1];if(v.validate)this.validate=v.valdiate;var x=[],y=this,z=function(){var A=[],B=[],C={'class':'cke_dialog_ui_radio_item','aria-labelledby':this._.labelId},D=v.id?v.id+'_radio':e.getNextId()+'_radio';for(var E=0;E<v.items.length;E++){var F=v.items[E],G=F[2]!==undefined?F[2]:F[0],H=F[1]!==undefined?F[1]:F[0],I=e.getNextId()+'_radio_input',J=I+'_label',K=e.extend({},v,{id:I,title:null,type:null},true),L=e.extend({},K,{title:G},true),M={type:'radio','class':'cke_dialog_ui_radio_input',name:D,value:H,'aria-labelledby':J},N=[];if(y._['default']==H)M.checked='checked';t(K);t(L);if(typeof K.controlStyle!='undefined')K.style=K.controlStyle;x.push(new k.dialog.uiElement(u,K,N,'input',null,M));N.push(' ');new k.dialog.uiElement(u,L,N,'label',null,{id:J,'for':M.id},F[0]);A.push(N.join(''));}new k.dialog.hbox(u,[],A,B);return B.join('');};k.dialog.labeledElement.call(this,u,v,w,z);
+this._.children=x;},button:function(u,v,w){if(!arguments.length)return;if(typeof v=='function')v=v(u.getParentEditor());m.call(this,v,{disabled:v.disabled||false});a.event.implementOn(this);var x=this;u.on('load',function(A){var B=this.getElement();(function(){B.on('click',function(C){x.fire('click',{dialog:x.getDialog()});C.data.preventDefault();});B.on('keydown',function(C){if(C.data.getKeystroke() in {32:1}){x.click();C.data.preventDefault();}});})();B.unselectable();},this);var y=e.extend({},v);delete y.style;var z=e.getNextId()+'_label';k.dialog.uiElement.call(this,u,y,w,'a',null,{style:v.style,href:'javascript:void(0)',title:v.label,hidefocus:'true','class':v['class'],role:'button','aria-labelledby':z},'<span id="'+z+'" class="cke_dialog_ui_button">'+e.htmlEncode(v.label)+'</span>');},select:function(u,v,w){if(arguments.length<3)return;var x=m.call(this,v);if(v.validate)this.validate=v.validate;x.inputId=e.getNextId()+'_select';var y=function(){var z=e.extend({},v,{id:v.id?v.id+'_select':e.getNextId()+'_select'},true),A=[],B=[],C={id:x.inputId,'class':'cke_dialog_ui_input_select','aria-labelledby':this._.labelId};if(v.size!=undefined)C.size=v.size;if(v.multiple!=undefined)C.multiple=v.multiple;t(z);for(var D=0,E;D<v.items.length&&(E=v.items[D]);D++)B.push('<option value="',e.htmlEncode(E[1]!==undefined?E[1]:E[0]),'" /> ',e.htmlEncode(E[0]));if(typeof z.controlStyle!='undefined')z.style=z.controlStyle;x.select=new k.dialog.uiElement(u,z,A,'select',null,C,B.join(''));return A.join('');};k.dialog.labeledElement.call(this,u,v,w,y);},file:function(u,v,w){if(arguments.length<3)return;if(v['default']===undefined)v['default']='';var x=e.extend(m.call(this,v),{definition:v,buttons:[]});if(v.validate)this.validate=v.validate;var y=function(){x.frameId=e.getNextId()+'_fileInput';var z=b.isCustomDomain(),A=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" id="',x.frameId,'" title="',v.label,'" src="javascript:void('];A.push(z?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');A.push(')"></iframe>');return A.join('');};u.on('load',function(){var z=a.document.getById(x.frameId),A=z.getParent();A.addClass('cke_dialog_ui_input_file');});k.dialog.labeledElement.call(this,u,v,w,y);},fileButton:function(u,v,w){if(arguments.length<3)return;var x=m.call(this,v),y=this;if(v.validate)this.validate=v.validate;var z=e.extend({},v),A=z.onClick;z.className=(z.className?z.className+' ':'')+'cke_dialog_ui_button';
+z.onClick=function(B){var C=v['for'];if(!A||A.call(this,B)!==false){u.getContentElement(C[0],C[1]).submit();this.disable();}};u.on('load',function(){u.getContentElement(v['for'][0],v['for'][1])._.buttons.push(y);});k.dialog.button.call(this,u,z,w);},html:(function(){var u=/^\s*<[\w:]+\s+([^>]*)?>/,v=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,w=/\/$/;return function(x,y,z){if(arguments.length<3)return;var A=[],B,C=y.html,D,E;if(C.charAt(0)!='<')C='<span>'+C+'</span>';var F=y.focus;if(F){var G=this.focus;this.focus=function(){G.call(this);typeof F=='function'&&F.call(this);this.fire('focus');};if(y.isFocusable){var H=this.isFocusable;this.isFocusable=H;}this.keyboardFocusable=true;}k.dialog.uiElement.call(this,x,y,A,'span',null,null,'');B=A.join('');D=B.match(u);E=C.match(v)||['','',''];if(w.test(E[1])){E[1]=E[1].slice(0,-1);E[2]='/'+E[2];}z.push([E[1],' ',D[1]||'',E[2]].join(''));};})(),fieldset:function(u,v,w,x,y){var z=y.label,A=function(){var B=[];z&&B.push('<legend>'+z+'</legend>');for(var C=0;C<w.length;C++)B.push(w[C]);return B.join('');};this._={children:v};k.dialog.uiElement.call(this,u,y,x,'fieldset',null,null,A);}},true);k.dialog.html.prototype=new k.dialog.uiElement();k.dialog.labeledElement.prototype=e.extend(new k.dialog.uiElement(),{setLabel:function(u){var v=a.document.getById(this._.labelId);if(v.getChildCount()<1)new d.text(u,a.document).appendTo(v);else v.getChild(0).$.nodeValue=u;return this;},getLabel:function(){var u=a.document.getById(this._.labelId);if(!u||u.getChildCount()<1)return '';else return u.getChild(0).getText();},eventProcessors:r},true);k.dialog.button.prototype=e.extend(new k.dialog.uiElement(),{click:function(){var u=this;if(!u._.disabled)return u.fire('click',{dialog:u._.dialog});u.getElement().$.blur();return false;},enable:function(){this._.disabled=false;var u=this.getElement();u&&u.removeClass('cke_disabled');},disable:function(){this._.disabled=true;this.getElement().addClass('cke_disabled');},isVisible:function(){return this.getElement().getFirst().isVisible();},isEnabled:function(){return!this._.disabled;},eventProcessors:e.extend({},k.dialog.uiElement.prototype.eventProcessors,{onClick:function(u,v){this.on('click',v);}},true),accessKeyUp:function(){this.click();},accessKeyDown:function(){this.focus();},keyboardFocusable:true},true);k.dialog.textInput.prototype=e.extend(new k.dialog.labeledElement(),{getInputElement:function(){return a.document.getById(this._.inputId);},focus:function(){var u=this.selectParentTab();
+setTimeout(function(){var v=u.getInputElement();v&&v.$.focus();},0);},select:function(){var u=this.selectParentTab();setTimeout(function(){var v=u.getInputElement();if(v){v.$.focus();v.$.select();}},0);},accessKeyUp:function(){this.select();},setValue:function(u){!u&&(u='');return k.dialog.uiElement.prototype.setValue.apply(this,arguments);},keyboardFocusable:true},q,true);k.dialog.textarea.prototype=new k.dialog.textInput();k.dialog.select.prototype=e.extend(new k.dialog.labeledElement(),{getInputElement:function(){return this._.select.getElement();},add:function(u,v,w){var x=new h('option',this.getDialog().getParentEditor().document),y=this.getInputElement().$;x.$.text=u;x.$.value=v===undefined||v===null?u:v;if(w===undefined||w===null){if(c)y.add(x.$);else y.add(x.$,null);}else y.add(x.$,w);return this;},remove:function(u){var v=this.getInputElement().$;v.remove(u);return this;},clear:function(){var u=this.getInputElement().$;while(u.length>0)u.remove(0);return this;},keyboardFocusable:true},q,true);k.dialog.checkbox.prototype=e.extend(new k.dialog.uiElement(),{getInputElement:function(){return this._.checkbox.getElement();},setValue:function(u,v){this.getInputElement().$.checked=u;!v&&this.fire('change',{value:u});},getValue:function(){return this.getInputElement().$.checked;},accessKeyUp:function(){this.setValue(!this.getValue());},eventProcessors:{onChange:function(u,v){if(!c)return r.onChange.apply(this,arguments);else{u.on('load',function(){var w=this._.checkbox.getElement();w.on('propertychange',function(x){x=x.data.$;if(x.propertyName=='checked')this.fire('change',{value:w.$.checked});},this);},this);this.on('change',v);}return null;}},keyboardFocusable:true},q,true);k.dialog.radio.prototype=e.extend(new k.dialog.uiElement(),{setValue:function(u,v){var w=this._.children,x;for(var y=0;y<w.length&&(x=w[y]);y++)x.getElement().$.checked=x.getValue()==u;!v&&this.fire('change',{value:u});},getValue:function(){var u=this._.children;for(var v=0;v<u.length;v++){if(u[v].getElement().$.checked)return u[v].getValue();}return null;},accessKeyUp:function(){var u=this._.children,v;for(v=0;v<u.length;v++){if(u[v].getElement().$.checked){u[v].getElement().focus();return;}}u[0].getElement().focus();},eventProcessors:{onChange:function(u,v){if(!c)return r.onChange.apply(this,arguments);else{u.on('load',function(){var w=this._.children,x=this;for(var y=0;y<w.length;y++){var z=w[y].getElement();z.on('propertychange',function(A){A=A.data.$;if(A.propertyName=='checked'&&this.$.checked)x.fire('change',{value:this.getAttribute('value')});
+});}},this);this.on('change',v);}return null;}},keyboardFocusable:true},q,true);k.dialog.file.prototype=e.extend(new k.dialog.labeledElement(),q,{getInputElement:function(){var u=a.document.getById(this._.frameId).getFrameDocument();return u.$.forms.length>0?new h(u.$.forms[0].elements[0]):this.getElement();},submit:function(){this.getInputElement().getParent().$.submit();return this;},getAction:function(){return this.getInputElement().getParent().$.action;},registerEvents:function(u){var v=/^on([A-Z]\w+)/,w,x=function(z,A,B,C){z.on('formLoaded',function(){z.getInputElement().on(B,C,z);});};for(var y in u){if(!(w=y.match(v)))continue;if(this.eventProcessors[y])this.eventProcessors[y].call(this,this._.dialog,u[y]);else x(this,this._.dialog,w[1].toLowerCase(),u[y]);}return this;},reset:function(){var u=this._,v=a.document.getById(u.frameId),w=v.getFrameDocument(),x=u.definition,y=u.buttons,z=this.formLoadedNumber,A=this.formUnloadNumber,B=u.dialog._.editor.lang.dir,C=u.dialog._.editor.langCode;if(!z){z=this.formLoadedNumber=e.addFunction(function(){this.fire('formLoaded');},this);A=this.formUnloadNumber=e.addFunction(function(){this.getInputElement().clearCustomData();},this);this.getDialog()._.editor.on('destroy',function(){e.removeFunction(z);e.removeFunction(A);});}function D(){w.$.open();if(b.isCustomDomain())w.$.domain=document.domain;var E='';if(x.size)E=x.size-(c?7:0);w.$.write(['<html dir="'+B+'" lang="'+C+'"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" dir="'+B+'" lang="'+C+'" action="',e.htmlEncode(x.action),'">','<input type="file" name="',e.htmlEncode(x.id||'cke_upload'),'" size="',e.htmlEncode(E>0?E:''),'" />','</form>','</body></html>','<script>window.parent.CKEDITOR.tools.callFunction('+z+');','window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction('+A+')}</script>'].join(''));w.$.close();for(var F=0;F<y.length;F++)y[F].enable();};if(b.gecko)setTimeout(D,500);else D();},getValue:function(){return this.getInputElement().$.value||'';},setInitValue:function(){this._.initValue='';},eventProcessors:{onChange:function(u,v){if(!this._.domOnChangeRegistered){this.on('formLoaded',function(){this.getInputElement().on('change',function(){this.fire('change',{value:this.getValue()});},this);},this);this._.domOnChangeRegistered=true;}this.on('change',v);}},keyboardFocusable:true},true);k.dialog.fileButton.prototype=new k.dialog.button();
+k.dialog.fieldset.prototype=e.clone(k.dialog.hbox.prototype);a.dialog.addUIElement('text',n);a.dialog.addUIElement('password',n);a.dialog.addUIElement('textarea',o);a.dialog.addUIElement('checkbox',o);a.dialog.addUIElement('radio',o);a.dialog.addUIElement('button',o);a.dialog.addUIElement('select',o);a.dialog.addUIElement('file',o);a.dialog.addUIElement('fileButton',o);a.dialog.addUIElement('html',o);a.dialog.addUIElement('fieldset',p);})();j.add('panel',{beforeInit:function(m){m.ui.addHandler(2,k.panel.handler);}});a.UI_PANEL=2;k.panel=function(m,n){var o=this;if(n)e.extend(o,n);e.extend(o,{className:'',css:[]});o.id=e.getNextId();o.document=m;o._={blocks:{}};};k.panel.handler={create:function(m){return new k.panel(m);}};k.panel.prototype={renderHtml:function(m){var n=[];this.render(m,n);return n.join('');},render:function(m,n){var p=this;var o=p.id;n.push('<div class="',m.skinClass,'" lang="',m.langCode,'" role="presentation" style="display:none;z-index:'+(m.config.baseFloatZIndex+1)+'">'+'<div'+' id=',o,' dir=',m.lang.dir,' role="presentation" class="cke_panel cke_',m.lang.dir);if(p.className)n.push(' ',p.className);n.push('">');if(p.forceIFrame||p.css.length){n.push('<iframe id="',o,'_frame" frameborder="0" role="application" src="javascript:void(');n.push(b.isCustomDomain()?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');n.push(')"></iframe>');}n.push('</div></div>');return o;},getHolderElement:function(){var m=this._.holder;if(!m){if(this.forceIFrame||this.css.length){var n=this.document.getById(this.id+'_frame'),o=n.getParent(),p=o.getAttribute('dir'),q=o.getParent().getAttribute('class'),r=o.getParent().getAttribute('lang'),s=n.getFrameDocument(),t=e.addFunction(e.bind(function(w){this.isLoaded=true;if(this.onLoad)this.onLoad();},this)),u='<!DOCTYPE html><html dir="'+p+'" class="'+q+'_container" lang="'+r+'">'+'<head>'+'<style>.'+q+'_container{visibility:hidden}</style>'+'</head>'+'<body class="cke_'+p+' cke_panel_frame '+b.cssClass+'" style="margin:0;padding:0"'+' onload="( window.CKEDITOR || window.parent.CKEDITOR ).tools.callFunction('+t+');"></body>'+e.buildStyleHtml(this.css)+'</html>';s.write(u);var v=s.getWindow();v.$.CKEDITOR=a;s.on('key'+(b.opera?'press':'down'),function(w){var z=this;var x=w.data.getKeystroke(),y=z.document.getById(z.id).getAttribute('dir');if(z._.onKeyDown&&z._.onKeyDown(x)===false){w.data.preventDefault();return;}if(x==27||x==(y=='rtl'?39:37))if(z.onEscape&&z.onEscape(x)===false)w.data.preventDefault();
+},this);m=s.getBody();m.unselectable();b.air&&e.callFunction(t);}else m=this.document.getById(this.id);this._.holder=m;}return m;},addBlock:function(m,n){var o=this;n=o._.blocks[m]=n instanceof k.panel.block?n:new k.panel.block(o.getHolderElement(),n);if(!o._.currentBlock)o.showBlock(m);return n;},getBlock:function(m){return this._.blocks[m];},showBlock:function(m){var n=this._.blocks,o=n[m],p=this._.currentBlock,q=this.forceIFrame?this.document.getById(this.id+'_frame'):this._.holder;q.getParent().getParent().disableContextMenu();if(p){q.removeAttributes(p.attributes);p.hide();}this._.currentBlock=o;q.setAttributes(o.attributes);a.fire('ariaWidget',q);o._.focusIndex=-1;this._.onKeyDown=o.onKeyDown&&e.bind(o.onKeyDown,o);o.onMark=function(r){q.setAttribute('aria-activedescendant',r.getId()+'_option');};o.onUnmark=function(){q.removeAttribute('aria-activedescendant');};o.show();return o;},destroy:function(){this.element&&this.element.remove();}};k.panel.block=e.createClass({$:function(m,n){var o=this;o.element=m.append(m.getDocument().createElement('div',{attributes:{tabIndex:-1,'class':'cke_panel_block',role:'presentation'},styles:{display:'none'}}));if(n)e.extend(o,n);if(!o.attributes.title)o.attributes.title=o.attributes['aria-label'];o.keys={};o._.focusIndex=-1;o.element.disableContextMenu();},_:{markItem:function(m){var p=this;if(m==-1)return;var n=p.element.getElementsByTag('a'),o=n.getItem(p._.focusIndex=m);if(b.webkit||b.opera)o.getDocument().getWindow().focus();o.focus();p.onMark&&p.onMark(o);}},proto:{show:function(){this.element.setStyle('display','');},hide:function(){var m=this;if(!m.onHide||m.onHide.call(m)!==true)m.element.setStyle('display','none');},onKeyDown:function(m){var r=this;var n=r.keys[m];switch(n){case 'next':var o=r._.focusIndex,p=r.element.getElementsByTag('a'),q;while(q=p.getItem(++o)){if(q.getAttribute('_cke_focus')&&q.$.offsetWidth){r._.focusIndex=o;q.focus();break;}}return false;case 'prev':o=r._.focusIndex;p=r.element.getElementsByTag('a');while(o>0&&(q=p.getItem(--o))){if(q.getAttribute('_cke_focus')&&q.$.offsetWidth){r._.focusIndex=o;q.focus();break;}}return false;case 'click':o=r._.focusIndex;q=o>=0&&r.element.getElementsByTag('a').getItem(o);if(q)q.$.click?q.$.click():q.$.onclick();return false;}return true;}}});j.add('listblock',{requires:['panel'],onLoad:function(){k.panel.prototype.addListBlock=function(m,n){return this.addBlock(m,new k.listBlock(this.getHolderElement(),n));};k.listBlock=e.createClass({base:k.panel.block,$:function(m,n){var q=this;
+n=n||{};var o=n.attributes||(n.attributes={});(q.multiSelect=!!n.multiSelect)&&(o['aria-multiselectable']=true);!o.role&&(o.role='listbox');q.base.apply(q,arguments);var p=q.keys;p[40]='next';p[9]='next';p[38]='prev';p[2000+9]='prev';p[32]='click';q._.pendingHtml=[];q._.items={};q._.groups={};},_:{close:function(){if(this._.started){this._.pendingHtml.push('</ul>');delete this._.started;}},getClick:function(){if(!this._.click)this._.click=e.addFunction(function(m){var o=this;var n=true;if(o.multiSelect)n=o.toggle(m);else o.mark(m);if(o.onClick)o.onClick(m,n);},this);return this._.click;}},proto:{add:function(m,n,o){var r=this;var p=r._.pendingHtml,q=e.getNextId();if(!r._.started){p.push('<ul role="presentation" class=cke_panel_list>');r._.started=1;r._.size=r._.size||0;}r._.items[m]=q;p.push('<li id=',q,' class=cke_panel_listItem role=presentation><a id="',q,'_option" _cke_focus=1 hidefocus=true title="',o||m,'" href="javascript:void(\'',m,'\')" onclick="CKEDITOR.tools.callFunction(',r._.getClick(),",'",m,"'); return false;\"",' role="option" aria-posinset="'+ ++r._.size+'">',n||m,'</a></li>');},startGroup:function(m){this._.close();var n=e.getNextId();this._.groups[m]=n;this._.pendingHtml.push('<h1 role="presentation" id=',n,' class=cke_panel_grouptitle>',m,'</h1>');},commit:function(){var p=this;p._.close();p.element.appendHtml(p._.pendingHtml.join(''));var m=p._.items,n=p.element.getDocument();for(var o in m)n.getById(m[o]+'_option').setAttribute('aria-setsize',p._.size);delete p._.size;p._.pendingHtml=[];},toggle:function(m){var n=this.isMarked(m);if(n)this.unmark(m);else this.mark(m);return!n;},hideGroup:function(m){var n=this.element.getDocument().getById(this._.groups[m]),o=n&&n.getNext();if(n){n.setStyle('display','none');if(o&&o.getName()=='ul')o.setStyle('display','none');}},hideItem:function(m){this.element.getDocument().getById(this._.items[m]).setStyle('display','none');},showAll:function(){var m=this._.items,n=this._.groups,o=this.element.getDocument();for(var p in m)o.getById(m[p]).setStyle('display','');for(var q in n){var r=o.getById(n[q]),s=r.getNext();r.setStyle('display','');if(s&&s.getName()=='ul')s.setStyle('display','');}},mark:function(m){var p=this;if(!p.multiSelect)p.unmarkAll();var n=p._.items[m],o=p.element.getDocument().getById(n);o.addClass('cke_selected');p.element.getDocument().getById(n+'_option').setAttribute('aria-selected',true);p.element.setAttribute('aria-activedescendant',n+'_option');p.onMark&&p.onMark(o);},unmark:function(m){var n=this;
+n.element.getDocument().getById(n._.items[m]).removeClass('cke_selected');n.onUnmark&&n.onUnmark(n._.items[m]);},unmarkAll:function(){var p=this;var m=p._.items,n=p.element.getDocument();for(var o in m)n.getById(m[o]).removeClass('cke_selected');p.onUnmark&&p.onUnmark();},isMarked:function(m){return this.element.getDocument().getById(this._.items[m]).hasClass('cke_selected');},focus:function(m){this._.focusIndex=-1;if(m){var n=this.element.getDocument().getById(this._.items[m]).getFirst(),o=this.element.getElementsByTag('a'),p,q=-1;while(p=o.getItem(++q)){if(p.equals(n)){this._.focusIndex=q;break;}}setTimeout(function(){n.focus();},0);}}}});}});a.themes.add('default',(function(){function m(n,o){var p,q;q=n.config.sharedSpaces;q=q&&q[o];q=q&&a.document.getById(q);if(q){var r='<span class="cke_shared"><span class="'+n.skinClass+' '+n.id+' cke_editor_'+n.name+'">'+'<span class="'+b.cssClass+'">'+'<span class="cke_wrapper cke_'+n.lang.dir+'">'+'<span class="cke_editor">'+'<div class="cke_'+o+'">'+'</div></span></span></span></span></span>',s=q.append(h.createFromHtml(r,q.getDocument()));if(q.getCustomData('cke_hasshared'))s.hide();else q.setCustomData('cke_hasshared',1);p=s.getChild([0,0,0,0]);!n.sharedSpaces&&(n.sharedSpaces={});n.sharedSpaces[o]=p;n.on('focus',function(){for(var t=0,u,v=q.getChildren();u=v.getItem(t);t++){if(u.type==1&&!u.equals(s)&&u.hasClass('cke_shared'))u.hide();}s.show();});n.on('destroy',function(){s.remove();});}return p;};return{build:function(n,o){var p=n.name,q=n.element,r=n.elementMode;if(!q||r==0)return;if(r==1)q.hide();var s=n.fire('themeSpace',{space:'top',html:''}).html,t=n.fire('themeSpace',{space:'contents',html:''}).html,u=n.fireOnce('themeSpace',{space:'bottom',html:''}).html,v=t&&n.config.height,w=n.config.tabIndex||n.element.getAttribute('tabindex')||0;if(!t)v='auto';else if(!isNaN(v))v+='px';var x='',y=n.config.width;if(y){if(!isNaN(y))y+='px';x+='width: '+y+';';}var z=s&&m(n,'top'),A=m(n,'bottom');z&&(z.setHtml(s),s='');A&&(A.setHtml(u),u='');var B=h.createFromHtml(['<span id="cke_',p,'" class="',n.skinClass,' ',n.id,' cke_editor_',p,'" dir="',n.lang.dir,'" title="',b.gecko?' ':'','" lang="',n.langCode,'"'+(b.webkit?' tabindex="'+w+'"':'')+' role="application"'+' aria-labelledby="cke_',p,'_arialbl"'+(x?' style="'+x+'"':'')+'>'+'<span id="cke_',p,'_arialbl" class="cke_voice_label">'+n.lang.editor+'</span>'+'<span class="',b.cssClass,'" role="presentation"><span class="cke_wrapper cke_',n.lang.dir,'" role="presentation"><table class="cke_editor" border="0" cellspacing="0" cellpadding="0" role="presentation"><tbody><tr',s?'':' style="display:none"',' role="presentation"><td id="cke_top_',p,'" class="cke_top" role="presentation">',s,'</td></tr><tr',t?'':' style="display:none"',' role="presentation"><td id="cke_contents_',p,'" class="cke_contents" style="height:',v,'" role="presentation">',t,'</td></tr><tr',u?'':' style="display:none"',' role="presentation"><td id="cke_bottom_',p,'" class="cke_bottom" role="presentation">',u,'</td></tr></tbody></table><style>.',n.skinClass,'{visibility:hidden;}</style></span></span></span>'].join(''));
+B.getChild([1,0,0,0,0]).unselectable();B.getChild([1,0,0,0,2]).unselectable();if(r==1)B.insertAfter(q);else q.append(B);n.container=B;B.disableContextMenu();n.fireOnce('themeLoaded');n.fireOnce('uiReady');},buildDialog:function(n){var o=e.getNextNumber(),p=h.createFromHtml(['<div class="',n.id,'_dialog cke_editor_',n.name.replace('.','\\.'),'_dialog cke_skin_',n.skinName,'" dir="',n.lang.dir,'" lang="',n.langCode,'" role="dialog" aria-labelledby="%title#"><table class="cke_dialog',' '+b.cssClass,' cke_',n.lang.dir,'" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="%body" role="presentation"><div id="%title#" class="%title" role="presentation"></div><a id="%close_button#" class="%close_button" href="javascript:void(0)" title="'+n.lang.common.close+'" role="button"><span class="cke_label">X</span></a>'+'<div id="%tabs#" class="%tabs" role="tablist"></div>'+'<table class="%contents" role="presentation">'+'<tr>'+'<td id="%contents#" class="%contents" role="presentation"></td>'+'</tr>'+'<tr>'+'<td id="%footer#" class="%footer" role="presentation"></td>'+'</tr>'+'</table>'+'</div>'+'<div id="%tl#" class="%tl"></div>'+'<div id="%tc#" class="%tc"></div>'+'<div id="%tr#" class="%tr"></div>'+'<div id="%ml#" class="%ml"></div>'+'<div id="%mr#" class="%mr"></div>'+'<div id="%bl#" class="%bl"></div>'+'<div id="%bc#" class="%bc"></div>'+'<div id="%br#" class="%br"></div>'+'</td></tr>'+'</table>',c?'':'<style>.cke_dialog{visibility:hidden;}</style>','</div>'].join('').replace(/#/g,'_'+o).replace(/%/g,'cke_dialog_')),q=p.getChild([0,0,0,0,0]),r=q.getChild(0),s=q.getChild(1);r.unselectable();s.unselectable();return{element:p,parts:{dialog:p.getChild(0),title:r,close:s,tabs:q.getChild(2),contents:q.getChild([3,0,0,0]),footer:q.getChild([3,0,1,0])}};},destroy:function(n){var o=n.container;o.clearCustomData();n.element.clearCustomData();if(o)o.remove();if(n.elementMode==1)n.element.show();delete n.element;}};})());a.editor.prototype.getThemeSpace=function(m){var n='cke_'+m,o=this._[n]||(this._[n]=a.document.getById(n+'_'+this.name));return o;};a.editor.prototype.resize=function(m,n,o,p){var q=this.container,r=a.document.getById('cke_contents_'+this.name),s=p?q.getChild(1):q;b.webkit&&s.setStyle('display','none');s.setSize('width',m,true);if(b.webkit){s.$.offsetWidth;s.setStyle('display','');}var t=o?0:(s.$.offsetHeight||0)-(r.$.clientHeight||0);r.setStyle('height',Math.max(n-t,0)+'px');this.fire('resize');};a.editor.prototype.getResizable=function(){return this.container.getChild(1);
+};})();
diff --git a/modules_v2/ckeditor/ckeditor.pack b/modules_v2/ckeditor/ckeditor.pack new file mode 100644 index 0000000000..32cbc823d3 --- /dev/null +++ b/modules_v2/ckeditor/ckeditor.pack @@ -0,0 +1,211 @@ +/*
+ * CKPackager - Sample Package file
+ */
+
+header :
+ '/*' + '\n' +
+ 'Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.' + '\n' +
+ 'For licensing, see LICENSE.html or http://ckeditor.com/license' + '\n' +
+ '*/' + '\n' +
+ '\n',
+
+noCheck : false,
+
+constants :
+ {
+ 'CKEDITOR.ELEMENT_MODE_NONE' : 0,
+ 'CKEDITOR.ELEMENT_MODE_REPLACE' : 1,
+ 'CKEDITOR.ELEMENT_MODE_APPENDTO' : 2,
+ 'CKEDITOR.CTRL' : 1000,
+ 'CKEDITOR.SHIFT' : 2000,
+ 'CKEDITOR.ALT' : 4000,
+ 'CKEDITOR.NODE_ELEMENT' : 1,
+ 'CKEDITOR.NODE_DOCUMENT' : 9,
+ 'CKEDITOR.NODE_TEXT' : 3,
+ 'CKEDITOR.NODE_COMMENT' : 8,
+ 'CKEDITOR.NODE_DOCUMENT_FRAGMENT' : 11,
+ 'CKEDITOR.POSITION_IDENTICAL' : 0,
+ 'CKEDITOR.POSITION_DISCONNECTED' : 1,
+ 'CKEDITOR.POSITION_FOLLOWING' : 2,
+ 'CKEDITOR.POSITION_PRECEDING' : 4,
+ 'CKEDITOR.POSITION_IS_CONTAINED' : 8,
+ 'CKEDITOR.POSITION_CONTAINS' : 16,
+ 'CKEDITOR.ENTER_P' : 1,
+ 'CKEDITOR.ENTER_BR' : 2,
+ 'CKEDITOR.ENTER_DIV' : 3,
+ 'CKEDITOR.TRISTATE_ON' : 1,
+ 'CKEDITOR.TRISTATE_OFF' : 2,
+ 'CKEDITOR.TRISTATE_DISABLED' : 0,
+ 'CKEDITOR.POSITION_AFTER_START' : 1,
+ 'CKEDITOR.POSITION_BEFORE_END' : 2,
+ 'CKEDITOR.POSITION_BEFORE_START' : 3,
+ 'CKEDITOR.POSITION_AFTER_END' : 4,
+ 'CKEDITOR.ENLARGE_ELEMENT' : 1,
+ 'CKEDITOR.ENLARGE_BLOCK_CONTENTS' : 2,
+ 'CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS' : 3,
+ 'CKEDITOR.START' : 1,
+ 'CKEDITOR.END' : 2,
+ 'CKEDITOR.STARTEND' : 3,
+ 'CKEDITOR.SHRINK_ELEMENT' : 1,
+ 'CKEDITOR.SHRINK_TEXT' : 2,
+ 'CKEDITOR.UI_BUTTON' : 1,
+ 'CKEDITOR.DIALOG_RESIZE_NONE' : 0,
+ 'CKEDITOR.DIALOG_RESIZE_WIDTH' : 1,
+ 'CKEDITOR.DIALOG_RESIZE_HEIGHT' : 2,
+ 'CKEDITOR.DIALOG_RESIZE_BOTH' : 3,
+ 'CKEDITOR.VALIDATE_OR' : 1,
+ 'CKEDITOR.VALIDATE_AND' : 2,
+ 'CKEDITOR.STYLE_BLOCK' : 1,
+ 'CKEDITOR.STYLE_INLINE' : 2,
+ 'CKEDITOR.STYLE_OBJECT' : 3,
+ 'CKEDITOR.UI_PANELBUTTON' : 4,
+ 'CKEDITOR.SELECTION_NONE' : 1,
+ 'CKEDITOR.SELECTION_TEXT' : 2,
+ 'CKEDITOR.SELECTION_ELEMENT' : 3,
+ 'CKEDITOR.UI_RICHCOMBO' : 3,
+ 'CKEDITOR.UI_MENUBUTTON' : 5,
+ 'CKEDITOR.UI_PANEL' : 2
+ },
+
+packages :
+ [
+ {
+ output : 'ckeditor_basic.js',
+ wrap : true,
+ files :
+ [
+ '_source/core/ckeditor_base.js',
+ '_source/core/event.js',
+ '_source/core/editor_basic.js',
+ '_source/core/env.js',
+ '_source/core/ckeditor_basic.js'
+ ]
+ },
+
+ {
+ output : 'ckeditor.js',
+ wrap : true,
+ files :
+ [
+ '_source/core/ckeditor_base.js',
+ '_source/core/event.js',
+ '_source/core/editor_basic.js',
+ '_source/core/env.js',
+ '_source/core/ckeditor_basic.js',
+ '_source/core/dom.js',
+ '_source/core/tools.js',
+ '_source/core/dtd.js',
+ '_source/core/dom/event.js',
+ '_source/core/dom/domobject.js',
+ '_source/core/dom/window.js',
+ '_source/core/dom/document.js',
+ '_source/core/dom/node.js',
+ '_source/core/dom/nodelist.js',
+ '_source/core/dom/element.js',
+ '_source/core/command.js',
+ '_source/core/config.js',
+ '_source/core/focusmanager.js',
+ '_source/core/lang.js',
+ '_source/core/scriptloader.js',
+ '_source/core/resourcemanager.js',
+ '_source/core/plugins.js',
+ '_source/core/skins.js',
+ '_source/core/themes.js',
+ '_source/core/ui.js',
+ '_source/core/editor.js',
+ '_source/core/htmlparser.js',
+ '_source/core/htmlparser/comment.js',
+ '_source/core/htmlparser/text.js',
+ '_source/core/htmlparser/cdata.js',
+ '_source/core/htmlparser/fragment.js',
+ '_source/core/htmlparser/element.js',
+ '_source/core/htmlparser/filter.js',
+ '_source/core/htmlparser/basicwriter.js',
+ '_source/core/ckeditor.js',
+ '_source/core/dom/comment.js',
+ '_source/core/dom/elementpath.js',
+ '_source/core/dom/text.js',
+ '_source/core/dom/documentfragment.js',
+ '_source/core/dom/walker.js',
+ '_source/core/dom/range.js',
+ '_source/core/dom/rangelist.js',
+ '_source/core/_bootstrap.js',
+ '_source/skins/kama/skin.js',
+// '_source/lang/en.js',
+ '_source/plugins/about/plugin.js',
+ '_source/plugins/a11yhelp/plugin.js',
+ '_source/plugins/basicstyles/plugin.js',
+ '_source/plugins/bidi/plugin.js',
+ '_source/plugins/blockquote/plugin.js',
+ '_source/plugins/button/plugin.js',
+ '_source/plugins/clipboard/plugin.js',
+ '_source/plugins/colorbutton/plugin.js',
+ '_source/plugins/colordialog/plugin.js',
+ '_source/plugins/contextmenu/plugin.js',
+ '_source/plugins/dialogadvtab/plugin.js',
+ '_source/plugins/div/plugin.js',
+ '_source/plugins/elementspath/plugin.js',
+ '_source/plugins/enterkey/plugin.js',
+ '_source/plugins/entities/plugin.js',
+ '_source/plugins/filebrowser/plugin.js',
+ '_source/plugins/find/plugin.js',
+ '_source/plugins/flash/plugin.js',
+ '_source/plugins/font/plugin.js',
+ '_source/plugins/format/plugin.js',
+ '_source/plugins/forms/plugin.js',
+ '_source/plugins/horizontalrule/plugin.js',
+ '_source/plugins/htmldataprocessor/plugin.js',
+ '_source/plugins/iframe/plugin.js',
+ '_source/plugins/image/plugin.js',
+ '_source/plugins/indent/plugin.js',
+ '_source/plugins/justify/plugin.js',
+ '_source/plugins/keystrokes/plugin.js',
+ '_source/plugins/link/plugin.js',
+ '_source/plugins/list/plugin.js',
+ '_source/plugins/liststyle/plugin.js',
+ '_source/plugins/maximize/plugin.js',
+ '_source/plugins/newpage/plugin.js',
+ '_source/plugins/pagebreak/plugin.js',
+ '_source/plugins/pastefromword/plugin.js',
+ '_source/plugins/pastetext/plugin.js',
+ '_source/plugins/popup/plugin.js',
+ '_source/plugins/preview/plugin.js',
+ '_source/plugins/print/plugin.js',
+ '_source/plugins/removeformat/plugin.js',
+ '_source/plugins/resize/plugin.js',
+ '_source/plugins/save/plugin.js',
+ '_source/plugins/scayt/plugin.js',
+ '_source/plugins/smiley/plugin.js',
+ '_source/plugins/showblocks/plugin.js',
+ '_source/plugins/showborders/plugin.js',
+ '_source/plugins/sourcearea/plugin.js',
+ '_source/plugins/stylescombo/plugin.js',
+ '_source/plugins/table/plugin.js',
+ '_source/plugins/tabletools/plugin.js',
+ '_source/plugins/specialchar/plugin.js',
+ '_source/plugins/tab/plugin.js',
+ '_source/plugins/templates/plugin.js',
+ '_source/plugins/toolbar/plugin.js',
+ '_source/plugins/undo/plugin.js',
+ '_source/plugins/wysiwygarea/plugin.js',
+ '_source/plugins/wsc/plugin.js',
+ '_source/plugins/dialog/plugin.js',
+ '_source/plugins/styles/plugin.js',
+ '_source/plugins/domiterator/plugin.js',
+ '_source/plugins/panelbutton/plugin.js',
+ '_source/plugins/floatpanel/plugin.js',
+ '_source/plugins/menu/plugin.js',
+ '_source/plugins/editingblock/plugin.js',
+ '_source/plugins/selection/plugin.js',
+ '_source/plugins/fakeobjects/plugin.js',
+ '_source/plugins/richcombo/plugin.js',
+ '_source/plugins/htmlwriter/plugin.js',
+ '_source/plugins/menubutton/plugin.js',
+ '_source/plugins/dialogui/plugin.js',
+ '_source/plugins/panel/plugin.js',
+ '_source/plugins/listblock/plugin.js',
+ '_source/themes/default/theme.js'
+ ]
+ }
+
+ ]
diff --git a/modules_v2/ckeditor/ckeditor.php b/modules_v2/ckeditor/ckeditor.php new file mode 100644 index 0000000000..f9bf5506f7 --- /dev/null +++ b/modules_v2/ckeditor/ckeditor.php @@ -0,0 +1,29 @@ +<?php +/* + * Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +/*! \mainpage CKEditor - PHP server side intergation + * \section intro_sec CKEditor + * Visit <a href="http://ckeditor.com">CKEditor web site</a> to find more information about the editor. + * \section install_sec Installation + * \subsection step1 Include ckeditor.php in your PHP web site. + * @code + * <?php + * include("ckeditor/ckeditor.php"); + * ?> + * @endcode + * \subsection step2 Create CKEditor class instance and use one of available methods to insert CKEditor. + * @code + * <?php + * $CKEditor = new CKEditor(); + * echo $CKEditor->textarea("field1", "<p>Initial value.</p>"); + * ?> + * @endcode + */ + +if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) ) + include_once( 'ckeditor_php4.php' ) ; +else + include_once( 'ckeditor_php5.php' ) ; diff --git a/modules_v2/ckeditor/ckeditor_basic.js b/modules_v2/ckeditor/ckeditor_basic.js new file mode 100644 index 0000000000..04e4d15725 --- /dev/null +++ b/modules_v2/ckeditor/ckeditor_basic.js @@ -0,0 +1,8 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'ABLC4TW',version:'3.5',revision:'6260',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;if(!d)throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/'&&!/[&?]t=/.test(d))d+=(d.indexOf('?')>=0?'&':'?')+'t='+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();var a=CKEDITOR;if(!a.event){a.event=function(){};a.event.implementOn=function(b){var c=a.event.prototype;for(var d in c){if(b[d]==undefined)b[d]=c[d];}};a.event.prototype=(function(){var b=function(d){var e=d.getPrivate&&d.getPrivate()||d._||(d._={});return e.events||(e.events={});},c=function(d){this.name=d;this.listeners=[];};c.prototype={getListenerIndex:function(d){for(var e=0,f=this.listeners;e<f.length;e++){if(f[e].fn==d)return e;}return-1;}};return{on:function(d,e,f,g,h){var i=b(this),j=i[d]||(i[d]=new c(d));if(j.getListenerIndex(e)<0){var k=j.listeners;if(!f)f=this;if(isNaN(h))h=10;var l=this,m=function(o,p,q,r){var s={name:d,sender:this,editor:o,data:p,listenerData:g,stop:q,cancel:r,removeListener:function(){l.removeListener(d,e);}};e.call(f,s);return s.data;};m.fn=e;m.priority=h;for(var n=k.length-1;n>=0;n--){if(k[n].priority<=h){k.splice(n+1,0,m);return;}}k.unshift(m);}},fire:(function(){var d=false,e=function(){d=true;},f=false,g=function(){f=true;};return function(h,i,j){var k=b(this)[h],l=d,m=f;d=f=false;if(k){var n=k.listeners;if(n.length){n=n.slice(0);for(var o=0;o<n.length;o++){var p=n[o].call(this,j,i,e,g);if(typeof p!='undefined')i=p;if(d||f)break;}}}var q=f||(typeof i=='undefined'?false:i);d=l;f=m;return q;};})(),fireOnce:function(d,e,f){var g=this.fire(d,e,f);delete b(this)[d];return g;},removeListener:function(d,e){var f=b(this)[d];if(f){var g=f.getListenerIndex(e);if(g>=0)f.listeners.splice(g,1);}},hasListeners:function(d){var e=b(this)[d];
+return e&&e.listeners.length>0;}};})();}if(!a.editor){a.ELEMENT_MODE_NONE=0;a.ELEMENT_MODE_REPLACE=1;a.ELEMENT_MODE_APPENDTO=2;a.editor=function(b,c,d,e){var f=this;f._={instanceConfig:b,element:c,data:e};f.elementMode=d||0;a.event.call(f);f._init();};a.editor.replace=function(b,c){var d=b;if(typeof d!='object'){d=document.getElementById(b);if(!d){var e=0,f=document.getElementsByName(b);while((d=f[e++])&&d.tagName.toLowerCase()!='textarea'){}}if(!d)throw '[CKEDITOR.editor.replace] The element with id or name "'+b+'" was not found.';}d.style.visibility='hidden';return new a.editor(c,d,1);};a.editor.appendTo=function(b,c,d){var e=b;if(typeof e!='object'){e=document.getElementById(b);if(!e)throw '[CKEDITOR.editor.appendTo] The element with id "'+b+'" was not found.';}return new a.editor(c,e,2,d);};a.editor.prototype={_init:function(){var b=a.editor._pending||(a.editor._pending=[]);b.push(this);},fire:function(b,c){return a.event.prototype.fire.call(this,b,c,this);},fireOnce:function(b,c){return a.event.prototype.fireOnce.call(this,b,c,this);}};a.event.implementOn(a.editor.prototype,true);}if(!a.env)a.env=(function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,d={ie:/*@cc_on!@*/false,opera:!!c&&c.version,webkit:b.indexOf(' applewebkit/')>-1,air:b.indexOf(' adobeair/')>-1,mac:b.indexOf('macintosh')>-1,quirks:document.compatMode=='BackCompat',mobile:b.indexOf('mobile')>-1,isCustomDomain:function(){if(!this.ie)return false;var g=document.domain,h=window.location.hostname;return g!=h&&g!='['+h+']';}};d.gecko=navigator.product=='Gecko'&&!d.webkit&&!d.opera;var e=0;if(d.ie){e=parseFloat(b.match(/msie (\d+)/)[1]);d.ie8=!!document.documentMode;d.ie8Compat=document.documentMode==8;d.ie7Compat=e==7&&!document.documentMode||document.documentMode==7;d.ie6Compat=e<7||d.quirks;}if(d.gecko){var f=b.match(/rv:([\d\.]+)/);if(f){f=f[1].split('.');e=f[0]*10000+(f[1]||0)*100+ +(f[2]||0);}}if(d.opera)e=parseFloat(c.version());if(d.air)e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]);if(d.webkit)e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]);d.version=e;d.isCompatible=!d.mobile&&(d.ie&&e>=6||d.gecko&&e>=10801||d.opera&&e>=9.5||d.air&&e>=1||d.webkit&&e>=522||false);d.cssClass='cke_browser_'+(d.ie?'ie':d.gecko?'gecko':d.opera?'opera':d.webkit?'webkit':'unknown');if(d.quirks)d.cssClass+=' cke_browser_quirks';if(d.ie){d.cssClass+=' cke_browser_ie'+(d.version<7?'6':d.version>=8?document.documentMode:'7');if(d.quirks)d.cssClass+=' cke_browser_iequirks';}if(d.gecko&&e<10900)d.cssClass+=' cke_browser_gecko18';
+if(d.air)d.cssClass+=' cke_browser_air';return d;})();var b=a.env;var c=b.ie;if(a.status=='unloaded')(function(){a.event.implementOn(a);a.loadFullCore=function(){if(a.status!='basic_ready'){a.loadFullCore._load=1;return;}delete a.loadFullCore;var e=document.createElement('script');e.type='text/javascript';e.src=a.basePath+'ckeditor.js';document.getElementsByTagName('head')[0].appendChild(e);};a.loadFullCoreTimeout=0;a.replaceClass='ckeditor';a.replaceByClassEnabled=1;var d=function(e,f,g,h){if(b.isCompatible){if(a.loadFullCore)a.loadFullCore();var i=g(e,f,h);a.add(i);return i;}return null;};a.replace=function(e,f){return d(e,f,a.editor.replace);};a.appendTo=function(e,f,g){return d(e,f,a.editor.appendTo,g);};a.add=function(e){var f=this._.pending||(this._.pending=[]);f.push(e);};a.replaceAll=function(){var e=document.getElementsByTagName('textarea');for(var f=0;f<e.length;f++){var g=null,h=e[f],i=h.name;if(!h.name&&!h.id)continue;if(typeof arguments[0]=='string'){var j=new RegExp('(?:^|\\s)'+arguments[0]+'(?:$|\\s)');if(!j.test(h.className))continue;}else if(typeof arguments[0]=='function'){g={};if(arguments[0](h,g)===false)continue;}this.replace(h,g);}};(function(){var e=function(){var f=a.loadFullCore,g=a.loadFullCoreTimeout;if(a.replaceByClassEnabled)a.replaceAll(a.replaceClass);a.status='basic_ready';if(f&&f._load)f();else if(g)setTimeout(function(){if(a.loadFullCore)a.loadFullCore();},g*1000);};if(window.addEventListener)window.addEventListener('load',e,false);else if(window.attachEvent)window.attachEvent('onload',e);})();a.status='basic_loaded';})();})();
diff --git a/modules_v2/ckeditor/ckeditor_basic_source.js b/modules_v2/ckeditor/ckeditor_basic_source.js new file mode 100644 index 0000000000..8bbc8e1fa9 --- /dev/null +++ b/modules_v2/ckeditor/ckeditor_basic_source.js @@ -0,0 +1,20 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+// Compressed version of core/ckeditor_base.js. See original for instructions.
+/*jsl:ignore*/
+if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.5',revision:'6260',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
+/*jsl:end*/
+
+// Uncomment the following line to have a new timestamp generated for each
+// request, having clear cache load of the editor code.
+// CKEDITOR.timestamp = ( new Date() ).valueOf();
+
+// Set the script name to be loaded by the loader.
+CKEDITOR._autoLoad = 'core/ckeditor_basic';
+
+// Include the loader script.
+document.write(
+ '<script type="text/javascript" src="' + CKEDITOR.getUrl( '_source/core/loader.js' ) + '"></script>' );
diff --git a/modules_v2/ckeditor/ckeditor_php4.php b/modules_v2/ckeditor/ckeditor_php4.php new file mode 100644 index 0000000000..3b970921d8 --- /dev/null +++ b/modules_v2/ckeditor/ckeditor_php4.php @@ -0,0 +1,593 @@ +<?php +/* +* Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +* For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * \brief CKEditor class that can be used to create editor + * instances in PHP pages on server side. + * @see http://ckeditor.com + * + * Sample usage: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->editor("editor1", "<p>Initial value.</p>"); + * @endcode + */ +class CKEditor +{ + /** + * The version of %CKEditor. + * \private + */ + var $version = '3.5'; + /** + * A constant string unique for each release of %CKEditor. + * \private + */ + var $_timestamp = 'ABLC4TW'; + + /** + * URL to the %CKEditor installation directory (absolute or relative to document root). + * If not set, CKEditor will try to guess it's path. + * + * Example usage: + * @code + * $CKEditor->basePath = '/ckeditor/'; + * @endcode + */ + var $basePath; + /** + * An array that holds the global %CKEditor configuration. + * For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html + * + * Example usage: + * @code + * $CKEditor->config['height'] = 400; + * // Use @@ at the beggining of a string to ouput it without surrounding quotes. + * $CKEditor->config['width'] = '@@screen.width * 0.8'; + * @endcode + */ + var $config = array(); + /** + * A boolean variable indicating whether CKEditor has been initialized. + * Set it to true only if you have already included + * <script> tag loading ckeditor.js in your website. + */ + var $initialized = false; + /** + * Boolean variable indicating whether created code should be printed out or returned by a function. + * + * Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->returnOutput = true; + * $code = $CKEditor->editor("editor1", "<p>Initial value.</p>"); + * echo "<p>Editor 1:</p>"; + * echo $code; + * @endcode + */ + var $returnOutput = false; + /** + * An array with textarea attributes. + * + * When %CKEditor is created with the editor() method, a HTML <textarea> element is created, + * it will be displayed to anyone with JavaScript disabled or with incompatible browser. + */ + var $textareaAttributes = array( "rows" => 8, "cols" => 60 ); + /** + * A string indicating the creation date of %CKEditor. + * Do not change it unless you want to force browsers to not use previously cached version of %CKEditor. + */ + var $timestamp = "ABLC4TW"; + /** + * An array that holds event listeners. + * \private + */ + var $_events = array(); + /** + * An array that holds global event listeners. + * \private + */ + var $_globalEvents = array(); + + /** + * Main Constructor. + * + * @param $basePath (string) URL to the %CKEditor installation directory (optional). + */ + function CKEditor($basePath = null) { + if (!empty($basePath)) { + $this->basePath = $basePath; + } + } + + /** + * Creates a %CKEditor instance. + * In incompatible browsers %CKEditor will downgrade to plain HTML <textarea> element. + * + * @param $name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element). + * @param $value (string) Initial value (optional). + * @param $config (array) The specific configurations to apply to this editor instance (optional). + * @param $events (array) Event listeners for this editor instance (optional). + * + * Example usage: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->editor("field1", "<p>Initial value.</p>"); + * @endcode + * + * Advanced example: + * @code + * $CKEditor = new CKEditor(); + * $config = array(); + * $config['toolbar'] = array( + * array( 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike' ), + * array( 'Image', 'Link', 'Unlink', 'Anchor' ) + * ); + * $events['instanceReady'] = 'function (ev) { + * alert("Loaded: " + ev.editor.name); + * }'; + * $CKEditor->editor("field1", "<p>Initial value.</p>", $config, $events); + * @endcode + */ + function editor($name, $value = "", $config = array(), $events = array()) + { + $attr = ""; + foreach ($this->textareaAttributes as $key => $val) { + $attr.= " " . $key . '="' . str_replace('"', '"', $val) . '"'; + } + $out = "<textarea name=\"" . $name . "\"" . $attr . ">" . htmlspecialchars($value) . "</textarea>\n"; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings($config, $events); + + $js = $this->returnGlobalEvents(); + if (!empty($_config)) + $js .= "CKEDITOR.replace('".$name."', ".$this->jsEncode($_config).");"; + else + $js .= "CKEDITOR.replace('".$name."');"; + + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Replaces a <textarea> with a %CKEditor instance. + * + * @param $id (string) The id or name of textarea element. + * @param $config (array) The specific configurations to apply to this editor instance (optional). + * @param $events (array) Event listeners for this editor instance (optional). + * + * Example 1: adding %CKEditor to <textarea name="article"></textarea> element: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replace("article"); + * @endcode + */ + function replace($id, $config = array(), $events = array()) + { + $out = ""; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings($config, $events); + + $js = $this->returnGlobalEvents(); + if (!empty($_config)) { + $js .= "CKEDITOR.replace('".$id."', ".$this->jsEncode($_config).");"; + } + else { + $js .= "CKEDITOR.replace('".$id."');"; + } + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Replace all <textarea> elements available in the document with editor instances. + * + * @param $className (string) If set, replace all textareas with class className in the page. + * + * Example 1: replace all <textarea> elements in the page. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replaceAll(); + * @endcode + * + * Example 2: replace all <textarea class="myClassName"> elements in the page. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replaceAll( 'myClassName' ); + * @endcode + */ + function replaceAll($className = null) + { + $out = ""; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings(); + + $js = $this->returnGlobalEvents(); + if (empty($_config)) { + if (empty($className)) { + $js .= "CKEDITOR.replaceAll();"; + } + else { + $js .= "CKEDITOR.replaceAll('".$className."');"; + } + } + else { + $classDetection = ""; + $js .= "CKEDITOR.replaceAll( function(textarea, config) {\n"; + if (!empty($className)) { + $js .= " var classRegex = new RegExp('(?:^| )' + '". $className ."' + '(?:$| )');\n"; + $js .= " if (!classRegex.test(textarea.className))\n"; + $js .= " return false;\n"; + } + $js .= " CKEDITOR.tools.extend(config, ". $this->jsEncode($_config) .", true);"; + $js .= "} );"; + + } + + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Adds event listener. + * Events are fired by %CKEditor in various situations. + * + * @param $event (string) Event name. + * @param $javascriptCode (string) Javascript anonymous function or function name. + * + * Example usage: + * @code + * $CKEditor->addEventHandler('instanceReady', 'function (ev) { + * alert("Loaded: " + ev.editor.name); + * }'); + * @endcode + */ + function addEventHandler($event, $javascriptCode) + { + if (!isset($this->_events[$event])) { + $this->_events[$event] = array(); + } + // Avoid duplicates. + if (!in_array($javascriptCode, $this->_events[$event])) { + $this->_events[$event][] = $javascriptCode; + } + } + + /** + * Clear registered event handlers. + * Note: this function will have no effect on already created editor instances. + * + * @param $event (string) Event name, if not set all event handlers will be removed (optional). + */ + function clearEventHandlers($event = null) + { + if (!empty($event)) { + $this->_events[$event] = array(); + } + else { + $this->_events = array(); + } + } + + /** + * Adds global event listener. + * + * @param $event (string) Event name. + * @param $javascriptCode (string) Javascript anonymous function or function name. + * + * Example usage: + * @code + * $CKEditor->addGlobalEventHandler('dialogDefinition', 'function (ev) { + * alert("Loading dialog: " + ev.data.name); + * }'); + * @endcode + */ + function addGlobalEventHandler($event, $javascriptCode) + { + if (!isset($this->_globalEvents[$event])) { + $this->_globalEvents[$event] = array(); + } + // Avoid duplicates. + if (!in_array($javascriptCode, $this->_globalEvents[$event])) { + $this->_globalEvents[$event][] = $javascriptCode; + } + } + + /** + * Clear registered global event handlers. + * Note: this function will have no effect if the event handler has been already printed/returned. + * + * @param $event (string) Event name, if not set all event handlers will be removed (optional). + */ + function clearGlobalEventHandlers($event = null) + { + if (!empty($event)) { + $this->_globalEvents[$event] = array(); + } + else { + $this->_globalEvents = array(); + } + } + + /** + * Prints javascript code. + * \private + * + * @param string $js + */ + function script($js) + { + $out = "<script type=\"text/javascript\">"; + $out .= "//<![CDATA[\n"; + $out .= $js; + $out .= "\n//]]>"; + $out .= "</script>\n"; + + return $out; + } + + /** + * Returns the configuration array (global and instance specific settings are merged into one array). + * \private + * + * @param $config (array) The specific configurations to apply to editor instance. + * @param $events (array) Event listeners for editor instance. + */ + function configSettings($config = array(), $events = array()) + { + $_config = $this->config; + $_events = $this->_events; + + if (is_array($config) && !empty($config)) { + $_config = array_merge($_config, $config); + } + + if (is_array($events) && !empty($events)) { + foreach ($events as $eventName => $code) { + if (!isset($_events[$eventName])) { + $_events[$eventName] = array(); + } + if (!in_array($code, $_events[$eventName])) { + $_events[$eventName][] = $code; + } + } + } + + if (!empty($_events)) { + foreach($_events as $eventName => $handlers) { + if (empty($handlers)) { + continue; + } + else if (count($handlers) == 1) { + $_config['on'][$eventName] = '@@'.$handlers[0]; + } + else { + $_config['on'][$eventName] = '@@function (ev){'; + foreach ($handlers as $handler => $code) { + $_config['on'][$eventName] .= '('.$code.')(ev);'; + } + $_config['on'][$eventName] .= '}'; + } + } + } + + return $_config; + } + + /** + * Return global event handlers. + * \private + */ + function returnGlobalEvents() + { + static $returnedEvents; + $out = ""; + + if (!isset($returnedEvents)) { + $returnedEvents = array(); + } + + if (!empty($this->_globalEvents)) { + foreach ($this->_globalEvents as $eventName => $handlers) { + foreach ($handlers as $handler => $code) { + if (!isset($returnedEvents[$eventName])) { + $returnedEvents[$eventName] = array(); + } + // Return only new events + if (!in_array($code, $returnedEvents[$eventName])) { + $out .= ($code ? "\n" : "") . "CKEDITOR.on('". $eventName ."', $code);"; + $returnedEvents[$eventName][] = $code; + } + } + } + } + + return $out; + } + + /** + * Initializes CKEditor (executed only once). + * \private + */ + function init() + { + static $initComplete; + $out = ""; + + if (!empty($initComplete)) { + return ""; + } + + if ($this->initialized) { + $initComplete = true; + return ""; + } + + $args = ""; + $ckeditorPath = $this->ckeditorPath(); + + if (!empty($this->timestamp) && $this->timestamp != "%"."TIMESTAMP%") { + $args = '?t=' . $this->timestamp; + } + + // Skip relative paths... + if (strpos($ckeditorPath, '..') !== 0) { + $out .= $this->script("window.CKEDITOR_BASEPATH='". $ckeditorPath ."';"); + } + + $out .= "<script type=\"text/javascript\" src=\"" . $ckeditorPath . 'ckeditor.js' . $args . "\"></script>\n"; + + $extraCode = ""; + if ($this->timestamp != $this->_timestamp) { + $extraCode .= ($extraCode ? "\n" : "") . "CKEDITOR.timestamp = '". $this->timestamp ."';"; + } + if ($extraCode) { + $out .= $this->script($extraCode); + } + + $initComplete = $this->initialized = true; + + return $out; + } + + /** + * Return path to ckeditor.js. + * \private + */ + function ckeditorPath() + { + if (!empty($this->basePath)) { + return $this->basePath; + } + + /** + * The absolute pathname of the currently executing script. + * Note: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php, + * $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user. + */ + if (isset($_SERVER['SCRIPT_FILENAME'])) { + $realPath = dirname($_SERVER['SCRIPT_FILENAME']); + } + else { + /** + * realpath — Returns canonicalized absolute pathname + */ + $realPath = realpath( './' ) ; + } + + /** + * The filename of the currently executing script, relative to the document root. + * For instance, $_SERVER['PHP_SELF'] in a script at the address http://example.com/test.php/foo.bar + * would be /test.php/foo.bar. + */ + $selfPath = dirname($_SERVER['PHP_SELF']); + $file = str_replace("\\", "/", __FILE__); + + if (!$selfPath || !$realPath || !$file) { + return "/ckeditor/"; + } + + $documentRoot = substr($realPath, 0, strlen($realPath) - strlen($selfPath)); + $fileUrl = substr($file, strlen($documentRoot)); + $ckeditorUrl = str_replace("ckeditor_php5.php", "", $fileUrl); + + return $ckeditorUrl; + } + + /** + * This little function provides a basic JSON support. + * http://php.net/manual/en/function.json-encode.php + * \private + * + * @param mixed $val + * @return string + */ + function jsEncode($val) + { + if (is_null($val)) { + return 'null'; + } + if ($val === false) { + return 'false'; + } + if ($val === true) { + return 'true'; + } + if (is_scalar($val)) + { + if (is_float($val)) + { + // Always use "." for floats. + $val = str_replace(",", ".", strval($val)); + } + + // Use @@ to not use quotes when outputting string value + if (strpos($val, '@@') === 0) { + return substr($val, 2); + } + else { + // All scalars are converted to strings to avoid indeterminism. + // PHP's "1" and 1 are equal for all PHP operators, but + // JS's "1" and 1 are not. So if we pass "1" or 1 from the PHP backend, + // we should get the same result in the JS frontend (string). + // Character replacements for JSON. + static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), + array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"')); + + $val = str_replace($jsonReplaces[0], $jsonReplaces[1], $val); + + return '"' . $val . '"'; + } + } + $isList = true; + for ($i = 0, reset($val); $i < count($val); $i++, next($val)) + { + if (key($val) !== $i) + { + $isList = false; + break; + } + } + $result = array(); + if ($isList) + { + foreach ($val as $v) $result[] = $this->jsEncode($v); + return '[ ' . join(', ', $result) . ' ]'; + } + else + { + foreach ($val as $k => $v) $result[] = $this->jsEncode($k).': '.$this->jsEncode($v); + return '{ ' . join(', ', $result) . ' }'; + } + } +} diff --git a/modules_v2/ckeditor/ckeditor_php5.php b/modules_v2/ckeditor/ckeditor_php5.php new file mode 100644 index 0000000000..63098d87dc --- /dev/null +++ b/modules_v2/ckeditor/ckeditor_php5.php @@ -0,0 +1,583 @@ +<?php +/* +* Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +* For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +/** + * \brief CKEditor class that can be used to create editor + * instances in PHP pages on server side. + * @see http://ckeditor.com + * + * Sample usage: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->editor("editor1", "<p>Initial value.</p>"); + * @endcode + */ +class CKEditor +{ + /** + * The version of %CKEditor. + */ + const version = '3.5'; + /** + * A constant string unique for each release of %CKEditor. + */ + const timestamp = 'ABLC4TW'; + + /** + * URL to the %CKEditor installation directory (absolute or relative to document root). + * If not set, CKEditor will try to guess it's path. + * + * Example usage: + * @code + * $CKEditor->basePath = '/ckeditor/'; + * @endcode + */ + public $basePath; + /** + * An array that holds the global %CKEditor configuration. + * For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html + * + * Example usage: + * @code + * $CKEditor->config['height'] = 400; + * // Use @@ at the beggining of a string to ouput it without surrounding quotes. + * $CKEditor->config['width'] = '@@screen.width * 0.8'; + * @endcode + */ + public $config = array(); + /** + * A boolean variable indicating whether CKEditor has been initialized. + * Set it to true only if you have already included + * <script> tag loading ckeditor.js in your website. + */ + public $initialized = false; + /** + * Boolean variable indicating whether created code should be printed out or returned by a function. + * + * Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->returnOutput = true; + * $code = $CKEditor->editor("editor1", "<p>Initial value.</p>"); + * echo "<p>Editor 1:</p>"; + * echo $code; + * @endcode + */ + public $returnOutput = false; + /** + * An array with textarea attributes. + * + * When %CKEditor is created with the editor() method, a HTML <textarea> element is created, + * it will be displayed to anyone with JavaScript disabled or with incompatible browser. + */ + public $textareaAttributes = array( "rows" => 8, "cols" => 60 ); + /** + * A string indicating the creation date of %CKEditor. + * Do not change it unless you want to force browsers to not use previously cached version of %CKEditor. + */ + public $timestamp = "ABLC4TW"; + /** + * An array that holds event listeners. + */ + private $events = array(); + /** + * An array that holds global event listeners. + */ + private $globalEvents = array(); + + /** + * Main Constructor. + * + * @param $basePath (string) URL to the %CKEditor installation directory (optional). + */ + function __construct($basePath = null) { + if (!empty($basePath)) { + $this->basePath = $basePath; + } + } + + /** + * Creates a %CKEditor instance. + * In incompatible browsers %CKEditor will downgrade to plain HTML <textarea> element. + * + * @param $name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element). + * @param $value (string) Initial value (optional). + * @param $config (array) The specific configurations to apply to this editor instance (optional). + * @param $events (array) Event listeners for this editor instance (optional). + * + * Example usage: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->editor("field1", "<p>Initial value.</p>"); + * @endcode + * + * Advanced example: + * @code + * $CKEditor = new CKEditor(); + * $config = array(); + * $config['toolbar'] = array( + * array( 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike' ), + * array( 'Image', 'Link', 'Unlink', 'Anchor' ) + * ); + * $events['instanceReady'] = 'function (ev) { + * alert("Loaded: " + ev.editor.name); + * }'; + * $CKEditor->editor("field1", "<p>Initial value.</p>", $config, $events); + * @endcode + */ + public function editor($name, $value = "", $config = array(), $events = array()) + { + $attr = ""; + foreach ($this->textareaAttributes as $key => $val) { + $attr.= " " . $key . '="' . str_replace('"', '"', $val) . '"'; + } + $out = "<textarea name=\"" . $name . "\"" . $attr . ">" . htmlspecialchars($value) . "</textarea>\n"; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings($config, $events); + + $js = $this->returnGlobalEvents(); + if (!empty($_config)) + $js .= "CKEDITOR.replace('".$name."', ".$this->jsEncode($_config).");"; + else + $js .= "CKEDITOR.replace('".$name."');"; + + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Replaces a <textarea> with a %CKEditor instance. + * + * @param $id (string) The id or name of textarea element. + * @param $config (array) The specific configurations to apply to this editor instance (optional). + * @param $events (array) Event listeners for this editor instance (optional). + * + * Example 1: adding %CKEditor to <textarea name="article"></textarea> element: + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replace("article"); + * @endcode + */ + public function replace($id, $config = array(), $events = array()) + { + $out = ""; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings($config, $events); + + $js = $this->returnGlobalEvents(); + if (!empty($_config)) { + $js .= "CKEDITOR.replace('".$id."', ".$this->jsEncode($_config).");"; + } + else { + $js .= "CKEDITOR.replace('".$id."');"; + } + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Replace all <textarea> elements available in the document with editor instances. + * + * @param $className (string) If set, replace all textareas with class className in the page. + * + * Example 1: replace all <textarea> elements in the page. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replaceAll(); + * @endcode + * + * Example 2: replace all <textarea class="myClassName"> elements in the page. + * @code + * $CKEditor = new CKEditor(); + * $CKEditor->replaceAll( 'myClassName' ); + * @endcode + */ + public function replaceAll($className = null) + { + $out = ""; + if (!$this->initialized) { + $out .= $this->init(); + } + + $_config = $this->configSettings(); + + $js = $this->returnGlobalEvents(); + if (empty($_config)) { + if (empty($className)) { + $js .= "CKEDITOR.replaceAll();"; + } + else { + $js .= "CKEDITOR.replaceAll('".$className."');"; + } + } + else { + $classDetection = ""; + $js .= "CKEDITOR.replaceAll( function(textarea, config) {\n"; + if (!empty($className)) { + $js .= " var classRegex = new RegExp('(?:^| )' + '". $className ."' + '(?:$| )');\n"; + $js .= " if (!classRegex.test(textarea.className))\n"; + $js .= " return false;\n"; + } + $js .= " CKEDITOR.tools.extend(config, ". $this->jsEncode($_config) .", true);"; + $js .= "} );"; + + } + + $out .= $this->script($js); + + if (!$this->returnOutput) { + print $out; + $out = ""; + } + + return $out; + } + + /** + * Adds event listener. + * Events are fired by %CKEditor in various situations. + * + * @param $event (string) Event name. + * @param $javascriptCode (string) Javascript anonymous function or function name. + * + * Example usage: + * @code + * $CKEditor->addEventHandler('instanceReady', 'function (ev) { + * alert("Loaded: " + ev.editor.name); + * }'); + * @endcode + */ + public function addEventHandler($event, $javascriptCode) + { + if (!isset($this->events[$event])) { + $this->events[$event] = array(); + } + // Avoid duplicates. + if (!in_array($javascriptCode, $this->events[$event])) { + $this->events[$event][] = $javascriptCode; + } + } + + /** + * Clear registered event handlers. + * Note: this function will have no effect on already created editor instances. + * + * @param $event (string) Event name, if not set all event handlers will be removed (optional). + */ + public function clearEventHandlers($event = null) + { + if (!empty($event)) { + $this->events[$event] = array(); + } + else { + $this->events = array(); + } + } + + /** + * Adds global event listener. + * + * @param $event (string) Event name. + * @param $javascriptCode (string) Javascript anonymous function or function name. + * + * Example usage: + * @code + * $CKEditor->addGlobalEventHandler('dialogDefinition', 'function (ev) { + * alert("Loading dialog: " + ev.data.name); + * }'); + * @endcode + */ + public function addGlobalEventHandler($event, $javascriptCode) + { + if (!isset($this->globalEvents[$event])) { + $this->globalEvents[$event] = array(); + } + // Avoid duplicates. + if (!in_array($javascriptCode, $this->globalEvents[$event])) { + $this->globalEvents[$event][] = $javascriptCode; + } + } + + /** + * Clear registered global event handlers. + * Note: this function will have no effect if the event handler has been already printed/returned. + * + * @param $event (string) Event name, if not set all event handlers will be removed (optional). + */ + public function clearGlobalEventHandlers($event = null) + { + if (!empty($event)) { + $this->globalEvents[$event] = array(); + } + else { + $this->globalEvents = array(); + } + } + + /** + * Prints javascript code. + * + * @param string $js + */ + private function script($js) + { + $out = "<script type=\"text/javascript\">"; + $out .= "//<![CDATA[\n"; + $out .= $js; + $out .= "\n//]]>"; + $out .= "</script>\n"; + + return $out; + } + + /** + * Returns the configuration array (global and instance specific settings are merged into one array). + * + * @param $config (array) The specific configurations to apply to editor instance. + * @param $events (array) Event listeners for editor instance. + */ + private function configSettings($config = array(), $events = array()) + { + $_config = $this->config; + $_events = $this->events; + + if (is_array($config) && !empty($config)) { + $_config = array_merge($_config, $config); + } + + if (is_array($events) && !empty($events)) { + foreach ($events as $eventName => $code) { + if (!isset($_events[$eventName])) { + $_events[$eventName] = array(); + } + if (!in_array($code, $_events[$eventName])) { + $_events[$eventName][] = $code; + } + } + } + + if (!empty($_events)) { + foreach($_events as $eventName => $handlers) { + if (empty($handlers)) { + continue; + } + else if (count($handlers) == 1) { + $_config['on'][$eventName] = '@@'.$handlers[0]; + } + else { + $_config['on'][$eventName] = '@@function (ev){'; + foreach ($handlers as $handler => $code) { + $_config['on'][$eventName] .= '('.$code.')(ev);'; + } + $_config['on'][$eventName] .= '}'; + } + } + } + + return $_config; + } + + /** + * Return global event handlers. + */ + private function returnGlobalEvents() + { + static $returnedEvents; + $out = ""; + + if (!isset($returnedEvents)) { + $returnedEvents = array(); + } + + if (!empty($this->globalEvents)) { + foreach ($this->globalEvents as $eventName => $handlers) { + foreach ($handlers as $handler => $code) { + if (!isset($returnedEvents[$eventName])) { + $returnedEvents[$eventName] = array(); + } + // Return only new events + if (!in_array($code, $returnedEvents[$eventName])) { + $out .= ($code ? "\n" : "") . "CKEDITOR.on('". $eventName ."', $code);"; + $returnedEvents[$eventName][] = $code; + } + } + } + } + + return $out; + } + + /** + * Initializes CKEditor (executed only once). + */ + private function init() + { + static $initComplete; + $out = ""; + + if (!empty($initComplete)) { + return ""; + } + + if ($this->initialized) { + $initComplete = true; + return ""; + } + + $args = ""; + $ckeditorPath = $this->ckeditorPath(); + + if (!empty($this->timestamp) && $this->timestamp != "%"."TIMESTAMP%") { + $args = '?t=' . $this->timestamp; + } + + // Skip relative paths... + if (strpos($ckeditorPath, '..') !== 0) { + $out .= $this->script("window.CKEDITOR_BASEPATH='". $ckeditorPath ."';"); + } + + $out .= "<script type=\"text/javascript\" src=\"" . $ckeditorPath . 'ckeditor.js' . $args . "\"></script>\n"; + + $extraCode = ""; + if ($this->timestamp != self::timestamp) { + $extraCode .= ($extraCode ? "\n" : "") . "CKEDITOR.timestamp = '". $this->timestamp ."';"; + } + if ($extraCode) { + $out .= $this->script($extraCode); + } + + $initComplete = $this->initialized = true; + + return $out; + } + + /** + * Return path to ckeditor.js. + */ + private function ckeditorPath() + { + if (!empty($this->basePath)) { + return $this->basePath; + } + + /** + * The absolute pathname of the currently executing script. + * Note: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php, + * $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user. + */ + if (isset($_SERVER['SCRIPT_FILENAME'])) { + $realPath = dirname($_SERVER['SCRIPT_FILENAME']); + } + else { + /** + * realpath — Returns canonicalized absolute pathname + */ + $realPath = realpath( './' ) ; + } + + /** + * The filename of the currently executing script, relative to the document root. + * For instance, $_SERVER['PHP_SELF'] in a script at the address http://example.com/test.php/foo.bar + * would be /test.php/foo.bar. + */ + $selfPath = dirname($_SERVER['PHP_SELF']); + $file = str_replace("\\", "/", __FILE__); + + if (!$selfPath || !$realPath || !$file) { + return "/ckeditor/"; + } + + $documentRoot = substr($realPath, 0, strlen($realPath) - strlen($selfPath)); + $fileUrl = substr($file, strlen($documentRoot)); + $ckeditorUrl = str_replace("ckeditor_php5.php", "", $fileUrl); + + return $ckeditorUrl; + } + + /** + * This little function provides a basic JSON support. + * http://php.net/manual/en/function.json-encode.php + * + * @param mixed $val + * @return string + */ + private function jsEncode($val) + { + if (is_null($val)) { + return 'null'; + } + if ($val === false) { + return 'false'; + } + if ($val === true) { + return 'true'; + } + if (is_scalar($val)) + { + if (is_float($val)) + { + // Always use "." for floats. + $val = str_replace(",", ".", strval($val)); + } + + // Use @@ to not use quotes when outputting string value + if (strpos($val, '@@') === 0) { + return substr($val, 2); + } + else { + // All scalars are converted to strings to avoid indeterminism. + // PHP's "1" and 1 are equal for all PHP operators, but + // JS's "1" and 1 are not. So if we pass "1" or 1 from the PHP backend, + // we should get the same result in the JS frontend (string). + // Character replacements for JSON. + static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), + array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"')); + + $val = str_replace($jsonReplaces[0], $jsonReplaces[1], $val); + + return '"' . $val . '"'; + } + } + $isList = true; + for ($i = 0, reset($val); $i < count($val); $i++, next($val)) + { + if (key($val) !== $i) + { + $isList = false; + break; + } + } + $result = array(); + if ($isList) + { + foreach ($val as $v) $result[] = $this->jsEncode($v); + return '[ ' . join(', ', $result) . ' ]'; + } + else + { + foreach ($val as $k => $v) $result[] = $this->jsEncode($k).': '.$this->jsEncode($v); + return '{ ' . join(', ', $result) . ' }'; + } + } +} diff --git a/modules_v2/ckeditor/ckeditor_source.js b/modules_v2/ckeditor/ckeditor_source.js new file mode 100644 index 0000000000..b360ddf80b --- /dev/null +++ b/modules_v2/ckeditor/ckeditor_source.js @@ -0,0 +1,25 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+// Compressed version of core/ckeditor_base.js. See original for instructions.
+/*jsl:ignore*/
+if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.5',revision:'6260',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
+/*jsl:end*/
+
+// Uncomment the following line to have a new timestamp generated for each
+// request, having clear cache load of the editor code.
+// CKEDITOR.timestamp = ( new Date() ).valueOf();
+
+if ( CKEDITOR.loader )
+ CKEDITOR.loader.load( 'core/ckeditor' );
+else
+{
+ // Set the script name to be loaded by the loader.
+ CKEDITOR._autoLoad = 'core/ckeditor';
+
+ // Include the loader script.
+ document.write(
+ '<script type="text/javascript" src="' + CKEDITOR.getUrl( '_source/core/loader.js' ) + '"></script>' );
+}
diff --git a/modules_v2/ckeditor/config.js b/modules_v2/ckeditor/config.js new file mode 100644 index 0000000000..38b0045902 --- /dev/null +++ b/modules_v2/ckeditor/config.js @@ -0,0 +1,11 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.editorConfig = function( config )
+{
+ // Define changes to default configuration here. For example:
+ // config.language = 'fr';
+ // config.uiColor = '#AADC6E';
+};
diff --git a/modules_v2/ckeditor/contents.css b/modules_v2/ckeditor/contents.css new file mode 100644 index 0000000000..b4e28fece5 --- /dev/null +++ b/modules_v2/ckeditor/contents.css @@ -0,0 +1,39 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+body
+{
+ /* Font */
+ font-family: Arial, Verdana, sans-serif;
+ font-size: 12px;
+
+ /* Text color */
+ color: #222;
+
+ /* Remove the background color to make it transparent */
+ background-color: #fff;
+}
+
+html
+{
+ /* #3658: [IE6] Editor document has horizontal scrollbar on long lines
+ To prevent this misbehavior, we show the scrollbar always */
+ _overflow-y: scroll;
+ /* #6341: The text cursor must be set on the editor area. */
+ cursor: text;
+ /* #6632: Avoid having "text" shape of cursor in IE7 scrollbars.*/
+ *cursor:auto;
+}
+
+img:-moz-broken
+{
+ -moz-force-broken-image-icon : 1;
+ width : 24px;
+ height : 24px;
+}
+img, input, textarea
+{
+ cursor: default;
+}
diff --git a/modules_v2/ckeditor/htaccess.txt b/modules_v2/ckeditor/htaccess.txt new file mode 100644 index 0000000000..ed1d794fe4 --- /dev/null +++ b/modules_v2/ckeditor/htaccess.txt @@ -0,0 +1,24 @@ +#
+# Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+# For licensing, see LICENSE.html or http://ckeditor.com/license
+#
+
+#
+# On some specific Linux installations you could face problems with Firefox.
+# It could give you errors when loading the editor saying that some illegal
+# characters were found (three strange chars in the beginning of the file).
+# This could happen if you map the .js or .css files to PHP, for example.
+#
+# Those characters are the Byte Order Mask (BOM) of the Unicode encoded files.
+# All FCKeditor files are Unicode encoded.
+#
+
+AddType application/x-javascript .js
+AddType text/css .css
+
+#
+# If PHP is mapped to handle XML files, you could have some issues. The
+# following will disable it.
+#
+
+AddType text/xml .xml
diff --git a/modules_v2/ckeditor/images/spacer.gif b/modules_v2/ckeditor/images/spacer.gif Binary files differnew file mode 100644 index 0000000000..5bfd67a2d6 --- /dev/null +++ b/modules_v2/ckeditor/images/spacer.gif diff --git a/modules_v2/ckeditor/lang/_languages.js b/modules_v2/ckeditor/lang/_languages.js new file mode 100644 index 0000000000..bca12f89c1 --- /dev/null +++ b/modules_v2/ckeditor/lang/_languages.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+var CKEDITOR_LANGS=(function(){var b={af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',cy:'Welsh',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-gb':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',is:'Icelandic',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},c=[];for(var d in b)c.push({code:d,name:b[d]});c.sort(function(e,f){return e.name<f.name?-1:1;});return c;})();
diff --git a/modules_v2/ckeditor/lang/_translationstatus.txt b/modules_v2/ckeditor/lang/_translationstatus.txt new file mode 100644 index 0000000000..b9088c4985 --- /dev/null +++ b/modules_v2/ckeditor/lang/_translationstatus.txt @@ -0,0 +1,60 @@ +Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+
+af.js Found: 275 Missing: 246
+ar.js Found: 435 Missing: 86
+bg.js Found: 268 Missing: 253
+bn.js Found: 269 Missing: 252
+bs.js Found: 175 Missing: 346
+ca.js Found: 469 Missing: 52
+cs.js Found: 395 Missing: 126
+cy.js Found: 435 Missing: 86
+da.js Found: 388 Missing: 133
+de.js Found: 510 Missing: 11
+el.js Found: 274 Missing: 247
+en-au.js Found: 345 Missing: 176
+en-ca.js Found: 345 Missing: 176
+en-gb.js Found: 346 Missing: 175
+eo.js Found: 247 Missing: 274
+es.js Found: 513 Missing: 8
+et.js Found: 289 Missing: 232
+eu.js Found: 387 Missing: 134
+fa.js Found: 290 Missing: 231
+fi.js Found: 513 Missing: 8
+fo.js Found: 402 Missing: 119
+fr-ca.js Found: 289 Missing: 232
+fr.js Found: 387 Missing: 134
+gl.js Found: 271 Missing: 250
+gu.js Found: 288 Missing: 233
+he.js Found: 521 Missing: 0
+hi.js Found: 290 Missing: 231
+hr.js Found: 388 Missing: 133
+hu.js Found: 512 Missing: 9
+is.js Found: 295 Missing: 226
+it.js Found: 388 Missing: 133
+ja.js Found: 471 Missing: 50
+km.js Found: 263 Missing: 258
+ko.js Found: 281 Missing: 240
+lt.js Found: 294 Missing: 227
+lv.js Found: 271 Missing: 250
+mn.js Found: 288 Missing: 233
+ms.js Found: 253 Missing: 268
+nb.js Found: 452 Missing: 69
+nl.js Found: 513 Missing: 8
+no.js Found: 452 Missing: 69
+pl.js Found: 395 Missing: 126
+pt-br.js Found: 506 Missing: 15
+pt.js Found: 270 Missing: 251
+ro.js Found: 289 Missing: 232
+ru.js Found: 451 Missing: 70
+sk.js Found: 290 Missing: 231
+sl.js Found: 394 Missing: 127
+sr-latn.js Found: 264 Missing: 257
+sr.js Found: 263 Missing: 258
+sv.js Found: 287 Missing: 234
+th.js Found: 275 Missing: 246
+tr.js Found: 506 Missing: 15
+uk.js Found: 513 Missing: 8
+vi.js Found: 463 Missing: 58
+zh-cn.js Found: 518 Missing: 3
+zh.js Found: 388 Missing: 133
diff --git a/modules_v2/ckeditor/lang/af.js b/modules_v2/ckeditor/lang/af.js new file mode 100644 index 0000000000..5f0d4e7693 --- /dev/null +++ b/modules_v2/ckeditor/lang/af.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.af={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Source',newPage:'Nuwe Bladsy',save:'Bewaar',preview:'Voorskou',cut:'Uitsny ',copy:'Kopieer',paste:'Byvoeg',print:'Druk',underline:'Onderstreep',bold:'Vet',italic:'Skuins',selectAll:'Selekteer alles',removeFormat:'Formaat verweider',strike:'Gestreik',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Horisontale lyn byvoeg',pagebreak:'Bladsy breek byvoeg',pagebreakAlt:'Page Break',unlink:'Skakel verweider',undo:'Ont-skep',redo:'Her-skep',common:{browseServer:'Server deurblaai',url:'URL',protocol:'Protokol',upload:'Oplaai',uploadSubmit:'Stuur dit na die Server',image:'Beeld',flash:'Flash',form:'Form',checkbox:'HakBox',radio:'PuntBox',textField:'Byvoegbare karakter strook',textarea:'Byvoegbare karakter area',hiddenField:'Blinde strook',button:'Knop',select:'Opklapbare keuse strook',imageButton:'Beeld knop',notSet:'<geen instelling>',id:'Id',name:'Naam',langDir:'Taal rigting',langDirLtr:'Links na regs (LTR)',langDirRtl:'Regs na links (RTL)',langCode:'Taal kode',longDescr:'Lang beskreiwing URL',cssClass:'Skakel Tiepe',advisoryTitle:'Voorbeveelings Titel',cssStyle:'Styl',ok:'OK',cancel:'Kanseleer',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Ingewikkeld',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Weidte',height:'Hoogde',align:'Paradeer',alignLeft:'Links',alignRight:'Regs',alignCenter:'Middel',alignTop:'Bo',alignMiddle:'Middel',alignBottom:'Onder',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Spesiaale Karakter byvoeg',title:'Kies spesiale karakter',options:'Special Character Options'},link:{toolbar:'Skakel byvoeg/verander',other:'<ander>',menu:'Verander skakel',title:'Skakel',info:'Skakel informasie',target:'Mikpunt',upload:'Oplaai',advanced:'Ingewikkeld',type:'Skakel soort',toUrl:'URL',toAnchor:'Skakel na plekhouers in text',toEmail:'E-Mail',targetFrame:'<raam>',targetPopup:'<popup venster>',targetFrameName:'Mikpunt Venster Naam',targetPopupName:'Popup Venster Naam',popupFeatures:'Popup Venster Geaartheid',popupResizable:'Resizable',popupStatusBar:'Status Balk',popupLocationBar:'Adres Balk',popupToolbar:'Gereedskap Balk',popupMenuBar:'Menu Balk',popupFullScreen:'Voll Skerm (IE)',popupScrollBars:'Gleibalkstuk',popupDependent:'Afhanklik (Netscape)',popupLeft:'Links Posisie',popupTop:'Bo Posisie',id:'Id',langDir:'Taal rigting',langDirLTR:'Links na regs (LTR)',langDirRTL:'Regs na links (RTL)',acccessKey:'Toegang sleutel',name:'Naam',langCode:'Taal rigting',tabIndex:'Tab Index',advisoryTitle:'Voorbeveelings Titel',advisoryContentType:'Voorbeveelings inhoud soort',cssClasses:'Skakel Tiepe',charset:'Geskakelde voorbeeld karakterstel',styles:'Styl',selectAnchor:"Kies 'n plekhouer",anchorName:'Volgens plekhouer naam',anchorId:'Volgens element Id',emailAddress:'E-Mail Adres',emailSubject:'Boodskap Opskrif',emailBody:'Boodskap Inhoud',noAnchors:'(Geen plekhouers beskikbaar in dokument}',noUrl:'Voeg asseblief die URL in',noEmail:'Voeg asseblief die e-mail adres in'},anchor:{toolbar:'Plekhouer byvoeg/verander',menu:'Plekhouer eienskappe',title:'Plekhouer eienskappe',name:'Plekhouer Naam',errorName:'Voltooi die plekhouer naam asseblief'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Vind',replace:'Vervang',findWhat:'Soek wat:',replaceWith:'Vervang met:',notFoundMsg:'Die gespesifiseerde karakters word nie gevind nie.',matchCase:'Vergelyk karakter skryfweise',matchWord:'Vergelyk komplete woord',matchCyclic:'Match cyclic',replaceAll:'Vervang alles',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabel',title:'Tabel eienskappe',menu:'Tabel eienskappe',deleteTable:'Tabel verweider',rows:'Reie',columns:'Kolome',border:'Kant groote',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Cell spasieering',cellPad:'Cell buffer',caption:'Beskreiwing',summary:'Opsomming',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Cell verweider',merge:'Cell verenig',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Ry',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Ry verweider'},column:{menu:'Kolom',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Kolom verweider'}},button:{title:'Knop eienskappe',text:'Karakters (Waarde)',type:'Soort',typeBtn:'Knop',typeSbm:'Indien',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'HakBox eienskappe',radioTitle:'PuntBox eienskappe',value:'Waarde',selected:'Uitgekies'},form:{title:'Form eienskappe',menu:'Form eienskappe',action:'Aksie',method:'Metode',encoding:'Encoding'},select:{title:'Opklapbare keuse strook eienskappe',selectInfo:'Info',opAvail:'Beskikbare Opsies',value:'Waarde',size:'Grote',lines:'lyne',chkMulti:'Laat meerere keuses toe',opText:'Karakters',opValue:'Waarde',btnAdd:'Byvoeg',btnModify:'Verander',btnUp:'Op',btnDown:'Af',btnSetValue:'Stel as uitgekiesde waarde',btnDelete:'Verweider'},textarea:{title:'Karakter area eienskappe',cols:'Kolom',rows:'Reie'},textfield:{title:'Karakter strook eienskappe',name:'Naam',value:'Waarde',charWidth:'Karakter weite',maxChars:'Maximale karakters',type:'Soort',typeText:'Karakters',typePass:'Wagwoord'},hidden:{title:'Blinde strook eienskappe',name:'Naam',value:'Waarde'},image:{title:'Beeld eienskappe',titleButton:'Beeld knop eienskappe',menu:'Beeld eienskappe',infoTab:'Beeld informasie',btnUpload:'Stuur dit na die Server',upload:'Uplaai',alt:'Alternatiewe beskrywing',lockRatio:'Behou preporsie',unlockRatio:'Unlock Ratio',resetSize:'Herstel groote',border:'Kant',hSpace:'HSpasie',vSpace:'VSpasie',alertUrl:'Voeg asseblief Beeld URL in.',linkTab:'Skakel',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash eienskappe',propertiesTab:'Properties',title:'Flash eienskappe',chkPlay:'Automaties Speel',chkLoop:'Herhaling',chkMenu:'Laat Flash Menu toe',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Wys alles',scaleNoBorder:'Geen kante',scaleFit:'Presiese pas',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Onder',alignAbsMiddle:'Abs Middel',alignBaseline:'Baseline',alignTextTop:'Text Bo',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Agtergrond kleur',hSpace:'HSpasie',vSpace:'VSpasie',validateSrc:'Voeg asseblief die URL in',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Spelling nagaan',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nie in woordeboek nie',changeTo:'Verander na',btnIgnore:'Ignoreer',btnIgnoreAll:'Ignoreer na-volgende',btnReplace:'Vervang',btnReplaceAll:'vervang na-volgende',btnUndo:'Ont-skep',noSuggestions:'- Geen voorstel -',progress:'Spelling word beproef...',noMispell:'Spellproef kompleet: Geen foute',noChanges:'Spellproef kompleet: Geen woord veranderings',oneChange:'Spellproef kompleet: Een woord verander',manyChanges:'Spellproef kompleet: %1 woorde verander',ieSpellDownload:'Geen Spellproefer geinstaleer nie. Wil U dit aflaai?'},smiley:{toolbar:'Smiley',title:'Voeg Smiley by',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Genommerde lys',bulletedlist:'Gepunkte lys',indent:'Paradeering verleng',outdent:'Paradeering verkort',justify:{left:'Links rig',center:'Rig Middel',right:'Regs rig',block:'Blok paradeer'},blockquote:'Block Quote',clipboard:{title:'Byvoeg',cutError:'U browser se sekuriteit instelling behinder die uitsny aksie. Gebruik asseblief die sleutel kombenasie(Ctrl/Cmd+X).',copyError:'U browser se sekuriteit instelling behinder die kopieerings aksie. Gebruik asseblief die sleutel kombenasie(Ctrl/Cmd+C).',pasteMsg:'Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Van Word af byvoeg',title:'Van Word af byvoeg',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Voeg slegs karakters by',title:'Voeg slegs karakters by'},templates:{button:'Templates',title:'Inhoud Templates',options:'Template Options',insertOption:'Vervang bestaande inhoud',selectPromptMsg:'Kies die template om te gebruik in die editor<br>(Inhoud word vervang!):',emptyListMsg:'(Geen templates gedefinieerd)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styl',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Karakter formaat',panelTitle:'Karakter formaat',tag_p:'Normaal',tag_pre:'Geformateerd',tag_address:'Adres',tag_h1:'Opskrif 1',tag_h2:'Opskrif 2',tag_h3:'Opskrif 3',tag_h4:'Opskrif 4',tag_h5:'Opskrif 5',tag_h6:'Opskrif 6',tag_div:'Normaal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Karakters',voiceLabel:'Font',panelTitle:'Karakters'},fontSize:{label:'Karakter grote',voiceLabel:'Font Size',panelTitle:'Karakter grote'},colorButton:{textColorTitle:'Karakter kleur',bgColorTitle:'Agtergrond kleur',panelTitle:'Colors',auto:'Automaties',more:'Meer Kleure...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/ar.js b/modules_v2/ckeditor/lang/ar.js new file mode 100644 index 0000000000..3109cbf0a1 --- /dev/null +++ b/modules_v2/ckeditor/lang/ar.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.ar={dir:'rtl',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'المصدر',newPage:'صفحة جديدة',save:'حفظ',preview:'معاينة الصفحة',cut:'قص',copy:'نسخ',paste:'لصق',print:'طباعة',underline:'تسطير',bold:'غامق',italic:'مائل',selectAll:'تحديد الكل',removeFormat:'إزالة التنسيقات',strike:'يتوسطه خط',subscript:'منخفض',superscript:'مرتفع',horizontalrule:'خط فاصل',pagebreak:'إدخال صفحة جديدة',pagebreakAlt:'Page Break',unlink:'إزالة رابط',undo:'تراجع',redo:'إعادة',common:{browseServer:'تصفح',url:'الرابط',protocol:'البروتوكول',upload:'رفع',uploadSubmit:'أرسل',image:'صورة',flash:'فلاش',form:'نموذج',checkbox:'خانة إختيار',radio:'زر اختيار',textField:'مربع نص',textarea:'مساحة نصية',hiddenField:'إدراج حقل خفي',button:'زر ضغط',select:'اختار',imageButton:'زر صورة',notSet:'<بدون تحديد>',id:'الرقم',name:'الاسم',langDir:'إتجاه النص',langDirLtr:'اليسار لليمين (LTR)',langDirRtl:'اليمين لليسار (RTL)',langCode:'رمز اللغة',longDescr:'الوصف التفصيلى',cssClass:'فئات التنسيق',advisoryTitle:'عنوان التقرير',cssStyle:'نمط',ok:'موافق',cancel:'إلغاء الأمر',close:'Close',preview:'Preview',generalTab:'عام',advancedTab:'متقدم',validateNumberFailed:'لايوجد نتيجة',confirmNewPage:'ستفقد أي متغييرات اذا لم تقم بحفظها اولا. هل أنت متأكد أنك تريد صفحة جديدة؟',confirmCancel:'بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'العرض',height:'الإرتفاع',align:'محاذاة',alignLeft:'يسار',alignRight:'يمين',alignCenter:'وسط',alignTop:'أعلى',alignMiddle:'وسط',alignBottom:'أسفل',invalidHeight:'الارتفاع يجب أن يكون عدداً.',invalidWidth:'العرض يجب أن يكون عدداً.',unavailable:'%1<span class="cke_accessibility">, غير متاح</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'إدراج خاص.ِ',title:'اختر الخواص',options:'Special Character Options'},link:{toolbar:'رابط',other:'<أخرى>',menu:'تحرير رابط',title:'إرتباط تشعبي',info:'معلومات الرابط',target:'هدف الرابط',upload:'رفع',advanced:'متقدم',type:'نوع الربط',toUrl:'URL',toAnchor:'مكان في هذا المستند',toEmail:'بريد إلكتروني',targetFrame:'<إطار>',targetPopup:'<نافذة منبثقة>',targetFrameName:'اسم الإطار المستهدف',targetPopupName:'اسم النافذة المنبثقة',popupFeatures:'خصائص النافذة المنبثقة',popupResizable:'قابلة التشكيل',popupStatusBar:'شريط الحالة',popupLocationBar:'شريط العنوان',popupToolbar:'شريط الأدوات',popupMenuBar:'القوائم الرئيسية',popupFullScreen:'ملئ الشاشة (IE)',popupScrollBars:'أشرطة التمرير',popupDependent:'تابع (Netscape)',popupLeft:'التمركز لليسار',popupTop:'التمركز للأعلى',id:'هوية',langDir:'إتجاه النص',langDirLTR:'اليسار لليمين (LTR)',langDirRTL:'اليمين لليسار (RTL)',acccessKey:'مفاتيح الإختصار',name:'الاسم',langCode:'كود النص',tabIndex:'الترتيب',advisoryTitle:'عنوان التقرير',advisoryContentType:'نوع التقرير',cssClasses:'فئات التنسيق',charset:'ترميز المادة المطلوبة',styles:'نمط',selectAnchor:'اختر علامة مرجعية',anchorName:'حسب الاسم',anchorId:'حسب رقم العنصر',emailAddress:'عنوان البريد إلكتروني',emailSubject:'موضوع الرسالة',emailBody:'محتوى الرسالة',noAnchors:'(لا توجد علامات مرجعية في هذا المستند)',noUrl:'من فضلك أدخل عنوان الموقع الذي يشير إليه الرابط',noEmail:'من فضلك أدخل عنوان البريد الإلكتروني'},anchor:{toolbar:'إشارة مرجعية',menu:'تحرير الإشارة المرجعية',title:'خصائص الإشارة المرجعية',name:'اسم الإشارة المرجعية',errorName:'الرجاء كتابة اسم الإشارة المرجعية'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'بحث واستبدال',find:'بحث',replace:'إستبدال',findWhat:'البحث بـ:',replaceWith:'إستبدال بـ:',notFoundMsg:'لم يتم العثور على النص المحدد.',matchCase:'مطابقة حالة الأحرف',matchWord:'مطابقة بالكامل',matchCyclic:'مطابقة دورية',replaceAll:'إستبدال الكل',replaceSuccessMsg:'تم استبدال 1% من الحالات '},table:{toolbar:'جدول',title:'خصائص الجدول',menu:'خصائص الجدول',deleteTable:'حذف الجدول',rows:'صفوف',columns:'أعمدة',border:'الحدود',widthPx:'بكسل',widthPc:'بالمئة',widthUnit:'width unit',cellSpace:'تباعد الخلايا',cellPad:'المسافة البادئة',caption:'الوصف',summary:'الخلاصة',headers:'العناوين',headersNone:'بدون',headersColumn:'العمود الأول',headersRow:'الصف الأول',headersBoth:'كلاهما',invalidRows:'عدد الصفوف يجب أن يكون عدداً أكبر من صفر.',invalidCols:'عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.',invalidBorder:'حجم الحد يجب أن يكون عدداً.',invalidWidth:'عرض الجدول يجب أن يكون عدداً.',invalidHeight:'ارتفاع الجدول يجب أن يكون عدداً.',invalidCellSpacing:'المسافة بين الخلايا يجب أن تكون عدداً.',invalidCellPadding:'المسافة البادئة يجب أن تكون عدداً',cell:{menu:'خلية',insertBefore:'إدراج خلية قبل',insertAfter:'إدراج خلية بعد',deleteCell:'حذف خلية',merge:'دمج خلايا',mergeRight:'دمج لليمين',mergeDown:'دمج للأسفل',splitHorizontal:'تقسيم الخلية أفقياً',splitVertical:'تقسيم الخلية عمودياً',title:'خصائص الخلية',cellType:'نوع الخلية',rowSpan:'امتداد الصفوف',colSpan:'امتداد الأعمدة',wordWrap:'التفاف النص',hAlign:'محاذاة أفقية',vAlign:'محاذاة رأسية',alignBaseline:'خط القاعدة',bgColor:'لون الخلفية',borderColor:'لون الحدود',data:'بيانات',header:'عنوان',yes:'نعم',no:'لا',invalidWidth:'عرض الخلية يجب أن يكون عدداً.',invalidHeight:'ارتفاع الخلية يجب أن يكون عدداً.',invalidRowSpan:'امتداد الصفوف يجب أن يكون عدداً صحيحاً.',invalidColSpan:'امتداد الأعمدة يجب أن يكون عدداً صحيحاً.',chooseColor:'اختر'},row:{menu:'صف',insertBefore:'إدراج صف قبل',insertAfter:'إدراج صف بعد',deleteRow:'حذف صفوف'},column:{menu:'عمود',insertBefore:'إدراج عمود قبل',insertAfter:'إدراج عمود بعد',deleteColumn:'حذف أعمدة'}},button:{title:'خصائص زر الضغط',text:'القيمة/التسمية',type:'نوع الزر',typeBtn:'زر',typeSbm:'إرسال',typeRst:'إعادة تعيين'},checkboxAndRadio:{checkboxTitle:'خصائص خانة الإختيار',radioTitle:'خصائص زر الخيار',value:'القيمة',selected:'محدد'},form:{title:'خصائص النموذج',menu:'خصائص النموذج',action:'اسم الملف',method:'الأسلوب',encoding:'تشفير'},select:{title:'خصائص اختيار الحقل',selectInfo:'اختار معلومات',opAvail:'الخيارات المتاحة',value:'القيمة',size:'الحجم',lines:'الأسطر',chkMulti:'السماح بتحديدات متعددة',opText:'النص',opValue:'القيمة',btnAdd:'إضافة',btnModify:'تعديل',btnUp:'أعلى',btnDown:'أسفل',btnSetValue:'إجعلها محددة',btnDelete:'إزالة'},textarea:{title:'خصائص مساحة النص',cols:'الأعمدة',rows:'الصفوف'},textfield:{title:'خصائص مربع النص',name:'الاسم',value:'القيمة',charWidth:'عرض السمات',maxChars:'اقصى عدد للسمات',type:'نوع المحتوى',typeText:'نص',typePass:'كلمة مرور'},hidden:{title:'خصائص الحقل المخفي',name:'الاسم',value:'القيمة'},image:{title:'خصائص الصورة',titleButton:'خصائص زر الصورة',menu:'خصائص الصورة',infoTab:'معلومات الصورة',btnUpload:'أرسلها للخادم',upload:'رفع',alt:'عنوان الصورة',lockRatio:'تناسق الحجم',unlockRatio:'Unlock Ratio',resetSize:'إستعادة الحجم الأصلي',border:'سمك الحدود',hSpace:'تباعد أفقي',vSpace:'تباعد عمودي',alertUrl:'فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.',linkTab:'الرابط',button2Img:'هل تريد تحويل زر الصورة المختار إلى صورة بسيطة؟',img2Button:'هل تريد تحويل الصورة المختارة إلى زر صورة؟',urlMissing:'عنوان مصدر الصورة مفقود',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'خصائص الفلاش',propertiesTab:'الخصائص',title:'خصائص فيلم الفلاش',chkPlay:'تشغيل تلقائي',chkLoop:'تكرار',chkMenu:'تمكين قائمة فيلم الفلاش',chkFull:'ملء الشاشة',scale:'الحجم',scaleAll:'إظهار الكل',scaleNoBorder:'بلا حدود',scaleFit:'ضبط تام',access:'دخول النص البرمجي',accessAlways:'دائماً',accessSameDomain:'نفس النطاق',accessNever:'مطلقاً',alignAbsBottom:'أسفل النص',alignAbsMiddle:'وسط السطر',alignBaseline:'على السطر',alignTextTop:'أعلى النص',quality:'جودة',qualityBest:'أفضل',qualityHigh:'عالية',qualityAutoHigh:'عالية تلقائياً',qualityMedium:'متوسطة',qualityAutoLow:'منخفضة تلقائياً',qualityLow:'منخفضة',windowModeWindow:'نافذة',windowModeOpaque:'غير شفاف',windowModeTransparent:'شفاف',windowMode:'وضع النافذة',flashvars:'متغيرات الفلاش',bgcolor:'لون الخلفية',hSpace:'تباعد أفقي',vSpace:'تباعد عمودي',validateSrc:'فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط',validateHSpace:'HSpace يجب أن يكون عدداً.',validateVSpace:'VSpace يجب أن يكون عدداً.'},spellCheck:{toolbar:'تدقيق إملائي',title:'التدقيق الإملائي',notAvailable:'عفواً، ولكن هذه الخدمة غير متاحة الان',errorLoading:'خطأ في تحميل تطبيق خدمة الاستضافة: %s.',notInDic:'ليست في القاموس',changeTo:'التغيير إلى',btnIgnore:'تجاهل',btnIgnoreAll:'تجاهل الكل',btnReplace:'تغيير',btnReplaceAll:'تغيير الكل',btnUndo:'تراجع',noSuggestions:'- لا توجد إقتراحات -',progress:'جاري التدقيق الاملائى',noMispell:'تم التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية',noChanges:'تم التدقيق الإملائي: لم يتم تغيير أي كلمة',oneChange:'تم التدقيق الإملائي: تم تغيير كلمة واحدة فقط',manyChanges:'تم إكمال التدقيق الإملائي: تم تغيير %1 من كلمات',ieSpellDownload:'المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟'},smiley:{toolbar:'ابتسامات',title:'إدراج ابتسامات',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'عنصر 1%'},numberedlist:'ادخال/حذف تعداد رقمي',bulletedlist:'ادخال/حذف تعداد نقطي',indent:'زيادة المسافة البادئة',outdent:'إنقاص المسافة البادئة',justify:{left:'محاذاة إلى اليسار',center:'توسيط',right:'محاذاة إلى اليمين',block:'ضبط'},blockquote:'اقتباس',clipboard:{title:'لصق',cutError:'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).',copyError:'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).',pasteMsg:'الصق داخل الصندوق بإستخدام زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر <STRONG>موافق</STRONG>.',securityMsg:'نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذلك يجب عليك لصق المحتوى مرة أخرى في هذه النافذة.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟',toolbar:'لصق من وورد',title:'لصق من وورد',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'لصق كنص بسيط',title:'لصق كنص بسيط'},templates:{button:'القوالب',title:'قوالب المحتوى',options:'Template Options',insertOption:'استبدال المحتوى',selectPromptMsg:'اختر القالب الذي تود وضعه في المحرر',emptyListMsg:'(لم يتم تعريف أي قالب)'},showBlocks:'مخطط تفصيلي',stylesCombo:{label:'أنماط',panelTitle:'Formatting Styles',panelTitle1:'أنماط الفقرة',panelTitle2:'أنماط مضمنة',panelTitle3:'أنماط الكائن'},format:{label:'تنسيق',panelTitle:'تنسيق الفقرة',tag_p:'عادي',tag_pre:'منسّق',tag_address:'عنوان',tag_h1:'العنوان 1',tag_h2:'العنوان 2',tag_h3:'العنوان 3',tag_h4:'العنوان 4',tag_h5:'العنوان 5',tag_h6:'العنوان 6',tag_div:'عادي (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'خط',voiceLabel:'حجم الخط',panelTitle:'حجم الخط'},fontSize:{label:'حجم الخط',voiceLabel:'حجم الخط',panelTitle:'حجم الخط'},colorButton:{textColorTitle:'لون النص',bgColorTitle:'لون الخلفية',panelTitle:'Colors',auto:'تلقائي',more:'ألوان إضافية...'},colors:{'000':'أسود',800000:'كستنائي','8B4513':'بني فاتح','2F4F4F':'رمادي أردوازي غامق','008080':'أزرق مخضر','000080':'أزرق داكن','4B0082':'كحلي',696969:'رمادي داكن',B22222:'طوبي',A52A2A:'بني',DAA520:'ذهبي داكن','006400':'أخضر داكن','40E0D0':'فيروزي','0000CD':'أزرق متوسط',800080:'بنفسجي غامق',808080:'رمادي',F00:'أحمر',FF8C00:'برتقالي داكن',FFD700:'ذهبي','008000':'أخضر','0FF':'تركواز','00F':'أزرق',EE82EE:'بنفسجي',A9A9A9:'رمادي شاحب',FFA07A:'برتقالي وردي',FFA500:'برتقالي',FFFF00:'أصفر','00FF00':'ليموني',AFEEEE:'فيروزي شاحب',ADD8E6:'أزرق فاتح',DDA0DD:'بنفسجي فاتح',D3D3D3:'رمادي فاتح',FFF0F5:'وردي فاتح',FAEBD7:'أبيض عتيق',FFFFE0:'أصفر فاتح',F0FFF0:'أبيض مائل للأخضر',F0FFFF:'سماوي',F0F8FF:'لبني',E6E6FA:'أرجواني',FFF:'أبيض'},scayt:{title:'تدقيق إملائي أثناء الكتابة',opera_title:'Not supported by Opera',enable:'تفعيل SCAYT',disable:'تعطيل SCAYT',about:'عن SCAYT',toggle:'تثبيت SCAYT',options:'خيارات',langs:'لغات',moreSuggestions:'المزيد من المقترحات',ignore:'تجاهل',ignoreAll:'تجاهل الكل',addWord:'إضافة كلمة',emptyDic:'اسم القاموس يجب ألا يكون فارغاً.',optionsTab:'خيارات',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'لغات',dictionariesTab:'قواميس',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'عن'},about:{title:'عن CKEditor',dlgTitle:'عن CKEditor',moreInfo:'للحصول على معلومات الترخيص ، يرجى زيارة موقعنا على شبكة الانترنت:',copy:'حقوق النشر © $1. جميع الحقوق محفوظة.'},maximize:'تكبير',minimize:'تصغير',fakeobjects:{anchor:'إرساء',flash:'رسم متحرك بالفلاش',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'كائن غير معروف'},resize:'اسحب لتغيير الحجم',colordialog:{title:'اختر لون',options:'Color Options',highlight:'إلقاء الضوء',selected:'مُختار',clear:'مسح'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/bg.js b/modules_v2/ckeditor/lang/bg.js new file mode 100644 index 0000000000..71903744a0 --- /dev/null +++ b/modules_v2/ckeditor/lang/bg.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.bg={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Код',newPage:'Нова страница',save:'Запази',preview:'Предварителен изглед',cut:'Изрежи',copy:'Запамети',paste:'Вмъкни',print:'Печат',underline:'Подчертан',bold:'Удебелен',italic:'Курсив',selectAll:'Селектирай всичко',removeFormat:'Изтрий форматирането',strike:'Зачертан',subscript:'Индекс за база',superscript:'Индекс за степен',horizontalrule:'Вмъкни хоризонтална линия',pagebreak:'Вмъкни нов ред',pagebreakAlt:'Page Break',unlink:'Изтрий връзка',undo:'Отмени',redo:'Повтори',common:{browseServer:'Разгледай сървъра',url:'Пълен път (URL)',protocol:'Протокол',upload:'Качи',uploadSubmit:'Прати към сървъра',image:'Изображение',flash:'Flash',form:'Формуляр',checkbox:'Поле за отметка',radio:'Поле за опция',textField:'Текстово поле',textarea:'Текстова област',hiddenField:'Скрито поле',button:'Бутон',select:'Падащо меню с опции',imageButton:'Бутон-изображение',notSet:'<не е настроен>',id:'Идентификатор',name:'Име',langDir:'посока на речта',langDirLtr:'От ляво на дясно',langDirRtl:'От дясно на ляво',langCode:'Код на езика',longDescr:'Описание на връзката',cssClass:'Клас от стиловите таблици',advisoryTitle:'Препоръчително заглавие',cssStyle:'Стил',ok:'ОК',cancel:'Отказ',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Подробности...',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Ширина',height:'Височина',align:'Подравняване',alignLeft:'Ляво',alignRight:'Дясно',alignCenter:'Център',alignTop:'Отгоре',alignMiddle:'По средата',alignBottom:'Долу',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Вмъкни специален символ',title:'Изберете специален символ',options:'Special Character Options'},link:{toolbar:'Добави/Редактирай връзка',other:'<друг>',menu:'Редактирай връзка',title:'Връзка',info:'Информация за връзката',target:'Цел',upload:'Качи',advanced:'Подробности...',type:'Вид на връзката',toUrl:'URL',toAnchor:'Котва в текущата страница',toEmail:'Е-поща',targetFrame:'<рамка>',targetPopup:'<дъщерен прозорец>',targetFrameName:'Име на целевия прозорец',targetPopupName:'Име на дъщерния прозорец',popupFeatures:'Параметри на дъщерния прозорец',popupResizable:'Resizable',popupStatusBar:'Поле за статус',popupLocationBar:'Поле за адрес',popupToolbar:'Панел с бутони',popupMenuBar:'Меню',popupFullScreen:'Голям екран (MS IE)',popupScrollBars:'Плъзгач',popupDependent:'Зависим (Netscape)',popupLeft:'Координати - X',popupTop:'Координати - Y',id:'Id',langDir:'посока на речта',langDirLTR:'От ляво на дясно',langDirRTL:'От дясно на ляво',acccessKey:'Бърз клавиш',name:'Име',langCode:'посока на речта',tabIndex:'Ред на достъп',advisoryTitle:'Препоръчително заглавие',advisoryContentType:'Препоръчителен тип на съдържанието',cssClasses:'Клас от стиловите таблици',charset:'Тип на свързания ресурс',styles:'Стил',selectAnchor:'Изберете котва',anchorName:'По име на котвата',anchorId:'По идентификатор на елемент',emailAddress:'Адрес за е-поща',emailSubject:'Тема на писмото',emailBody:'Текст на писмото',noAnchors:'(Няма котви в текущия документ)',noUrl:'Моля, напишете пълния път (URL)',noEmail:'Моля, напишете адреса за е-поща'},anchor:{toolbar:'Добави/Редактирай котва',menu:'Параметри на котвата',title:'Параметри на котвата',name:'Име на котвата',errorName:'Моля, въведете име на котвата'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Търси',replace:'Замести',findWhat:'Търси:',replaceWith:'Замести с:',notFoundMsg:'Указания текст не беше намерен.',matchCase:'Със същия регистър',matchWord:'Търси същата дума',matchCyclic:'Match cyclic',replaceAll:'Замести всички',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Таблица',title:'Параметри на таблицата',menu:'Параметри на таблицата',deleteTable:'Изтрий таблицата',rows:'Редове',columns:'Колони',border:'Размер на рамката',widthPx:'пиксели',widthPc:'проценти',widthUnit:'width unit',cellSpace:'Разстояние между клетките',cellPad:'Отстъп на съдържанието в клетките',caption:'Заглавие',summary:'Резюме',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Изтрий клетките',merge:'Обедини клетките',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Изтрий редовете'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Изтрий колоните'}},button:{title:'Параметри на бутона',text:'Текст (Стойност)',type:'Тип',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Параметри на полето за отметка',radioTitle:'Параметри на полето за опция',value:'Стойност',selected:'Отметнато'},form:{title:'Параметри на формуляра',menu:'Параметри на формуляра',action:'Действие',method:'Метод',encoding:'Encoding'},select:{title:'Параметри на падащото меню с опции',selectInfo:'Информация',opAvail:'Възможни опции',value:'Стойност',size:'Размер',lines:'линии',chkMulti:'Разрешено множествено селектиране',opText:'Текст',opValue:'Стойност',btnAdd:'Добави',btnModify:'Промени',btnUp:'Нагоре',btnDown:'Надолу',btnSetValue:'Настрой като избрана стойност',btnDelete:'Изтрий'},textarea:{title:'Параметри на текстовата област',cols:'Колони',rows:'Редове'},textfield:{title:'Параметри на текстовото-поле',name:'Име',value:'Стойност',charWidth:'Ширина на символите',maxChars:'Максимум символи',type:'Тип',typeText:'Текст',typePass:'Парола'},hidden:{title:'Параметри на скритото поле',name:'Име',value:'Стойност'},image:{title:'Параметри на изображението',titleButton:'Параметри на бутона-изображение',menu:'Параметри на изображението',infoTab:'Информация за изображението',btnUpload:'Прати към сървъра',upload:'Качи',alt:'Алтернативен текст',lockRatio:'Запази пропорцията',unlockRatio:'Unlock Ratio',resetSize:'Възстанови размера',border:'Рамка',hSpace:'Хоризонтален отстъп',vSpace:'Вертикален отстъп',alertUrl:'Моля, въведете пълния път до изображението',linkTab:'Връзка',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Параметри на Flash обекта',propertiesTab:'Properties',title:'Параметри на Flash обекта',chkPlay:'Автоматично стартиране',chkLoop:'Ново стартиране след завършването',chkMenu:'Разрешено Flash меню',chkFull:'Allow Fullscreen',scale:'Оразмеряване',scaleAll:'Покажи целия обект',scaleNoBorder:'Без рамка',scaleFit:'Според мястото',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Най-долу',alignAbsMiddle:'Точно по средата',alignBaseline:'По базовата линия',alignTextTop:'Върху текста',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Цвят на фона',hSpace:'Хоризонтален отстъп',vSpace:'Вертикален отстъп',validateSrc:'Моля, напишете пълния път (URL)',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Провери правописа',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Липсва в речника',changeTo:'Промени на',btnIgnore:'Игнорирай',btnIgnoreAll:'Игнорирай всички',btnReplace:'Замести',btnReplaceAll:'Замести всички',btnUndo:'Отмени',noSuggestions:'- Няма предложения -',progress:'Извършване на проверката за правопис...',noMispell:'Проверката за правопис завършена: не са открити правописни грешки',noChanges:'Проверката за правопис завършена: няма променени думи',oneChange:'Проверката за правопис завършена: една дума е променена',manyChanges:'Проверката за правопис завършена: %1 думи са променени',ieSpellDownload:'Инструментът за проверка на правопис не е инсталиран. Желаете ли да го инсталирате ?'},smiley:{toolbar:'Усмивка',title:'Добави усмивка',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Нумериран списък',bulletedlist:'Ненумериран списък',indent:'Увеличи отстъпа',outdent:'Намали отстъпа',justify:{left:'Подравняване в ляво',center:'Подравнявне в средата',right:'Подравняване в дясно',block:'Двустранно подравняване'},blockquote:'Block Quote',clipboard:{title:'Вмъкни',cutError:'Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни изрязването. За целта използвайте клавиатурата (Ctrl/Cmd+X).',copyError:'Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).',pasteMsg:'Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl/Cmd+V</STRONG>) и натиснете <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Вмъкни от MS Word',title:'Вмъкни от MS Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Вмъкни като чист текст',title:'Вмъкни като чист текст'},templates:{button:'Шаблони',title:'Шаблони',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):',emptyListMsg:'(Няма дефинирани шаблони)'},showBlocks:'Show Blocks',stylesCombo:{label:'Стил',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Формат',panelTitle:'Формат',tag_p:'Нормален',tag_pre:'Форматиран',tag_address:'Адрес',tag_h1:'Заглавие 1',tag_h2:'Заглавие 2',tag_h3:'Заглавие 3',tag_h4:'Заглавие 4',tag_h5:'Заглавие 5',tag_h6:'Заглавие 6',tag_div:'Параграф (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Шрифт',voiceLabel:'Font',panelTitle:'Шрифт'},fontSize:{label:'Размер',voiceLabel:'Font Size',panelTitle:'Размер'},colorButton:{textColorTitle:'Цвят на текста',bgColorTitle:'Цвят на фона',panelTitle:'Colors',auto:'По подразбиране',more:'Други цветове...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/bn.js b/modules_v2/ckeditor/lang/bn.js new file mode 100644 index 0000000000..74f28476fb --- /dev/null +++ b/modules_v2/ckeditor/lang/bn.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.bn={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'সোর্স',newPage:'নতুন পেজ',save:'সংরক্ষন কর',preview:'প্রিভিউ',cut:'কাট',copy:'কপি',paste:'পেস্ট',print:'প্রিন্ট',underline:'আন্ডারলাইন',bold:'বোল্ড',italic:'ইটালিক',selectAll:'সব সিলেক্ট কর',removeFormat:'ফরমেট সরাও',strike:'স্ট্রাইক থ্রু',subscript:'অধোলেখ',superscript:'অভিলেখ',horizontalrule:'রেখা যুক্ত কর',pagebreak:'পেজ ব্রেক',pagebreakAlt:'Page Break',unlink:'লিংক সরাও',undo:'আনডু',redo:'রি-ডু',common:{browseServer:'ব্রাউজ সার্ভার',url:'URL',protocol:'প্রোটোকল',upload:'আপলোড',uploadSubmit:'ইহাকে সার্ভারে প্রেরন কর',image:'ছবির লেবেল যুক্ত কর',flash:'ফ্লাশ লেবেল যুক্ত কর',form:'ফর্ম',checkbox:'চেক বাক্স',radio:'রেডিও বাটন',textField:'টেক্সট ফীল্ড',textarea:'টেক্সট এরিয়া',hiddenField:'গুপ্ত ফীল্ড',button:'বাটন',select:'বাছাই ফীল্ড',imageButton:'ছবির বাটন',notSet:'<সেট নেই>',id:'আইডি',name:'নাম',langDir:'ভাষা লেখার দিক',langDirLtr:'বাম থেকে ডান (LTR)',langDirRtl:'ডান থেকে বাম (RTL)',langCode:'ভাষা কোড',longDescr:'URL এর লম্বা বর্ণনা',cssClass:'স্টাইল-শীট ক্লাস',advisoryTitle:'পরামর্শ শীর্ষক',cssStyle:'স্টাইল',ok:'ওকে',cancel:'বাতিল',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'এডভান্সড',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'প্রস্থ',height:'দৈর্ঘ্য',align:'এলাইন',alignLeft:'বামে',alignRight:'ডানে',alignCenter:'মাঝখানে',alignTop:'উপর',alignMiddle:'মধ্য',alignBottom:'নীচে',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'বিশেষ অক্ষর যুক্ত কর',title:'বিশেষ ক্যারেক্টার বাছাই কর',options:'Special Character Options'},link:{toolbar:'লিংক যুক্ত কর',other:'<other>',menu:'লিংক সম্পাদন',title:'লিংক',info:'লিংক তথ্য',target:'টার্গেট',upload:'আপলোড',advanced:'এডভান্সড',type:'লিংক প্রকার',toUrl:'URL',toAnchor:'এই পেজে নোঙর কর',toEmail:'ইমেইল',targetFrame:'<ফ্রেম>',targetPopup:'<পপআপ উইন্ডো>',targetFrameName:'টার্গেট ফ্রেমের নাম',targetPopupName:'পপআপ উইন্ডোর নাম',popupFeatures:'পপআপ উইন্ডো ফীচার সমূহ',popupResizable:'Resizable',popupStatusBar:'স্ট্যাটাস বার',popupLocationBar:'লোকেশন বার',popupToolbar:'টুল বার',popupMenuBar:'মেন্যু বার',popupFullScreen:'পূর্ণ পর্দা জুড়ে (IE)',popupScrollBars:'স্ক্রল বার',popupDependent:'ডিপেন্ডেন্ট (Netscape)',popupLeft:'বামের পজিশন',popupTop:'ডানের পজিশন',id:'Id',langDir:'ভাষা লেখার দিক',langDirLTR:'বাম থেকে ডান (LTR)',langDirRTL:'ডান থেকে বাম (RTL)',acccessKey:'এক্সেস কী',name:'নাম',langCode:'ভাষা লেখার দিক',tabIndex:'ট্যাব ইন্ডেক্স',advisoryTitle:'পরামর্শ শীর্ষক',advisoryContentType:'পরামর্শ কন্টেন্টের প্রকার',cssClasses:'স্টাইল-শীট ক্লাস',charset:'লিংক রিসোর্স ক্যারেক্টর সেট',styles:'স্টাইল',selectAnchor:'নোঙর বাছাই',anchorName:'নোঙরের নাম দিয়ে',anchorId:'নোঙরের আইডি দিয়ে',emailAddress:'ইমেইল ঠিকানা',emailSubject:'মেসেজের বিষয়',emailBody:'মেসেজের দেহ',noAnchors:'(No anchors available in the document)',noUrl:'অনুগ্রহ করে URL লিংক টাইপ করুন',noEmail:'অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন'},anchor:{toolbar:'নোঙ্গর',menu:'নোঙর প্রোপার্টি',title:'নোঙর প্রোপার্টি',name:'নোঙরের নাম',errorName:'নোঙরের নাম টাইপ করুন'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'খোজো',replace:'রিপ্লেস',findWhat:'যা খুঁজতে হবে:',replaceWith:'যার সাথে বদলাতে হবে:',notFoundMsg:'আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি',matchCase:'কেস মিলাও',matchWord:'পুরা শব্দ মেলাও',matchCyclic:'Match cyclic',replaceAll:'সব বদলে দাও',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'টেবিলের লেবেল যুক্ত কর',title:'টেবিল প্রোপার্টি',menu:'টেবিল প্রোপার্টি',deleteTable:'টেবিল ডিলীট কর',rows:'রো',columns:'কলাম',border:'বর্ডার সাইজ',widthPx:'পিক্সেল',widthPc:'শতকরা',widthUnit:'width unit',cellSpace:'সেল স্পেস',cellPad:'সেল প্যাডিং',caption:'শীর্ষক',summary:'সারাংশ',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'সেল',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'সেল মুছে দাও',merge:'সেল জোড়া দাও',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'রো',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'রো মুছে দাও'},column:{menu:'কলাম',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'কলাম মুছে দাও'}},button:{title:'বাটন প্রোপার্টি',text:'টেক্সট (ভ্যালু)',type:'প্রকার',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'চেক বক্স প্রোপার্টি',radioTitle:'রেডিও বাটন প্রোপার্টি',value:'ভ্যালু',selected:'সিলেক্টেড'},form:{title:'ফর্ম প্রোপার্টি',menu:'ফর্ম প্রোপার্টি',action:'একশ্যন',method:'পদ্ধতি',encoding:'Encoding'},select:{title:'বাছাই ফীল্ড প্রোপার্টি',selectInfo:'তথ্য',opAvail:'অন্যান্য বিকল্প',value:'ভ্যালু',size:'সাইজ',lines:'লাইন সমূহ',chkMulti:'একাধিক সিলেকশন এলাউ কর',opText:'টেক্সট',opValue:'ভ্যালু',btnAdd:'যুক্ত',btnModify:'বদলে দাও',btnUp:'উপর',btnDown:'নীচে',btnSetValue:'বাছাই করা ভ্যালু হিসেবে সেট কর',btnDelete:'ডিলীট'},textarea:{title:'টেক্সট এরিয়া প্রোপার্টি',cols:'কলাম',rows:'রো'},textfield:{title:'টেক্সট ফীল্ড প্রোপার্টি',name:'নাম',value:'ভ্যালু',charWidth:'ক্যারেক্টার প্রশস্ততা',maxChars:'সর্বাধিক ক্যারেক্টার',type:'টাইপ',typeText:'টেক্সট',typePass:'পাসওয়ার্ড'},hidden:{title:'গুপ্ত ফীল্ড প্রোপার্টি',name:'নাম',value:'ভ্যালু'},image:{title:'ছবির প্রোপার্টি',titleButton:'ছবি বাটন প্রোপার্টি',menu:'ছবির প্রোপার্টি',infoTab:'ছবির তথ্য',btnUpload:'ইহাকে সার্ভারে প্রেরন কর',upload:'আপলোড',alt:'বিকল্প টেক্সট',lockRatio:'অনুপাত লক কর',unlockRatio:'Unlock Ratio',resetSize:'সাইজ পূর্বাবস্থায় ফিরিয়ে দাও',border:'বর্ডার',hSpace:'হরাইজন্টাল স্পেস',vSpace:'ভার্টিকেল স্পেস',alertUrl:'অনুগ্রহক করে ছবির URL টাইপ করুন',linkTab:'লিংক',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ফ্লাশ প্রোপার্টি',propertiesTab:'Properties',title:'ফ্ল্যাশ প্রোপার্টি',chkPlay:'অটো প্লে',chkLoop:'লূপ',chkMenu:'ফ্ল্যাশ মেনু এনাবল কর',chkFull:'Allow Fullscreen',scale:'স্কেল',scaleAll:'সব দেখাও',scaleNoBorder:'কোনো বর্ডার নেই',scaleFit:'নিখুঁত ফিট',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs নীচে',alignAbsMiddle:'Abs উপর',alignBaseline:'মূল রেখা',alignTextTop:'টেক্সট উপর',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'বেকগ্রাউন্ড রং',hSpace:'হরাইজন্টাল স্পেস',vSpace:'ভার্টিকেল স্পেস',validateSrc:'অনুগ্রহ করে URL লিংক টাইপ করুন',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'বানান চেক',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'শব্দকোষে নেই',changeTo:'এতে বদলাও',btnIgnore:'ইগনোর কর',btnIgnoreAll:'সব ইগনোর কর',btnReplace:'বদলে দাও',btnReplaceAll:'সব বদলে দাও',btnUndo:'আন্ডু',noSuggestions:'- কোন সাজেশন নেই -',progress:'বানান পরীক্ষা চলছে...',noMispell:'বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি',noChanges:'বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি',oneChange:'বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে',manyChanges:'বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে',ieSpellDownload:'বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?'},smiley:{toolbar:'স্মাইলী',title:'স্মাইলী যুক্ত কর',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'সাংখ্যিক লিস্টের লেবেল',bulletedlist:'বুলেট লিস্ট লেবেল',indent:'ইনডেন্ট বাড়াও',outdent:'ইনডেন্ট কমাও',justify:{left:'বা দিকে ঘেঁষা',center:'মাঝ বরাবর ঘেষা',right:'ডান দিকে ঘেঁষা',block:'ব্লক জাস্টিফাই'},blockquote:'Block Quote',clipboard:{title:'পেস্ট',cutError:'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।',copyError:'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।',pasteMsg:'অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl/Cmd+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'পেস্ট (শব্দ)',title:'পেস্ট (শব্দ)',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'সাদা টেক্সট হিসেবে পেস্ট কর',title:'সাদা টেক্সট হিসেবে পেস্ট কর'},templates:{button:'টেমপ্লেট',title:'কনটেন্ট টেমপ্লেট',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন<br>(আসল কনটেন্ট হারিয়ে যাবে):',emptyListMsg:'(কোন টেমপ্লেট ডিফাইন করা নেই)'},showBlocks:'Show Blocks',stylesCombo:{label:'স্টাইল',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ফন্ট ফরমেট',panelTitle:'ফন্ট ফরমেট',tag_p:'সাধারণ',tag_pre:'ফর্মেটেড',tag_address:'ঠিকানা',tag_h1:'শীর্ষক ১',tag_h2:'শীর্ষক ২',tag_h3:'শীর্ষক ৩',tag_h4:'শীর্ষক ৪',tag_h5:'শীর্ষক ৫',tag_h6:'শীর্ষক ৬',tag_div:'শীর্ষক (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ফন্ট',voiceLabel:'Font',panelTitle:'ফন্ট'},fontSize:{label:'সাইজ',voiceLabel:'Font Size',panelTitle:'সাইজ'},colorButton:{textColorTitle:'টেক্স্ট রং',bgColorTitle:'বেকগ্রাউন্ড রং',panelTitle:'Colors',auto:'অটোমেটিক',more:'আরও রং...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/bs.js b/modules_v2/ckeditor/lang/bs.js new file mode 100644 index 0000000000..44fd55c581 --- /dev/null +++ b/modules_v2/ckeditor/lang/bs.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.bs={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'HTML kôd',newPage:'Novi dokument',save:'Snimi',preview:'Prikaži',cut:'Izreži',copy:'Kopiraj',paste:'Zalijepi',print:'Štampaj',underline:'Podvuci',bold:'Boldiraj',italic:'Ukosi',selectAll:'Selektuj sve',removeFormat:'Poništi format',strike:'Precrtaj',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Ubaci horizontalnu liniju',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Izbriši link',undo:'Vrati',redo:'Ponovi',common:{browseServer:'Browse Server',url:'URL',protocol:'Protokol',upload:'Šalji',uploadSubmit:'Šalji na server',image:'Slika',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<nije podešeno>',id:'Id',name:'Naziv',langDir:'Smjer pisanja',langDirLtr:'S lijeva na desno (LTR)',langDirRtl:'S desna na lijevo (RTL)',langCode:'Jezièni kôd',longDescr:'Dugaèki opis URL-a',cssClass:'Klase CSS stilova',advisoryTitle:'Advisory title',cssStyle:'Stil',ok:'OK',cancel:'Odustani',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Naprednije',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Širina',height:'Visina',align:'Poravnanje',alignLeft:'Lijevo',alignRight:'Desno',alignCenter:'Centar',alignTop:'Vrh',alignMiddle:'Sredina',alignBottom:'Dno',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Ubaci specijalni karater',title:'Izaberi specijalni karakter',options:'Special Character Options'},link:{toolbar:'Ubaci/Izmjeni link',other:'<other>',menu:'Izmjeni link',title:'Link',info:'Link info',target:'Prozor',upload:'Šalji',advanced:'Naprednije',type:'Tip linka',toUrl:'URL',toAnchor:'Sidro na ovoj stranici',toEmail:'E-Mail',targetFrame:'<frejm>',targetPopup:'<popup prozor>',targetFrameName:'Target Frame Name',targetPopupName:'Naziv popup prozora',popupFeatures:'Moguænosti popup prozora',popupResizable:'Resizable',popupStatusBar:'Statusna traka',popupLocationBar:'Traka za lokaciju',popupToolbar:'Traka sa alatima',popupMenuBar:'Izborna traka',popupFullScreen:'Cijeli ekran (IE)',popupScrollBars:'Scroll traka',popupDependent:'Ovisno (Netscape)',popupLeft:'Lijeva pozicija',popupTop:'Gornja pozicija',id:'Id',langDir:'Smjer pisanja',langDirLTR:'S lijeva na desno (LTR)',langDirRTL:'S desna na lijevo (RTL)',acccessKey:'Pristupna tipka',name:'Naziv',langCode:'Smjer pisanja',tabIndex:'Tab indeks',advisoryTitle:'Advisory title',advisoryContentType:'Advisory vrsta sadržaja',cssClasses:'Klase CSS stilova',charset:'Linked Resource Charset',styles:'Stil',selectAnchor:'Izaberi sidro',anchorName:'Po nazivu sidra',anchorId:'Po Id-u elementa',emailAddress:'E-Mail Adresa',emailSubject:'Subjekt poruke',emailBody:'Poruka',noAnchors:'(Nema dostupnih sidra na stranici)',noUrl:'Molimo ukucajte URL link',noEmail:'Molimo ukucajte e-mail adresu'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Naði',replace:'Zamjeni',findWhat:'Naði šta:',replaceWith:'Zamjeni sa:',notFoundMsg:'Traženi tekst nije pronaðen.',matchCase:'Uporeðuj velika/mala slova',matchWord:'Uporeðuj samo cijelu rijeè',matchCyclic:'Match cyclic',replaceAll:'Zamjeni sve',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Svojstva tabele',menu:'Svojstva tabele',deleteTable:'Delete Table',rows:'Redova',columns:'Kolona',border:'Okvir',widthPx:'piksela',widthPc:'posto',widthUnit:'width unit',cellSpace:'Razmak æelija',cellPad:'Uvod æelija',caption:'Naslov',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Briši æelije',merge:'Spoji æelije',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Briši redove'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Briši kolone'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Svojstva slike',titleButton:'Image Button Properties',menu:'Svojstva slike',infoTab:'Info slike',btnUpload:'Šalji na server',upload:'Šalji',alt:'Tekst na slici',lockRatio:'Zakljuèaj odnos',unlockRatio:'Unlock Ratio',resetSize:'Resetuj dimenzije',border:'Okvir',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Molimo ukucajte URL od slike.',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs dole',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignTextTop:'Vrh teksta',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Boja pozadine',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Molimo ukucajte URL link',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smješko',title:'Ubaci smješka',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numerisana lista',bulletedlist:'Lista',indent:'Poveæaj uvod',outdent:'Smanji uvod',justify:{left:'Lijevo poravnanje',center:'Centralno poravnanje',right:'Desno poravnanje',block:'Puno poravnanje'},blockquote:'Block Quote',clipboard:{title:'Zalijepi',cutError:'Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).',copyError:'Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).',pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Zalijepi iz Word-a',title:'Zalijepi iz Word-a',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Zalijepi kao obièan tekst',title:'Zalijepi kao obièan tekst'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stil',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'Velièina',voiceLabel:'Font Size',panelTitle:'Velièina'},colorButton:{textColorTitle:'Boja teksta',bgColorTitle:'Boja pozadine',panelTitle:'Colors',auto:'Automatska',more:'Više boja...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/ca.js b/modules_v2/ckeditor/lang/ca.js new file mode 100644 index 0000000000..23c0682f82 --- /dev/null +++ b/modules_v2/ckeditor/lang/ca.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.ca={dir:'ltr',editorTitle:'Editor de text enriquit, %1, prem ALT 0 per obtenir ajuda.',toolbar:"Barra d'eines",editor:'Editor de text enriquit',source:'Codi font',newPage:'Nova pàgina',save:'Desa',preview:'Visualització prèvia',cut:'Retalla',copy:'Copia',paste:'Enganxa',print:'Imprimeix',underline:'Subratllat',bold:'Negreta',italic:'Cursiva',selectAll:'Selecciona-ho tot',removeFormat:'Elimina Format',strike:'Barrat',subscript:'Subíndex',superscript:'Superíndex',horizontalrule:'Insereix línia horitzontal',pagebreak:'Insereix salt de pàgina',pagebreakAlt:'Page Break',unlink:"Elimina l'enllaç",undo:'Desfés',redo:'Refés',common:{browseServer:'Veure servidor',url:'URL',protocol:'Protocol',upload:'Puja',uploadSubmit:'Envia-la al servidor',image:'Imatge',flash:'Flash',form:'Formulari',checkbox:'Casella de verificació',radio:"Botó d'opció",textField:'Camp de text',textarea:'Àrea de text',hiddenField:'Camp ocult',button:'Botó',select:'Camp de selecció',imageButton:"Botó d'imatge",notSet:'<no definit>',id:'Id',name:'Nom',langDir:"Direcció de l'idioma",langDirLtr:"D'esquerra a dreta (LTR)",langDirRtl:'De dreta a esquerra (RTL)',langCode:"Codi d'idioma",longDescr:'Descripció llarga de la URL',cssClass:"Classes del full d'estil",advisoryTitle:'Títol consultiu',cssStyle:'Estil',ok:"D'acord",cancel:'Cancel·la',close:'Tanca',preview:'Previsualitza',generalTab:'General',advancedTab:'Avançat',validateNumberFailed:'Aquest valor no és un número.',confirmNewPage:'Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?',confirmCancel:"Algunes opcions s'han canviat. Esteu segur que voleu tancar la finestra de diàleg?",options:'Opcions',target:'Destí',targetNew:'Nova finestra (_blank)',targetTop:'Finestra major (_top)',targetSelf:'Mateixa finestra (_self)',targetParent:'Finestra pare (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Amplada',height:'Alçada',align:'Alineació',alignLeft:"Ajusta a l'esquerra",alignRight:'Ajusta a la dreta',alignCenter:'Centre',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',invalidHeight:"L'alçada ha de ser un nombre.",invalidWidth:"L'amplada ha de ser un nombre.",unavailable:'%1<span class="cke_accessibility">, no disponible</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insereix caràcter especial',title:'Selecciona el caràcter especial',options:'Special Character Options'},link:{toolbar:'Insereix/Edita enllaç',other:'<altre>',menu:"Edita l'enllaç",title:'Enllaç',info:"Informació de l'enllaç",target:'Destí',upload:'Puja',advanced:'Avançat',type:"Tipus d'enllaç",toUrl:'URL',toAnchor:'Àncora en aquesta pàgina',toEmail:'Correu electrònic',targetFrame:'<marc>',targetPopup:'<finestra emergent>',targetFrameName:'Nom del marc de destí',targetPopupName:'Nom finestra popup',popupFeatures:'Característiques finestra popup',popupResizable:'Redimensionable',popupStatusBar:"Barra d'estat",popupLocationBar:"Barra d'adreça",popupToolbar:"Barra d'eines",popupMenuBar:'Barra de menú',popupFullScreen:'Pantalla completa (IE)',popupScrollBars:"Barres d'scroll",popupDependent:'Depenent (Netscape)',popupLeft:'Posició esquerra',popupTop:'Posició dalt',id:'Id',langDir:"Direcció de l'idioma",langDirLTR:"D'esquerra a dreta (LTR)",langDirRTL:'De dreta a esquerra (RTL)',acccessKey:"Clau d'accés",name:'Nom',langCode:"Direcció de l'idioma",tabIndex:'Index de Tab',advisoryTitle:'Títol consultiu',advisoryContentType:'Tipus de contingut consultiu',cssClasses:"Classes del full d'estil",charset:'Conjunt de caràcters font enllaçat',styles:'Estil',selectAnchor:'Selecciona una àncora',anchorName:"Per nom d'àncora",anchorId:"Per Id d'element",emailAddress:'Adreça de correu electrònic',emailSubject:'Assumpte del missatge',emailBody:'Cos del missatge',noAnchors:'(No hi ha àncores disponibles en aquest document)',noUrl:"Si us plau, escrigui l'enllaç URL",noEmail:"Si us plau, escrigui l'adreça correu electrònic"},anchor:{toolbar:'Insereix/Edita àncora',menu:"Propietats de l'àncora",title:"Propietats de l'àncora",name:"Nom de l'àncora",errorName:"Si us plau, escriviu el nom de l'ancora"},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Cerca i reemplaça',find:'Cerca',replace:'Reemplaça',findWhat:'Cerca:',replaceWith:'Remplaça amb:',notFoundMsg:"El text especificat no s'ha trobat.",matchCase:'Distingeix majúscules/minúscules',matchWord:'Només paraules completes',matchCyclic:'Match cyclic',replaceAll:'Reemplaça-ho tot',replaceSuccessMsg:'%1 ocurrència/es reemplaçada/es.'},table:{toolbar:'Taula',title:'Propietats de la taula',menu:'Propietats de la taula',deleteTable:'Suprimeix la taula',rows:'Files',columns:'Columnes',border:'Mida vora',widthPx:'píxels',widthPc:'percentatge',widthUnit:"unitat d'amplada",cellSpace:'Espaiat de cel·les',cellPad:'Encoixinament de cel·les',caption:'Títol',summary:'Resum',headers:'Capçaleres',headersNone:'Cap',headersColumn:'Primera columna',headersRow:'Primera fila',headersBoth:'Ambdues',invalidRows:'El nombre de files ha de ser un nombre major que 0.',invalidCols:'El nombre de columnes ha de ser un nombre major que 0.',invalidBorder:'El gruix de la vora ha de ser un nombre.',invalidWidth:"L'amplada de la taula ha de ser un nombre.",invalidHeight:"L'alçada de la taula ha de ser un nombre.",invalidCellSpacing:"L'espaiat de cel·la ha de ser un nombre.",invalidCellPadding:"L'encoixinament de cel·la ha de ser un nombre.",cell:{menu:'Cel·la',insertBefore:'Insereix cel·la abans de',insertAfter:'Insereix cel·la darrera',deleteCell:'Suprimeix les cel·les',merge:'Fusiona les cel·les',mergeRight:'Fusiona cap a la dreta',mergeDown:'Fusiona cap avall',splitHorizontal:'Divideix la cel·la horitzontalment',splitVertical:'Divideix la cel·la verticalment',title:'Propertiat de la cel·la',cellType:'Tipus de cel·la',rowSpan:'Expansió de files',colSpan:'Expansió de columnes',wordWrap:'Ajustar al contingut',hAlign:'Aliniació Horizontal',vAlign:'Aliniació Vertical',alignBaseline:'A la línia base',bgColor:'Color de fons',borderColor:'Color de la vora',data:'Data',header:'Capçalera',yes:'Sí',no:'No',invalidWidth:"L'amplada de cel·la ha de ser un nombre.",invalidHeight:"L'alçada de cel·la ha de ser un nombre.",invalidRowSpan:"L'expansió de files ha de ser un nombre enter.",invalidColSpan:"L'expansió de columnes ha de ser un nombre enter.",chooseColor:'Trieu'},row:{menu:'Fila',insertBefore:'Insereix fila abans de',insertAfter:'Insereix fila darrera',deleteRow:'Suprimeix una fila'},column:{menu:'Columna',insertBefore:'Insereix columna abans de',insertAfter:'Insereix columna darrera',deleteColumn:'Suprimeix una columna'}},button:{title:'Propietats del botó',text:'Text (Valor)',type:'Tipus',typeBtn:'Botó',typeSbm:'Transmet formulari',typeRst:'Reinicia formulari'},checkboxAndRadio:{checkboxTitle:'Propietats de la casella de verificació',radioTitle:"Propietats del botó d'opció",value:'Valor',selected:'Seleccionat'},form:{title:'Propietats del formulari',menu:'Propietats del formulari',action:'Acció',method:'Mètode',encoding:'Codificació'},select:{title:'Propietats del camp de selecció',selectInfo:'Info',opAvail:'Opcions disponibles',value:'Valor',size:'Mida',lines:'Línies',chkMulti:'Permet múltiples seleccions',opText:'Text',opValue:'Valor',btnAdd:'Afegeix',btnModify:'Modifica',btnUp:'Amunt',btnDown:'Avall',btnSetValue:'Selecciona per defecte',btnDelete:'Elimina'},textarea:{title:"Propietats de l'àrea de text",cols:'Columnes',rows:'Files'},textfield:{title:'Propietats del camp de text',name:'Nom',value:'Valor',charWidth:'Amplada',maxChars:'Nombre màxim de caràcters',type:'Tipus',typeText:'Text',typePass:'Contrasenya'},hidden:{title:'Propietats del camp ocult',name:'Nom',value:'Valor'},image:{title:'Propietats de la imatge',titleButton:"Propietats del botó d'imatge",menu:'Propietats de la imatge',infoTab:'Informació de la imatge',btnUpload:'Envia-la al servidor',upload:'Puja',alt:'Text alternatiu',lockRatio:'Bloqueja les proporcions',unlockRatio:'Desbloqueja el ràtio',resetSize:'Restaura la mida',border:'Vora',hSpace:'Espaiat horit.',vSpace:'Espaiat vert.',alertUrl:'Si us plau, escriviu la URL de la imatge',linkTab:'Enllaç',button2Img:"Voleu transformar el botó d'imatge seleccionat en una simple imatge?",img2Button:"Voleu transformar la imatge seleccionada en un botó d'imatge?",urlMissing:'Falta la URL de la imatge.',validateBorder:'La vora ha de ser un nombre enter.',validateHSpace:'HSpace ha de ser un nombre enter.',validateVSpace:'VSpace ha de ser un nombre enter.'},flash:{properties:'Propietats del Flash',propertiesTab:'Propietats',title:'Propietats del Flash',chkPlay:'Reprodució automàtica',chkLoop:'Bucle',chkMenu:'Habilita menú Flash',chkFull:'Permetre la pantalla completa',scale:'Escala',scaleAll:'Mostra-ho tot',scaleNoBorder:'Sense vores',scaleFit:'Mida exacta',access:'Accés a scripts',accessAlways:'Sempre',accessSameDomain:'El mateix domini',accessNever:'Mai',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Qualitat',qualityBest:'La millor',qualityHigh:'Alta',qualityAutoHigh:'Alta automàtica',qualityMedium:'Mitjana',qualityAutoLow:'Baixa automàtica',qualityLow:'Baixa',windowModeWindow:'Finestra',windowModeOpaque:'Opaca',windowModeTransparent:'Transparent',windowMode:'Mode de la finestra',flashvars:'Variables de Flash',bgcolor:'Color de Fons',hSpace:'Espaiat horit.',vSpace:'Espaiat vert.',validateSrc:"Si us plau, escrigui l'enllaç URL",validateHSpace:"L'espaiat horitzonatal ha de ser un nombre.",validateVSpace:"L'espaiat vertical ha de ser un nombre."},spellCheck:{toolbar:"Revisa l'ortografia",title:"Comprova l'ortografia",notAvailable:'El servei no es troba disponible ara.',errorLoading:'Error carregant el servidor: %s.',notInDic:'No és al diccionari',changeTo:'Reemplaça amb',btnIgnore:'Ignora',btnIgnoreAll:'Ignora-les totes',btnReplace:'Canvia',btnReplaceAll:'Canvia-les totes',btnUndo:'Desfés',noSuggestions:'Cap suggeriment',progress:'Verificació ortogràfica en curs...',noMispell:'Verificació ortogràfica acabada: no hi ha cap paraula mal escrita',noChanges:"Verificació ortogràfica: no s'ha canviat cap paraula",oneChange:"Verificació ortogràfica: s'ha canviat una paraula",manyChanges:"Verificació ortogràfica: s'han canviat %1 paraules",ieSpellDownload:'Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?'},smiley:{toolbar:'Icona',title:'Insereix una icona',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Llista numerada',bulletedlist:'Llista de pics',indent:'Augmenta el sagnat',outdent:'Redueix el sagnat',justify:{left:"Alinia a l'esquerra",center:'Centrat',right:'Alinia a la dreta',block:'Justificat'},blockquote:'Bloc de cita',clipboard:{title:'Enganxa',cutError:'La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).',copyError:'La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).',pasteMsg:'Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.',securityMsg:"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.",pasteArea:"Àrea d'enganxat"},pastefromword:{confirmCleanup:'El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?',toolbar:'Enganxa des del Word',title:'Enganxa des del Word',error:'No ha estat possible netejar les dades enganxades degut a un error intern'},pasteText:{button:'Enganxa com a text no formatat',title:'Enganxa com a text no formatat'},templates:{button:'Plantilles',title:'Contingut plantilles',options:'Template Options',insertOption:'Reemplaça el contingut actual',selectPromptMsg:"Si us plau, seleccioneu la plantilla per obrir a l'editor<br>(el contingut actual no serà enregistrat):",emptyListMsg:'(No hi ha plantilles definides)'},showBlocks:'Mostra els blocs',stylesCombo:{label:'Estil',panelTitle:'Estils de format',panelTitle1:'Estils de bloc',panelTitle2:'Estils incrustats',panelTitle3:"Estils d'objecte"},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatejat',tag_address:'Adreça',tag_h1:'Encapçalament 1',tag_h2:'Encapçalament 2',tag_h3:'Encapçalament 3',tag_h4:'Encapçalament 4',tag_h5:'Encapçalament 5',tag_h6:'Encapçalament 6',tag_div:'Normal (DIV)'},div:{title:'Crea un contenidor Div',toolbar:'Crea un contenidor Div',cssClassInputLabel:"Classes de la fulla d'estils",styleSelectLabel:'Estil',IdInputLabel:'Id',languageCodeInputLabel:" Codi d'idioma",inlineStyleInputLabel:'Estil en línia',advisoryTitleInputLabel:'Títol de guia',langDirLabel:"Direcció de l'idioma",langDirLTRLabel:"D'esquerra a dreta (LTR)",langDirRTLLabel:'De dreta a esquerra (RTL)',edit:'Edita Div',remove:'Elimina Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Tipus de lletra',voiceLabel:'Tipus de lletra',panelTitle:'Tipus de lletra'},fontSize:{label:'Mida',voiceLabel:'Mida de la lletra',panelTitle:'Mida'},colorButton:{textColorTitle:'Color de Text',bgColorTitle:'Color de Fons',panelTitle:'Colors',auto:'Automàtic',more:'Més colors...'},colors:{'000':'Negre',800000:'Granat','8B4513':'Marró sella','2F4F4F':'Gris pissarra fosca','008080':'Blau xarxet','000080':'Blau marí','4B0082':'Indi',696969:'Gris intens',B22222:'Maó',A52A2A:'Marró (web)',DAA520:'Solidago','006400':'Verd fosc','40E0D0':'Turquesa','0000CD':'Atzur',800080:'Lila',808080:'Gris',F00:'Vermell',FF8C00:'Taronja fosc',FFD700:'Or','008000':'Verd','0FF':'Cian','00F':'Blau',EE82EE:'Lavanda rosat',A9A9A9:'Gris clar',FFA07A:'Salmó clar',FFA500:'Taronja',FFFF00:'Groc','00FF00':'Verd llima',AFEEEE:'Blau pàlid',ADD8E6:'Blau clar',DDA0DD:'Pruna',D3D3D3:'Gris clar',FFF0F5:'Lavanda rosat',FAEBD7:'Blanc antic',FFFFE0:'Groc clar',F0FFF0:'Verd pàlid',F0FFFF:'Blau cel pàlid',F0F8FF:'Cian pàlid',E6E6FA:'Lavanda',FFF:'Blanc'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:"Habilitat l'SCAYT",disable:'Deshabilita SCAYT',about:"Quant a l'SCAYT",toggle:"Commuta l'SCAYT",options:'Opcions',langs:'Idiomes',moreSuggestions:'Més suggerències',ignore:'Ignora',ignoreAll:"Ignora'ls tots",addWord:'Afegeix una paraula',emptyDic:"El nom del diccionari no hauria d'estar buit.",optionsTab:'Opcions',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Idiomes',dictionariesTab:'Diccionaris',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Quant a'},about:{title:'Quan al CKEditor',dlgTitle:'Quan al CKEditor',moreInfo:'Per informació sobre llicències visiteu el web:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximitza',minimize:'Minimitza',fakeobjects:{anchor:'Àncora',flash:'Animació Flash',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Objecte desconegut'},resize:'Arrossegueu per redimensionar',colordialog:{title:'Selecciona el color',options:'Color Options',highlight:'Destacat',selected:'Seleccionat',clear:'Neteja'},toolbarCollapse:"Redueix la barra d'eines",toolbarExpand:"Amplia la barra d'eines",bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/cs.js b/modules_v2/ckeditor/lang/cs.js new file mode 100644 index 0000000000..cff2332529 --- /dev/null +++ b/modules_v2/ckeditor/lang/cs.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.cs={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Zdroj',newPage:'Nová stránka',save:'Uložit',preview:'Náhled',cut:'Vyjmout',copy:'Kopírovat',paste:'Vložit',print:'Tisk',underline:'Podtržené',bold:'Tučné',italic:'Kurzíva',selectAll:'Vybrat vše',removeFormat:'Odstranit formátování',strike:'Přeškrtnuté',subscript:'Dolní index',superscript:'Horní index',horizontalrule:'Vložit vodorovnou linku',pagebreak:'Vložit konec stránky',pagebreakAlt:'Page Break',unlink:'Odstranit odkaz',undo:'Zpět',redo:'Znovu',common:{browseServer:'Vybrat na serveru',url:'URL',protocol:'Protokol',upload:'Odeslat',uploadSubmit:'Odeslat na server',image:'Obrázek',flash:'Flash',form:'Formulář',checkbox:'Zaškrtávací políčko',radio:'Přepínač',textField:'Textové pole',textarea:'Textová oblast',hiddenField:'Skryté pole',button:'Tlačítko',select:'Seznam',imageButton:'Obrázkové tlačítko',notSet:'<nenastaveno>',id:'Id',name:'Jméno',langDir:'Orientace jazyka',langDirLtr:'Zleva do prava (LTR)',langDirRtl:'Zprava do leva (RTL)',langCode:'Kód jazyka',longDescr:'Dlouhý popis URL',cssClass:'Třída stylu',advisoryTitle:'Pomocný titulek',cssStyle:'Styl',ok:'OK',cancel:'Storno',close:'Close',preview:'Preview',generalTab:'Obecné',advancedTab:'Rozšířené',validateNumberFailed:'Zadaná hodnota není číselná.',confirmNewPage:'Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chete otevrít novou stránku?',confirmCancel:'Některá z nastavení byla změněna. Skutečně chete zavřít dialogové okno?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Šířka',height:'Výška',align:'Zarovnání',alignLeft:'Vlevo',alignRight:'Vpravo',alignCenter:'Na střed',alignTop:'Nahoru',alignMiddle:'Na střed',alignBottom:'Dolů',invalidHeight:'Zadaná výška musí být číslo.',invalidWidth:'Zadaná šířka musí být číslo.',unavailable:'%1<span class="cke_accessibility">, nedostupné</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Vložit speciální znaky',title:'Výběr speciálního znaku',options:'Special Character Options'},link:{toolbar:'Vložit/změnit odkaz',other:'<jiný>',menu:'Změnit odkaz',title:'Odkaz',info:'Informace o odkazu',target:'Cíl',upload:'Odeslat',advanced:'Rozšířené',type:'Typ odkazu',toUrl:'URL',toAnchor:'Kotva v této stránce',toEmail:'E-Mail',targetFrame:'<rámec>',targetPopup:'<vyskakovací okno>',targetFrameName:'Název cílového rámu',targetPopupName:'Název vyskakovacího okna',popupFeatures:'Vlastnosti vyskakovacího okna',popupResizable:'Umožňující měnit velikost',popupStatusBar:'Stavový řádek',popupLocationBar:'Panel umístění',popupToolbar:'Panel nástrojů',popupMenuBar:'Panel nabídky',popupFullScreen:'Celá obrazovka (IE)',popupScrollBars:'Posuvníky',popupDependent:'Závislost (Netscape)',popupLeft:'Levý okraj',popupTop:'Horní okraj',id:'Id',langDir:'Orientace jazyka',langDirLTR:'Zleva do prava (LTR)',langDirRTL:'Zprava do leva (RTL)',acccessKey:'Přístupový klíč',name:'Jméno',langCode:'Orientace jazyka',tabIndex:'Pořadí prvku',advisoryTitle:'Pomocný titulek',advisoryContentType:'Pomocný typ obsahu',cssClasses:'Třída stylu',charset:'Přiřazená znaková sada',styles:'Styl',selectAnchor:'Vybrat kotvu',anchorName:'Podle jména kotvy',anchorId:'Podle Id objektu',emailAddress:'E-Mailová adresa',emailSubject:'Předmět zprávy',emailBody:'Tělo zprávy',noAnchors:'(Ve stránce není definována žádná kotva!)',noUrl:'Zadejte prosím URL odkazu',noEmail:'Zadejte prosím e-mailovou adresu'},anchor:{toolbar:'Vložít/změnit záložku',menu:'Vlastnosti záložky',title:'Vlastnosti záložky',name:'Název záložky',errorName:'Zadejte prosím název záložky'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Najít a nahradit',find:'Hledat',replace:'Nahradit',findWhat:'Co hledat:',replaceWith:'Čím nahradit:',notFoundMsg:'Hledaný text nebyl nalezen.',matchCase:'Rozlišovat velikost písma',matchWord:'Pouze celá slova',matchCyclic:'Procházet opakovaně',replaceAll:'Nahradit vše',replaceSuccessMsg:'%1 nahrazení.'},table:{toolbar:'Tabulka',title:'Vlastnosti tabulky',menu:'Vlastnosti tabulky',deleteTable:'Smazat tabulku',rows:'Řádky',columns:'Sloupce',border:'Ohraničení',widthPx:'bodů',widthPc:'procent',widthUnit:'width unit',cellSpace:'Vzdálenost buněk',cellPad:'Odsazení obsahu v buňce',caption:'Popis',summary:'Souhrn',headers:'Záhlaví',headersNone:'Žádné',headersColumn:'První sloupec',headersRow:'První řádek',headersBoth:'Obojí',invalidRows:'Počet řádků musí být číslo větší než 0.',invalidCols:'Počet sloupců musí být číslo větší než 0.',invalidBorder:'Zdaná velikost okraje musí být číselná.',invalidWidth:'Zadaná šířka tabulky musí být číselná.',invalidHeight:'zadaná výška tabulky musí být číselná.',invalidCellSpacing:'Zadaná vzdálenost buněk musí být číselná.',invalidCellPadding:'Zadané odsazení obsahu v buňce musí být číselné.',cell:{menu:'Buňka',insertBefore:'Vložit buňku před',insertAfter:'Vložit buňku za',deleteCell:'Smazat buňky',merge:'Sloučit buňky',mergeRight:'Sloučit doprava',mergeDown:'Sloučit dolů',splitHorizontal:'Rozdělit buňky vodorovně',splitVertical:'Rozdělit buňky svisle',title:'Vlastnosti buňky',cellType:'Typ buňky',rowSpan:'Spojit řádky',colSpan:'Spojit sloupce',wordWrap:'Zalamování',hAlign:'Vodorovné zarovnání',vAlign:'Svislé zarovnání',alignBaseline:'Na účaří',bgColor:'Barva pozadí',borderColor:'Barva okraje',data:'Data',header:'Hlavička',yes:'Ano',no:'Ne',invalidWidth:'Zadaná šířka buňky musí být číslená.',invalidHeight:'Zadaná výška buňky musí být číslená.',invalidRowSpan:'Zadaný počet sloučených řádků musí být celé číslo.',invalidColSpan:'Zadaný počet sloučených sloupců musí být celé číslo.',chooseColor:'Výběr'},row:{menu:'Řádek',insertBefore:'Vložit řádek před',insertAfter:'Vložit řádek za',deleteRow:'Smazat řádky'},column:{menu:'Sloupec',insertBefore:'Vložit sloupec před',insertAfter:'Vložit sloupec za',deleteColumn:'Smazat sloupec'}},button:{title:'Vlastnosti tlačítka',text:'Popisek',type:'Typ',typeBtn:'Tlačítko',typeSbm:'Odeslat',typeRst:'Obnovit'},checkboxAndRadio:{checkboxTitle:'Vlastnosti zaškrtávacího políčka',radioTitle:'Vlastnosti přepínače',value:'Hodnota',selected:'Zaškrtnuto'},form:{title:'Vlastnosti formuláře',menu:'Vlastnosti formuláře',action:'Akce',method:'Metoda',encoding:'Kódování'},select:{title:'Vlastnosti seznamu',selectInfo:'Info',opAvail:'Dostupná nastavení',value:'Hodnota',size:'Velikost',lines:'Řádků',chkMulti:'Povolit mnohonásobné výběry',opText:'Text',opValue:'Hodnota',btnAdd:'Přidat',btnModify:'Změnit',btnUp:'Nahoru',btnDown:'Dolů',btnSetValue:'Nastavit jako vybranou hodnotu',btnDelete:'Smazat'},textarea:{title:'Vlastnosti textové oblasti',cols:'Sloupců',rows:'Řádků'},textfield:{title:'Vlastnosti textového pole',name:'Název',value:'Hodnota',charWidth:'Šířka ve znacích',maxChars:'Maximální počet znaků',type:'Typ',typeText:'Text',typePass:'Heslo'},hidden:{title:'Vlastnosti skrytého pole',name:'Název',value:'Hodnota'},image:{title:'Vlastnosti obrázku',titleButton:'Vlastností obrázkového tlačítka',menu:'Vlastnosti obrázku',infoTab:'Informace o obrázku',btnUpload:'Odeslat na server',upload:'Odeslat',alt:'Alternativní text',lockRatio:'Zámek',unlockRatio:'Unlock Ratio',resetSize:'Původní velikost',border:'Okraje',hSpace:'H-mezera',vSpace:'V-mezera',alertUrl:'Zadejte prosím URL obrázku',linkTab:'Odkaz',button2Img:'Skutečně chcete převést zvolené obrázkové tlačítko na obyčejný obrázek?',img2Button:'Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?',urlMissing:'Zadané URL zdroje obrázku nebylo nalezeno.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Vlastnosti Flashe',propertiesTab:'Vlastnosti',title:'Vlastnosti Flashe',chkPlay:'Automatické spuštění',chkLoop:'Opakování',chkMenu:'Nabídka Flash',chkFull:'Povolit celoobrazovkový režim',scale:'Zobrazit',scaleAll:'Zobrazit vše',scaleNoBorder:'Bez okraje',scaleFit:'Přizpůsobit',access:'Přístup ke skriptu',accessAlways:'Vždy',accessSameDomain:'Ve stejné doméně',accessNever:'Nikdy',alignAbsBottom:'Zcela dolů',alignAbsMiddle:'Doprostřed',alignBaseline:'Na účaří',alignTextTop:'Na horní okraj textu',quality:'Kvalita',qualityBest:'Nejlepší',qualityHigh:'Vysoká',qualityAutoHigh:'Vysoká - auto',qualityMedium:'Střední',qualityAutoLow:'Nízká - auto',qualityLow:'Nejnižší',windowModeWindow:'Okno',windowModeOpaque:'Neprůhledné',windowModeTransparent:'Průhledné',windowMode:'Režim okna',flashvars:'Proměnné pro Flash',bgcolor:'Barva pozadí',hSpace:'H-mezera',vSpace:'V-mezera',validateSrc:'Zadejte prosím URL odkazu',validateHSpace:'Zadaná H-mezera musí být číslo.',validateVSpace:'Zadaná V-mezera musí být číslo.'},spellCheck:{toolbar:'Zkontrolovat pravopis',title:'Kontrola pravopisu',notAvailable:'Omlouváme se, ale služba nyní není dostupná.',errorLoading:'Chyba nahrávání služby aplikace z: %s.',notInDic:'Není ve slovníku',changeTo:'Změnit na',btnIgnore:'Přeskočit',btnIgnoreAll:'Přeskakovat vše',btnReplace:'Zaměnit',btnReplaceAll:'Zaměňovat vše',btnUndo:'Zpět',noSuggestions:'- žádné návrhy -',progress:'Probíhá kontrola pravopisu...',noMispell:'Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny',noChanges:'Kontrola pravopisu dokončena: Beze změn',oneChange:'Kontrola pravopisu dokončena: Jedno slovo změněno',manyChanges:'Kontrola pravopisu dokončena: %1 slov změněno',ieSpellDownload:'Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?'},smiley:{toolbar:'Smajlíky',title:'Vkládání smajlíků',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 objekt'},numberedlist:'Číslování',bulletedlist:'Odrážky',indent:'Zvětšit odsazení',outdent:'Zmenšit odsazení',justify:{left:'Zarovnat vlevo',center:'Zarovnat na střed',right:'Zarovnat vpravo',block:'Zarovnat do bloku'},blockquote:'Citace',clipboard:{title:'Vložit',cutError:'Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).',copyError:'Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).',pasteMsg:'Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.',securityMsg:'Z důvodů nastavení bezpečnosti Vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?',toolbar:'Vložit z Wordu',title:'Vložit z Wordu',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Vložit jako čistý text',title:'Vložit jako čistý text'},templates:{button:'Šablony',title:'Šablony obsahu',options:'Template Options',insertOption:'Nahradit aktuální obsah',selectPromptMsg:'Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):',emptyListMsg:'(Není definována žádná šablona)'},showBlocks:'Ukázat bloky',stylesCombo:{label:'Styl',panelTitle:'Formatting Styles',panelTitle1:'Blokové styly',panelTitle2:'Řádkové styly',panelTitle3:'Objektové styly'},format:{label:'Formát',panelTitle:'Formát',tag_p:'Normální',tag_pre:'Naformátováno',tag_address:'Adresa',tag_h1:'Nadpis 1',tag_h2:'Nadpis 2',tag_h3:'Nadpis 3',tag_h4:'Nadpis 4',tag_h5:'Nadpis 5',tag_h6:'Nadpis 6',tag_div:'Normální (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Písmo',voiceLabel:'Písmo',panelTitle:'Písmo'},fontSize:{label:'Velikost',voiceLabel:'Velikost písma',panelTitle:'Velikost'},colorButton:{textColorTitle:'Barva textu',bgColorTitle:'Barva pozadí',panelTitle:'Colors',auto:'Automaticky',more:'Více barev...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Kontrola pravopisu během psaní (SCAYT)',opera_title:'Not supported by Opera',enable:'Zapnout SCAYT',disable:'Vypnout SCAYT',about:'O aplikaci SCAYT',toggle:'Vypínač SCAYT',options:'Nastavení',langs:'Jazyky',moreSuggestions:'Více návrhů',ignore:'Přeskočit',ignoreAll:'Přeskočit vše',addWord:'Přidat slovo',emptyDic:'Název slovníku nesmí být prázdný.',optionsTab:'Nastavení',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Jazyky',dictionariesTab:'Slovníky',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'O aplikaci'},about:{title:'O aplikaci CKEditor',dlgTitle:'O aplikaci CKEditor',moreInfo:'Pro informace o lincenci navštivte naši webovou stránku:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximalizovat',minimize:'Minimalizovat',fakeobjects:{anchor:'Záložka',flash:'Flash animace',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Neznámý objekt'},resize:'Uchopit pro změnu velikosti',colordialog:{title:'Výběr barvy',options:'Color Options',highlight:'Zvýraznit',selected:'Vybráno',clear:'Vyčistit'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/cy.js b/modules_v2/ckeditor/lang/cy.js new file mode 100644 index 0000000000..0fae5826dd --- /dev/null +++ b/modules_v2/ckeditor/lang/cy.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.cy={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Tarddle',newPage:'Tudalen newydd',save:'Cadw',preview:'Rhagolwg',cut:'Torri',copy:'Copïo',paste:'Gludo',print:'Argraffu',underline:'Tanlinellu',bold:'Bras',italic:'Italig',selectAll:'Dewis Popeth',removeFormat:'Tynnu Fformat',strike:'Llinell Trwyddo',subscript:'Is-sgript',superscript:'Uwchsgript',horizontalrule:'Mewnosod Llinell Lorweddol',pagebreak:'Mewnosod Toriad Tudalen i Argraffu',pagebreakAlt:'Page Break',unlink:'Datgysylltu',undo:'Dadwneud',redo:'Ailadrodd',common:{browseServer:"Pori'r Gweinydd",url:'URL',protocol:'Protocol',upload:'Lanlwytho',uploadSubmit:"Anfon i'r Gweinydd",image:'Delwedd',flash:'Flash',form:'Ffurflen',checkbox:'Blwch ticio',radio:'Botwm Radio',textField:'Maes Testun',textarea:'Ardal Testun',hiddenField:'Maes Cudd',button:'Botwm',select:'Maes Dewis',imageButton:'Botwm Delwedd',notSet:'<heb osod>',id:'Id',name:'Name',langDir:'Cyfeiriad Iaith',langDirLtr:"Chwith i'r Dde (LTR)",langDirRtl:"Dde i'r Chwith (RTL)",langCode:'Cod Iaith',longDescr:'URL Disgrifiad Hir',cssClass:'Dosbarth Dalen Arddull',advisoryTitle:'Teitl Cynghorol',cssStyle:'Arddull',ok:'Iawn',cancel:'Diddymu',close:'Close',preview:'Preview',generalTab:'Cyffredinol',advancedTab:'Uwch',validateNumberFailed:"Nid yw'r gwerth hwn yn rhif.",confirmNewPage:"Byddwch yn colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. A ydych am barhau i lwytho tudalen newydd?",confirmCancel:"Mae rhai o'r opsiynau wedi'u newid. A ydych wir am gau'r deialog?",options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Lled',height:'Uchder',align:'Alinio',alignLeft:'Chwith',alignRight:'Dde',alignCenter:'Canol',alignTop:'Top',alignMiddle:'Canol',alignBottom:'Gwaelod',invalidHeight:"Rhaid i'r Uchder fod yn rhif.",invalidWidth:"Rhaid i'r Lled fod yn rhif.",unavailable:'%1<span class="cke_accessibility">, ddim ar gael</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Mewnosod Nodau Arbennig',title:'Dewis Nod Arbennig',options:'Special Character Options'},link:{toolbar:'Dolen',other:'<eraill>',menu:'Golygu Dolen',title:'Dolen',info:'Gwyb ar y Ddolen',target:'Targed',upload:'Lanlwytho',advanced:'Uwch',type:'Math y Ddolen',toUrl:'URL',toAnchor:'Dolen at angor yn y testun',toEmail:'E-bost',targetFrame:'<ffrâm>',targetPopup:'<ffenestr bop>',targetFrameName:'Enw Ffrâm y Targed',targetPopupName:'Enw Ffenestr Bop',popupFeatures:'Nodweddion Ffenestr Bop',popupResizable:'Ailfeintiol',popupStatusBar:'Bar Statws',popupLocationBar:'Bar Safle',popupToolbar:'Bar Offer',popupMenuBar:'Dewislen',popupFullScreen:'Sgrin Llawn (IE)',popupScrollBars:'Barrau Sgrolio',popupDependent:'Dibynnol (Netscape)',popupLeft:'Safle Chwith',popupTop:'Safle Top',id:'Id',langDir:'Cyfeiriad Iaith',langDirLTR:"Chwith i'r Dde (LTR)",langDirRTL:"Dde i'r Chwith (RTL)",acccessKey:'Allwedd Mynediad',name:'Enw',langCode:'Cod Iaith',tabIndex:'Indecs Tab',advisoryTitle:'Teitl Cynghorol',advisoryContentType:'Math y Cynnwys Cynghorol',cssClasses:'Dosbarthiadau Dalen Arddull',charset:"Set nodau'r Adnodd Cysylltiedig",styles:'Arddull',selectAnchor:'Dewiswch Angor',anchorName:"Gan Enw'r Angor",anchorId:'Gan Id yr Elfen',emailAddress:'Cyfeiriad E-Bost',emailSubject:'Testun y Message Subject',emailBody:'Pwnc y Neges',noAnchors:'(Dim angorau ar gael yn y ddogfen)',noUrl:'Teipiwch URL y ddolen',noEmail:'Teipiwch gyfeiriad yr e-bost'},anchor:{toolbar:'Angor',menu:'Golygwch yr Angor',title:"Priodweddau'r Angor",name:"Enw'r Angor",errorName:"Teipiwch enw'r angor"},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Chwilio ac Amnewid',find:'Chwilio',replace:'Amnewid',findWhat:"Chwilio'r term:",replaceWith:'Amnewid gyda:',notFoundMsg:"Nid oedd y testun wedi'i ddarganfod.",matchCase:"Cyfateb i'r cas",matchWord:'Cyfateb gair cyfan',matchCyclic:'Cyfateb cylchol',replaceAll:'Amnewid pob un',replaceSuccessMsg:'Amnewidiwyd %1 achlysur.'},table:{toolbar:'Tabl',title:'Nodweddion Tabl',menu:'Nodweddion Tabl',deleteTable:'Dileu Tabl',rows:'Rhesi',columns:'Colofnau',border:'Maint yr Ymyl',widthPx:'picsel',widthPc:'y cant',widthUnit:'width unit',cellSpace:"Bylchu'r gell",cellPad:"Padio'r gell",caption:'Pennawd',summary:'Crynodeb',headers:'Penynnau',headersNone:'Dim',headersColumn:'Colofn gyntaf',headersRow:'Rhes gyntaf',headersBoth:'Y Ddau',invalidRows:"Mae'n rhaid cael o leiaf un rhes.",invalidCols:"Mae'n rhaid cael o leiaf un golofn.",invalidBorder:"Mae'n rhaid i faint yr ymyl fod yn rhif.",invalidWidth:"Mae'n rhaid i led y tabl fod yn rhif.",invalidHeight:"Mae'n rhaid i uchder y tabl fod yn rhif.",invalidCellSpacing:"Mae'n rhaid i fylchiad y gell fod yn rhif.",invalidCellPadding:"Mae'n rhaid i badiad y gell fod yn rhif.",cell:{menu:'Cell',insertBefore:'Mewnosod Cell Cyn',insertAfter:'Mewnosod Cell Ar Ôl',deleteCell:'Dileu Celloedd',merge:'Cyfuno Celloedd',mergeRight:"Cyfuno i'r Dde",mergeDown:'Cyfuno i Lawr',splitHorizontal:"Hollti'r Gell yn Lorweddol",splitVertical:"Hollti'r Gell yn Fertigol",title:"Priodweddau'r Gell",cellType:'Math y Gell',rowSpan:'Rhychwant Rhesi',colSpan:'Rhychwant Colofnau',wordWrap:'Lapio Geiriau',hAlign:'Aliniad Llorweddol',vAlign:'Aliniad Fertigol',alignBaseline:'Baslinell',bgColor:'Lliw Cefndir',borderColor:'Lliw Ymyl',data:'Data',header:'Pennyn',yes:'Ie',no:'Na',invalidWidth:"Mae'n rhaid i led y gell fod yn rhif.",invalidHeight:"Mae'n rhaid i uchder y gell fod yn rhif.",invalidRowSpan:"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.",invalidColSpan:"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.",chooseColor:'Choose'},row:{menu:'Rhes',insertBefore:'Mewnosod Rhes Cyn',insertAfter:'Mewnosod Rhes Ar Ôl',deleteRow:'Dileu Rhesi'},column:{menu:'Colofn',insertBefore:'Mewnosod Colofn Cyn',insertAfter:'Mewnosod Colofn Ar Ôl',deleteColumn:'Dileu Colofnau'}},button:{title:'Priodweddau Botymau',text:'Testun (Gwerth)',type:'Math',typeBtn:'Botwm',typeSbm:'Gyrru',typeRst:'Ailosod'},checkboxAndRadio:{checkboxTitle:'Priodweddau Blwch Ticio',radioTitle:'Priodweddau Botwm Radio',value:'Gwerth',selected:'Dewiswyd'},form:{title:'Priodweddau Ffurflen',menu:'Priodweddau Ffurflen',action:'Gweithred',method:'Dull',encoding:'Amgodio'},select:{title:'Priodweddau Maes Dewis',selectInfo:'Gwyb Dewis',opAvail:'Opsiynau ar Gael',value:'Gwerth',size:'Maint',lines:'llinellau',chkMulti:'Caniatàu aml-ddewisiadau',opText:'Testun',opValue:'Gwerth',btnAdd:'Ychwanegu',btnModify:'Newid',btnUp:'Lan',btnDown:'Lawr',btnSetValue:'Gosod fel gwerth a ddewiswyd',btnDelete:'Dileu'},textarea:{title:'Priodweddau Ardal Testun',cols:'Colofnau',rows:'Rhesi'},textfield:{title:'Priodweddau Maes Testun',name:'Enw',value:'Gwerth',charWidth:'Lled Nod',maxChars:'Uchafswm y Nodau',type:'Math',typeText:'Testun',typePass:'Cyfrinair'},hidden:{title:'Priodweddau Maes Cudd',name:'Enw',value:'Gwerth'},image:{title:'Priodweddau Delwedd',titleButton:'Priodweddau Botwm Delwedd',menu:'Priodweddau Delwedd',infoTab:'Gwyb Delwedd',btnUpload:"Anfon i'r Gweinydd",upload:'lanlwytho',alt:'Testun Amgen',lockRatio:'Cloi Cymhareb',unlockRatio:'Unlock Ratio',resetSize:'Ailosod Maint',border:'Ymyl',hSpace:'BwlchLl',vSpace:'BwlchF',alertUrl:'Rhowch URL y ddelwedd',linkTab:'Dolen',button2Img:"Ydych am drawsffurfio'r botwm ddelwedd hwn ar ddelwedd syml?",img2Button:"Ydych am drawsffurfio'r ddelwedd hon ar fotwm delwedd?",urlMissing:"URL tarddle'r ddelwedd ar goll.",validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Priodweddau Flash',propertiesTab:'Priodweddau',title:'Priodweddau Flash',chkPlay:'AwtoChwarae',chkLoop:'Lwpio',chkMenu:'Galluogi Dewislen Flash',chkFull:'Caniatàu Sgrin Llawn',scale:'Graddfa',scaleAll:'Dangos pob',scaleNoBorder:'Dim Ymyl',scaleFit:'Ffit Union',access:'Mynediad Sgript',accessAlways:'Pob amser',accessSameDomain:"R'un parth",accessNever:'Byth',alignAbsBottom:'Gwaelod Abs',alignAbsMiddle:'Canol Abs',alignBaseline:'Baslinell',alignTextTop:'Testun Top',quality:'Ansawdd',qualityBest:'Gorau',qualityHigh:'Uchel',qualityAutoHigh:'Uchel Awto',qualityMedium:'Canolig',qualityAutoLow:'Isel Awto',qualityLow:'Isel',windowModeWindow:'Ffenestr',windowModeOpaque:'Afloyw',windowModeTransparent:'Tryloyw',windowMode:'Modd ffenestr',flashvars:'Newidynnau ar gyfer Flash',bgcolor:'Lliw cefndir',hSpace:'BwlchLl',vSpace:'BwlchF',validateSrc:'Ni all yr URL fod yn wag.',validateHSpace:"Rhaid i'r BwlchLl fod yn rhif.",validateVSpace:"Rhaid i'r BwlchF fod yn rhif."},spellCheck:{toolbar:'Gwirio Sillafu',title:'Gwirio Sillafu',notAvailable:"Nid yw'r gwasanaeth hwn ar gael yn bresennol.",errorLoading:'Error loading application service host: %s.',notInDic:"Nid i'w gael yn y geiriadur",changeTo:'Newid i',btnIgnore:'Anwybyddu Un',btnIgnoreAll:'Anwybyddu Pob',btnReplace:'Amnewid Un',btnReplaceAll:'Amnewid Pob',btnUndo:'Dadwneud',noSuggestions:'- Dim awgrymiadau -',progress:'Gwirio sillafu yn ar y gweill...',noMispell:'Gwirio sillafu wedi gorffen: Dim camsillaf.',noChanges:'Gwirio sillafu wedi gorffen: Dim newidiadau',oneChange:'Gwirio sillafu wedi gorffen: Newidiwyd 1 gair',manyChanges:'Gwirio sillafu wedi gorffen: Newidiwyd %1 gair',ieSpellDownload:'Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?'},smiley:{toolbar:'Gwenoglun',title:'Mewnosod Gwenoglun',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'Elfen %1'},numberedlist:'Mewnosod/Tynnu Rhestr Rhifol',bulletedlist:'Mewnosod/Tynnu Rhestr Bwled',indent:"Cynyddu'r Mewnoliad",outdent:"Lleihau'r Mewnoliad",justify:{left:"Alinio i'r Chwith",center:"Alinio i'r Canol",right:"Alinio i'r Dde",block:'Aliniad Bloc'},blockquote:'Dyfyniad bloc',clipboard:{title:'Gludo',cutError:"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).",copyError:"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).",pasteMsg:"Gludwch i mewn i'r blwch canlynol gan ddefnyddio'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.",securityMsg:"Oherwydd gosodiadau diogelwch eich porwr, nid yw'r porwr yn gallu ennill mynediad i'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i'r ffenestr hon.",pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Gludo o Word',title:'Gludo o Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Gludo fel testun plaen',title:'Gludo fel Testun Plaen'},templates:{button:'Templedi',title:'Templedi Cynnwys',options:'Template Options',insertOption:'Amnewid y cynnwys go iawn',selectPromptMsg:"Dewiswch dempled i'w agor yn y golygydd",emptyListMsg:"(Dim templedi wedi'u diffinio)"},showBlocks:'Dangos Blociau',stylesCombo:{label:'Arddulliau',panelTitle:'Formatting Styles',panelTitle1:'Arddulliau Bloc',panelTitle2:'Arddulliau Mewnol',panelTitle3:'Arddulliau Gwrthrych'},format:{label:'Fformat',panelTitle:'Fformat Paragraff',tag_p:'Normal',tag_pre:"Wedi'i Fformatio",tag_address:'Cyfeiriad',tag_h1:'Pennawd 1',tag_h2:'Pennawd 2',tag_h3:'Pennawd 3',tag_h4:'Pennawd 4',tag_h5:'Pennawd 5',tag_h6:'Pennawd 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Ffont',voiceLabel:'Ffont',panelTitle:"Enw'r Ffont"},fontSize:{label:'Maint',voiceLabel:'Maint y Ffont',panelTitle:'Maint y Ffont'},colorButton:{textColorTitle:'Lliw Testun',bgColorTitle:'Lliw Cefndir',panelTitle:'Colors',auto:'Awtomatig',more:'Mwy o Liwiau...'},colors:{'000':'Du',800000:'Marwn','8B4513':'Brown Cyfrwy','2F4F4F':'Llechen Tywyll','008080':'Corhwyad','000080':'Nefi','4B0082':'Indigo',696969:'Llwyd Pwl',B22222:'Bric Tân',A52A2A:'Brown',DAA520:'Rhoden Aur','006400':'Gwyrdd Tywyll','40E0D0':'Gwyrddlas','0000CD':'Glas Canolig',800080:'Porffor',808080:'Llwyd',F00:'Coch',FF8C00:'Oren Tywyll',FFD700:'Aur','008000':'Gwyrdd','0FF':'Cyan','00F':'Glas',EE82EE:'Fioled',A9A9A9:'Llwyd Tywyll',FFA07A:'Samwn Golau',FFA500:'Oren',FFFF00:'Melyn','00FF00':'Leim',AFEEEE:'Gwyrddlas Golau',ADD8E6:'Glas Golau',DDA0DD:'Eirinen',D3D3D3:'Llwyd Golau',FFF0F5:'Gwrid Lafant',FAEBD7:'Gwyn Hynafol',FFFFE0:'Melyn Golau',F0FFF0:'Melwn Gwyrdd Golau',F0FFFF:'Aswr',F0F8FF:'Glas Alys',E6E6FA:'Lafant',FFF:'Gwyn'},scayt:{title:"Gwirio'r Sillafu Wrth Deipio",opera_title:'Not supported by Opera',enable:'Galluogi SCAYT',disable:'Analluogi SCAYT',about:'Ynghylch SCAYT',toggle:'Togl SCAYT',options:'Opsiynau',langs:'Ieithoedd',moreSuggestions:'Awgrymiadau pellach',ignore:'Anwybyddu',ignoreAll:'Anwybyddu pob',addWord:'Ychwanegu Gair',emptyDic:"Ni ddylai enw'r geiriadur fod yn wag.",optionsTab:'Opsiynau',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Ieithoedd',dictionariesTab:'Geiriaduron',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Ynghylch'},about:{title:'Ynghylch CKEditor',dlgTitle:'Ynghylch CKEditor',moreInfo:"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:",copy:'Hawlfraint © $1. Cedwir pob hawl.'},maximize:'Mwyhau',minimize:'Lleihau',fakeobjects:{anchor:'Angor',flash:'Animeiddiant Flash',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Gwrthrych Anhysbys'},resize:'Llusgo i ailfeintio',colordialog:{title:'Dewis lliw',options:'Color Options',highlight:'Uwcholeuo',selected:'Dewiswyd',clear:'Clirio'},toolbarCollapse:"Cyfangu'r Bar Offer",toolbarExpand:"Ehangu'r Bar Offer",bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/da.js b/modules_v2/ckeditor/lang/da.js new file mode 100644 index 0000000000..a4a8bf053b --- /dev/null +++ b/modules_v2/ckeditor/lang/da.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.da={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Kilde',newPage:'Ny side',save:'Gem',preview:'Vis eksempel',cut:'Klip',copy:'Kopiér',paste:'Indsæt',print:'Udskriv',underline:'Understreget',bold:'Fed',italic:'Kursiv',selectAll:'Vælg alt',removeFormat:'Fjern formatering',strike:'Gennemstreget',subscript:'Sænket skrift',superscript:'Hævet skrift',horizontalrule:'Indsæt vandret streg',pagebreak:'Indsæt sideskift',pagebreakAlt:'Page Break',unlink:'Fjern hyperlink',undo:'Fortryd',redo:'Annullér fortryd',common:{browseServer:'Gennemse...',url:'URL',protocol:'Protokol',upload:'Upload',uploadSubmit:'Upload',image:'Indsæt billede',flash:'Indsæt Flash',form:'Indsæt formular',checkbox:'Indsæt afkrydsningsfelt',radio:'Indsæt alternativknap',textField:'Indsæt tekstfelt',textarea:'Indsæt tekstboks',hiddenField:'Indsæt skjult felt',button:'Indsæt knap',select:'Indsæt liste',imageButton:'Indsæt billedknap',notSet:'<intet valgt>',id:'Id',name:'Navn',langDir:'Tekstretning',langDirLtr:'Fra venstre mod højre (LTR)',langDirRtl:'Fra højre mod venstre (RTL)',langCode:'Sprogkode',longDescr:'Udvidet beskrivelse',cssClass:'Typografiark (CSS)',advisoryTitle:'Titel',cssStyle:'Typografi (CSS)',ok:'OK',cancel:'Annullér',close:'Close',preview:'Preview',generalTab:'Generelt',advancedTab:'Avanceret',validateNumberFailed:'Værdien er ikke et tal.',confirmNewPage:'Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?',confirmCancel:'Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Bredde',height:'Højde',align:'Justering',alignLeft:'Venstre',alignRight:'Højre',alignCenter:'Centreret',alignTop:'Øverst',alignMiddle:'Centreret',alignBottom:'Nederst',invalidHeight:'Højde skal være et tal.',invalidWidth:'Bredde skal være et tal.',unavailable:'%1<span class="cke_accessibility">, ikke tilgængelig</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Indsæt symbol',title:'Vælg symbol',options:'Special Character Options'},link:{toolbar:'Indsæt/redigér hyperlink',other:'<anden>',menu:'Redigér hyperlink',title:'Egenskaber for hyperlink',info:'Generelt',target:'Mål',upload:'Upload',advanced:'Avanceret',type:'Type',toUrl:'URL',toAnchor:'Bogmærke på denne side',toEmail:'E-mail',targetFrame:'<ramme>',targetPopup:'<popup vindue>',targetFrameName:'Destinationsvinduets navn',targetPopupName:'Popup vinduets navn',popupFeatures:'Egenskaber for popup',popupResizable:'Justérbar',popupStatusBar:'Statuslinje',popupLocationBar:'Adresselinje',popupToolbar:'Værktøjslinje',popupMenuBar:'Menulinje',popupFullScreen:'Fuld skærm (IE)',popupScrollBars:'Scrollbar',popupDependent:'Koblet/dependent (Netscape)',popupLeft:'Position fra venstre',popupTop:'Position fra toppen',id:'Id',langDir:'Tekstretning',langDirLTR:'Fra venstre mod højre (LTR)',langDirRTL:'Fra højre mod venstre (RTL)',acccessKey:'Genvejstast',name:'Navn',langCode:'Tekstretning',tabIndex:'Tabulator indeks',advisoryTitle:'Titel',advisoryContentType:'Indholdstype',cssClasses:'Typografiark',charset:'Tegnsæt',styles:'Typografi',selectAnchor:'Vælg et anker',anchorName:'Efter anker navn',anchorId:'Efter element Id',emailAddress:'E-mail adresse',emailSubject:'Emne',emailBody:'Besked',noAnchors:'(Ingen bogmærker i dokumentet)',noUrl:'Indtast hyperlink URL!',noEmail:'Indtast e-mail adresse!'},anchor:{toolbar:'Indsæt/redigér bogmærke',menu:'Egenskaber for bogmærke',title:'Egenskaber for bogmærke',name:'Bogmærke navn',errorName:'Indtast bogmærke navn'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Søg og erstat',find:'Søg',replace:'Erstat',findWhat:'Søg efter:',replaceWith:'Erstat med:',notFoundMsg:'Søgeteksten blev ikke fundet',matchCase:'Forskel på store og små bogstaver',matchWord:'Kun hele ord',matchCyclic:'Match cyklisk',replaceAll:'Erstat alle',replaceSuccessMsg:'%1 forekomst(er) erstattet.'},table:{toolbar:'Tabel',title:'Egenskaber for tabel',menu:'Egenskaber for tabel',deleteTable:'Slet tabel',rows:'Rækker',columns:'Kolonner',border:'Rammebredde',widthPx:'pixels',widthPc:'procent',widthUnit:'width unit',cellSpace:'Celleafstand',cellPad:'Cellemargen',caption:'Titel',summary:'Resumé',headers:'Header',headersNone:'Ingen',headersColumn:'Første kolonne',headersRow:'Første række',headersBoth:'Begge',invalidRows:'Antallet af rækker skal være større end 0.',invalidCols:'Antallet af kolonner skal være større end 0.',invalidBorder:'Rammetykkelse skal være et tal.',invalidWidth:'Tabelbredde skal være et tal.',invalidHeight:'Tabelhøjde skal være et tal.',invalidCellSpacing:'Celleafstand skal være et tal.',invalidCellPadding:'Cellemargen skal være et tal.',cell:{menu:'Celle',insertBefore:'Indsæt celle før',insertAfter:'Indsæt celle efter',deleteCell:'Slet celle',merge:'Flet celler',mergeRight:'Flet til højre',mergeDown:'Flet nedad',splitHorizontal:'Del celle vandret',splitVertical:'Del celle lodret',title:'Celleegenskaber',cellType:'Celletype',rowSpan:'Række span (rows span)',colSpan:'Kolonne span (columns span)',wordWrap:'Tekstombrydning',hAlign:'Vandret justering',vAlign:'Lodret justering',alignBaseline:'Grundlinje',bgColor:'Baggrundsfarve',borderColor:'Rammefarve',data:'Data',header:'Header',yes:'Ja',no:'Nej',invalidWidth:'Cellebredde skal være et tal.',invalidHeight:'Cellehøjde skal være et tal.',invalidRowSpan:'Række span skal være et heltal.',invalidColSpan:'Kolonne span skal være et heltal.',chooseColor:'Choose'},row:{menu:'Række',insertBefore:'Indsæt række før',insertAfter:'Indsæt række efter',deleteRow:'Slet række'},column:{menu:'Kolonne',insertBefore:'Indsæt kolonne før',insertAfter:'Indsæt kolonne efter',deleteColumn:'Slet kolonne'}},button:{title:'Egenskaber for knap',text:'Tekst',type:'Type',typeBtn:'Knap',typeSbm:'Send',typeRst:'Nulstil'},checkboxAndRadio:{checkboxTitle:'Egenskaber for afkrydsningsfelt',radioTitle:'Egenskaber for alternativknap',value:'Værdi',selected:'Valgt'},form:{title:'Egenskaber for formular',menu:'Egenskaber for formular',action:'Handling',method:'Metode',encoding:'Kodning (encoding)'},select:{title:'Egenskaber for liste',selectInfo:'Generelt',opAvail:'Valgmuligheder',value:'Værdi',size:'Størrelse',lines:'Linjer',chkMulti:'Tillad flere valg',opText:'Tekst',opValue:'Værdi',btnAdd:'Tilføj',btnModify:'Redigér',btnUp:'Op',btnDown:'Ned',btnSetValue:'Sæt som valgt',btnDelete:'Slet'},textarea:{title:'Egenskaber for tekstboks',cols:'Kolonner',rows:'Rækker'},textfield:{title:'Egenskaber for tekstfelt',name:'Navn',value:'Værdi',charWidth:'Bredde (tegn)',maxChars:'Max. antal tegn',type:'Type',typeText:'Tekst',typePass:'Adgangskode'},hidden:{title:'Egenskaber for skjult felt',name:'Navn',value:'Værdi'},image:{title:'Egenskaber for billede',titleButton:'Egenskaber for billedknap',menu:'Egenskaber for billede',infoTab:'Generelt',btnUpload:'Upload',upload:'Upload',alt:'Alternativ tekst',lockRatio:'Lås størrelsesforhold',unlockRatio:'Unlock Ratio',resetSize:'Nulstil størrelse',border:'Ramme',hSpace:'Vandret margen',vSpace:'Lodret margen',alertUrl:'Indtast stien til billedet',linkTab:'Hyperlink',button2Img:'Vil du lave billedknappen om til et almindeligt billede?',img2Button:'Vil du lave billedet om til en billedknap?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Egenskaber for Flash',propertiesTab:'Egenskaber',title:'Egenskaber for Flash',chkPlay:'Automatisk afspilning',chkLoop:'Gentagelse',chkMenu:'Vis Flash menu',chkFull:'Tillad fuldskærm',scale:'Skalér',scaleAll:'Vis alt',scaleNoBorder:'Ingen ramme',scaleFit:'Tilpas størrelse',access:'Script adgang',accessAlways:'Altid',accessSameDomain:'Samme domæne',accessNever:'Aldrig',alignAbsBottom:'Absolut nederst',alignAbsMiddle:'Absolut centreret',alignBaseline:'Grundlinje',alignTextTop:'Toppen af teksten',quality:'Kvalitet',qualityBest:'Bedste',qualityHigh:'Høj',qualityAutoHigh:'Auto høj',qualityMedium:'Medium',qualityAutoLow:'Auto lav',qualityLow:'Lav',windowModeWindow:'Vindue',windowModeOpaque:'Gennemsigtig (opaque)',windowModeTransparent:'Transparent',windowMode:'Vinduestilstand',flashvars:'Variabler for Flash',bgcolor:'Baggrundsfarve',hSpace:'Vandret margen',vSpace:'Lodret margen',validateSrc:'Indtast hyperlink URL!',validateHSpace:'Vandret margen skal være et tal.',validateVSpace:'Lodret margen skal være et tal.'},spellCheck:{toolbar:'Stavekontrol',title:'Stavekontrol',notAvailable:'Stavekontrol er desværre ikke tilgængelig.',errorLoading:'Fejl ved indlæsning af host: %s.',notInDic:'Ikke i ordbogen',changeTo:'Forslag',btnIgnore:'Ignorér',btnIgnoreAll:'Ignorér alle',btnReplace:'Erstat',btnReplaceAll:'Erstat alle',btnUndo:'Tilbage',noSuggestions:'(ingen forslag)',progress:'Stavekontrollen arbejder...',noMispell:'Stavekontrol færdig: Ingen fejl fundet',noChanges:'Stavekontrol færdig: Ingen ord ændret',oneChange:'Stavekontrol færdig: Et ord ændret',manyChanges:'Stavekontrol færdig: %1 ord ændret',ieSpellDownload:'Stavekontrol ikke installeret. Vil du installere den nu?'},smiley:{toolbar:'Smiley',title:'Vælg smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Talopstilling',bulletedlist:'Punktopstilling',indent:'Forøg indrykning',outdent:'Formindsk indrykning',justify:{left:'Venstrestillet',center:'Centreret',right:'Højrestillet',block:'Lige margener'},blockquote:'Blokcitat',clipboard:{title:'Indsæt',cutError:'Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).',copyError:'Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).',pasteMsg:'Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik på <STRONG>OK</STRONG>.',securityMsg:'Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?',toolbar:'Indsæt fra Word',title:'Indsæt fra Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Indsæt som ikke-formateret tekst',title:'Indsæt som ikke-formateret tekst'},templates:{button:'Skabeloner',title:'Indholdsskabeloner',options:'Template Options',insertOption:'Erstat det faktiske indhold',selectPromptMsg:'Vælg den skabelon, som skal åbnes i editoren (nuværende indhold vil blive overskrevet):',emptyListMsg:'(Der er ikke defineret nogen skabelon)'},showBlocks:'Vis afsnitsmærker',stylesCombo:{label:'Typografi',panelTitle:'Formatting Styles',panelTitle1:'Block typografi',panelTitle2:'Inline typografi',panelTitle3:'Object typografi'},format:{label:'Formatering',panelTitle:'Formatering',tag_p:'Normal',tag_pre:'Formateret',tag_address:'Adresse',tag_h1:'Overskrift 1',tag_h2:'Overskrift 2',tag_h3:'Overskrift 3',tag_h4:'Overskrift 4',tag_h5:'Overskrift 5',tag_h6:'Overskrift 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Skrifttype',voiceLabel:'Skrifttype',panelTitle:'Skrifttype'},fontSize:{label:'Skriftstørrelse',voiceLabel:'Skriftstørrelse',panelTitle:'Skriftstørrelse'},colorButton:{textColorTitle:'Tekstfarve',bgColorTitle:'Baggrundsfarve',panelTitle:'Colors',auto:'Automatisk',more:'Flere farver...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Stavekontrol mens du skriver',opera_title:'Not supported by Opera',enable:'Aktivér SCAYT',disable:'Deaktivér SCAYT',about:'Om SCAYT',toggle:'Skift/toggle SCAYT',options:'Indstillinger',langs:'Sprog',moreSuggestions:'Flere forslag',ignore:'Ignorér',ignoreAll:'Ignorér alle',addWord:'Tilføj ord',emptyDic:'Ordbogsnavn må ikke være tom.',optionsTab:'Indstillinger',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Sprog',dictionariesTab:'Ordbøger',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Om'},about:{title:'Om CKEditor',dlgTitle:'Om CKEditor',moreInfo:'For informationer omkring licens, se venligst vores hjemmeside (på engelsk):',copy:'Copyright © $1. Alle rettigheder forbeholdes.'},maximize:'Maximér',minimize:'Minimize',fakeobjects:{anchor:'Anker',flash:'Flashanimation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Ukendt objekt'},resize:'Træk for at skalere',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/de.js b/modules_v2/ckeditor/lang/de.js new file mode 100644 index 0000000000..308f0a6695 --- /dev/null +++ b/modules_v2/ckeditor/lang/de.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.de={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Quellcode',newPage:'Neue Seite',save:'Speichern',preview:'Vorschau',cut:'Ausschneiden',copy:'Kopieren',paste:'Einfügen',print:'Drucken',underline:'Unterstrichen',bold:'Fett',italic:'Kursiv',selectAll:'Alles auswählen',removeFormat:'Formatierungen entfernen',strike:'Durchgestrichen',subscript:'Tiefgestellt',superscript:'Hochgestellt',horizontalrule:'Horizontale Linie einfügen',pagebreak:'Seitenumbruch einfügen',pagebreakAlt:'Page Break',unlink:'Link entfernen',undo:'Rückgängig',redo:'Wiederherstellen',common:{browseServer:'Server durchsuchen',url:'URL',protocol:'Protokoll',upload:'Upload',uploadSubmit:'Zum Server senden',image:'Bild',flash:'Flash',form:'Formular',checkbox:'Checkbox',radio:'Radiobutton',textField:'Textfeld einzeilig',textarea:'Textfeld mehrzeilig',hiddenField:'verstecktes Feld',button:'Klickbutton',select:'Auswahlfeld',imageButton:'Bildbutton',notSet:'<nichts>',id:'ID',name:'Name',langDir:'Schreibrichtung',langDirLtr:'Links nach Rechts (LTR)',langDirRtl:'Rechts nach Links (RTL)',langCode:'Sprachenkürzel',longDescr:'Langform URL',cssClass:'Stylesheet Klasse',advisoryTitle:'Titel Beschreibung',cssStyle:'Style',ok:'OK',cancel:'Abbrechen',close:'Schließen',preview:'Vorschau',generalTab:'Allgemein',advancedTab:'Erweitert',validateNumberFailed:'Dieser Wert ist keine Nummer.',confirmNewPage:'Alle nicht gespeicherten Änderungen gehen verlohren. Sind sie sicher die neue Seite zu laden?',confirmCancel:'Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?',options:'Optionen',target:'Zielseite',targetNew:'Neues Fenster (_blank)',targetTop:'Oberstes Fenster (_top)',targetSelf:'Gleiches Fenster (_self)',targetParent:'Oberes Fenster (_parent)',langDirLTR:'Links nach Rechts (LNR)',langDirRTL:'Rechts nach Links (RNL)',styles:'Style',cssClasses:'Stylesheet Klasse',width:'Breite',height:'Höhe',align:'Ausrichtung',alignLeft:'Links',alignRight:'Rechts',alignCenter:'Zentriert',alignTop:'Oben',alignMiddle:'Mitte',alignBottom:'Unten',invalidHeight:'Höhe muss eine Zahl sein.',invalidWidth:'Breite muss eine Zahl sein.',unavailable:'%1<span class="cke_accessibility">, nicht verfügbar</span>'},contextmenu:{options:'Context Menu Optionen'},specialChar:{toolbar:'Sonderzeichen einfügen/editieren',title:'Sonderzeichen auswählen',options:'Sonderzeichen Optionen'},link:{toolbar:'Link einfügen/editieren',other:'<andere>',menu:'Link editieren',title:'Link',info:'Link-Info',target:'Zielseite',upload:'Upload',advanced:'Erweitert',type:'Link-Typ',toUrl:'URL',toAnchor:'Anker in dieser Seite',toEmail:'E-Mail',targetFrame:'<Frame>',targetPopup:'<Pop-up Fenster>',targetFrameName:'Ziel-Fenster-Name',targetPopupName:'Pop-up Fenster-Name',popupFeatures:'Pop-up Fenster-Eigenschaften',popupResizable:'Größe änderbar',popupStatusBar:'Statusleiste',popupLocationBar:'Adress-Leiste',popupToolbar:'Werkzeugleiste',popupMenuBar:'Menü-Leiste',popupFullScreen:'Vollbild (IE)',popupScrollBars:'Rollbalken',popupDependent:'Abhängig (Netscape)',popupLeft:'Linke Position',popupTop:'Obere Position',id:'Id',langDir:'Schreibrichtung',langDirLTR:'Links nach Rechts (LTR)',langDirRTL:'Rechts nach Links (RTL)',acccessKey:'Zugriffstaste',name:'Name',langCode:'Schreibrichtung',tabIndex:'Tab-Index',advisoryTitle:'Titel Beschreibung',advisoryContentType:'Inhaltstyp',cssClasses:'Stylesheet Klasse',charset:'Ziel-Zeichensatz',styles:'Style',selectAnchor:'Anker auswählen',anchorName:'nach Anker Name',anchorId:'nach Element Id',emailAddress:'E-Mail Addresse',emailSubject:'Betreffzeile',emailBody:'Nachrichtentext',noAnchors:'(keine Anker im Dokument vorhanden)',noUrl:'Bitte geben Sie die Link-URL an',noEmail:'Bitte geben Sie e-Mail Adresse an'},anchor:{toolbar:'Anker einfügen/editieren',menu:'Anker-Eigenschaften',title:'Anker-Eigenschaften',name:'Anker Name',errorName:'Bitte geben Sie den Namen des Ankers ein'},list:{numberedTitle:'Nummerierte Listen-Eigenschaften',bulletedTitle:'Listen-Eigenschaften',type:'Typ',start:'Start',validateStartNumber:'List Startnummer muss eine ganze Zahl sein.',circle:'Ring',disc:'Kreis',square:'Quadrat',none:'Keine',notset:'<nicht gesetzt>',armenian:'Armenisch Nummerierung',georgian:'Georgisch Nummerierung (an, ban, gan, etc.)',lowerRoman:'Klein römisch (i, ii, iii, iv, v, etc.)',upperRoman:'Groß römisch (I, II, III, IV, V, etc.)',lowerAlpha:'Klein alpha (a, b, c, d, e, etc.)',upperAlpha:'Groß alpha (A, B, C, D, E, etc.)',lowerGreek:'Klein griechisch (alpha, beta, gamma, etc.)',decimal:'Dezimal (1, 2, 3, etc.)',decimalLeadingZero:'Dezimal mit führende Null (01, 02, 03, etc.)'},findAndReplace:{title:'Suchen und Ersetzen',find:'Suchen',replace:'Ersetzen',findWhat:'Suche nach:',replaceWith:'Ersetze mit:',notFoundMsg:'Der gesuchte Text wurde nicht gefunden.',matchCase:'Groß-Kleinschreibung beachten',matchWord:'Nur ganze Worte suchen',matchCyclic:'zyklische suche',replaceAll:'Alle Ersetzen',replaceSuccessMsg:'%1 vorkommen ersetzt.'},table:{toolbar:'Tabelle',title:'Tabellen-Eigenschaften',menu:'Tabellen-Eigenschaften',deleteTable:'Tabelle löschen',rows:'Zeile',columns:'Spalte',border:'Rahmen',widthPx:'Pixel',widthPc:'%',widthUnit:'Breite Einheit',cellSpace:'Zellenabstand außen',cellPad:'Zellenabstand innen',caption:'Überschrift',summary:'Inhaltsübersicht',headers:'Headers',headersNone:'Keine',headersColumn:'Erste Spalte',headersRow:'Erste Zeile',headersBoth:'Beide',invalidRows:'Die Anzahl der Zeilen muß größer als 0 sein.',invalidCols:'Die Anzahl der Spalten muß größer als 0 sein..',invalidBorder:'Die Rahmenbreite muß eine Zahl sein.',invalidWidth:'Die Tabellenbreite muss eine Zahl sein.',invalidHeight:'Die Tabellenbreite muß eine Zahl sein.',invalidCellSpacing:'Der Zellenabstand außen muß eine Zahl sein.',invalidCellPadding:'Der Zellenabstand innen muß eine Zahl sein.',cell:{menu:'Zelle',insertBefore:'Zelle davor einfügen',insertAfter:'Zelle danach einfügen',deleteCell:'Zelle löschen',merge:'Zellen verbinden',mergeRight:'nach rechts verbinden',mergeDown:'nach unten verbinden',splitHorizontal:'Zelle horizontal teilen',splitVertical:'Zelle vertikal teilen',title:'Zellen Eigenschaften',cellType:'Zellart',rowSpan:'Anzahl Zeilen verbinden',colSpan:'Anzahl Spalten verbinden',wordWrap:'Zeilenumbruch',hAlign:'Horizontale Ausrichtung',vAlign:'Vertikale Ausrichtung',alignBaseline:'Grundlinie',bgColor:'Hintergrundfarbe',borderColor:'Rahmenfarbe',data:'Daten',header:'Überschrift',yes:'Ja',no:'Nein',invalidWidth:'Zellenbreite muß eine Zahl sein.',invalidHeight:'Zellenhöhe muß eine Zahl sein.',invalidRowSpan:'"Anzahl Zeilen verbinden" muss eine Ganzzahl sein.',invalidColSpan:'"Anzahl Spalten verbinden" muss eine Ganzzahl sein.',chooseColor:'Wählen'},row:{menu:'Zeile',insertBefore:'Zeile oberhalb einfügen',insertAfter:'Zeile unterhalb einfügen',deleteRow:'Zeile entfernen'},column:{menu:'Spalte',insertBefore:'Spalte links davor einfügen',insertAfter:'Spalte rechts danach einfügen',deleteColumn:'Spalte löschen'}},button:{title:'Button-Eigenschaften',text:'Text (Wert)',type:'Typ',typeBtn:'Button',typeSbm:'Absenden',typeRst:'Zurücksetzen'},checkboxAndRadio:{checkboxTitle:'Checkbox-Eigenschaften',radioTitle:'Optionsfeld-Eigenschaften',value:'Wert',selected:'ausgewählt'},form:{title:'Formular-Eigenschaften',menu:'Formular-Eigenschaften',action:'Action',method:'Method',encoding:'Zeichenkodierung'},select:{title:'Auswahlfeld-Eigenschaften',selectInfo:'Info',opAvail:'Mögliche Optionen',value:'Wert',size:'Größe',lines:'Linien',chkMulti:'Erlaube Mehrfachauswahl',opText:'Text',opValue:'Wert',btnAdd:'Hinzufügen',btnModify:'Ändern',btnUp:'Hoch',btnDown:'Runter',btnSetValue:'Setze als Standardwert',btnDelete:'Entfernen'},textarea:{title:'Textfeld (mehrzeilig) Eigenschaften',cols:'Spalten',rows:'Reihen'},textfield:{title:'Textfeld (einzeilig) Eigenschaften',name:'Name',value:'Wert',charWidth:'Zeichenbreite',maxChars:'Max. Zeichen',type:'Typ',typeText:'Text',typePass:'Passwort'},hidden:{title:'Verstecktes Feld-Eigenschaften',name:'Name',value:'Wert'},image:{title:'Bild-Eigenschaften',titleButton:'Bildbutton-Eigenschaften',menu:'Bild-Eigenschaften',infoTab:'Bild-Info',btnUpload:'Zum Server senden',upload:'Hochladen',alt:'Alternativer Text',lockRatio:'Größenverhältnis beibehalten',unlockRatio:'Ratio Freischalten',resetSize:'Größe zurücksetzen',border:'Rahmen',hSpace:'Horizontal-Abstand',vSpace:'Vertikal-Abstand',alertUrl:'Bitte geben Sie die Bild-URL an',linkTab:'Link',button2Img:'Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?',img2Button:'Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?',urlMissing:'Imagequelle URL fehlt.',validateBorder:'Rahmen muß eine ganze Zahl sein.',validateHSpace:'Horizontal-Abstand muß eine ganze Zahl sein.',validateVSpace:'Vertikal-Abstand must be a whole number.'},flash:{properties:'Flash-Eigenschaften',propertiesTab:'Eigenschaften',title:'Flash-Eigenschaften',chkPlay:'autom. Abspielen',chkLoop:'Endlosschleife',chkMenu:'Flash-Menü aktivieren',chkFull:'Vollbildmodus erlauben',scale:'Skalierung',scaleAll:'Alles anzeigen',scaleNoBorder:'ohne Rand',scaleFit:'Passgenau',access:'Skript Zugang',accessAlways:'Immer',accessSameDomain:'Gleiche Domain',accessNever:'Nie',alignAbsBottom:'Abs Unten',alignAbsMiddle:'Abs Mitte',alignBaseline:'Baseline',alignTextTop:'Text Oben',quality:'Qualität',qualityBest:'Beste',qualityHigh:'Hoch',qualityAutoHigh:'Auto Hoch',qualityMedium:'Medium',qualityAutoLow:'Auto Niedrig',qualityLow:'Niedrig',windowModeWindow:'Fenster',windowModeOpaque:'Deckend',windowModeTransparent:'Transparent',windowMode:'Fenster Modus',flashvars:'Variablen für Flash',bgcolor:'Hintergrundfarbe',hSpace:'Horizontal-Abstand',vSpace:'Vertikal-Abstand',validateSrc:'Bitte geben Sie die Link-URL an',validateHSpace:'HSpace muss eine Zahl sein.',validateVSpace:'VSpace muss eine Zahl sein.'},spellCheck:{toolbar:'Rechtschreibprüfung',title:'Rechtschreibprüfung',notAvailable:'Entschuldigung, aber dieser Dienst steht im Moment nicht zur verfügung.',errorLoading:'Fehler beim laden des Dienstanbieters: %s.',notInDic:'Nicht im Wörterbuch',changeTo:'Ändern in',btnIgnore:'Ignorieren',btnIgnoreAll:'Alle Ignorieren',btnReplace:'Ersetzen',btnReplaceAll:'Alle Ersetzen',btnUndo:'Rückgängig',noSuggestions:' - keine Vorschläge - ',progress:'Rechtschreibprüfung läuft...',noMispell:'Rechtschreibprüfung abgeschlossen - keine Fehler gefunden',noChanges:'Rechtschreibprüfung abgeschlossen - keine Worte geändert',oneChange:'Rechtschreibprüfung abgeschlossen - ein Wort geändert',manyChanges:'Rechtschreibprüfung abgeschlossen - %1 Wörter geändert',ieSpellDownload:'Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?'},smiley:{toolbar:'Smiley',title:'Smiley auswählen',options:'Smiley Optionen'},elementsPath:{eleLabel:'Elements Pfad',eleTitle:'%1 Element'},numberedlist:'Nummerierte Liste',bulletedlist:'Liste',indent:'Einzug erhöhen',outdent:'Einzug verringern',justify:{left:'Linksbündig',center:'Zentriert',right:'Rechtsbündig',block:'Blocksatz'},blockquote:'Zitatblock',clipboard:{title:'Einfügen',cutError:'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).',copyError:'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).',pasteMsg:'Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.',securityMsg:'Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.',pasteArea:'Einfügebereich'},pastefromword:{confirmCleanup:'Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?',toolbar:'aus MS-Word einfügen',title:'aus MS-Word einfügen',error:'Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen'},pasteText:{button:'Als Text einfügen',title:'Als Text einfügen'},templates:{button:'Vorlagen',title:'Vorlagen',options:'Vorlagen Optionen',insertOption:'Aktuellen Inhalt ersetzen',selectPromptMsg:'Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):',emptyListMsg:'(keine Vorlagen definiert)'},showBlocks:'Blöcke anzeigen',stylesCombo:{label:'Stil',panelTitle:'Formatierungenstil',panelTitle1:'Block Stilart',panelTitle2:'Inline Stilart',panelTitle3:'Objekt Stilart'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatiert',tag_address:'Addresse',tag_h1:'Überschrift 1',tag_h2:'Überschrift 2',tag_h3:'Überschrift 3',tag_h4:'Überschrift 4',tag_h5:'Überschrift 5',tag_h6:'Überschrift 6',tag_div:'Normal (DIV)'},div:{title:'Div Container erzeugen',toolbar:'Div Container erzeugen',cssClassInputLabel:'Stylesheet Klasse',styleSelectLabel:'Stil',IdInputLabel:'Id',languageCodeInputLabel:' Sprache Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Beratungs Titel',langDirLabel:'Sprache Richtung',langDirLTRLabel:'Links nach Rechs (LTR)',langDirRTLLabel:'Rechs nach Links (RTL)',edit:'Div Bearbeiten',remove:'Div Entfernen'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Schriftart',voiceLabel:'Schriftart',panelTitle:'Schriftart'},fontSize:{label:'Größe',voiceLabel:'Schrifgröße',panelTitle:'Größe'},colorButton:{textColorTitle:'Textfarbe',bgColorTitle:'Hintergrundfarbe',panelTitle:'Farben',auto:'Automatisch',more:'Weitere Farben...'},colors:{'000':'Schwarz',800000:'Kastanienbraun','8B4513':'Braun','2F4F4F':'Dunkles Schiefergrau','008080':'Blaugrün','000080':'Navy','4B0082':'Indigo',696969:'Dunkelgrau',B22222:'Ziegelrot',A52A2A:'Braun',DAA520:'Goldgelb','006400':'Dunkelgrün','40E0D0':'Türkis','0000CD':'Medium Blau',800080:'Lila',808080:'Grau',F00:'Rot',FF8C00:'Dunkelorange',FFD700:'Gold','008000':'Grün','0FF':'Cyan','00F':'Blau',EE82EE:'Hellviolett',A9A9A9:'Dunkelgrau',FFA07A:'Helles Lachsrosa',FFA500:'Orange',FFFF00:'Gelb','00FF00':'Lime',AFEEEE:'Blaß-Türkis',ADD8E6:'Hellblau',DDA0DD:'Pflaumenblau',D3D3D3:'Hellgrau',FFF0F5:'Lavendel',FAEBD7:'Antik Weiß',FFFFE0:'Hellgelb',F0FFF0:'Honigtau',F0FFFF:'Azurblau',F0F8FF:'Alice Blau',E6E6FA:'Lavendel',FFF:'Weiß'},scayt:{title:'Rechtschreibprüfung während der Texteingabe',opera_title:'Nicht von Opera unterstützt',enable:'SCAYT einschalten',disable:'SCAYT ausschalten',about:'Über SCAYT',toggle:'SCAYT umschalten',options:'Optionen',langs:'Sprachen',moreSuggestions:'Mehr Vorschläge',ignore:'Ignorieren',ignoreAll:'Alle ignorieren',addWord:'Wort hinzufügen',emptyDic:'Wörterbuchname sollte leer sein.',optionsTab:'Optionen',allCaps:'Groß geschriebenen Wörter ignorieren',ignoreDomainNames:'Domain-Namen ignorieren',mixedCase:'Wörter mit gemischte Setzkasten ignorieren',mixedWithDigits:'Wörter mit Zahlen ignorieren',languagesTab:'Sprachen',dictionariesTab:'Wörterbücher',dic_field_name:'Wörterbuchname',dic_create:'Erzeugen',dic_restore:'Wiederherstellen',dic_delete:'Löschen',dic_rename:'Umbenennen',dic_info:'Anfangs wird das Benutzerwörterbuch in einem Cookie gespeichert. Allerdings sind Cookies in der Größe begrenzt. Wenn das Benutzerwörterbuch bis zu einem Punkt wächst, wo es nicht mehr in einem Cookie gespeichert werden kann, wird das Benutzerwörterbuch auf dem Server gespeichert. Um Ihr persönliches Wörterbuch auf dem Server zu speichern, müssen Sie einen Namen für das Wörterbuch angeben. Falls Sie schon ein gespeicherte Wörterbuch haben, geben Sie bitte dessen Namen ein und klicken Sie auf die Schaltfläche Wiederherstellen.',aboutTab:'Über'},about:{title:'Über CKEditor',dlgTitle:'Über CKEditor',moreInfo:'Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:',copy:'Copyright © $1. Alle Rechte vorbehalten.'},maximize:'Maximieren',minimize:'Minimieren',fakeobjects:{anchor:'Anker',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unbekanntes Objekt'},resize:'Zum Vergrößern ziehen',colordialog:{title:'Farbe wählen',options:'Farbeoptionen',highlight:'Hervorheben',selected:'Ausgewählte Farbe',clear:'Entfernen'},toolbarCollapse:'Symbolleiste einklappen',toolbarExpand:'Symbolleiste ausklappen',bidi:{ltr:'Leserichtung von Links nach Rechts',rtl:'Leserichtung von Rechts nach Links'}};
diff --git a/modules_v2/ckeditor/lang/el.js b/modules_v2/ckeditor/lang/el.js new file mode 100644 index 0000000000..10aef45853 --- /dev/null +++ b/modules_v2/ckeditor/lang/el.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.el={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'HTML κώδικας',newPage:'Νέα Σελίδα',save:'Αποθήκευση',preview:'Προεπισκόπιση',cut:'Αποκοπή',copy:'Αντιγραφή',paste:'Επικόλληση',print:'Εκτύπωση',underline:'Υπογράμμιση',bold:'Έντονα',italic:'Πλάγια',selectAll:'Επιλογή όλων',removeFormat:'Αφαίρεση Μορφοποίησης',strike:'Διαγράμμιση',subscript:'Δείκτης',superscript:'Εκθέτης',horizontalrule:'Εισαγωγή Οριζόντιας Γραμμής',pagebreak:'Εισαγωγή τέλους σελίδας',pagebreakAlt:'Page Break',unlink:'Αφαίρεση Συνδέσμου (Link)',undo:'Αναίρεση',redo:'Επαναφορά',common:{browseServer:'Εξερεύνηση διακομιστή',url:'URL',protocol:'Προτόκολο',upload:'Αποστολή',uploadSubmit:'Αποστολή στον Διακομιστή',image:'Εικόνα',flash:'Εισαγωγή Flash',form:'Φόρμα',checkbox:'Κουτί επιλογής',radio:'Κουμπί Radio',textField:'Πεδίο κειμένου',textarea:'Περιοχή κειμένου',hiddenField:'Κρυφό πεδίο',button:'Κουμπί',select:'Πεδίο επιλογής',imageButton:'Κουμπί εικόνας',notSet:'<χωρίς>',id:'Id',name:'Όνομα',langDir:'Κατεύθυνση κειμένου',langDirLtr:'Αριστερά προς Δεξιά (LTR)',langDirRtl:'Δεξιά προς Αριστερά (RTL)',langCode:'Κωδικός Γλώσσας',longDescr:'Αναλυτική περιγραφή URL',cssClass:'Stylesheet Classes',advisoryTitle:'Συμβουλευτικός τίτλος',cssStyle:'Στύλ',ok:'OK',cancel:'Ακύρωση',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Για προχωρημένους',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Πλάτος',height:'Ύψος',align:'Ευθυγράμμιση (Align)',alignLeft:'Αριστερά',alignRight:'Δεξιά (Right)',alignCenter:'Κέντρο',alignTop:'Πάνω (Top)',alignMiddle:'Μέση (Middle)',alignBottom:'Κάτω (Bottom)',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Εισαγωγή Ειδικού Συμβόλου',title:'Επιλέξτε ένα Ειδικό Σύμβολο',options:'Special Character Options'},link:{toolbar:'Εισαγωγή/Μεταβολή Συνδέσμου (Link)',other:'<άλλος>',menu:'Μεταβολή Συνδέσμου (Link)',title:'Σύνδεσμος (Link)',info:'Link',target:'Παράθυρο Στόχος (Target)',upload:'Αποστολή',advanced:'Για προχωρημένους',type:'Τύπος συνδέσμου (Link)',toUrl:'URL',toAnchor:'Άγκυρα σε αυτή τη σελίδα',toEmail:'E-Mail',targetFrame:'<πλαίσιο>',targetPopup:'<παράθυρο popup>',targetFrameName:'Όνομα πλαισίου στόχου',targetPopupName:'Όνομα Popup Window',popupFeatures:'Επιλογές Popup Window',popupResizable:'Resizable',popupStatusBar:'Μπάρα Status',popupLocationBar:'Μπάρα Τοποθεσίας',popupToolbar:'Μπάρα Εργαλείων',popupMenuBar:'Μπάρα Menu',popupFullScreen:'Ολόκληρη η Οθόνη (IE)',popupScrollBars:'Μπάρες Κύλισης',popupDependent:'Dependent (Netscape)',popupLeft:'Τοποθεσία Αριστερής Άκρης',popupTop:'Τοποθεσία Πάνω Άκρης',id:'Id',langDir:'Κατεύθυνση κειμένου',langDirLTR:'Αριστερά προς Δεξιά (LTR)',langDirRTL:'Δεξιά προς Αριστερά (RTL)',acccessKey:'Συντόμευση (Access Key)',name:'Όνομα',langCode:'Κατεύθυνση κειμένου',tabIndex:'Tab Index',advisoryTitle:'Συμβουλευτικός τίτλος',advisoryContentType:'Συμβουλευτικός τίτλος περιεχομένου',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Στύλ',selectAnchor:'Επιλέξτε μια άγκυρα',anchorName:'Βάσει του Ονόματος (Name) της άγκυρας',anchorId:'Βάσει του Element Id',emailAddress:'Διεύθυνση Ηλεκτρονικού Ταχυδρομείου',emailSubject:'Θέμα Μηνύματος',emailBody:'Κείμενο Μηνύματος',noAnchors:'(Δεν υπάρχουν άγκυρες στο κείμενο)',noUrl:'Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)',noEmail:'Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου'},anchor:{toolbar:'Εισαγωγή/επεξεργασία Anchor',menu:'Ιδιότητες άγκυρας',title:'Ιδιότητες άγκυρας',name:'Όνομα άγκυρας',errorName:'Παρακαλούμε εισάγετε όνομα άγκυρας'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Αναζήτηση',replace:'Αντικατάσταση',findWhat:'Αναζήτηση:',replaceWith:'Αντικατάσταση με:',notFoundMsg:'Το κείμενο δεν βρέθηκε.',matchCase:'Έλεγχος πεζών/κεφαλαίων',matchWord:'Εύρεση πλήρους λέξης',matchCyclic:'Match cyclic',replaceAll:'Αντικατάσταση Όλων',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Πίνακας',title:'Ιδιότητες Πίνακα',menu:'Ιδιότητες Πίνακα',deleteTable:'Διαγραφή πίνακα',rows:'Γραμμές',columns:'Κολώνες',border:'Μέγεθος Περιθωρίου',widthPx:'pixels',widthPc:'%',widthUnit:'width unit',cellSpace:'Απόσταση κελιών',cellPad:'Γέμισμα κελιών',caption:'Υπέρτιτλος',summary:'Περίληψη',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Κελί',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Διαγραφή Κελιών',merge:'Ενοποίηση Κελιών',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Σειρά',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Διαγραφή Γραμμών'},column:{menu:'Στήλη',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Διαγραφή Κολωνών'}},button:{title:'Ιδιότητες κουμπιού',text:'Κείμενο (Τιμή)',type:'Τύπος',typeBtn:'Κουμπί',typeSbm:'Καταχώρηση',typeRst:'Επαναφορά'},checkboxAndRadio:{checkboxTitle:'Ιδιότητες κουμπιού επιλογής',radioTitle:'Ιδιότητες κουμπιού radio',value:'Τιμή',selected:'Επιλεγμένο'},form:{title:'Ιδιότητες φόρμας',menu:'Ιδιότητες φόρμας',action:'Δράση',method:'Μάθοδος',encoding:'Encoding'},select:{title:'Ιδιότητες πεδίου επιλογής',selectInfo:'Πληροφορίες',opAvail:'Διαθέσιμες επιλογές',value:'Τιμή',size:'Μέγεθος',lines:'γραμμές',chkMulti:'Πολλαπλές επιλογές',opText:'Κείμενο',opValue:'Τιμή',btnAdd:'Προσθήκη',btnModify:'Αλλαγή',btnUp:'Πάνω',btnDown:'Κάτω',btnSetValue:'Προεπιλεγμένη επιλογή',btnDelete:'Διαγραφή'},textarea:{title:'Ιδιότητες περιοχής κειμένου',cols:'Στήλες',rows:'Σειρές'},textfield:{title:'Ιδιότητες πεδίου κειμένου',name:'Όνομα',value:'Τιμή',charWidth:'Μήκος χαρακτήρων',maxChars:'Μέγιστοι χαρακτήρες',type:'Τύπος',typeText:'Κείμενο',typePass:'Κωδικός'},hidden:{title:'Ιδιότητες κρυφού πεδίου',name:'Όνομα',value:'Τιμή'},image:{title:'Ιδιότητες Εικόνας',titleButton:'Ιδιότητες κουμπιού εικόνας',menu:'Ιδιότητες Εικόνας',infoTab:'Πληροφορίες Εικόνας',btnUpload:'Αποστολή στον Διακομιστή',upload:'Αποστολή',alt:'Εναλλακτικό Κείμενο (ALT)',lockRatio:'Κλείδωμα Αναλογίας',unlockRatio:'Unlock Ratio',resetSize:'Επαναφορά Αρχικού Μεγέθους',border:'Περιθώριο',hSpace:'Οριζόντιος Χώρος (HSpace)',vSpace:'Κάθετος Χώρος (VSpace)',alertUrl:'Εισάγετε την τοποθεσία (URL) της εικόνας',linkTab:'Σύνδεσμος',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Ιδιότητες Flash',propertiesTab:'Properties',title:'Ιδιότητες flash',chkPlay:'Αυτόματη έναρξη',chkLoop:'Επανάληψη',chkMenu:'Ενεργοποίηση Flash Menu',chkFull:'Allow Fullscreen',scale:'Κλίμακα',scaleAll:'Εμφάνιση όλων',scaleNoBorder:'Χωρίς όρια',scaleFit:'Ακριβής εφαρμογή',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Απόλυτα Κάτω (Abs Bottom)',alignAbsMiddle:'Απόλυτα στη Μέση (Abs Middle)',alignBaseline:'Γραμμή Βάσης (Baseline)',alignTextTop:'Κορυφή Κειμένου (Text Top)',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Χρώμα Υποβάθρου',hSpace:'Οριζόντιος Χώρος (HSpace)',vSpace:'Κάθετος Χώρος (VSpace)',validateSrc:'Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Ορθογραφικός έλεγχος',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Δεν υπάρχει στο λεξικό',changeTo:'Αλλαγή σε',btnIgnore:'Αγνόηση',btnIgnoreAll:'Αγνόηση όλων',btnReplace:'Αντικατάσταση',btnReplaceAll:'Αντικατάσταση όλων',btnUndo:'Αναίρεση',noSuggestions:'- Δεν υπάρχουν προτάσεις -',progress:'Ορθογραφικός έλεγχος σε εξέλιξη...',noMispell:'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη',noChanges:'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις',oneChange:'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Μια λέξη άλλαξε',manyChanges:'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: %1 λέξεις άλλαξαν',ieSpellDownload:'Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;'},smiley:{toolbar:'Smiley',title:'Επιλέξτε ένα Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Λίστα με Αριθμούς',bulletedlist:'Λίστα με Bullets',indent:'Αύξηση Εσοχής',outdent:'Μείωση Εσοχής',justify:{left:'Στοίχιση Αριστερά',center:'Στοίχιση στο Κέντρο',right:'Στοίχιση Δεξιά',block:'Πλήρης Στοίχιση (Block)'},blockquote:'Block Quote',clipboard:{title:'Επικόλληση',cutError:'Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).',copyError:'Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).',pasteMsg:'Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (<STRONG>Ctrl/Cmd+V</STRONG>) και πατήστε <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Επικόλληση από το Word',title:'Επικόλληση από το Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Επικόλληση ως Απλό Κείμενο',title:'Επικόλληση ως Απλό Κείμενο'},templates:{button:'Πρότυπα',title:'Πρότυπα περιεχομένου',options:'Template Options',insertOption:'Αντικατάσταση υπάρχοντων περιεχομένων',selectPromptMsg:'Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα<br>(τα υπάρχοντα περιεχόμενα θα χαθούν):',emptyListMsg:'(Δεν έχουν καθοριστεί πρότυπα)'},showBlocks:'Show Blocks',stylesCombo:{label:'Στυλ',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Μορφή Γραμματοσειράς',panelTitle:'Μορφή Γραμματοσειράς',tag_p:'Κανονικό',tag_pre:'Μορφοποιημένο',tag_address:'Διεύθυνση',tag_h1:'Επικεφαλίδα 1',tag_h2:'Επικεφαλίδα 2',tag_h3:'Επικεφαλίδα 3',tag_h4:'Επικεφαλίδα 4',tag_h5:'Επικεφαλίδα 5',tag_h6:'Επικεφαλίδα 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Γραμματοσειρά',voiceLabel:'Font',panelTitle:'Γραμματοσειρά'},fontSize:{label:'Μέγεθος',voiceLabel:'Font Size',panelTitle:'Μέγεθος'},colorButton:{textColorTitle:'Χρώμα Γραμμάτων',bgColorTitle:'Χρώμα Υποβάθρου',panelTitle:'Colors',auto:'Αυτόματο',more:'Περισσότερα χρώματα...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/en-au.js b/modules_v2/ckeditor/lang/en-au.js new file mode 100644 index 0000000000..ffd6c1090b --- /dev/null +++ b/modules_v2/ckeditor/lang/en-au.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang['en-au']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Width',height:'Height',align:'Align',alignLeft:'Left',alignRight:'Right',alignCenter:'Centre',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character',options:'Special Character Options'},link:{toolbar:'Link',other:'<other>',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toUrl:'URL',toAnchor:'Link to anchor in the text',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'Left Position',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',upload:'Upload',alt:'Alternative Text',lockRatio:'Lock Ratio',unlockRatio:'Unlock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background colour',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Align Left',center:'Centre',right:'Align Right',block:'Justify'},blockquote:'Block Quote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Paste from Word',title:'Paste from Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Paragraph Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size'},colorButton:{textColorTitle:'Text Colour',bgColorTitle:'Background Colour',panelTitle:'Colors',auto:'Automatic',more:'More Colours...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/en-ca.js b/modules_v2/ckeditor/lang/en-ca.js new file mode 100644 index 0000000000..765e37f27b --- /dev/null +++ b/modules_v2/ckeditor/lang/en-ca.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang['en-ca']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Width',height:'Height',align:'Align',alignLeft:'Left',alignRight:'Right',alignCenter:'Centre',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character',options:'Special Character Options'},link:{toolbar:'Link',other:'<other>',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toUrl:'URL',toAnchor:'Link to anchor in the text',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'Left Position',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',upload:'Upload',alt:'Alternative Text',lockRatio:'Lock Ratio',unlockRatio:'Unlock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background colour',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Align Left',center:'Centre',right:'Align Right',block:'Justify'},blockquote:'Block Quote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Paste from Word',title:'Paste from Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Paragraph Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size'},colorButton:{textColorTitle:'Text Colour',bgColorTitle:'Background Colour',panelTitle:'Colors',auto:'Automatic',more:'More Colours...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/en-gb.js b/modules_v2/ckeditor/lang/en-gb.js new file mode 100644 index 0000000000..c79ef71428 --- /dev/null +++ b/modules_v2/ckeditor/lang/en-gb.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang['en-gb']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Width',height:'Height',align:'Align',alignLeft:'Left',alignRight:'Right',alignCenter:'Centre',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character',options:'Special Character Options'},link:{toolbar:'Link',other:'<other>',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toUrl:'URL',toAnchor:'Link to anchor in the text',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'Left Position',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',upload:'Upload',alt:'Alternative Text',lockRatio:'Lock Ratio',unlockRatio:'Unlock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background colour',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Align Left',center:'Centre',right:'Align Right',block:'Justify'},blockquote:'Block Quote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Paste from Word',title:'Paste from Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Paragraph Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size'},colorButton:{textColorTitle:'Text Colour',bgColorTitle:'Background Colour',panelTitle:'Colors',auto:'Automatic',more:'More Colours...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/en.js b/modules_v2/ckeditor/lang/en.js new file mode 100644 index 0000000000..b6881a0063 --- /dev/null +++ b/modules_v2/ckeditor/lang/en.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.en={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Width',height:'Height',align:'Alignment',alignLeft:'Left',alignRight:'Right',alignCenter:'Center',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character',options:'Special Character Options'},link:{toolbar:'Link',other:'<other>',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toUrl:'URL',toAnchor:'Link to anchor in the text',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'Left Position',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',upload:'Upload',alt:'Alternative Text',lockRatio:'Lock Ratio',unlockRatio:'Unlock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignTextTop:'Text Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background color',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Align Left',center:'Center',right:'Align Right',block:'Justify'},blockquote:'Block Quote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Paste from Word',title:'Paste from Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Paragraph Format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size'},colorButton:{textColorTitle:'Text Color',bgColorTitle:'Background Color',panelTitle:'Colors',auto:'Automatic',more:'More Colors...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/eo.js b/modules_v2/ckeditor/lang/eo.js new file mode 100644 index 0000000000..be1470311a --- /dev/null +++ b/modules_v2/ckeditor/lang/eo.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.eo={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Fonto',newPage:'Nova Paĝo',save:'Sekurigi',preview:'Vidigi Aspekton',cut:'Eltondi',copy:'Kopii',paste:'Interglui',print:'Presi',underline:'Substreko',bold:'Grasa',italic:'Kursiva',selectAll:'Elekti ĉion',removeFormat:'Forigi Formaton',strike:'Trastreko',subscript:'Subskribo',superscript:'Superskribo',horizontalrule:'Enmeti Horizonta Linio',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Forigi Ligilon',undo:'Malfari',redo:'Refari',common:{browseServer:'Foliumi en la Servilo',url:'URL',protocol:'Protokolo',upload:'Alŝuti',uploadSubmit:'Sendu al Servilo',image:'Bildo',flash:'Flash',form:'Formularo',checkbox:'Markobutono',radio:'Radiobutono',textField:'Teksta kampo',textarea:'Teksta Areo',hiddenField:'Kaŝita Kampo',button:'Butono',select:'Elekta Kampo',imageButton:'Bildbutono',notSet:'<Defaŭlta>',id:'Id',name:'Nomo',langDir:'Skribdirekto',langDirLtr:'De maldekstro dekstren (LTR)',langDirRtl:'De dekstro maldekstren (RTL)',langCode:'Lingva Kodo',longDescr:'URL de Longa Priskribo',cssClass:'Klasoj de Stilfolioj',advisoryTitle:'Indika Titolo',cssStyle:'Stilo',ok:'Akcepti',cancel:'Rezigni',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Speciala',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Larĝo',height:'Alto',align:'Ĝisrandigo',alignLeft:'Maldekstre',alignRight:'Dekstre',alignCenter:'Centre',alignTop:'Supre',alignMiddle:'Centre',alignBottom:'Malsupre',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Enmeti Specialan Signon',title:'Enmeti Specialan Signon',options:'Special Character Options'},link:{toolbar:'Enmeti/Ŝanĝi Ligilon',other:'<other>',menu:'Modifier Ligilon',title:'Ligilo',info:'Informoj pri la Ligilo',target:'Celo',upload:'Alŝuti',advanced:'Speciala',type:'Tipo de Ligilo',toUrl:'URL',toAnchor:'Ankri en tiu ĉi paĝo',toEmail:'Retpoŝto',targetFrame:'<kadro>',targetPopup:'<ŝprucfenestro>',targetFrameName:'Nomo de Kadro',targetPopupName:'Nomo de Ŝprucfenestro',popupFeatures:'Atributoj de la Ŝprucfenestro',popupResizable:'Resizable',popupStatusBar:'Statobreto',popupLocationBar:'Adresobreto',popupToolbar:'Ilobreto',popupMenuBar:'Menubreto',popupFullScreen:'Tutekrane (IE)',popupScrollBars:'Rulumlisteloj',popupDependent:'Dependa (Netscape)',popupLeft:'Pozicio de Maldekstro',popupTop:'Pozicio de Supro',id:'Id',langDir:'Skribdirekto',langDirLTR:'De maldekstro dekstren (LTR)',langDirRTL:'De dekstro maldekstren (RTL)',acccessKey:'Fulmoklavo',name:'Nomo',langCode:'Skribdirekto',tabIndex:'Taba Ordo',advisoryTitle:'Indika Titolo',advisoryContentType:'Indika Enhavotipo',cssClasses:'Klasoj de Stilfolioj',charset:'Signaro de la Ligita Rimedo',styles:'Stilo',selectAnchor:'Elekti Ankron',anchorName:'Per Ankronomo',anchorId:'Per Elementidentigilo',emailAddress:'Retadreso',emailSubject:'Temlinio',emailBody:'Mesaĝa korpo',noAnchors:'<Ne disponeblas ankroj en la dokumento>',noUrl:'Bonvolu entajpi la URL-on',noEmail:'Bonvolu entajpi la retadreson'},anchor:{toolbar:'Enmeti/Ŝanĝi Ankron',menu:'Ankraj Atributoj',title:'Ankraj Atributoj',name:'Ankra Nomo',errorName:'Bv tajpi la ankran nomon'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Serĉi',replace:'Anstataŭigi',findWhat:'Serĉi:',replaceWith:'Anstataŭigi per:',notFoundMsg:'La celteksto ne estas trovita.',matchCase:'Kongruigi Usklecon',matchWord:'Tuta Vorto',matchCyclic:'Match cyclic',replaceAll:'Anstataŭigi Ĉiun',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabelo',title:'Atributoj de Tabelo',menu:'Atributoj de Tabelo',deleteTable:'Delete Table',rows:'Linioj',columns:'Kolumnoj',border:'Bordero',widthPx:'Bitbilderoj',widthPc:'elcentoj',widthUnit:'width unit',cellSpace:'Interspacigo de Ĉeloj',cellPad:'Ĉirkaŭenhava Plenigado',caption:'Titolo',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Forigi Ĉelojn',merge:'Kunfandi Ĉelojn',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Forigi Liniojn'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Forigi Kolumnojn'}},button:{title:'Butonaj Atributoj',text:'Teksto (Valoro)',type:'Tipo',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Markobutonaj Atributoj',radioTitle:'Radiobutonaj Atributoj',value:'Valoro',selected:'Elektita'},form:{title:'Formularaj Atributoj',menu:'Formularaj Atributoj',action:'Ago',method:'Metodo',encoding:'Encoding'},select:{title:'Atributoj de Elekta Kampo',selectInfo:'Select Info',opAvail:'Elektoj Disponeblaj',value:'Valoro',size:'Grando',lines:'Linioj',chkMulti:'Permesi Plurajn Elektojn',opText:'Teksto',opValue:'Valoro',btnAdd:'Aldoni',btnModify:'Modifi',btnUp:'Supren',btnDown:'Malsupren',btnSetValue:'Agordi kiel Elektitan Valoron',btnDelete:'Forigi'},textarea:{title:'Atributoj de Teksta Areo',cols:'Kolumnoj',rows:'Vicoj'},textfield:{title:'Atributoj de Teksta Kampo',name:'Nomo',value:'Valoro',charWidth:'Signolarĝo',maxChars:'Maksimuma Nombro da Signoj',type:'Tipo',typeText:'Teksto',typePass:'Pasvorto'},hidden:{title:'Atributoj de Kaŝita Kampo',name:'Nomo',value:'Valoro'},image:{title:'Atributoj de Bildo',titleButton:'Bildbutonaj Atributoj',menu:'Atributoj de Bildo',infoTab:'Informoj pri Bildo',btnUpload:'Sendu al Servilo',upload:'Alŝuti',alt:'Anstataŭiga Teksto',lockRatio:'Konservi Proporcion',unlockRatio:'Unlock Ratio',resetSize:'Origina Grando',border:'Bordero',hSpace:'HSpaco',vSpace:'VSpaco',alertUrl:'Bonvolu tajpi la URL de la bildo',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Malsupre',alignAbsMiddle:'Abs Centre',alignBaseline:'Je Malsupro de Teksto',alignTextTop:'Je Supro de Teksto',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Fona Koloro',hSpace:'HSpaco',vSpace:'VSpaco',validateSrc:'Bonvolu entajpi la URL-on',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Literumada Kontrolilo',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ne trovita en la vortaro',changeTo:'Ŝanĝi al',btnIgnore:'Malatenti',btnIgnoreAll:'Malatenti Ĉiun',btnReplace:'Anstataŭigi',btnReplaceAll:'Anstataŭigi Ĉiun',btnUndo:'Malfari',noSuggestions:'- Neniu propono -',progress:'Literumkontrolado daŭras...',noMispell:'Literumkontrolado finita: neniu fuŝo trovita',noChanges:'Literumkontrolado finita: neniu vorto ŝanĝita',oneChange:'Literumkontrolado finita: unu vorto ŝanĝita',manyChanges:'Literumkontrolado finita: %1 vortoj ŝanĝitaj',ieSpellDownload:'Literumada Kontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?'},smiley:{toolbar:'Mienvinjeto',title:'Enmeti Mienvinjeton',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numera Listo',bulletedlist:'Bula Listo',indent:'Pligrandigi Krommarĝenon',outdent:'Malpligrandigi Krommarĝenon',justify:{left:'Maldekstrigi',center:'Centrigi',right:'Dekstrigi',block:'Ĝisrandigi Ambaŭflanke'},blockquote:'Block Quote',clipboard:{title:'Interglui',cutError:'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).',copyError:'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).',pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Interglui el Word',title:'Interglui el Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Interglui kiel Tekston',title:'Interglui kiel Tekston'},templates:{button:'Templates',title:'Content Templates',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stilo',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normala',tag_pre:'Formatita',tag_address:'Adreso',tag_h1:'Titolo 1',tag_h2:'Titolo 2',tag_h3:'Titolo 3',tag_h4:'Titolo 4',tag_h5:'Titolo 5',tag_h6:'Titolo 6',tag_div:'Paragrafo (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Tiparo',voiceLabel:'Font',panelTitle:'Tiparo'},fontSize:{label:'Grando',voiceLabel:'Font Size',panelTitle:'Grando'},colorButton:{textColorTitle:'Teksta Koloro',bgColorTitle:'Fona Koloro',panelTitle:'Colors',auto:'Aŭtomata',more:'Pli da Koloroj...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/es.js b/modules_v2/ckeditor/lang/es.js new file mode 100644 index 0000000000..41738c9feb --- /dev/null +++ b/modules_v2/ckeditor/lang/es.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.es={dir:'ltr',editorTitle:'Editor de texto, %1, pulse ALT 0 para ayuda.',toolbar:'Barra de herramientas',editor:'Editor de texto enriquecido',source:'Fuente HTML',newPage:'Nueva Página',save:'Guardar',preview:'Vista Previa',cut:'Cortar',copy:'Copiar',paste:'Pegar',print:'Imprimir',underline:'Subrayado',bold:'Negrita',italic:'Cursiva',selectAll:'Seleccionar Todo',removeFormat:'Eliminar Formato',strike:'Tachado',subscript:'Subíndice',superscript:'Superíndice',horizontalrule:'Insertar Línea Horizontal',pagebreak:'Insertar Salto de Página',pagebreakAlt:'Page Break',unlink:'Eliminar Vínculo',undo:'Deshacer',redo:'Rehacer',common:{browseServer:'Ver Servidor',url:'URL',protocol:'Protocolo',upload:'Cargar',uploadSubmit:'Enviar al Servidor',image:'Imagen',flash:'Flash',form:'Formulario',checkbox:'Casilla de Verificación',radio:'Botones de Radio',textField:'Campo de Texto',textarea:'Area de Texto',hiddenField:'Campo Oculto',button:'Botón',select:'Campo de Selección',imageButton:'Botón Imagen',notSet:'<No definido>',id:'Id',name:'Nombre',langDir:'Orientación',langDirLtr:'Izquierda a Derecha (LTR)',langDirRtl:'Derecha a Izquierda (RTL)',langCode:'Cód. de idioma',longDescr:'Descripción larga URL',cssClass:'Clases de hojas de estilo',advisoryTitle:'Título',cssStyle:'Estilo',ok:'Aceptar',cancel:'Cancelar',close:'Cerrar',preview:'Previsualización',generalTab:'General',advancedTab:'Avanzado',validateNumberFailed:'El valor no es un número.',confirmNewPage:'Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?',confirmCancel:'Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?',options:'Opciones',target:'Destino',targetNew:'Nueva ventana (_blank)',targetTop:'Ventana principal (_top)',targetSelf:'Misma ventana (_self)',targetParent:'Ventana padre (_parent)',langDirLTR:'Izquierda a derecha (LTR)',langDirRTL:'Derecha a izquierda (RTL)',styles:'Estilos',cssClasses:'Clase de la hoja de estilos',width:'Anchura',height:'Altura',align:'Alineación',alignLeft:'Izquierda',alignRight:'Derecha',alignCenter:'Centrado',alignTop:'Tope',alignMiddle:'Centro',alignBottom:'Pie',invalidHeight:'Altura debe ser un número.',invalidWidth:'Anchura debe ser un número.',unavailable:'%1<span class="cke_accessibility">, no disponible</span>'},contextmenu:{options:'Opciones del menú contextual'},specialChar:{toolbar:'Insertar Caracter Especial',title:'Seleccione un caracter especial',options:'Opciones de caracteres especiales'},link:{toolbar:'Insertar/Editar Vínculo',other:'<otro>',menu:'Editar Vínculo',title:'Vínculo',info:'Información de Vínculo',target:'Destino',upload:'Cargar',advanced:'Avanzado',type:'Tipo de vínculo',toUrl:'URL',toAnchor:'Referencia en esta página',toEmail:'E-Mail',targetFrame:'<marco>',targetPopup:'<ventana emergente>',targetFrameName:'Nombre del Marco Destino',targetPopupName:'Nombre de Ventana Emergente',popupFeatures:'Características de Ventana Emergente',popupResizable:'Redimensionable',popupStatusBar:'Barra de Estado',popupLocationBar:'Barra de ubicación',popupToolbar:'Barra de Herramientas',popupMenuBar:'Barra de Menú',popupFullScreen:'Pantalla Completa (IE)',popupScrollBars:'Barras de desplazamiento',popupDependent:'Dependiente (Netscape)',popupLeft:'Posición Izquierda',popupTop:'Posición Derecha',id:'Id',langDir:'Orientación',langDirLTR:'Izquierda a Derecha (LTR)',langDirRTL:'Derecha a Izquierda (RTL)',acccessKey:'Clave de Acceso',name:'Nombre',langCode:'Código idioma',tabIndex:'Indice de tabulación',advisoryTitle:'Título',advisoryContentType:'Tipo de Contenido',cssClasses:'Clases de hojas de estilo',charset:'Fuente de caracteres vinculado',styles:'Estilo',selectAnchor:'Seleccionar una referencia',anchorName:'Por Nombre de Referencia',anchorId:'Por ID de elemento',emailAddress:'Dirección de E-Mail',emailSubject:'Título del Mensaje',emailBody:'Cuerpo del Mensaje',noAnchors:'(No hay referencias disponibles en el documento)',noUrl:'Por favor tipee el vínculo URL',noEmail:'Por favor tipee la dirección de e-mail'},anchor:{toolbar:'Referencia',menu:'Propiedades de Referencia',title:'Propiedades de Referencia',name:'Nombre de la Referencia',errorName:'Por favor, complete el nombre de la Referencia'},list:{numberedTitle:'Propiedades de lista numerada',bulletedTitle:'Propiedades de viñetas',type:'Tipo',start:'Inicio',validateStartNumber:'El Inicio debe ser un número entero.',circle:'Círculo',disc:'Disco',square:'Cuadrado',none:'Ninguno',notset:'<sin establecer>',armenian:'Numeración armenia',georgian:'Numeración georgiana (an, ban, gan, etc.)',lowerRoman:'Números romanos en minúsculas (i, ii, iii, iv, v, etc.)',upperRoman:'Números romanos en mayúsculas (I, II, III, IV, V, etc.)',lowerAlpha:'Alfabeto en minúsculas (a, b, c, d, e, etc.)',upperAlpha:'Alfabeto en mayúsculas (A, B, C, D, E, etc.)',lowerGreek:'Letras griegas (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal con cero inicial (01, 02, 03, etc.)'},findAndReplace:{title:'Buscar y Reemplazar',find:'Buscar',replace:'Reemplazar',findWhat:'Texto a buscar:',replaceWith:'Reemplazar con:',notFoundMsg:'El texto especificado no ha sido encontrado.',matchCase:'Coincidir may/min',matchWord:'Coincidir toda la palabra',matchCyclic:'Buscar en todo el contenido',replaceAll:'Reemplazar Todo',replaceSuccessMsg:'La expresión buscada ha sido reemplazada %1 veces.'},table:{toolbar:'Tabla',title:'Propiedades de Tabla',menu:'Propiedades de Tabla',deleteTable:'Eliminar Tabla',rows:'Filas',columns:'Columnas',border:'Tamaño de Borde',widthPx:'pixeles',widthPc:'porcentaje',widthUnit:'unidad de la anchura',cellSpace:'Esp. e/celdas',cellPad:'Esp. interior',caption:'Título',summary:'Síntesis',headers:'Encabezados',headersNone:'Ninguno',headersColumn:'Primera columna',headersRow:'Primera fila',headersBoth:'Ambas',invalidRows:'El número de filas debe ser un número mayor que 0.',invalidCols:'El número de columnas debe ser un número mayor que 0.',invalidBorder:'El tamaño del borde debe ser un número.',invalidWidth:'La anchura de tabla debe ser un número.',invalidHeight:'La altura de tabla debe ser un número.',invalidCellSpacing:'El espaciado entre celdas debe ser un número.',invalidCellPadding:'El espaciado interior debe ser un número.',cell:{menu:'Celda',insertBefore:'Insertar celda a la izquierda',insertAfter:'Insertar celda a la derecha',deleteCell:'Eliminar Celdas',merge:'Combinar Celdas',mergeRight:'Combinar a la derecha',mergeDown:'Combinar hacia abajo',splitHorizontal:'Dividir la celda horizontalmente',splitVertical:'Dividir la celda verticalmente',title:'Propiedades de celda',cellType:'Tipo de Celda',rowSpan:'Expandir filas',colSpan:'Expandir columnas',wordWrap:'Ajustar al contenido',hAlign:'Alineación Horizontal',vAlign:'Alineación Vertical',alignBaseline:'Linea de base',bgColor:'Color de fondo',borderColor:'Color de borde',data:'Datos',header:'Encabezado',yes:'Sí',no:'No',invalidWidth:'La anchura de celda debe ser un número.',invalidHeight:'La altura de celda debe ser un número.',invalidRowSpan:'La expansión de filas debe ser un número entero.',invalidColSpan:'La expansión de columnas debe ser un número entero.',chooseColor:'Elegir'},row:{menu:'Fila',insertBefore:'Insertar fila en la parte superior',insertAfter:'Insertar fila en la parte inferior',deleteRow:'Eliminar Filas'},column:{menu:'Columna',insertBefore:'Insertar columna a la izquierda',insertAfter:'Insertar columna a la derecha',deleteColumn:'Eliminar Columnas'}},button:{title:'Propiedades de Botón',text:'Texto (Valor)',type:'Tipo',typeBtn:'Boton',typeSbm:'Enviar',typeRst:'Reestablecer'},checkboxAndRadio:{checkboxTitle:'Propiedades de Casilla',radioTitle:'Propiedades de Botón de Radio',value:'Valor',selected:'Seleccionado'},form:{title:'Propiedades de Formulario',menu:'Propiedades de Formulario',action:'Acción',method:'Método',encoding:'Codificación'},select:{title:'Propiedades de Campo de Selección',selectInfo:'Información',opAvail:'Opciones disponibles',value:'Valor',size:'Tamaño',lines:'Lineas',chkMulti:'Permitir múltiple selección',opText:'Texto',opValue:'Valor',btnAdd:'Agregar',btnModify:'Modificar',btnUp:'Subir',btnDown:'Bajar',btnSetValue:'Establecer como predeterminado',btnDelete:'Eliminar'},textarea:{title:'Propiedades de Area de Texto',cols:'Columnas',rows:'Filas'},textfield:{title:'Propiedades de Campo de Texto',name:'Nombre',value:'Valor',charWidth:'Caracteres de ancho',maxChars:'Máximo caracteres',type:'Tipo',typeText:'Texto',typePass:'Contraseña'},hidden:{title:'Propiedades de Campo Oculto',name:'Nombre',value:'Valor'},image:{title:'Propiedades de Imagen',titleButton:'Propiedades de Botón de Imagen',menu:'Propiedades de Imagen',infoTab:'Información de Imagen',btnUpload:'Enviar al Servidor',upload:'Cargar',alt:'Texto Alternativo',lockRatio:'Proporcional',unlockRatio:'Desbloquear el proporcional',resetSize:'Tamaño Original',border:'Borde',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',alertUrl:'Por favor escriba la URL de la imagen',linkTab:'Vínculo',button2Img:'¿Desea convertir el botón de imagen en una simple imagen?',img2Button:'¿Desea convertir la imagen en un botón de imagen?',urlMissing:'Debe indicar la URL de la imagen.',validateBorder:'El borde debe ser un número.',validateHSpace:'El espaciado horizontal debe ser un número.',validateVSpace:'El espaciado vertical debe ser un número.'},flash:{properties:'Propiedades de Flash',propertiesTab:'Propiedades',title:'Propiedades de Flash',chkPlay:'Autoejecución',chkLoop:'Repetir',chkMenu:'Activar Menú Flash',chkFull:'Permitir pantalla completa',scale:'Escala',scaleAll:'Mostrar todo',scaleNoBorder:'Sin Borde',scaleFit:'Ajustado',access:'Acceso de scripts',accessAlways:'Siempre',accessSameDomain:'Mismo dominio',accessNever:'Nunca',alignAbsBottom:'Abs inferior',alignAbsMiddle:'Abs centro',alignBaseline:'Línea de base',alignTextTop:'Tope del texto',quality:'Calidad',qualityBest:'La mejor',qualityHigh:'Alta',qualityAutoHigh:'Auto Alta',qualityMedium:'Media',qualityAutoLow:'Auto Baja',qualityLow:'Baja',windowModeWindow:'Ventana',windowModeOpaque:'Opaco',windowModeTransparent:'Transparente',windowMode:'WindowMode',flashvars:'Opciones',bgcolor:'Color de Fondo',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',validateSrc:'Por favor escriba el vínculo URL',validateHSpace:'Esp.Horiz debe ser un número.',validateVSpace:'Esp.Vert debe ser un número.'},spellCheck:{toolbar:'Ortografía',title:'Comprobar ortografía',notAvailable:'Lo sentimos pero el servicio no está disponible.',errorLoading:'Error cargando la aplicación del servidor: %s.',notInDic:'No se encuentra en el Diccionario',changeTo:'Cambiar a',btnIgnore:'Ignorar',btnIgnoreAll:'Ignorar Todo',btnReplace:'Reemplazar',btnReplaceAll:'Reemplazar Todo',btnUndo:'Deshacer',noSuggestions:'- No hay sugerencias -',progress:'Control de Ortografía en progreso...',noMispell:'Control finalizado: no se encontraron errores',noChanges:'Control finalizado: no se ha cambiado ninguna palabra',oneChange:'Control finalizado: se ha cambiado una palabra',manyChanges:'Control finalizado: se ha cambiado %1 palabras',ieSpellDownload:'Módulo de Control de Ortografía no instalado.\r\n¿Desea descargarlo ahora?'},smiley:{toolbar:'Emoticonos',title:'Insertar un Emoticon',options:'Opciones de emoticonos'},elementsPath:{eleLabel:'Ruta de los elementos',eleTitle:'%1 elemento'},numberedlist:'Numeración',bulletedlist:'Viñetas',indent:'Aumentar Sangría',outdent:'Disminuir Sangría',justify:{left:'Alinear a Izquierda',center:'Centrar',right:'Alinear a Derecha',block:'Justificado'},blockquote:'Cita',clipboard:{title:'Pegar',cutError:'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).',copyError:'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).',pasteMsg:'Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.',securityMsg:'Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.',pasteArea:'Zona de pegado'},pastefromword:{confirmCleanup:'El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?',toolbar:'Pegar desde Word',title:'Pegar desde Word',error:'No ha sido posible limpiar los datos debido a un error interno'},pasteText:{button:'Pegar como Texto Plano',title:'Pegar como Texto Plano'},templates:{button:'Plantillas',title:'Contenido de Plantillas',options:'Opciones de plantillas',insertOption:'Reemplazar el contenido actual',selectPromptMsg:'Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):',emptyListMsg:'(No hay plantillas definidas)'},showBlocks:'Mostrar bloques',stylesCombo:{label:'Estilo',panelTitle:'Estilos para formatear',panelTitle1:'Estilos de párrafo',panelTitle2:'Estilos de carácter',panelTitle3:'Estilos de objeto'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normal',tag_pre:'Con formato',tag_address:'Dirección',tag_h1:'Encabezado 1',tag_h2:'Encabezado 2',tag_h3:'Encabezado 3',tag_h4:'Encabezado 4',tag_h5:'Encabezado 5',tag_h6:'Encabezado 6',tag_div:'Normal (DIV)'},div:{title:'Crear contenedor DIV',toolbar:'Crear contenedor DIV',cssClassInputLabel:'Clase de hoja de estilos',styleSelectLabel:'Estilo',IdInputLabel:'Id',languageCodeInputLabel:' Codigo de idioma',inlineStyleInputLabel:'Estilo',advisoryTitleInputLabel:'Título',langDirLabel:'Orientación',langDirLTRLabel:'Izquierda a Derecha (LTR)',langDirRTLLabel:'Derecha a Izquierda (RTL)',edit:'Editar Div',remove:'Quitar Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Fuente',voiceLabel:'Fuente',panelTitle:'Fuente'},fontSize:{label:'Tamaño',voiceLabel:'Tamaño de fuente',panelTitle:'Tamaño'},colorButton:{textColorTitle:'Color de Texto',bgColorTitle:'Color de Fondo',panelTitle:'Colores',auto:'Automático',more:'Más Colores...'},colors:{'000':'Negro',800000:'Marrón oscuro','8B4513':'Marrón tierra','2F4F4F':'Pizarra Oscuro','008080':'Azul verdoso','000080':'Azul marino','4B0082':'Añil',696969:'Gris oscuro',B22222:'Ladrillo',A52A2A:'Marrón',DAA520:'Oro oscuro','006400':'Verde oscuro','40E0D0':'Turquesa','0000CD':'Azul medio-oscuro',800080:'Púrpura',808080:'Gris',F00:'Rojo',FF8C00:'Naranja oscuro',FFD700:'Oro','008000':'Verde','0FF':'Cian','00F':'Azul',EE82EE:'Violeta',A9A9A9:'Gris medio',FFA07A:'Salmón claro',FFA500:'Naranja',FFFF00:'Amarillo','00FF00':'Lima',AFEEEE:'Turquesa claro',ADD8E6:'Azul claro',DDA0DD:'Violeta claro',D3D3D3:'Gris claro',FFF0F5:'Lavanda rojizo',FAEBD7:'Blanco antiguo',FFFFE0:'Amarillo claro',F0FFF0:'Miel',F0FFFF:'Azul celeste',F0F8FF:'Azul pálido',E6E6FA:'Lavanda',FFF:'Blanco'},scayt:{title:'Comprobar Ortografía Mientras Escribe',opera_title:'No soportado en Opera',enable:'Activar Corrector',disable:'Desactivar Corrector',about:'Acerca de Corrector',toggle:'Cambiar Corrector',options:'Opciones',langs:'Idiomas',moreSuggestions:'Más sugerencias',ignore:'Ignorar',ignoreAll:'Ignorar Todas',addWord:'Añadir palabra',emptyDic:'El nombre del diccionario no puede estar en blanco.',optionsTab:'Opciones',allCaps:'Omitir palabras en MAYÚSCULAS',ignoreDomainNames:'Omitir nombres de dominio',mixedCase:'Ignorar palabras con combinación de mayúsculas y minúsculas',mixedWithDigits:'Omitir palabras con números',languagesTab:'Idiomas',dictionariesTab:'Diccionarios',dic_field_name:'Nombre del diccionario',dic_create:'Crear',dic_restore:'Recuperar',dic_delete:'Borrar',dic_rename:'Renombrar',dic_info:'Inicialmente el Diccionario de usuario se guarda en una Cookie. Sin embargo, las cookies están limitadas en tamaño. Cuando el diccionario crece a un punto en el que no se puede guardar en una Cookie, el diccionario puede ser almacenado en nuestro servidor. Para almacenar su diccionario personalizado en nuestro servidor debe especificar un nombre para su diccionario. Si ya ha guardado un diccionaro, por favor, escriba su nombre y pulse el botón Recuperar',aboutTab:'Acerca de'},about:{title:'Acerca de CKEditor',dlgTitle:'Acerca de CKEditor',moreInfo:'Para información de licencia, por favor visite nuestro sitio web:',copy:'Copyright © $1. Todos los derechos reservados.'},maximize:'Maximizar',minimize:'Minimizar',fakeobjects:{anchor:'Ancla',flash:'Animación flash',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Objeto desconocido'},resize:'Arrastre para redimensionar',colordialog:{title:'Elegir color',options:'Opciones de colores',highlight:'Muestra',selected:'Elegido',clear:'Borrar'},toolbarCollapse:'Contraer barra de herramientas',toolbarExpand:'Expandir barra de herramientas',bidi:{ltr:'Dirección del texto de izquierda a derecha',rtl:'Dirección del texto de derecha a izquierda'}};
diff --git a/modules_v2/ckeditor/lang/et.js b/modules_v2/ckeditor/lang/et.js new file mode 100644 index 0000000000..fa12d1fed6 --- /dev/null +++ b/modules_v2/ckeditor/lang/et.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.et={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Lähtekood',newPage:'Uus leht',save:'Salvesta',preview:'Eelvaade',cut:'Lõika',copy:'Kopeeri',paste:'Kleebi',print:'Prindi',underline:'Allajoonitud',bold:'Paks',italic:'Kursiiv',selectAll:'Vali kõik',removeFormat:'Eemalda vorming',strike:'Läbijoonitud',subscript:'Allindeks',superscript:'Ülaindeks',horizontalrule:'Sisesta horisontaaljoon',pagebreak:'Sisesta lehevahetuskoht',pagebreakAlt:'Page Break',unlink:'Eemalda link',undo:'Võta tagasi',redo:'Korda toimingut',common:{browseServer:'Sirvi serverit',url:'URL',protocol:'Protokoll',upload:'Lae üles',uploadSubmit:'Saada serverissee',image:'Pilt',flash:'Flash',form:'Vorm',checkbox:'Märkeruut',radio:'Raadionupp',textField:'Tekstilahter',textarea:'Tekstiala',hiddenField:'Varjatud lahter',button:'Nupp',select:'Valiklahter',imageButton:'Piltnupp',notSet:'<määramata>',id:'Id',name:'Nimi',langDir:'Keele suund',langDirLtr:'Vasakult paremale (LTR)',langDirRtl:'Paremalt vasakule (RTL)',langCode:'Keele kood',longDescr:'Pikk kirjeldus URL',cssClass:'Stiilistiku klassid',advisoryTitle:'Juhendav tiitel',cssStyle:'Laad',ok:'OK',cancel:'Loobu',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Täpsemalt',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Laius',height:'Kõrgus',align:'Joondus',alignLeft:'Vasak',alignRight:'Paremale',alignCenter:'Kesk',alignTop:'Üles',alignMiddle:'Keskele',alignBottom:'Alla',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Sisesta erimärk',title:'Vali erimärk',options:'Special Character Options'},link:{toolbar:'Sisesta link / Muuda linki',other:'<muu>',menu:'Muuda linki',title:'Link',info:'Lingi info',target:'Sihtkoht',upload:'Lae üles',advanced:'Täpsemalt',type:'Lingi tüüp',toUrl:'URL',toAnchor:'Ankur sellel lehel',toEmail:'E-post',targetFrame:'<raam>',targetPopup:'<hüpikaken>',targetFrameName:'Sihtmärk raami nimi',targetPopupName:'Hüpikakna nimi',popupFeatures:'Hüpikakna omadused',popupResizable:'Resizable',popupStatusBar:'Olekuriba',popupLocationBar:'Aadressiriba',popupToolbar:'Tööriistariba',popupMenuBar:'Menüüriba',popupFullScreen:'Täisekraan (IE)',popupScrollBars:'Kerimisribad',popupDependent:'Sõltuv (Netscape)',popupLeft:'Vasak asukoht',popupTop:'Ülemine asukoht',id:'Id',langDir:'Keele suund',langDirLTR:'Vasakult paremale (LTR)',langDirRTL:'Paremalt vasakule (RTL)',acccessKey:'Juurdepääsu võti',name:'Nimi',langCode:'Keele suund',tabIndex:'Tab indeks',advisoryTitle:'Juhendav tiitel',advisoryContentType:'Juhendava sisu tüüp',cssClasses:'Stiilistiku klassid',charset:'Lingitud ressurssi märgistik',styles:'Laad',selectAnchor:'Vali ankur',anchorName:'Ankru nime järgi',anchorId:'Elemendi id järgi',emailAddress:'E-posti aadress',emailSubject:'Sõnumi teema',emailBody:'Sõnumi tekst',noAnchors:'(Selles dokumendis ei ole ankruid)',noUrl:'Palun kirjuta lingi URL',noEmail:'Palun kirjuta E-Posti aadress'},anchor:{toolbar:'Sisesta ankur / Muuda ankrut',menu:'Ankru omadused',title:'Ankru omadused',name:'Ankru nimi',errorName:'Palun sisest ankru nimi'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Otsi ja asenda',find:'Otsi',replace:'Asenda',findWhat:'Leia mida:',replaceWith:'Asenda millega:',notFoundMsg:'Valitud teksti ei leitud.',matchCase:'Erista suur- ja väiketähti',matchWord:'Otsi terviklike sõnu',matchCyclic:'Match cyclic',replaceAll:'Asenda kõik',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabel',title:'Tabeli atribuudid',menu:'Tabeli atribuudid',deleteTable:'Kustuta tabel',rows:'Read',columns:'Veerud',border:'Joone suurus',widthPx:'pikslit',widthPc:'protsenti',widthUnit:'width unit',cellSpace:'Lahtri vahe',cellPad:'Lahtri täidis',caption:'Tabeli tiitel',summary:'Kokkuvõte',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Lahter',insertBefore:'Sisesta lahter enne',insertAfter:'Sisesta lahter peale',deleteCell:'Eemalda lahtrid',merge:'Ühenda lahtrid',mergeRight:'Ühenda paremale',mergeDown:'Ühenda alla',splitHorizontal:'Poolita lahter horisontaalselt',splitVertical:'Poolita lahter vertikaalselt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Rida',insertBefore:'Sisesta rida enne',insertAfter:'Sisesta rida peale',deleteRow:'Eemalda read'},column:{menu:'Veerg',insertBefore:'Sisesta veerg enne',insertAfter:'Sisesta veerg peale',deleteColumn:'Eemalda veerud'}},button:{title:'Nupu omadused',text:'Tekst (väärtus)',type:'Tüüp',typeBtn:'Nupp',typeSbm:'Saada',typeRst:'Lähtesta'},checkboxAndRadio:{checkboxTitle:'Märkeruudu omadused',radioTitle:'Raadionupu omadused',value:'Väärtus',selected:'Valitud'},form:{title:'Vormi omadused',menu:'Vormi omadused',action:'Toiming',method:'Meetod',encoding:'Encoding'},select:{title:'Valiklahtri omadused',selectInfo:'Info',opAvail:'Võimalikud valikud',value:'Väärtus',size:'Suurus',lines:'ridu',chkMulti:'Võimalda mitu valikut',opText:'Tekst',opValue:'Väärtus',btnAdd:'Lisa',btnModify:'Muuda',btnUp:'Üles',btnDown:'Alla',btnSetValue:'Sea valitud olekuna',btnDelete:'Kustuta'},textarea:{title:'Tekstiala omadused',cols:'Veerge',rows:'Ridu'},textfield:{title:'Tekstilahtri omadused',name:'Nimi',value:'Väärtus',charWidth:'Laius (tähemärkides)',maxChars:'Maksimaalselt tähemärke',type:'Tüüp',typeText:'Tekst',typePass:'Parool'},hidden:{title:'Varjatud lahtri omadused',name:'Nimi',value:'Väärtus'},image:{title:'Pildi atribuudid',titleButton:'Piltnupu omadused',menu:'Pildi atribuudid',infoTab:'Pildi info',btnUpload:'Saada serverissee',upload:'Lae üles',alt:'Alternatiivne tekst',lockRatio:'Lukusta kuvasuhe',unlockRatio:'Unlock Ratio',resetSize:'Lähtesta suurus',border:'Joon',hSpace:'H. vaheruum',vSpace:'V. vaheruum',alertUrl:'Palun kirjuta pildi URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash omadused',propertiesTab:'Properties',title:'Flash omadused',chkPlay:'Automaatne start ',chkLoop:'Korduv',chkMenu:'Võimalda flash menüü',chkFull:'Allow Fullscreen',scale:'Mastaap',scaleAll:'Näita kõike',scaleNoBorder:'Äärist ei ole',scaleFit:'Täpne sobivus',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs alla',alignAbsMiddle:'Abs keskele',alignBaseline:'Baasjoonele',alignTextTop:'Tekstit üles',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Tausta värv',hSpace:'H. vaheruum',vSpace:'V. vaheruum',validateSrc:'Palun kirjuta lingi URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Kontrolli õigekirja',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Puudub sõnastikust',changeTo:'Muuda',btnIgnore:'Ignoreeri',btnIgnoreAll:'Ignoreeri kõiki',btnReplace:'Asenda',btnReplaceAll:'Asenda kõik',btnUndo:'Võta tagasi',noSuggestions:'- Soovitused puuduvad -',progress:'Toimub õigekirja kontroll...',noMispell:'Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud',noChanges:'Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud',oneChange:'Õigekirja kontroll sooritatud: üks sõna muudeti',manyChanges:'Õigekirja kontroll sooritatud: %1 sõna muudetud',ieSpellDownload:'Õigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?'},smiley:{toolbar:'Emotikon',title:'Sisesta emotikon',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Nummerdatud loetelu',bulletedlist:'Punktiseeritud loetelu',indent:'Suurenda taanet',outdent:'Vähenda taanet',justify:{left:'Vasakjoondus',center:'Keskjoondus',right:'Paremjoondus',block:'Rööpjoondus'},blockquote:'Blokktsitaat',clipboard:{title:'Kleebi',cutError:'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).',copyError:'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).',pasteMsg:'Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.',securityMsg:'Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Kleebi Wordist',title:'Kleebi Wordist',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Kleebi tavalise tekstina',title:'Kleebi tavalise tekstina'},templates:{button:'Šabloon',title:'Sisu šabloonid',options:'Template Options',insertOption:'Asenda tegelik sisu',selectPromptMsg:'Palun vali šabloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):',emptyListMsg:'(Ühtegi šablooni ei ole defineeritud)'},showBlocks:'Näita blokke',stylesCombo:{label:'Laad',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Vorming',panelTitle:'Vorming',tag_p:'Tavaline',tag_pre:'Vormindatud',tag_address:'Aadress',tag_h1:'Pealkiri 1',tag_h2:'Pealkiri 2',tag_h3:'Pealkiri 3',tag_h4:'Pealkiri 4',tag_h5:'Pealkiri 5',tag_h6:'Pealkiri 6',tag_div:'Tavaline (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Kiri',voiceLabel:'Font',panelTitle:'Kiri'},fontSize:{label:'Suurus',voiceLabel:'Font Size',panelTitle:'Suurus'},colorButton:{textColorTitle:'Teksti värv',bgColorTitle:'Tausta värv',panelTitle:'Colors',auto:'Automaatne',more:'Rohkem värve...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/eu.js b/modules_v2/ckeditor/lang/eu.js new file mode 100644 index 0000000000..1c6bc510a9 --- /dev/null +++ b/modules_v2/ckeditor/lang/eu.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.eu={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'HTML Iturburua',newPage:'Orrialde Berria',save:'Gorde',preview:'Aurrebista',cut:'Ebaki',copy:'Kopiatu',paste:'Itsatsi',print:'Inprimatu',underline:'Azpimarratu',bold:'Lodia',italic:'Etzana',selectAll:'Hautatu dena',removeFormat:'Kendu Formatua',strike:'Marratua',subscript:'Azpi-indize',superscript:'Goi-indize',horizontalrule:'Txertatu Marra Horizontala',pagebreak:'Txertatu Orrialde-jauzia',pagebreakAlt:'Page Break',unlink:'Kendu Esteka',undo:'Desegin',redo:'Berregin',common:{browseServer:'Zerbitzaria arakatu',url:'URL',protocol:'Protokoloa',upload:'Gora kargatu',uploadSubmit:'Zerbitzarira bidalia',image:'Irudia',flash:'Flasha',form:'Formularioa',checkbox:'Kontrol-laukia',radio:'Aukera-botoia',textField:'Testu Eremua',textarea:'Testu-area',hiddenField:'Ezkutuko Eremua',button:'Botoia',select:'Hautespen Eremua',imageButton:'Irudi Botoia',notSet:'<Ezarri gabe>',id:'Id',name:'Izena',langDir:'Hizkuntzaren Norabidea',langDirLtr:'Ezkerretik Eskumara(LTR)',langDirRtl:'Eskumatik Ezkerrera (RTL)',langCode:'Hizkuntza Kodea',longDescr:'URL Deskribapen Luzea',cssClass:'Estilo-orriko Klaseak',advisoryTitle:'Izenburua',cssStyle:'Estiloa',ok:'Ados',cancel:'Utzi',close:'Close',preview:'Preview',generalTab:'Orokorra',advancedTab:'Aurreratua',validateNumberFailed:'Balio hau ez da zenbaki bat.',confirmNewPage:'Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?',confirmCancel:'Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Zabalera',height:'Altuera',align:'Lerrokatu',alignLeft:'Ezkerrera',alignRight:'Eskuman',alignCenter:'Erdian',alignTop:'Goian',alignMiddle:'Erdian',alignBottom:'Behean',invalidHeight:'Altuera zenbaki bat izan behar da.',invalidWidth:'Zabalera zenbaki bat izan behar da.',unavailable:'%1<span class="cke_accessibility">, erabilezina</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Txertatu Karaktere Berezia',title:'Karaktere Berezia Aukeratu',options:'Special Character Options'},link:{toolbar:'Txertatu/Editatu Esteka',other:'<other>',menu:'Aldatu Esteka',title:'Esteka',info:'Estekaren Informazioa',target:'Target (Helburua)',upload:'Gora kargatu',advanced:'Aurreratua',type:'Esteka Mota',toUrl:'URL',toAnchor:'Aingura orrialde honetan',toEmail:'ePosta',targetFrame:'<marko>',targetPopup:'<popup leihoa>',targetFrameName:'Marko Helburuaren Izena',targetPopupName:'Popup Leihoaren Izena',popupFeatures:'Popup Leihoaren Ezaugarriak',popupResizable:'Tamaina Aldakorra',popupStatusBar:'Egoera Barra',popupLocationBar:'Kokaleku Barra',popupToolbar:'Tresna Barra',popupMenuBar:'Menu Barra',popupFullScreen:'Pantaila Osoa (IE)',popupScrollBars:'Korritze Barrak',popupDependent:'Menpekoa (Netscape)',popupLeft:'Ezkerreko Posizioa',popupTop:'Goiko Posizioa',id:'Id',langDir:'Hizkuntzaren Norabidea',langDirLTR:'Ezkerretik Eskumara(LTR)',langDirRTL:'Eskumatik Ezkerrera (RTL)',acccessKey:'Sarbide-gakoa',name:'Izena',langCode:'Hizkuntzaren Norabidea',tabIndex:'Tabulazio Indizea',advisoryTitle:'Izenburua',advisoryContentType:'Eduki Mota (Content Type)',cssClasses:'Estilo-orriko Klaseak',charset:'Estekatutako Karaktere Multzoa',styles:'Estiloa',selectAnchor:'Aingura bat hautatu',anchorName:'Aingura izenagatik',anchorId:'Elementuaren ID-gatik',emailAddress:'ePosta Helbidea',emailSubject:'Mezuaren Gaia',emailBody:'Mezuaren Gorputza',noAnchors:'(Ez daude aingurak eskuragarri dokumentuan)',noUrl:'Mesedez URL esteka idatzi',noEmail:'Mesedez ePosta helbidea idatzi'},anchor:{toolbar:'Aingura',menu:'Ainguraren Ezaugarriak',title:'Ainguraren Ezaugarriak',name:'Ainguraren Izena',errorName:'Idatzi ainguraren izena'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Bilatu eta Ordeztu',find:'Bilatu',replace:'Ordezkatu',findWhat:'Zer bilatu:',replaceWith:'Zerekin ordeztu:',notFoundMsg:'Idatzitako testua ez da topatu.',matchCase:'Maiuskula/minuskula',matchWord:'Esaldi osoa bilatu',matchCyclic:'Bilaketa ziklikoa',replaceAll:'Ordeztu Guztiak',replaceSuccessMsg:'Zenbat aldiz ordeztua: %1'},table:{toolbar:'Taula',title:'Taularen Ezaugarriak',menu:'Taularen Ezaugarriak',deleteTable:'Ezabatu Taula',rows:'Lerroak',columns:'Zutabeak',border:'Ertzaren Zabalera',widthPx:'pixel',widthPc:'ehuneko',widthUnit:'width unit',cellSpace:'Gelaxka arteko tartea',cellPad:'Gelaxken betegarria',caption:'Epigrafea',summary:'Laburpena',headers:'Goiburuak',headersNone:'Bat ere ez',headersColumn:'Lehen zutabea',headersRow:'Lehen lerroa',headersBoth:'Biak',invalidRows:'Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.',invalidCols:'Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.',invalidBorder:'Ertzaren tamaina zenbaki bat izan behar da.',invalidWidth:'Taularen zabalera zenbaki bat izan behar da.',invalidHeight:'Taularen altuera zenbaki bat izan behar da.',invalidCellSpacing:'Gelaxka arteko tartea zenbaki bat izan behar da.',invalidCellPadding:'Gelaxken betegarria zenbaki bat izan behar da.',cell:{menu:'Gelaxka',insertBefore:'Txertatu Gelaxka Aurretik',insertAfter:'Txertatu Gelaxka Ostean',deleteCell:'Kendu Gelaxkak',merge:'Batu Gelaxkak',mergeRight:'Elkartu Eskumara',mergeDown:'Elkartu Behera',splitHorizontal:'Banatu Gelaxkak Horizontalki',splitVertical:'Banatu Gelaxkak Bertikalki',title:'Gelaxken Ezaugarriak',cellType:'Gelaxka Mota',rowSpan:'Hedatutako Lerroak',colSpan:'Hedatutako Zutabeak',wordWrap:'Itzulbira',hAlign:'Lerrokatze Horizontala',vAlign:'Lerrokatze Bertikala',alignBaseline:'Oinarri-lerroan',bgColor:'Fondoaren Kolorea',borderColor:'Ertzaren Kolorea',data:'Data',header:'Goiburua',yes:'Bai',no:'Ez',invalidWidth:'Gelaxkaren zabalera zenbaki bat izan behar da.',invalidHeight:'Gelaxkaren altuera zenbaki bat izan behar da.',invalidRowSpan:'Lerroen hedapena zenbaki osoa izan behar da.',invalidColSpan:'Zutabeen hedapena zenbaki osoa izan behar da.',chooseColor:'Choose'},row:{menu:'Lerroa',insertBefore:'Txertatu Lerroa Aurretik',insertAfter:'Txertatu Lerroa Ostean',deleteRow:'Ezabatu Lerroak'},column:{menu:'Zutabea',insertBefore:'Txertatu Zutabea Aurretik',insertAfter:'Txertatu Zutabea Ostean',deleteColumn:'Ezabatu Zutabeak'}},button:{title:'Botoiaren Ezaugarriak',text:'Testua (Balorea)',type:'Mota',typeBtn:'Botoia',typeSbm:'Bidali',typeRst:'Garbitu'},checkboxAndRadio:{checkboxTitle:'Kontrol-laukiko Ezaugarriak',radioTitle:'Aukera-botoiaren Ezaugarriak',value:'Balorea',selected:'Hautatuta'},form:{title:'Formularioaren Ezaugarriak',menu:'Formularioaren Ezaugarriak',action:'Ekintza',method:'Metodoa',encoding:'Kodeketa'},select:{title:'Hautespen Eremuaren Ezaugarriak',selectInfo:'Informazioa',opAvail:'Aukera Eskuragarriak',value:'Balorea',size:'Tamaina',lines:'lerro kopurura',chkMulti:'Hautaketa anitzak baimendu',opText:'Testua',opValue:'Balorea',btnAdd:'Gehitu',btnModify:'Aldatu',btnUp:'Gora',btnDown:'Behera',btnSetValue:'Aukeratutako balorea ezarri',btnDelete:'Ezabatu'},textarea:{title:'Testu-arearen Ezaugarriak',cols:'Zutabeak',rows:'Lerroak'},textfield:{title:'Testu Eremuaren Ezaugarriak',name:'Izena',value:'Balorea',charWidth:'Zabalera',maxChars:'Zenbat karaktere gehienez',type:'Mota',typeText:'Testua',typePass:'Pasahitza'},hidden:{title:'Ezkutuko Eremuaren Ezaugarriak',name:'Izena',value:'Balorea'},image:{title:'Irudi Ezaugarriak',titleButton:'Irudi Botoiaren Ezaugarriak',menu:'Irudi Ezaugarriak',infoTab:'Irudi informazioa',btnUpload:'Zerbitzarira bidalia',upload:'Gora Kargatu',alt:'Ordezko Testua',lockRatio:'Erlazioa Blokeatu',unlockRatio:'Unlock Ratio',resetSize:'Tamaina Berrezarri',border:'Ertza',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Mesedez Irudiaren URLa idatzi',linkTab:'Esteka',button2Img:'Aukeratutako irudi botoia, irudi normal batean eraldatu nahi duzu?',img2Button:'Aukeratutako irudia, irudi botoi batean eraldatu nahi duzu?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flasharen Ezaugarriak',propertiesTab:'Ezaugarriak',title:'Flasharen Ezaugarriak',chkPlay:'Automatikoki Erreproduzitu',chkLoop:'Begizta',chkMenu:'Flasharen Menua Gaitu',chkFull:'Onartu Pantaila osoa',scale:'Eskalatu',scaleAll:'Dena erakutsi',scaleNoBorder:'Ertzik gabe',scaleFit:'Doitu',access:'Scriptak baimendu',accessAlways:'Beti',accessSameDomain:'Domeinu berdinekoak',accessNever:'Inoiz ere ez',alignAbsBottom:'Abs Behean',alignAbsMiddle:'Abs Erdian',alignBaseline:'Oinan',alignTextTop:'Testua Goian',quality:'Kalitatea',qualityBest:'Hoberena',qualityHigh:'Altua',qualityAutoHigh:'Auto Altua',qualityMedium:'Ertaina',qualityAutoLow:'Auto Baxua',qualityLow:'Baxua',windowModeWindow:'Leihoa',windowModeOpaque:'Opakoa',windowModeTransparent:'Gardena',windowMode:'Leihoaren modua',flashvars:'Flash Aldagaiak',bgcolor:'Atzeko kolorea',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Mesedez URL esteka idatzi',validateHSpace:'HSpace zenbaki bat izan behar da.',validateVSpace:'VSpace zenbaki bat izan behar da.'},spellCheck:{toolbar:'Ortografia',title:'Ortografia zuzenketa',notAvailable:'Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.',errorLoading:'Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.',notInDic:'Ez dago hiztegian',changeTo:'Honekin ordezkatu',btnIgnore:'Ezikusi',btnIgnoreAll:'Denak Ezikusi',btnReplace:'Ordezkatu',btnReplaceAll:'Denak Ordezkatu',btnUndo:'Desegin',noSuggestions:'- Iradokizunik ez -',progress:'Zuzenketa ortografikoa martxan...',noMispell:'Zuzenketa ortografikoa bukatuta: Akatsik ez',noChanges:'Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu',oneChange:'Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da',manyChanges:'Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira',ieSpellDownload:'Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?'},smiley:{toolbar:'Aurpegierak',title:'Aurpegiera Sartu',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 elementua'},numberedlist:'Zenbakidun Zerrenda',bulletedlist:'Buletdun Zerrenda',indent:'Handitu Koska',outdent:'Txikitu Koska',justify:{left:'Lerrokatu Ezkerrean',center:'Lerrokatu Erdian',right:'Lerrokatu Eskuman',block:'Justifikatu'},blockquote:'Aipamen blokea',clipboard:{title:'Itsatsi',cutError:'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+X).',copyError:'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+C).',pasteMsg:'Mesedez teklatua erabilita (<STRONG>Ctrl/Cmd+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.',securityMsg:'Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?',toolbar:'Itsatsi Word-etik',title:'Itsatsi Word-etik',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Testu Arrunta bezala Itsatsi',title:'Testu Arrunta bezala Itsatsi'},templates:{button:'Txantiloiak',title:'Eduki Txantiloiak',options:'Template Options',insertOption:'Ordeztu oraingo edukiak',selectPromptMsg:'Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):',emptyListMsg:'(Ez dago definitutako txantiloirik)'},showBlocks:'Blokeak erakutsi',stylesCombo:{label:'Estiloa',panelTitle:'Formatting Styles',panelTitle1:'Bloke Estiloak',panelTitle2:'Inline Estiloak',panelTitle3:'Objektu Estiloak'},format:{label:'Formatua',panelTitle:'Formatua',tag_p:'Arrunta',tag_pre:'Formateatua',tag_address:'Helbidea',tag_h1:'Izenburua 1',tag_h2:'Izenburua 2',tag_h3:'Izenburua 3',tag_h4:'Izenburua 4',tag_h5:'Izenburua 5',tag_h6:'Izenburua 6',tag_div:'Paragrafoa (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Letra-tipoa',voiceLabel:'Letra-tipoa',panelTitle:'Letra-tipoa'},fontSize:{label:'Tamaina',voiceLabel:'Tamaina',panelTitle:'Tamaina'},colorButton:{textColorTitle:'Testu Kolorea',bgColorTitle:'Atzeko kolorea',panelTitle:'Colors',auto:'Automatikoa',more:'Kolore gehiago...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Ortografia Zuzenketa Idatzi Ahala (SCAYT)',opera_title:'Not supported by Opera',enable:'Gaitu SCAYT',disable:'Desgaitu SCAYT',about:'SCAYTi buruz',toggle:'SCAYT aldatu',options:'Aukerak',langs:'Hizkuntzak',moreSuggestions:'Iradokizun gehiago',ignore:'Baztertu',ignoreAll:'Denak baztertu',addWord:'Hitza Gehitu',emptyDic:'Hiztegiaren izena ezin da hutsik egon.',optionsTab:'Aukerak',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Hizkuntzak',dictionariesTab:'Hiztegiak',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Honi buruz'},about:{title:'CKEditor(r)i buruz',dlgTitle:'CKEditor(r)i buruz',moreInfo:'Lizentziari buruzko informazioa gure webgunean:',copy:'Copyright © $1. Eskubide guztiak erreserbaturik.'},maximize:'Maximizatu',minimize:'Minimize',fakeobjects:{anchor:'Aingura',flash:'Flash Animazioa',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Objektu ezezaguna'},resize:'Arrastatu tamaina aldatzeko',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/fa.js b/modules_v2/ckeditor/lang/fa.js new file mode 100644 index 0000000000..e7aa87a2a1 --- /dev/null +++ b/modules_v2/ckeditor/lang/fa.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.fa={dir:'rtl',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'منبع',newPage:'برگهٴ تازه',save:'ذخیره',preview:'پیشنمایش',cut:'برش',copy:'کپی',paste:'چسباندن',print:'چاپ',underline:'خطزیردار',bold:'درشت',italic:'خمیده',selectAll:'گزینش همه',removeFormat:'برداشتن فرمت',strike:'میانخط',subscript:'زیرنویس',superscript:'بالانویس',horizontalrule:'گنجاندن خط ِافقی',pagebreak:'گنجاندن شکستگی ِپایان ِبرگه',pagebreakAlt:'Page Break',unlink:'برداشتن پیوند',undo:'واچیدن',redo:'بازچیدن',common:{browseServer:'فهرستنمایی سرور',url:'URL',protocol:'پروتکل',upload:'انتقال به سرور',uploadSubmit:'به سرور بفرست',image:'تصویر',flash:'Flash',form:'فرم',checkbox:'خانهٴ گزینهای',radio:'دکمهٴ رادیویی',textField:'فیلد متنی',textarea:'ناحیهٴ متنی',hiddenField:'فیلد پنهان',button:'دکمه',select:'فیلد چندگزینهای',imageButton:'دکمهٴ تصویری',notSet:'<تعیننشده>',id:'شناسه',name:'نام',langDir:'جهتنمای زبان',langDirLtr:'چپ به راست (LTR)',langDirRtl:'راست به چپ (RTL)',langCode:'کد زبان',longDescr:'URL توصیف طولانی',cssClass:'کلاسهای شیوهنامه(Stylesheet)',advisoryTitle:'عنوان کمکی',cssStyle:'شیوه(style)',ok:'پذیرش',cancel:'انصراف',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'پیشرفته',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'پهنا',height:'درازا',align:'چینش',alignLeft:'چپ',alignRight:'راست',alignCenter:'وسط',alignTop:'بالا',alignMiddle:'وسط',alignBottom:'پائین',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'گنجاندن نویسهٴ ویژه',title:'گزینش نویسهٴویژه',options:'Special Character Options'},link:{toolbar:'گنجاندن/ویرایش ِپیوند',other:'<سایر>',menu:'ویرایش پیوند',title:'پیوند',info:'اطلاعات پیوند',target:'مقصد',upload:'انتقال به سرور',advanced:'پیشرفته',type:'نوع پیوند',toUrl:'URL',toAnchor:'لنگر در همین صفحه',toEmail:'پست الکترونیکی',targetFrame:'<فریم>',targetPopup:'<پنجرهٴ پاپاپ>',targetFrameName:'نام فریم مقصد',targetPopupName:'نام پنجرهٴ پاپاپ',popupFeatures:'ویژگیهای پنجرهٴ پاپاپ',popupResizable:'Resizable',popupStatusBar:'نوار وضعیت',popupLocationBar:'نوار موقعیت',popupToolbar:'نوارابزار',popupMenuBar:'نوار منو',popupFullScreen:'تمامصفحه (IE)',popupScrollBars:'میلههای پیمایش',popupDependent:'وابسته (Netscape)',popupLeft:'موقعیت ِچپ',popupTop:'موقعیت ِبالا',id:'Id',langDir:'جهتنمای زبان',langDirLTR:'چپ به راست (LTR)',langDirRTL:'راست به چپ (RTL)',acccessKey:'کلید دستیابی',name:'نام',langCode:'جهتنمای زبان',tabIndex:'نمایهٴ دسترسی با Tab',advisoryTitle:'عنوان کمکی',advisoryContentType:'نوع محتوای کمکی',cssClasses:'کلاسهای شیوهنامه(Stylesheet)',charset:'نویسهگان منبع ِپیوندشده',styles:'شیوه(style)',selectAnchor:'یک لنگر برگزینید',anchorName:'با نام لنگر',anchorId:'با شناسهٴ المان',emailAddress:'نشانی پست الکترونیکی',emailSubject:'موضوع پیام',emailBody:'متن پیام',noAnchors:'(در این سند لنگری دردسترس نیست)',noUrl:'لطفا URL پیوند را بنویسید',noEmail:'لطفا نشانی پست الکترونیکی را بنویسید'},anchor:{toolbar:'گنجاندن/ویرایش ِلنگر',menu:'ویژگیهای لنگر',title:'ویژگیهای لنگر',name:'نام لنگر',errorName:'لطفا نام لنگر را بنویسید'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'جستجو و جایگزینی',find:'جستجو',replace:'جایگزینی',findWhat:'چهچیز را مییابید:',replaceWith:'جایگزینی با:',notFoundMsg:'متن موردنظر یافت نشد.',matchCase:'همسانی در بزرگی و کوچکی نویسهها',matchWord:'همسانی با واژهٴ کامل',matchCyclic:'Match cyclic',replaceAll:'جایگزینی همهٴ یافتهها',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'جدول',title:'ویژگیهای جدول',menu:'ویژگیهای جدول',deleteTable:'پاککردن جدول',rows:'سطرها',columns:'ستونها',border:'اندازهٴ لبه',widthPx:'پیکسل',widthPc:'درصد',widthUnit:'width unit',cellSpace:'فاصلهٴ میان سلولها',cellPad:'فاصلهٴ پرشده در سلول',caption:'عنوان',summary:'خلاصه',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'سلول',insertBefore:'افزودن سلول قبل از',insertAfter:'افزودن سلول بعد از',deleteCell:'حذف سلولها',merge:'ادغام سلولها',mergeRight:'ادغام به راست',mergeDown:'ادغام به پایین',splitHorizontal:'جدا کردن افقی سلول',splitVertical:'جدا کردن عمودی سلول',title:'ویژگیهای سلول',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'سطر',insertBefore:'افزودن سطر قبل از',insertAfter:'افزودن سطر بعد از',deleteRow:'حذف سطرها'},column:{menu:'ستون',insertBefore:'افزودن ستون قبل از',insertAfter:'افزودن ستون بعد از',deleteColumn:'حذف ستونها'}},button:{title:'ویژگیهای دکمه',text:'متن (مقدار)',type:'نوع',typeBtn:'دکمه',typeSbm:'Submit',typeRst:'بازنشانی (Reset)'},checkboxAndRadio:{checkboxTitle:'ویژگیهای خانهٴ گزینهای',radioTitle:'ویژگیهای دکمهٴ رادیویی',value:'مقدار',selected:'برگزیده'},form:{title:'ویژگیهای فرم',menu:'ویژگیهای فرم',action:'رویداد',method:'متد',encoding:'Encoding'},select:{title:'ویژگیهای فیلد چندگزینهای',selectInfo:'اطلاعات',opAvail:'گزینههای دردسترس',value:'مقدار',size:'اندازه',lines:'خطوط',chkMulti:'گزینش چندگانه فراهم باشد',opText:'متن',opValue:'مقدار',btnAdd:'افزودن',btnModify:'ویرایش',btnUp:'بالا',btnDown:'پائین',btnSetValue:'تنظیم به عنوان مقدار ِبرگزیده',btnDelete:'پاککردن'},textarea:{title:'ویژگیهای ناحیهٴ متنی',cols:'ستونها',rows:'سطرها'},textfield:{title:'ویژگیهای فیلد متنی',name:'نام',value:'مقدار',charWidth:'پهنای نویسه',maxChars:'بیشینهٴ نویسهها',type:'نوع',typeText:'متن',typePass:'گذرواژه'},hidden:{title:'ویژگیهای فیلد پنهان',name:'نام',value:'مقدار'},image:{title:'ویژگیهای تصویر',titleButton:'ویژگیهای دکمهٴ تصویری',menu:'ویژگیهای تصویر',infoTab:'اطلاعات تصویر',btnUpload:'به سرور بفرست',upload:'انتقال به سرور',alt:'متن جایگزین',lockRatio:'قفلکردن ِنسبت',unlockRatio:'Unlock Ratio',resetSize:'بازنشانی اندازه',border:'لبه',hSpace:'فاصلهٴ افقی',vSpace:'فاصلهٴ عمودی',alertUrl:'لطفا URL تصویر را بنویسید',linkTab:'پیوند',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ویژگیهای Flash',propertiesTab:'Properties',title:'ویژگیهای Flash',chkPlay:'آغاز ِخودکار',chkLoop:'اجرای پیاپی',chkMenu:'دردسترسبودن منوی Flash',chkFull:'Allow Fullscreen',scale:'مقیاس',scaleAll:'نمایش همه',scaleNoBorder:'بدون کران',scaleFit:'جایگیری کامل',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'پائین مطلق',alignAbsMiddle:'وسط مطلق',alignBaseline:'خطپایه',alignTextTop:'متن بالا',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'رنگ پسزمینه',hSpace:'فاصلهٴ افقی',vSpace:'فاصلهٴ عمودی',validateSrc:'لطفا URL پیوند را بنویسید',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'بررسی املا',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'در واژهنامه یافت نشد',changeTo:'تغییر به',btnIgnore:'چشمپوشی',btnIgnoreAll:'چشمپوشی همه',btnReplace:'جایگزینی',btnReplaceAll:'جایگزینی همه',btnUndo:'واچینش',noSuggestions:'- پیشنهادی نیست -',progress:'بررسی املا در حال انجام...',noMispell:'بررسی املا انجام شد. هیچ غلطاملائی یافت نشد',noChanges:'بررسی املا انجام شد. هیچ واژهای تغییر نیافت',oneChange:'بررسی املا انجام شد. یک واژه تغییر یافت',manyChanges:'بررسی املا انجام شد. %1 واژه تغییر یافت',ieSpellDownload:'بررسیکنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟'},smiley:{toolbar:'خندانک',title:'گنجاندن خندانک',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'فهرست شمارهدار',bulletedlist:'فهرست نقطهای',indent:'افزایش تورفتگی',outdent:'کاهش تورفتگی',justify:{left:'چپچین',center:'میانچین',right:'راستچین',block:'بلوکچین'},blockquote:'بلوک نقل قول',clipboard:{title:'چسباندن',cutError:'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl/Cmd+X).',copyError:'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپیکردن را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl/Cmd+C).',pasteMsg:'لطفا متن را با کلیدهای (<STRONG>Ctrl/Cmd+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.',securityMsg:'به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'چسباندن از Word',title:'چسباندن از Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'چسباندن به عنوان متن ِساده',title:'چسباندن به عنوان متن ِساده'},templates:{button:'الگوها',title:'الگوهای محتویات',options:'Template Options',insertOption:'محتویات کنونی جایگزین شوند',selectPromptMsg:'لطفا الگوی موردنظر را برای بازکردن در ویرایشگر برگزینید<br>(محتویات کنونی از دست خواهند رفت):',emptyListMsg:'(الگوئی تعریف نشده است)'},showBlocks:'نمایش بلوکها',stylesCombo:{label:'سبک',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'فرمت',panelTitle:'فرمت',tag_p:'نرمال',tag_pre:'فرمتشده',tag_address:'آدرس',tag_h1:'سرنویس 1',tag_h2:'سرنویس 2',tag_h3:'سرنویس 3',tag_h4:'سرنویس 4',tag_h5:'سرنویس 5',tag_h6:'سرنویس 6',tag_div:'بند'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'قلم',voiceLabel:'Font',panelTitle:'قلم'},fontSize:{label:'اندازه',voiceLabel:'Font Size',panelTitle:'اندازه'},colorButton:{textColorTitle:'رنگ متن',bgColorTitle:'رنگ پسزمینه',panelTitle:'Colors',auto:'خودکار',more:'رنگهای بیشتر...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/fi.js b/modules_v2/ckeditor/lang/fi.js new file mode 100644 index 0000000000..f3ec27ae2f --- /dev/null +++ b/modules_v2/ckeditor/lang/fi.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.fi={dir:'ltr',editorTitle:'Rikastekstieditori, %1, paina ALT 0 nähdäksesi ohjeen.',toolbar:'Työkalupalkki',editor:'Rikastekstieditori',source:'Koodi',newPage:'Tyhjennä',save:'Tallenna',preview:'Esikatsele',cut:'Leikkaa',copy:'Kopioi',paste:'Liitä',print:'Tulosta',underline:'Alleviivattu',bold:'Lihavoitu',italic:'Kursivoitu',selectAll:'Valitse kaikki',removeFormat:'Poista muotoilu',strike:'Yliviivattu',subscript:'Alaindeksi',superscript:'Yläindeksi',horizontalrule:'Lisää murtoviiva',pagebreak:'Lisää sivun vaihto',pagebreakAlt:'Page Break',unlink:'Poista linkki',undo:'Kumoa',redo:'Toista',common:{browseServer:'Selaa palvelinta',url:'Osoite',protocol:'Protokolla',upload:'Lisää tiedosto',uploadSubmit:'Lähetä palvelimelle',image:'Kuva',flash:'Flash',form:'Lomake',checkbox:'Valintaruutu',radio:'Radiopainike',textField:'Tekstikenttä',textarea:'Tekstilaatikko',hiddenField:'Piilokenttä',button:'Painike',select:'Valintakenttä',imageButton:'Kuvapainike',notSet:'<ei asetettu>',id:'Tunniste',name:'Nimi',langDir:'Kielen suunta',langDirLtr:'Vasemmalta oikealle (LTR)',langDirRtl:'Oikealta vasemmalle (RTL)',langCode:'Kielikoodi',longDescr:'Pitkän kuvauksen URL',cssClass:'Tyyliluokat',advisoryTitle:'Avustava otsikko',cssStyle:'Tyyli',ok:'OK',cancel:'Peruuta',close:'Sulje',preview:'Esikatselu',generalTab:'Yleinen',advancedTab:'Lisäominaisuudet',validateNumberFailed:'Arvon pitää olla numero.',confirmNewPage:'Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?',confirmCancel:'Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?',options:'Asetukset',target:'Kohde',targetNew:'Uusi ikkuna (_blank)',targetTop:'Päällimmäinen ikkuna (_top)',targetSelf:'Sama ikkuna (_self)',targetParent:'Ylemmän tason ikkuna (_parent)',langDirLTR:'Vasemmalta oikealle (LTR)',langDirRTL:'Oikealta vasemmalle (RTL)',styles:'Tyyli',cssClasses:'Tyylitiedoston luokat',width:'Leveys',height:'Korkeus',align:'Kohdistus',alignLeft:'Vasemmalle',alignRight:'Oikealle',alignCenter:'Keskelle',alignTop:'Ylös',alignMiddle:'Keskelle',alignBottom:'Alas',invalidHeight:'Korkeuden täytyy olla numero.',invalidWidth:'Leveyden täytyy olla numero.',unavailable:'%1<span class="cke_accessibility">, ei saatavissa</span>'},contextmenu:{options:'Pikavalikon ominaisuudet'},specialChar:{toolbar:'Lisää erikoismerkki',title:'Valitse erikoismerkki',options:'Erikoismerkin ominaisuudet'},link:{toolbar:'Lisää linkki/muokkaa linkkiä',other:'<muu>',menu:'Muokkaa linkkiä',title:'Linkki',info:'Linkin tiedot',target:'Kohde',upload:'Lisää tiedosto',advanced:'Lisäominaisuudet',type:'Linkkityyppi',toUrl:'Osoite',toAnchor:'Ankkuri tässä sivussa',toEmail:'Sähköposti',targetFrame:'<kehys>',targetPopup:'<popup ikkuna>',targetFrameName:'Kohdekehyksen nimi',targetPopupName:'Popup ikkunan nimi',popupFeatures:'Popup ikkunan ominaisuudet',popupResizable:'Venytettävä',popupStatusBar:'Tilarivi',popupLocationBar:'Osoiterivi',popupToolbar:'Vakiopainikkeet',popupMenuBar:'Valikkorivi',popupFullScreen:'Täysi ikkuna (IE)',popupScrollBars:'Vierityspalkit',popupDependent:'Riippuva (Netscape)',popupLeft:'Vasemmalta (px)',popupTop:'Ylhäältä (px)',id:'Tunniste',langDir:'Kielen suunta',langDirLTR:'Vasemmalta oikealle (LTR)',langDirRTL:'Oikealta vasemmalle (RTL)',acccessKey:'Pikanäppäin',name:'Nimi',langCode:'Kielen suunta',tabIndex:'Tabulaattori indeksi',advisoryTitle:'Avustava otsikko',advisoryContentType:'Avustava sisällön tyyppi',cssClasses:'Tyyliluokat',charset:'Linkitetty kirjaimisto',styles:'Tyyli',selectAnchor:'Valitse ankkuri',anchorName:'Ankkurin nimen mukaan',anchorId:'Ankkurin ID:n mukaan',emailAddress:'Sähköpostiosoite',emailSubject:'Aihe',emailBody:'Viesti',noAnchors:'(Ei ankkureita tässä dokumentissa)',noUrl:'Linkille on kirjoitettava URL',noEmail:'Kirjoita sähköpostiosoite'},anchor:{toolbar:'Lisää ankkuri/muokkaa ankkuria',menu:'Ankkurin ominaisuudet',title:'Ankkurin ominaisuudet',name:'Nimi',errorName:'Ankkurille on kirjoitettava nimi'},list:{numberedTitle:'Numeroidun listan ominaisuudet',bulletedTitle:'Numeroimattoman listan ominaisuudet',type:'Tyyppi',start:'Alku',validateStartNumber:'Listan ensimmäisen numeron tulee olla kokonaisluku.',circle:'Ympyrä',disc:'Levy',square:'Neliö',none:'Ei mikään',notset:'<ei asetettu>',armenian:'Armeenialainen numerointi',georgian:'Georgialainen numerointi (an, ban, gan, etc.)',lowerRoman:'Pienet roomalaiset (i, ii, iii, iv, v, jne.)',upperRoman:'Isot roomalaiset (I, II, III, IV, V, jne.)',lowerAlpha:'Pienet aakkoset (a, b, c, d, e, jne.)',upperAlpha:'Isot aakkoset (A, B, C, D, E, jne.)',lowerGreek:'Pienet kreikkalaiset (alpha, beta, gamma, jne.)',decimal:'Desimaalit (1, 2, 3, jne.)',decimalLeadingZero:'Desimaalit, alussa nolla (01, 02, 03, jne.)'},findAndReplace:{title:'Etsi ja korvaa',find:'Etsi',replace:'Korvaa',findWhat:'Etsi mitä:',replaceWith:'Korvaa tällä:',notFoundMsg:'Etsittyä tekstiä ei löytynyt.',matchCase:'Sama kirjainkoko',matchWord:'Koko sana',matchCyclic:'Kierrä ympäri',replaceAll:'Korvaa kaikki',replaceSuccessMsg:'%1 esiintymä(ä) korvattu.'},table:{toolbar:'Taulu',title:'Taulun ominaisuudet',menu:'Taulun ominaisuudet',deleteTable:'Poista taulu',rows:'Rivit',columns:'Sarakkeet',border:'Rajan paksuus',widthPx:'pikseliä',widthPc:'prosenttia',widthUnit:'leveysyksikkö',cellSpace:'Solujen väli',cellPad:'Solujen sisennys',caption:'Otsikko',summary:'Yhteenveto',headers:'Ylätunnisteet',headersNone:'Ei',headersColumn:'Ensimmäinen sarake',headersRow:'Ensimmäinen rivi',headersBoth:'Molemmat',invalidRows:'Rivien määrän täytyy olla suurempi kuin 0.',invalidCols:'Sarakkeiden määrän täytyy olla suurempi kuin 0.',invalidBorder:'Reunan koon täytyy olla numero.',invalidWidth:'Taulun leveyden täytyy olla numero.',invalidHeight:'Taulun korkeuden täytyy olla numero.',invalidCellSpacing:'Solujen välin täytyy olla numero.',invalidCellPadding:'Solujen sisennyksen täytyy olla numero.',cell:{menu:'Solu',insertBefore:'Lisää solu eteen',insertAfter:'Lisää solu perään',deleteCell:'Poista solut',merge:'Yhdistä solut',mergeRight:'Yhdistä oikealla olevan kanssa',mergeDown:'Yhdistä alla olevan kanssa',splitHorizontal:'Jaa solu vaakasuunnassa',splitVertical:'Jaa solu pystysuunnassa',title:'Solun ominaisuudet',cellType:'Solun tyyppi',rowSpan:'Rivin jatkuvuus',colSpan:'Solun jatkuvuus',wordWrap:'Rivitys',hAlign:'Horisontaali kohdistus',vAlign:'Vertikaali kohdistus',alignBaseline:'Alas (teksti)',bgColor:'Taustan väri',borderColor:'Reunan väri',data:'Data',header:'Ylätunniste',yes:'Kyllä',no:'Ei',invalidWidth:'Solun leveyden täytyy olla numero.',invalidHeight:'Solun korkeuden täytyy olla numero.',invalidRowSpan:'Rivin jatkuvuuden täytyy olla kokonaisluku.',invalidColSpan:'Solun jatkuvuuden täytyy olla kokonaisluku.',chooseColor:'Valitse'},row:{menu:'Rivi',insertBefore:'Lisää rivi yläpuolelle',insertAfter:'Lisää rivi alapuolelle',deleteRow:'Poista rivit'},column:{menu:'Sarake',insertBefore:'Lisää sarake vasemmalle',insertAfter:'Lisää sarake oikealle',deleteColumn:'Poista sarakkeet'}},button:{title:'Painikkeen ominaisuudet',text:'Teksti (arvo)',type:'Tyyppi',typeBtn:'Painike',typeSbm:'Lähetä',typeRst:'Tyhjennä'},checkboxAndRadio:{checkboxTitle:'Valintaruudun ominaisuudet',radioTitle:'Radiopainikkeen ominaisuudet',value:'Arvo',selected:'Valittu'},form:{title:'Lomakkeen ominaisuudet',menu:'Lomakkeen ominaisuudet',action:'Toiminto',method:'Tapa',encoding:'Enkoodaus'},select:{title:'Valintakentän ominaisuudet',selectInfo:'Info',opAvail:'Ominaisuudet',value:'Arvo',size:'Koko',lines:'Rivit',chkMulti:'Salli usea valinta',opText:'Teksti',opValue:'Arvo',btnAdd:'Lisää',btnModify:'Muuta',btnUp:'Ylös',btnDown:'Alas',btnSetValue:'Aseta valituksi',btnDelete:'Poista'},textarea:{title:'Tekstilaatikon ominaisuudet',cols:'Sarakkeita',rows:'Rivejä'},textfield:{title:'Tekstikentän ominaisuudet',name:'Nimi',value:'Arvo',charWidth:'Leveys',maxChars:'Maksimi merkkimäärä',type:'Tyyppi',typeText:'Teksti',typePass:'Salasana'},hidden:{title:'Piilokentän ominaisuudet',name:'Nimi',value:'Arvo'},image:{title:'Kuvan ominaisuudet',titleButton:'Kuvapainikkeen ominaisuudet',menu:'Kuvan ominaisuudet',infoTab:'Kuvan tiedot',btnUpload:'Lähetä palvelimelle',upload:'Lisää kuva',alt:'Vaihtoehtoinen teksti',lockRatio:'Lukitse suhteet',unlockRatio:'Vapauta suhteet',resetSize:'Alkuperäinen koko',border:'Kehys',hSpace:'Vaakatila',vSpace:'Pystytila',alertUrl:'Kirjoita kuvan osoite (URL)',linkTab:'Linkki',button2Img:'Haluatko muuntaa valitun kuvanäppäimen kuvaksi?',img2Button:'Haluatko muuntaa valitun kuvan kuvanäppäimeksi?',urlMissing:'Kuvan lähdeosoite puuttuu.',validateBorder:'Kehyksen täytyy olla kokonaisluku.',validateHSpace:'HSpace-määrityksen täytyy olla kokonaisluku.',validateVSpace:'VSpace-määrityksen täytyy olla kokonaisluku.'},flash:{properties:'Flash-ominaisuudet',propertiesTab:'Ominaisuudet',title:'Flash ominaisuudet',chkPlay:'Automaattinen käynnistys',chkLoop:'Toisto',chkMenu:'Näytä Flash-valikko',chkFull:'Salli kokoruututila',scale:'Levitä',scaleAll:'Näytä kaikki',scaleNoBorder:'Ei rajaa',scaleFit:'Tarkka koko',access:'Skriptien pääsy',accessAlways:'Aina',accessSameDomain:'Sama verkkotunnus',accessNever:'Ei koskaan',alignAbsBottom:'Aivan alas',alignAbsMiddle:'Aivan keskelle',alignBaseline:'Alas (teksti)',alignTextTop:'Ylös (teksti)',quality:'Laatu',qualityBest:'Paras',qualityHigh:'Korkea',qualityAutoHigh:'Automaattinen korkea',qualityMedium:'Keskitaso',qualityAutoLow:'Automaattinen matala',qualityLow:'Matala',windowModeWindow:'Ikkuna',windowModeOpaque:'Läpinäkyvyys',windowModeTransparent:'Läpinäkyvä',windowMode:'Ikkuna tila',flashvars:'Muuttujat Flash:lle',bgcolor:'Taustaväri',hSpace:'Vaakatila',vSpace:'Pystytila',validateSrc:'Linkille on kirjoitettava URL',validateHSpace:'Vaakatilan täytyy olla numero.',validateVSpace:'Pystytilan täytyy olla numero.'},spellCheck:{toolbar:'Tarkista oikeinkirjoitus',title:'Oikoluku',notAvailable:'Valitettavasti oikoluku ei ole käytössä tällä hetkellä.',errorLoading:'Virhe ladattaessa oikolukupalvelua isännältä: %s.',notInDic:'Ei sanakirjassa',changeTo:'Vaihda',btnIgnore:'Jätä huomioimatta',btnIgnoreAll:'Jätä kaikki huomioimatta',btnReplace:'Korvaa',btnReplaceAll:'Korvaa kaikki',btnUndo:'Kumoa',noSuggestions:'Ei ehdotuksia',progress:'Tarkistus käynnissä...',noMispell:'Tarkistus valmis: Ei virheitä',noChanges:'Tarkistus valmis: Yhtään sanaa ei muutettu',oneChange:'Tarkistus valmis: Yksi sana muutettiin',manyChanges:'Tarkistus valmis: %1 sanaa muutettiin',ieSpellDownload:'Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?'},smiley:{toolbar:'Hymiö',title:'Lisää hymiö',options:'Hymiön ominaisuudet'},elementsPath:{eleLabel:'Elementin polku',eleTitle:'%1 elementti'},numberedlist:'Numerointi',bulletedlist:'Luottelomerkit',indent:'Suurenna sisennystä',outdent:'Pienennä sisennystä',justify:{left:'Tasaa vasemmat reunat',center:'Keskitä',right:'Tasaa oikeat reunat',block:'Tasaa molemmat reunat'},blockquote:'Lainaus',clipboard:{title:'Liitä',cutError:'Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).',copyError:'Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).',pasteMsg:'Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.',securityMsg:'Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.',pasteArea:'Leikealue'},pastefromword:{confirmCleanup:'Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)',toolbar:'Liitä Word-dokumentista',title:'Liitä Word-dokumentista',error:'Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia'},pasteText:{button:'Liitä tekstinä',title:'Liitä tekstinä'},templates:{button:'Pohjat',title:'Sisältöpohjat',options:'Sisältöpohjan ominaisuudet',insertOption:'Korvaa editorin koko sisältö',selectPromptMsg:'Valitse pohja editoriin<br>(aiempi sisältö menetetään):',emptyListMsg:'(Ei määriteltyjä pohjia)'},showBlocks:'Näytä elementit',stylesCombo:{label:'Tyyli',panelTitle:'Muotoilujen tyylit',panelTitle1:'Lohkojen tyylit',panelTitle2:'Rivinsisäiset tyylit',panelTitle3:'Objektien tyylit'},format:{label:'Muotoilu',panelTitle:'Muotoilu',tag_p:'Normaali',tag_pre:'Muotoiltu',tag_address:'Osoite',tag_h1:'Otsikko 1',tag_h2:'Otsikko 2',tag_h3:'Otsikko 3',tag_h4:'Otsikko 4',tag_h5:'Otsikko 5',tag_h6:'Otsikko 6',tag_div:'Normaali (DIV)'},div:{title:'Luo div-kehikko',toolbar:'Luo div-kehikko',cssClassInputLabel:'Tyylitiedoston luokat',styleSelectLabel:'Tyyli',IdInputLabel:'Id',languageCodeInputLabel:' Kielen koodi',inlineStyleInputLabel:'Sisätyyli',advisoryTitleInputLabel:'Ohjeistava otsikko',langDirLabel:'Kielen suunta',langDirLTRLabel:'Vasemmalta oikealle (LTR)',langDirRTLLabel:'Oikealta vasemmalle (RTL)',edit:'Muokkaa Diviä',remove:'Poista Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Kirjaisinlaji',voiceLabel:'Kirjaisinlaji',panelTitle:'Kirjaisinlaji'},fontSize:{label:'Koko',voiceLabel:'Kirjaisimen koko',panelTitle:'Koko'},colorButton:{textColorTitle:'Tekstiväri',bgColorTitle:'Taustaväri',panelTitle:'Värit',auto:'Automaattinen',more:'Lisää värejä...'},colors:{'000':'Musta',800000:'Kastanjanruskea','8B4513':'Satulanruskea','2F4F4F':'Tumma liuskekivenharmaa','008080':'Sinivihreä','000080':'Laivastonsininen','4B0082':'Indigonsininen',696969:'Tummanharmaa',B22222:'Tiili',A52A2A:'Ruskea',DAA520:'Kultapiisku','006400':'Tummanvihreä','40E0D0':'Turkoosi','0000CD':'Keskisininen',800080:'Purppura',808080:'Harmaa',F00:'Punainen',FF8C00:'Tumma oranssi',FFD700:'Kulta','008000':'Vihreä','0FF':'Syaani','00F':'Sininen',EE82EE:'Violetti',A9A9A9:'Tummanharmaa',FFA07A:'Vaaleanlohenpunainen',FFA500:'Oranssi',FFFF00:'Keltainen','00FF00':'Limetin vihreä',AFEEEE:'Haalea turkoosi',ADD8E6:'Vaaleansininen',DDA0DD:'Luumu',D3D3D3:'Vaaleanharmaa',FFF0F5:'Laventelinpunainen',FAEBD7:'Antiikinvalkoinen',FFFFE0:'Vaaleankeltainen',F0FFF0:'Hunajameloni',F0FFFF:'Asurinsininen',F0F8FF:'Alice Blue -sininen',E6E6FA:'Lavanteli',FFF:'Valkoinen'},scayt:{title:'Oikolue kirjoitettaessa',opera_title:'Opera ei tue tätä ominaisuutta',enable:'Ota käyttöön oikoluku kirjoitettaessa',disable:'Poista käytöstä oikoluku kirjoitetaessa',about:'Tietoja oikoluvusta kirjoitetaessa',toggle:'Vaihda oikoluku kirjoittaessa tilaa',options:'Asetukset',langs:'Kielet',moreSuggestions:'Lisää ehdotuksia',ignore:'Ohita',ignoreAll:'Ohita kaikki',addWord:'Lisää sana',emptyDic:'Sanakirjan nimi on annettava.',optionsTab:'Asetukset',allCaps:'Ohita sanat, jotka on kirjoitettu kokonaan isoilla kirjaimilla',ignoreDomainNames:'Ohita verkkotunnukset',mixedCase:'Ohita sanat, joissa on sekoitettu isoja ja pieniä kirjaimia',mixedWithDigits:'Ohita sanat, joissa on numeroita',languagesTab:'Kielet',dictionariesTab:'Sanakirjat',dic_field_name:'Sanakirjan nimi',dic_create:'Luo',dic_restore:'Palauta',dic_delete:'Poista',dic_rename:'Nimeä uudelleen',dic_info:'Oletuksena sanakirjat tallennetaan evästeeseen, mutta evästeiden koko on kuitenkin rajallinen. Sanakirjan kasvaessa niin suureksi, ettei se enää mahdu evästeeseen, sanakirja täytyy tallentaa palvelimellemme. Tallentaaksesi sanakirjasi palvelimellemme tulee sinun antaa sille nimi. Jos olet jo tallentanut sanakirjan, anna sen nimi ja klikkaa Palauta-painiketta',aboutTab:'Tietoa'},about:{title:'Tietoa CKEditorista',dlgTitle:'Tietoa CKEditorista',moreInfo:'Lisenssitiedot löytyvät kotisivuiltamme:',copy:'Copyright © $1. Kaikki oikeuden pidätetään.'},maximize:'Suurenna',minimize:'Pienennä',fakeobjects:{anchor:'Ankkuri',flash:'Flash animaatio',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Tuntematon objekti'},resize:'Raahaa muuttaaksesi kokoa',colordialog:{title:'Valitse väri',options:'Värin ominaisuudet',highlight:'Korostus',selected:'Valittu',clear:'Poista'},toolbarCollapse:'Kutista työkalupalkki',toolbarExpand:'Laajenna työkalupalkki',bidi:{ltr:'Tekstin suunta vasemmalta oikealle',rtl:'Tekstin suunta oikealta vasemmalle'}};
diff --git a/modules_v2/ckeditor/lang/fo.js b/modules_v2/ckeditor/lang/fo.js new file mode 100644 index 0000000000..27ab1e2712 --- /dev/null +++ b/modules_v2/ckeditor/lang/fo.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.fo={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Kelda',newPage:'Nýggj síða',save:'Goym',preview:'Frumsýning',cut:'Kvett',copy:'Avrita',paste:'Innrita',print:'Prenta',underline:'Undirstrikað',bold:'Feit skrift',italic:'Skráskrift',selectAll:'Markera alt',removeFormat:'Strika sniðgeving',strike:'Yvirstrikað',subscript:'Lækkað skrift',superscript:'Hækkað skrift',horizontalrule:'Ger vatnrætta linju',pagebreak:'Ger síðuskift',pagebreakAlt:'Page Break',unlink:'Strika tilknýti',undo:'Angra',redo:'Vend aftur',common:{browseServer:'Ambætarakagi',url:'URL',protocol:'Protokoll',upload:'Send til ambætaran',uploadSubmit:'Send til ambætaran',image:'Myndir',flash:'Flash',form:'Formur',checkbox:'Flugubein',radio:'Radioknøttur',textField:'Tekstteigur',textarea:'Tekstumráði',hiddenField:'Fjaldur teigur',button:'Knøttur',select:'Valskrá',imageButton:'Myndaknøttur',notSet:'<ikki sett>',id:'Id',name:'Navn',langDir:'Tekstkós',langDirLtr:'Frá vinstru til høgru (LTR)',langDirRtl:'Frá høgru til vinstru (RTL)',langCode:'Málkoda',longDescr:'Víðkað URL frágreiðing',cssClass:'Typografi klassar',advisoryTitle:'Vegleiðandi heiti',cssStyle:'Typografi',ok:'Góðkent',cancel:'Avlýst',close:'Lat aftur',preview:'Frumsýn',generalTab:'Generelt',advancedTab:'Fjølbroytt',validateNumberFailed:'Hetta er ikki eitt tal.',confirmNewPage:'Allar ikki goymdar broytingar í hesum innihaldi hvørva. Skal nýggj síða lesast kortini?',confirmCancel:'Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?',options:'Options',target:'Target',targetNew:'Nýtt vindeyga (_blank)',targetTop:'Vindeyga ovast (_top)',targetSelf:'Sama vindeyga (_self)',targetParent:'Upphavligt vindeyga (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Breidd',height:'Hædd',align:'Justering',alignLeft:'Vinstra',alignRight:'Høgra',alignCenter:'Miðsett',alignTop:'Ovast',alignMiddle:'Miðja',alignBottom:'Botnur',invalidHeight:'Hædd má vera eitt tal.',invalidWidth:'Breidd má vera eitt tal.',unavailable:'%1<span class="cke_accessibility">, ikki tøkt</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Set inn sertekn',title:'Vel sertekn',options:'Special Character Options'},link:{toolbar:'Ger/broyt tilknýti',other:'<other>',menu:'Broyt tilknýti',title:'Tilknýti',info:'Tilknýtis upplýsingar',target:'Target',upload:'Send til ambætaran',advanced:'Fjølbroytt',type:'Tilknýtisslag',toUrl:'URL',toAnchor:'Tilknýti til marknastein í tekstinum',toEmail:'Teldupostur',targetFrame:'<ramma>',targetPopup:'<popup vindeyga>',targetFrameName:'Vís navn vindeygans',targetPopupName:'Popup vindeygans navn',popupFeatures:'Popup vindeygans víðkaðu eginleikar',popupResizable:'Resizable',popupStatusBar:'Støðufrágreiðingarbjálki',popupLocationBar:'Adressulinja',popupToolbar:'Amboðsbjálki',popupMenuBar:'Skrábjálki',popupFullScreen:'Fullur skermur (IE)',popupScrollBars:'Rullibjálki',popupDependent:'Bundið (Netscape)',popupLeft:'Frástøða frá vinstru',popupTop:'Frástøða frá íerva',id:'Id',langDir:'Tekstkós',langDirLTR:'Frá vinstru til høgru (LTR)',langDirRTL:'Frá høgru til vinstru (RTL)',acccessKey:'Snarvegisknappur',name:'Navn',langCode:'Tekstkós',tabIndex:'Inntriv indeks',advisoryTitle:'Vegleiðandi heiti',advisoryContentType:'Vegleiðandi innihaldsslag',cssClasses:'Typografi klassar',charset:'Atknýtt teknsett',styles:'Typografi',selectAnchor:'Vel ein marknastein',anchorName:'Eftir navni á marknasteini',anchorId:'Eftir element Id',emailAddress:'Teldupost-adressa',emailSubject:'Evni',emailBody:'Breyðtekstur',noAnchors:'(Eingir marknasteinar eru í hesum dokumentið)',noUrl:'Vinarliga skriva tilknýti (URL)',noEmail:'Vinarliga skriva teldupost-adressu'},anchor:{toolbar:'Ger/broyt marknastein',menu:'Eginleikar fyri marknastein',title:'Eginleikar fyri marknastein',name:'Heiti marknasteinsins',errorName:'Vinarliga rita marknasteinsins heiti'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Finn og broyt',find:'Leita',replace:'Yvirskriva',findWhat:'Finn:',replaceWith:'Yvirskriva við:',notFoundMsg:'Leititeksturin varð ikki funnin',matchCase:'Munur á stórum og smáum bókstavum',matchWord:'Bert heil orð',matchCyclic:'Match cyclic',replaceAll:'Yvirskriva alt',replaceSuccessMsg:'%1 úrslit broytt.'},table:{toolbar:'Tabell',title:'Eginleikar fyri tabell',menu:'Eginleikar fyri tabell',deleteTable:'Strika tabell',rows:'Røðir',columns:'Kolonnur',border:'Bordabreidd',widthPx:'pixels',widthPc:'prosent',widthUnit:'breiddar unit',cellSpace:'Fjarstøða millum meskar',cellPad:'Meskubreddi',caption:'Tabellfrágreiðing',summary:'Samandráttur',headers:'Headers',headersNone:'Eingin',headersColumn:'Fyrsta kolonna',headersRow:'Fyrsta rað',headersBoth:'Báðir',invalidRows:'Talið av røðum má vera eitt tal størri enn 0.',invalidCols:'Talið av kolonnum má vera eitt tal størri enn 0.',invalidBorder:'Borda-stødd má vera eitt tal.',invalidWidth:'Tabell-breidd má vera eitt tal.',invalidHeight:'Tabell-hædd má vera eitt tal.',invalidCellSpacing:'Cell spacing má vera eitt tal.',invalidCellPadding:'Cell padding má vera eitt tal.',cell:{menu:'Meski',insertBefore:'Set meska inn áðrenn',insertAfter:'Set meska inn aftaná',deleteCell:'Strika meskar',merge:'Flætta meskar',mergeRight:'Flætta meskar til høgru',mergeDown:'Flætta saman',splitHorizontal:'Kloyv meska vatnrætt',splitVertical:'Kloyv meska loddrætt',title:'Mesku eginleikar',cellType:'Mesku slag',rowSpan:'Ræð spenni',colSpan:'Kolonnu spenni',wordWrap:'Word Wrap',hAlign:'Horisontal plasering',vAlign:'Loddrøtt plasering',alignBaseline:'Basislinja',bgColor:'Bakgrundslitur',borderColor:'Bordalitur',data:'Data',header:'Header',yes:'Ja',no:'Nei',invalidWidth:'Meskubreidd má vera eitt tal.',invalidHeight:'Meskuhædd má vera eitt tal.',invalidRowSpan:'Raðspennið má vera eitt heiltal.',invalidColSpan:'Kolonnuspennið má vera eitt heiltal.',chooseColor:'Vel'},row:{menu:'Rað',insertBefore:'Set rað inn áðrenn',insertAfter:'Set rað inn aftaná',deleteRow:'Strika røðir'},column:{menu:'Kolonna',insertBefore:'Set kolonnu inn áðrenn',insertAfter:'Set kolonnu inn aftaná',deleteColumn:'Strika kolonnur'}},button:{title:'Eginleikar fyri knøtt',text:'Tekstur',type:'Slag',typeBtn:'Knøttur',typeSbm:'Send',typeRst:'Nullstilla'},checkboxAndRadio:{checkboxTitle:'Eginleikar fyri flugubein',radioTitle:'Eginleikar fyri radioknøtt',value:'Virði',selected:'Valt'},form:{title:'Eginleikar fyri Form',menu:'Eginleikar fyri Form',action:'Hending',method:'Háttur',encoding:'Encoding'},select:{title:'Eginleikar fyri valskrá',selectInfo:'Upplýsingar',opAvail:'Tøkir møguleikar',value:'Virði',size:'Stødd',lines:'Linjur',chkMulti:'Loyv fleiri valmøguleikum samstundis',opText:'Tekstur',opValue:'Virði',btnAdd:'Legg afturat',btnModify:'Broyt',btnUp:'Upp',btnDown:'Niður',btnSetValue:'Set sum valt virði',btnDelete:'Strika'},textarea:{title:'Eginleikar fyri tekstumráði',cols:'kolonnur',rows:'røðir'},textfield:{title:'Eginleikar fyri tekstteig',name:'Navn',value:'Virði',charWidth:'Breidd (sjónlig tekn)',maxChars:'Mest loyvdu tekn',type:'Slag',typeText:'Tekstur',typePass:'Loyniorð'},hidden:{title:'Eginleikar fyri fjaldan teig',name:'Navn',value:'Virði'},image:{title:'Myndaeginleikar',titleButton:'Eginleikar fyri myndaknøtt',menu:'Myndaeginleikar',infoTab:'Myndaupplýsingar',btnUpload:'Send til ambætaran',upload:'Send',alt:'Alternativur tekstur',lockRatio:'Læs lutfallið',unlockRatio:'Lutfallið ikki læst',resetSize:'Upprunastødd',border:'Bordi',hSpace:'Høgri breddi',vSpace:'Vinstri breddi',alertUrl:'Rita slóðina til myndina',linkTab:'Tilknýti',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'URL til mynd manglar.',validateBorder:'Bordi má vera eitt heiltal.',validateHSpace:'HSpace má vera eitt heiltal.',validateVSpace:'VSpace má vera eitt heiltal.'},flash:{properties:'Flash eginleikar',propertiesTab:'Eginleikar',title:'Flash eginleikar',chkPlay:'Avspælingin byrjar sjálv',chkLoop:'Endurspæl',chkMenu:'Ger Flash skrá virkna',chkFull:'Loyv fullan skerm',scale:'Skalering',scaleAll:'Vís alt',scaleNoBorder:'Eingin bordi',scaleFit:'Neyv skalering',access:'Script atgongd',accessAlways:'Altíð',accessSameDomain:'Sama navnaøki',accessNever:'Ongantíð',alignAbsBottom:'Abs botnur',alignAbsMiddle:'Abs miðja',alignBaseline:'Basislinja',alignTextTop:'Tekst toppur',quality:'Góðska',qualityBest:'Besta',qualityHigh:'Høg',qualityAutoHigh:'Auto høg',qualityMedium:'Meðal',qualityAutoLow:'Auto Lág',qualityLow:'Lág',windowModeWindow:'Window',windowModeOpaque:'Ikki transparent',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variablar fyri Flash',bgcolor:'Bakgrundslitur',hSpace:'Høgri breddi',vSpace:'Vinstri breddi',validateSrc:'Vinarliga skriva tilknýti (URL)',validateHSpace:'HSpace má vera eitt tal.',validateVSpace:'VSpace má vera eitt tal.'},spellCheck:{toolbar:'Kanna stavseting',title:'Kanna stavseting',notAvailable:'Tíverri, ikki tøkt í løtuni.',errorLoading:'Feilur við innlesing av application service host: %s.',notInDic:'Finst ikki í orðabókini',changeTo:'Broyt til',btnIgnore:'Forfjóna',btnIgnoreAll:'Forfjóna alt',btnReplace:'Yvirskriva',btnReplaceAll:'Yvirskriva alt',btnUndo:'Angra',noSuggestions:'- Einki uppskot -',progress:'Rættstavarin arbeiðir...',noMispell:'Rættstavarain liðugur: Eingin feilur funnin',noChanges:'Rættstavarain liðugur: Einki orð varð broytt',oneChange:'Rættstavarain liðugur: Eitt orð er broytt',manyChanges:'Rættstavarain liðugur: %1 orð broytt',ieSpellDownload:'Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?'},smiley:{toolbar:'Smiley',title:'Vel Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Slóð til elementir',eleTitle:'%1 element'},numberedlist:'Talmerktur listi',bulletedlist:'Punktmerktur listi',indent:'Økja reglubrotarinntriv',outdent:'Minka reglubrotarinntriv',justify:{left:'Vinstrasett',center:'Miðsett',right:'Høgrasett',block:'Javnir tekstkantar'},blockquote:'Blockquote',clipboard:{title:'Innrita',cutError:'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).',copyError:'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).',pasteMsg:'Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.',securityMsg:'Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?',toolbar:'Innrita frá Word',title:'Innrita frá Word',error:'Tað eyðnaðist ikki at reinsa tekstin vegna ein internan feil'},pasteText:{button:'Innrita som reinan tekst',title:'Innrita som reinan tekst'},templates:{button:'Skabelónir',title:'Innihaldsskabelónir',options:'Template Options',insertOption:'Yvirskriva núverandi innihald',selectPromptMsg:'Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):',emptyListMsg:'(Ongar skabelónir tøkar)'},showBlocks:'Vís blokkar',stylesCombo:{label:'Typografi',panelTitle:'Formatterings stílir',panelTitle1:'Blokk stílir',panelTitle2:'Inline stílir',panelTitle3:'Object stílir'},format:{label:'Skriftsnið',panelTitle:'Skriftsnið',tag_p:'Vanligt',tag_pre:'Sniðgivið',tag_address:'Adressa',tag_h1:'Yvirskrift 1',tag_h2:'Yvirskrift 2',tag_h3:'Yvirskrift 3',tag_h4:'Yvirskrift 4',tag_h5:'Yvirskrift 5',tag_h6:'Yvirskrift 6',tag_div:'Normal (DIV)'},div:{title:'Ger Div Container',toolbar:'Ger Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Vinstru til høgru (LTR)',langDirRTLLabel:'Høgru til vinstru (RTL)',edit:'Redigera Div',remove:'Strika Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Skrift',voiceLabel:'Font',panelTitle:'Skrift'},fontSize:{label:'Skriftstødd',voiceLabel:'Font Size',panelTitle:'Skriftstødd'},colorButton:{textColorTitle:'Tekstlitur',bgColorTitle:'Bakgrundslitur',panelTitle:'Colors',auto:'Automatiskt',more:'Fleiri litir...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Kanna stavseting, meðan tú skrivar',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'Um SCAYT',toggle:'Toggle SCAYT',options:'Uppseting',langs:'Tungumál',moreSuggestions:'Fleiri tilráðingar',ignore:'Ignorera',ignoreAll:'Ignorera alt',addWord:'Legg orð afturat',emptyDic:'Heiti á orðabók eigur ikki at vera tómt.',optionsTab:'Uppseting',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Tungumál',dictionariesTab:'Orðabøkur',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Um'},about:{title:'Um CKEditor',dlgTitle:'Um CKEditor',moreInfo:'Licens upplýsingar finnast á heimasíðu okkara:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maksimera',minimize:'Minimera',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Ókent Object'},resize:'Drag fyri at broyta stødd',colordialog:{title:'Vel lit',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/fr-ca.js b/modules_v2/ckeditor/lang/fr-ca.js new file mode 100644 index 0000000000..1329b11f3f --- /dev/null +++ b/modules_v2/ckeditor/lang/fr-ca.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang['fr-ca']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Source',newPage:'Nouvelle page',save:'Sauvegarder',preview:'Previsualiser',cut:'Couper',copy:'Copier',paste:'Coller',print:'Imprimer',underline:'Souligné',bold:'Gras',italic:'Italique',selectAll:'Tout sélectionner',removeFormat:'Supprimer le formatage',strike:'Barrer',subscript:'Indice',superscript:'Exposant',horizontalrule:'Insérer un séparateur',pagebreak:'Insérer un saut de page',pagebreakAlt:'Page Break',unlink:'Supprimer le lien',undo:'Annuler',redo:'Refaire',common:{browseServer:'Parcourir le serveur',url:'URL',protocol:'Protocole',upload:'Télécharger',uploadSubmit:'Envoyer sur le serveur',image:'Image',flash:'Animation Flash',form:'Formulaire',checkbox:'Case à cocher',radio:'Bouton radio',textField:'Champ texte',textarea:'Zone de texte',hiddenField:'Champ caché',button:'Bouton',select:'Champ de sélection',imageButton:'Bouton image',notSet:'<Par défaut>',id:'Id',name:'Nom',langDir:"Sens d'écriture",langDirLtr:'De gauche à droite (LTR)',langDirRtl:'De droite à gauche (RTL)',langCode:'Code langue',longDescr:'URL de description longue',cssClass:'Classes de feuilles de style',advisoryTitle:'Titre',cssStyle:'Style',ok:'OK',cancel:'Annuler',close:'Close',preview:'Preview',generalTab:'Général',advancedTab:'Avancée',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Largeur',height:'Hauteur',align:'Alignement',alignLeft:'Gauche',alignRight:'Droite',alignCenter:'Centré',alignTop:'Haut',alignMiddle:'Milieu',alignBottom:'Bas',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insérer un caractère spécial',title:'Insérer un caractère spécial',options:'Special Character Options'},link:{toolbar:'Insérer/modifier le lien',other:'<other>',menu:'Modifier le lien',title:'Propriétés du lien',info:'Informations sur le lien',target:'Destination',upload:'Télécharger',advanced:'Avancée',type:'Type de lien',toUrl:'URL',toAnchor:'Ancre dans cette page',toEmail:'E-Mail',targetFrame:'<Cadre>',targetPopup:'<fenêtre popup>',targetFrameName:'Nom du cadre de destination',targetPopupName:'Nom de la fenêtre popup',popupFeatures:'Caractéristiques de la fenêtre popup',popupResizable:'Resizable',popupStatusBar:"Barre d'état",popupLocationBar:"Barre d'adresses",popupToolbar:"Barre d'outils",popupMenuBar:'Barre de menu',popupFullScreen:'Plein écran (IE)',popupScrollBars:'Barres de défilement',popupDependent:'Dépendante (Netscape)',popupLeft:'Position à partir de la gauche',popupTop:'Position à partir du haut',id:'Id',langDir:"Sens d'écriture",langDirLTR:'De gauche à droite (LTR)',langDirRTL:'De droite à gauche (RTL)',acccessKey:'Équivalent clavier',name:'Nom',langCode:"Sens d'écriture",tabIndex:'Ordre de tabulation',advisoryTitle:'Titre',advisoryContentType:'Type de contenu',cssClasses:'Classes de feuilles de style',charset:'Encodage de caractère',styles:'Style',selectAnchor:'Sélectionner une ancre',anchorName:'Par nom',anchorId:'Par id',emailAddress:'Adresse E-Mail',emailSubject:'Sujet du message',emailBody:'Corps du message',noAnchors:"(Pas d'ancre disponible dans le document)",noUrl:"Veuillez saisir l'URL",noEmail:"Veuillez saisir l'adresse e-mail"},anchor:{toolbar:"Insérer/modifier l'ancre",menu:"Propriétés de l'ancre",title:"Propriétés de l'ancre",name:"Nom de l'ancre",errorName:"Veuillez saisir le nom de l'ancre"},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Chercher et Remplacer',find:'Chercher',replace:'Remplacer',findWhat:'Rechercher:',replaceWith:'Remplacer par:',notFoundMsg:'Le texte indiqué est introuvable.',matchCase:'Respecter la casse',matchWord:'Mot entier',matchCyclic:'Match cyclic',replaceAll:'Tout remplacer',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tableau',title:'Propriétés du tableau',menu:'Propriétés du tableau',deleteTable:'Supprimer le tableau',rows:'Lignes',columns:'Colonnes',border:'Taille de la bordure',widthPx:'pixels',widthPc:'pourcentage',widthUnit:'width unit',cellSpace:'Espacement',cellPad:'Contour',caption:'Titre',summary:'Résumé',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cellule',insertBefore:'Insérer une cellule avant',insertAfter:'Insérer une cellule après',deleteCell:'Supprimer des cellules',merge:'Fusionner les cellules',mergeRight:'Fusionner à droite',mergeDown:'Fusionner en bas',splitHorizontal:'Scinder la cellule horizontalement',splitVertical:'Scinder la cellule verticalement',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Ligne',insertBefore:'Insérer une ligne avant',insertAfter:'Insérer une ligne après',deleteRow:'Supprimer des lignes'},column:{menu:'Colonne',insertBefore:'Insérer une colonne avant',insertAfter:'Insérer une colonne après',deleteColumn:'Supprimer des colonnes'}},button:{title:'Propriétés du bouton',text:'Texte (Valeur)',type:'Type',typeBtn:'Bouton',typeSbm:'Soumettre',typeRst:'Réinitialiser'},checkboxAndRadio:{checkboxTitle:'Propriétés de la case à cocher',radioTitle:'Propriétés du bouton radio',value:'Valeur',selected:'Sélectionné'},form:{title:'Propriétés du formulaire',menu:'Propriétés du formulaire',action:'Action',method:'Méthode',encoding:'Encoding'},select:{title:'Propriétés de la liste/du menu',selectInfo:'Info',opAvail:'Options disponibles',value:'Valeur',size:'Taille',lines:'lignes',chkMulti:'Sélection multiple',opText:'Texte',opValue:'Valeur',btnAdd:'Ajouter',btnModify:'Modifier',btnUp:'Monter',btnDown:'Descendre',btnSetValue:'Valeur sélectionnée',btnDelete:'Supprimer'},textarea:{title:'Propriétés de la zone de texte',cols:'Colonnes',rows:'Lignes'},textfield:{title:'Propriétés du champ texte',name:'Nom',value:'Valeur',charWidth:'Largeur en caractères',maxChars:'Nombre maximum de caractères',type:'Type',typeText:'Texte',typePass:'Mot de passe'},hidden:{title:'Propriétés du champ caché',name:'Nom',value:'Valeur'},image:{title:"Propriétés de l'image",titleButton:'Propriétés du bouton image',menu:"Propriétés de l'image",infoTab:"Informations sur l'image",btnUpload:'Envoyer sur le serveur',upload:'Télécharger',alt:'Texte de remplacement',lockRatio:'Garder les proportions',unlockRatio:'Unlock Ratio',resetSize:'Taille originale',border:'Bordure',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',alertUrl:"Veuillez saisir l'URL de l'image",linkTab:'Lien',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:"Propriétés de l'animation Flash",propertiesTab:'Properties',title:"Propriétés de l'animation Flash",chkPlay:'Lecture automatique',chkLoop:'Boucle',chkMenu:'Activer le menu Flash',chkFull:'Allow Fullscreen',scale:'Affichage',scaleAll:'Par défaut (tout montrer)',scaleNoBorder:'Sans bordure',scaleFit:'Ajuster aux dimensions',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bas',alignAbsMiddle:'Abs Milieu',alignBaseline:'Bas du texte',alignTextTop:'Haut du texte',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Couleur de fond',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',validateSrc:"Veuillez saisir l'URL",validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Orthographe',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Pas dans le dictionnaire',changeTo:'Changer en',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer tout',btnReplace:'Remplacer',btnReplaceAll:'Remplacer tout',btnUndo:'Annuler',noSuggestions:'- Pas de suggestion -',progress:"Vérification d'orthographe en cours...",noMispell:"Vérification d'orthographe terminée: pas d'erreur trouvée",noChanges:"Vérification d'orthographe terminée: Pas de modifications",oneChange:"Vérification d'orthographe terminée: Un mot modifié",manyChanges:"Vérification d'orthographe terminée: %1 mots modifiés",ieSpellDownload:"Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?"},smiley:{toolbar:'Emoticon',title:'Insérer un Emoticon',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Liste numérotée',bulletedlist:'Liste à puces',indent:'Augmenter le retrait',outdent:'Diminuer le retrait',justify:{left:'Aligner à gauche',center:'Centrer',right:'Aligner à Droite',block:'Texte justifié'},blockquote:'Citation',clipboard:{title:'Coller',cutError:"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).",copyError:"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).",pasteMsg:'Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl/Cmd+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.',securityMsg:"A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.",pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Coller en tant que Word (formaté)',title:'Coller en tant que Word (formaté)',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Coller comme texte',title:'Coller comme texte'},templates:{button:'Modèles',title:'Modèles de contenu',options:'Template Options',insertOption:'Remplacer tout le contenu actuel',selectPromptMsg:"Sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):",emptyListMsg:'(Aucun modèle disponible)'},showBlocks:'Afficher les blocs',stylesCombo:{label:'Style',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formaté',tag_address:'Adresse',tag_h1:'En-tête 1',tag_h2:'En-tête 2',tag_h3:'En-tête 3',tag_h4:'En-tête 4',tag_h5:'En-tête 5',tag_h6:'En-tête 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Police',voiceLabel:'Font',panelTitle:'Police'},fontSize:{label:'Taille',voiceLabel:'Font Size',panelTitle:'Taille'},colorButton:{textColorTitle:'Couleur de caractère',bgColorTitle:'Couleur de fond',panelTitle:'Colors',auto:'Automatique',more:'Plus de couleurs...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/fr.js b/modules_v2/ckeditor/lang/fr.js new file mode 100644 index 0000000000..7d1a5bdeb3 --- /dev/null +++ b/modules_v2/ckeditor/lang/fr.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.fr={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Source',newPage:'Nouvelle page',save:'Enregistrer',preview:'Aperçu',cut:'Couper',copy:'Copier',paste:'Coller',print:'Imprimer',underline:'Souligné',bold:'Gras',italic:'Italique',selectAll:'Tout sélectionner',removeFormat:'Supprimer la mise en forme',strike:'Barré',subscript:'Indice',superscript:'Exposant',horizontalrule:'Ligne horizontale',pagebreak:'Saut de page',pagebreakAlt:'Page Break',unlink:'Supprimer le lien',undo:'Annuler',redo:'Rétablir',common:{browseServer:'Explorer le serveur',url:'URL',protocol:'Protocole',upload:'Envoyer',uploadSubmit:'Envoyer sur le serveur',image:'Image',flash:'Flash',form:'Formulaire',checkbox:'Case à cocher',radio:'Bouton Radio',textField:'Champ texte',textarea:'Zone de texte',hiddenField:'Champ caché',button:'Bouton',select:'Liste déroulante',imageButton:'Bouton image',notSet:'<non défini>',id:'Id',name:'Nom',langDir:"Sens d'écriture",langDirLtr:'Gauche à droite (LTR)',langDirRtl:'Droite à gauche (RTL)',langCode:'Code de langue',longDescr:'URL de description longue (longdesc => malvoyant)',cssClass:'Classe CSS',advisoryTitle:'Description (title)',cssStyle:'Style',ok:'OK',cancel:'Annuler',close:'Close',preview:'Preview',generalTab:'Général',advancedTab:'Avancé',validateNumberFailed:"Cette valeur n'est pas un nombre.",confirmNewPage:'Les changements non sauvegardés seront perdus. Etes-vous sûr de vouloir charger une nouvelle page?',confirmCancel:'Certaines options ont été modifiées. Etes-vous sûr de vouloir fermer?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Largeur',height:'Hauteur',align:'Alignement',alignLeft:'Gauche',alignRight:'Droite',alignCenter:'Centré',alignTop:'Haut',alignMiddle:'Milieu',alignBottom:'Bas',invalidHeight:'La hauteur doit être un nombre.',invalidWidth:'La largeur doit être un nombre.',unavailable:'%1<span class="cke_accessibility">, Indisponible</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Insérer un caractère spécial',title:'Sélectionnez un caractère',options:'Special Character Options'},link:{toolbar:'Lien',other:'<autre>',menu:'Editer le lien',title:'Lien',info:'Infos sur le lien',target:'Cible',upload:'Envoyer',advanced:'Avancé',type:'Type de lien',toUrl:'URL',toAnchor:'Transformer le lien en ancre dans le texte',toEmail:'E-mail',targetFrame:'<cadre>',targetPopup:'<fenêtre popup>',targetFrameName:'Nom du Cadre destination',targetPopupName:'Nom de la fenêtre popup',popupFeatures:'Options de la fenêtre popup',popupResizable:'Redimensionnable',popupStatusBar:'Barre de status',popupLocationBar:"Barre d'adresse",popupToolbar:"Barre d'outils",popupMenuBar:'Barre de menu',popupFullScreen:'Plein écran (IE)',popupScrollBars:'Barres de défilement',popupDependent:'Dépendante (Netscape)',popupLeft:'Position gauche',popupTop:'Position haute',id:'Id',langDir:"Sens d'écriture",langDirLTR:'Gauche à droite',langDirRTL:'Droite à gauche',acccessKey:"Touche d'accessibilité",name:'Nom',langCode:'Code de langue',tabIndex:'Index de tabulation',advisoryTitle:'Description (title)',advisoryContentType:'Type de contenu (ex: text/html)',cssClasses:'Classe du CSS',charset:'Charset de la cible',styles:'Style',selectAnchor:"Sélectionner l'ancre",anchorName:"Par nom d'ancre",anchorId:"Par ID d'élément",emailAddress:'Adresse E-Mail',emailSubject:'Sujet du message',emailBody:'Corps du message',noAnchors:'(Aucune ancre disponible dans ce document)',noUrl:"Veuillez entrer l'adresse du lien",noEmail:"Veuillez entrer l'adresse e-mail"},anchor:{toolbar:'Ancre',menu:"Editer l'ancre",title:"Propriétés de l'ancre",name:"Nom de l'ancre",errorName:"Veuillez entrer le nom de l'ancre"},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Trouver et remplacer',find:'Trouver',replace:'Remplacer',findWhat:'Expression à trouver: ',replaceWith:'Remplacer par: ',notFoundMsg:'Le texte spécifié ne peut être trouvé.',matchCase:'Respecter la casse',matchWord:'Mot entier uniquement',matchCyclic:'Boucler',replaceAll:'Remplacer tout',replaceSuccessMsg:'%1 occurrence(s) replacée(s).'},table:{toolbar:'Tableau',title:'Propriétés du tableau',menu:'Propriétés du tableau',deleteTable:'Supprimer le tableau',rows:'Lignes',columns:'Colonnes',border:'Taille de la bordure',widthPx:'pixels',widthPc:'% pourcents',widthUnit:'width unit',cellSpace:'Espacement des cellules',cellPad:'Marge interne des cellules',caption:'Titre du tableau',summary:'Résumé (description)',headers:'En-Têtes',headersNone:'Aucunes',headersColumn:'Première colonne',headersRow:'Première ligne',headersBoth:'Les deux',invalidRows:'Le nombre de lignes doit être supérieur à 0.',invalidCols:'Le nombre de colonnes doit être supérieur à 0.',invalidBorder:'La taille de la bordure doit être un nombre.',invalidWidth:'La largeur du tableau doit être un nombre.',invalidHeight:'La hauteur du tableau doit être un nombre.',invalidCellSpacing:"L'espacement des cellules doit être un nombre.",invalidCellPadding:'La marge intérieure des cellules doit être un nombre.',cell:{menu:'Cellule',insertBefore:'Insérer une cellule avant',insertAfter:'Insérer une cellule après',deleteCell:'Supprimer les cellules',merge:'Fusionner les cellules',mergeRight:'Fusionner à droite',mergeDown:'Fusionner en bas',splitHorizontal:'Fractionner horizontalement',splitVertical:'Fractionner verticalement',title:'Propriétés de Cellule',cellType:'Type de Cellule',rowSpan:'Fusion de Lignes',colSpan:'Fusion de Colonnes',wordWrap:'Word Wrap',hAlign:'Alignement Horizontal',vAlign:'Alignement Vertical',alignBaseline:'Bas du texte',bgColor:"Couleur d'arrière-plan",borderColor:'Couleur de Bordure',data:'Données',header:'Entête',yes:'Oui',no:'Non',invalidWidth:'La Largeur de Cellule doit être un nombre.',invalidHeight:'La Hauteur de Cellule doit être un nombre.',invalidRowSpan:'La fusion de lignes doit être un nombre entier.',invalidColSpan:'La fusion de colonnes doit être un nombre entier.',chooseColor:'Choose'},row:{menu:'Ligne',insertBefore:'Insérer une ligne avant',insertAfter:'Insérer une ligne après',deleteRow:'Supprimer les lignes'},column:{menu:'Colonnes',insertBefore:'Insérer une colonne avant',insertAfter:'Insérer une colonne après',deleteColumn:'Supprimer les colonnes'}},button:{title:'Propriétés du bouton',text:'Texte (Value)',type:'Type',typeBtn:'Bouton',typeSbm:'Validation (submit)',typeRst:'Remise à zéro'},checkboxAndRadio:{checkboxTitle:'Propriétés de la case à cocher',radioTitle:'Propriétés du bouton Radio',value:'Valeur',selected:'Sélectionné'},form:{title:'Propriétés du formulaire',menu:'Propriétés du formulaire',action:'Action',method:'Méthode',encoding:'Encodage'},select:{title:'Propriétés du menu déroulant',selectInfo:'Informations sur le menu déroulant',opAvail:'Options disponibles',value:'Valeur',size:'Taille',lines:'Lignes',chkMulti:'Permettre les sélections multiples',opText:'Texte',opValue:'Valeur',btnAdd:'Ajouter',btnModify:'Modifier',btnUp:'Haut',btnDown:'Bas',btnSetValue:'Définir comme valeur sélectionnée',btnDelete:'Supprimer'},textarea:{title:'Propriétés de la zone de texte',cols:'Colonnes',rows:'Lignes'},textfield:{title:'Propriétés du champ texte',name:'Nom',value:'Valeur',charWidth:'Taille des caractères',maxChars:'Nombre maximum de caractères',type:'Type',typeText:'Texte',typePass:'Mot de passe'},hidden:{title:'Propriétés du champ caché',name:'Nom',value:'Valeur'},image:{title:"Propriétés de l'image",titleButton:'Propriétés du bouton image',menu:"Propriétés de l'image",infoTab:"Informations sur l'image",btnUpload:'Envoyer sur le serveur',upload:'Envoyer',alt:'Texte de remplacement',lockRatio:'Garder les proportions',unlockRatio:'Unlock Ratio',resetSize:"Taille d'origine",border:'Bordure',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',alertUrl:"Veuillez entrer l'adresse de l'image",linkTab:'Lien',button2Img:'Voulez-vous transformer le bouton image sélectionné en simple image?',img2Button:"Voulez-vous transformer l'image en bouton image?",urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Propriétés du Flash',propertiesTab:'Propriétés',title:'Propriétés du Flash',chkPlay:'Jouer automatiquement',chkLoop:'Boucle',chkMenu:'Activer le menu Flash',chkFull:'Permettre le plein écran',scale:'Echelle',scaleAll:'Afficher tout',scaleNoBorder:'Pas de bordure',scaleFit:"Taille d'origine",access:'Accès aux scripts',accessAlways:'Toujours',accessSameDomain:'Même domaine',accessNever:'Jamais',alignAbsBottom:'Bas absolu',alignAbsMiddle:'Milieu absolu',alignBaseline:'Bas du texte',alignTextTop:'Haut du texte',quality:'Qualité',qualityBest:'Meilleure',qualityHigh:'Haute',qualityAutoHigh:'Haute Auto',qualityMedium:'Moyenne',qualityAutoLow:'Basse Auto',qualityLow:'Basse',windowModeWindow:'Fenêtre',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Mode fenêtre',flashvars:'Variables du Flash',bgcolor:"Couleur d'arrière-plan",hSpace:'Espacement horizontal',vSpace:'Espacement vertical',validateSrc:"L'adresse ne doit pas être vide.",validateHSpace:"L'espacement horizontal doit être un nombre.",validateVSpace:"L'espacement vertical doit être un nombre."},spellCheck:{toolbar:"Vérifier l'orthographe",title:"Vérifier l'orthographe",notAvailable:'Désolé, le service est indisponible actuellement.',errorLoading:"Erreur du chargement du service depuis l'hôte : %s.",notInDic:"N'existe pas dans le dictionnaire",changeTo:'Modifier pour',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer tout',btnReplace:'Remplacer',btnReplaceAll:'Remplacer tout',btnUndo:'Annuler',noSuggestions:'- Aucune suggestion -',progress:"Vérification de l'orthographe en cours...",noMispell:"Vérification de l'orthographe terminée : aucune erreur trouvée",noChanges:"Vérification de l'orthographe terminée : Aucun mot corrigé",oneChange:"Vérification de l'orthographe terminée : Un seul mot corrigé",manyChanges:"Vérification de l'orthographe terminée : %1 mots corrigés",ieSpellDownload:"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?"},smiley:{toolbar:'Emoticon',title:'Insérer un émoticon',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 éléments'},numberedlist:'Insérer/Supprimer la liste numérotée',bulletedlist:'Insérer/Supprimer la liste à puces',indent:'Augmenter le retrait (tabulation)',outdent:'Diminuer le retrait (tabulation)',justify:{left:'Aligner à gauche',center:'Centrer',right:'Aligner à droite',block:'Justifier'},blockquote:'Citation',clipboard:{title:'Coller',cutError:"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement l'opération \"couper\". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).",copyError:"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).",pasteMsg:'Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK',securityMsg:"A cause des paramètres de sécurité de votre navigateur, l'éditeur n'est pas en mesure d'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.",pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?',toolbar:'Coller depuis Word',title:'Coller depuis Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Coller comme texte sans mise en forme',title:'Coller comme texte sans mise en forme'},templates:{button:'Modèles',title:'Contenu des modèles',options:'Template Options',insertOption:'Remplacer le contenu actuel',selectPromptMsg:"Veuillez sélectionner le modèle pour l'ouvrir dans l'éditeur",emptyListMsg:'(Aucun modèle disponible)'},showBlocks:'Afficher les blocs',stylesCombo:{label:'Styles',panelTitle:'Formatting Styles',panelTitle1:'Styles de blocs',panelTitle2:'Styles en ligne',panelTitle3:"Styles d'objet"},format:{label:'Format',panelTitle:'Format de paragraphe',tag_p:'Normal',tag_pre:'Formaté',tag_address:'Adresse',tag_h1:'Titre 1',tag_h2:'Titre 2',tag_h3:'Titre 3',tag_h4:'Titre 4',tag_h5:'Titre 5',tag_h6:'Titre 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Police',voiceLabel:'Police',panelTitle:'Style de police'},fontSize:{label:'Taille',voiceLabel:'Taille de police',panelTitle:'Taille de police'},colorButton:{textColorTitle:'Couleur de texte',bgColorTitle:"Couleur d'arrière plan",panelTitle:'Colors',auto:'Automatique',more:'Plus de couleurs...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:"Vérification d'Orthographe en Cours de Frappe (SCAYT: Spell Check As You Type)",opera_title:'Not supported by Opera',enable:'Activer SCAYT',disable:'Désactiver SCAYT',about:'A propos de SCAYT',toggle:'Activer/Désactiver SCAYT',options:'Options',langs:'Langues',moreSuggestions:'Plus de suggestions',ignore:'Ignorer',ignoreAll:'Ignorer Tout',addWord:'Ajouter le mot',emptyDic:'Le nom du dictionnaire ne devrait pas être vide.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Langues',dictionariesTab:'Dictionnaires',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'A propos de'},about:{title:'A propos de CKEditor',dlgTitle:'A propos de CKEditor',moreInfo:'Pour les informations de licence, veuillez visiter notre site web:',copy:'Copyright © $1. Tous droits réservés.'},maximize:'Agrandir',minimize:'Minimize',fakeobjects:{anchor:'Ancre',flash:'Animation Flash',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Objet Inconnu'},resize:'Glisser pour modifier la taille',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/gl.js b/modules_v2/ckeditor/lang/gl.js new file mode 100644 index 0000000000..ae369f9e37 --- /dev/null +++ b/modules_v2/ckeditor/lang/gl.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.gl={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Código Fonte',newPage:'Nova Páxina',save:'Gardar',preview:'Vista Previa',cut:'Cortar',copy:'Copiar',paste:'Pegar',print:'Imprimir',underline:'Sub-raiado',bold:'Negrita',italic:'Cursiva',selectAll:'Seleccionar todo',removeFormat:'Eliminar Formato',strike:'Tachado',subscript:'Subíndice',superscript:'Superíndice',horizontalrule:'Inserir Liña Horizontal',pagebreak:'Inserir Salto de Páxina',pagebreakAlt:'Page Break',unlink:'Eliminar Ligazón',undo:'Desfacer',redo:'Refacer',common:{browseServer:'Navegar no Servidor',url:'URL',protocol:'Protocolo',upload:'Carregar',uploadSubmit:'Enviar ó Servidor',image:'Imaxe',flash:'Flash',form:'Formulario',checkbox:'Cadro de Verificación',radio:'Botón de Radio',textField:'Campo de Texto',textarea:'Área de Texto',hiddenField:'Campo Oculto',button:'Botón',select:'Campo de Selección',imageButton:'Botón de Imaxe',notSet:'<non definido>',id:'Id',name:'Nome',langDir:'Orientación do Idioma',langDirLtr:'Esquerda a Dereita (LTR)',langDirRtl:'Dereita a Esquerda (RTL)',langCode:'Código do Idioma',longDescr:'Descrición Completa da URL',cssClass:'Clases da Folla de Estilos',advisoryTitle:'Título',cssStyle:'Estilo',ok:'OK',cancel:'Cancelar',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanzado',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Largura',height:'Altura',align:'Aliñamento',alignLeft:'Esquerda',alignRight:'Dereita',alignCenter:'Centro',alignTop:'Tope',alignMiddle:'Centro',alignBottom:'Pé',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Inserir Carácter Especial',title:'Seleccione Caracter Especial',options:'Special Character Options'},link:{toolbar:'Inserir/Editar Ligazón',other:'<outro>',menu:'Editar Ligazón',title:'Ligazón',info:'Información da Ligazón',target:'Destino',upload:'Carregar',advanced:'Advanzado',type:'Tipo de Ligazón',toUrl:'URL',toAnchor:'Referencia nesta páxina',toEmail:'E-Mail',targetFrame:'<frame>',targetPopup:'<Xanela Emerxente>',targetFrameName:'Nome do Marco Destino',targetPopupName:'Nome da Xanela Emerxente',popupFeatures:'Características da Xanela Emerxente',popupResizable:'Resizable',popupStatusBar:'Barra de Estado',popupLocationBar:'Barra de Localización',popupToolbar:'Barra de Ferramentas',popupMenuBar:'Barra de Menú',popupFullScreen:'A Toda Pantalla (IE)',popupScrollBars:'Barras de Desplazamento',popupDependent:'Dependente (Netscape)',popupLeft:'Posición Esquerda',popupTop:'Posición dende Arriba',id:'Id',langDir:'Orientación do Idioma',langDirLTR:'Esquerda a Dereita (LTR)',langDirRTL:'Dereita a Esquerda (RTL)',acccessKey:'Chave de Acceso',name:'Nome',langCode:'Orientación do Idioma',tabIndex:'Índice de Tabulación',advisoryTitle:'Título',advisoryContentType:'Tipo de Contido',cssClasses:'Clases da Folla de Estilos',charset:'Fonte de Caracteres Vinculado',styles:'Estilo',selectAnchor:'Seleccionar unha Referencia',anchorName:'Por Nome de Referencia',anchorId:'Por Element Id',emailAddress:'Enderezo de E-Mail',emailSubject:'Asunto do Mensaxe',emailBody:'Corpo do Mensaxe',noAnchors:'(Non hai referencias disponibles no documento)',noUrl:'Por favor, escriba a ligazón URL',noEmail:'Por favor, escriba o enderezo de e-mail'},anchor:{toolbar:'Inserir/Editar Referencia',menu:'Propriedades da Referencia',title:'Propriedades da Referencia',name:'Nome da Referencia',errorName:'Por favor, escriba o nome da referencia'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Procurar',replace:'Substituir',findWhat:'Texto a procurar:',replaceWith:'Substituir con:',notFoundMsg:'Non te atopou o texto indicado.',matchCase:'Coincidir Mai./min.',matchWord:'Coincidir con toda a palabra',matchCyclic:'Match cyclic',replaceAll:'Substitiur Todo',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabla',title:'Propiedades da Táboa',menu:'Propiedades da Táboa',deleteTable:'Borrar Táboa',rows:'Filas',columns:'Columnas',border:'Tamaño do Borde',widthPx:'pixels',widthPc:'percent',widthUnit:'width unit',cellSpace:'Marxe entre Celas',cellPad:'Marxe interior',caption:'Título',summary:'Sumario',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cela',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Borrar Cela',merge:'Unir Celas',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Fila',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Borrar Filas'},column:{menu:'Columna',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Borrar Columnas'}},button:{title:'Propriedades do Botón',text:'Texto (Valor)',type:'Tipo',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Propriedades do Cadro de Verificación',radioTitle:'Propriedades do Botón de Radio',value:'Valor',selected:'Seleccionado'},form:{title:'Propriedades do Formulario',menu:'Propriedades do Formulario',action:'Acción',method:'Método',encoding:'Encoding'},select:{title:'Propriedades do Campo de Selección',selectInfo:'Info',opAvail:'Opcións Disponibles',value:'Valor',size:'Tamaño',lines:'liñas',chkMulti:'Permitir múltiples seleccións',opText:'Texto',opValue:'Valor',btnAdd:'Engadir',btnModify:'Modificar',btnUp:'Subir',btnDown:'Baixar',btnSetValue:'Definir como valor por defecto',btnDelete:'Borrar'},textarea:{title:'Propriedades da Área de Texto',cols:'Columnas',rows:'Filas'},textfield:{title:'Propriedades do Campo de Texto',name:'Nome',value:'Valor',charWidth:'Tamaño do Caracter',maxChars:'Máximo de Caracteres',type:'Tipo',typeText:'Texto',typePass:'Chave'},hidden:{title:'Propriedades do Campo Oculto',name:'Nome',value:'Valor'},image:{title:'Propriedades da Imaxe',titleButton:'Propriedades do Botón de Imaxe',menu:'Propriedades da Imaxe',infoTab:'Información da Imaxe',btnUpload:'Enviar ó Servidor',upload:'Carregar',alt:'Texto Alternativo',lockRatio:'Proporcional',unlockRatio:'Unlock Ratio',resetSize:'Tamaño Orixinal',border:'Límite',hSpace:'Esp. Horiz.',vSpace:'Esp. Vert.',alertUrl:'Por favor, escriba a URL da imaxe',linkTab:'Ligazón',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Propriedades Flash',propertiesTab:'Properties',title:'Propriedades Flash',chkPlay:'Auto Execución',chkLoop:'Bucle',chkMenu:'Activar Menú Flash',chkFull:'Allow Fullscreen',scale:'Escalar',scaleAll:'Amosar Todo',scaleNoBorder:'Sen Borde',scaleFit:'Encaixar axustando',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Inferior',alignAbsMiddle:'Abs Centro',alignBaseline:'Liña Base',alignTextTop:'Tope do Texto',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Cor do Fondo',hSpace:'Esp. Horiz.',vSpace:'Esp. Vert.',validateSrc:'Por favor, escriba a ligazón URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Corrección Ortográfica',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Non está no diccionario',changeTo:'Cambiar a',btnIgnore:'Ignorar',btnIgnoreAll:'Ignorar Todas',btnReplace:'Substituir',btnReplaceAll:'Substituir Todas',btnUndo:'Desfacer',noSuggestions:'- Sen candidatos -',progress:'Corrección ortográfica en progreso...',noMispell:'Corrección ortográfica rematada: Non se atoparon erros',noChanges:'Corrección ortográfica rematada: Non se substituiu nengunha verba',oneChange:'Corrección ortográfica rematada: Unha verba substituida',manyChanges:'Corrección ortográfica rematada: %1 verbas substituidas',ieSpellDownload:'O corrector ortográfico non está instalado. ¿Quere descargalo agora?'},smiley:{toolbar:'Smiley',title:'Inserte un Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Lista Numerada',bulletedlist:'Marcas',indent:'Aumentar Sangría',outdent:'Disminuir Sangría',justify:{left:'Aliñar á Esquerda',center:'Centrado',right:'Aliñar á Dereita',block:'Xustificado'},blockquote:'Block Quote',clipboard:{title:'Pegar',cutError:'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl/Cmd+X).',copyError:'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl/Cmd+C).',pasteMsg:'Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e pulse <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Pegar dende Word',title:'Pegar dende Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Pegar como texto plano',title:'Pegar como texto plano'},templates:{button:'Plantillas',title:'Plantillas de Contido',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):',emptyListMsg:'(Non hai plantillas definidas)'},showBlocks:'Show Blocks',stylesCombo:{label:'Estilo',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normal',tag_pre:'Formateado',tag_address:'Enderezo',tag_h1:'Enacabezado 1',tag_h2:'Encabezado 2',tag_h3:'Encabezado 3',tag_h4:'Encabezado 4',tag_h5:'Encabezado 5',tag_h6:'Encabezado 6',tag_div:'Paragraph (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Tipo',voiceLabel:'Font',panelTitle:'Tipo'},fontSize:{label:'Tamaño',voiceLabel:'Font Size',panelTitle:'Tamaño'},colorButton:{textColorTitle:'Cor do Texto',bgColorTitle:'Cor do Fondo',panelTitle:'Colors',auto:'Automático',more:'Máis Cores...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/gu.js b/modules_v2/ckeditor/lang/gu.js new file mode 100644 index 0000000000..e4bc9710c5 --- /dev/null +++ b/modules_v2/ckeditor/lang/gu.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.gu={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'મૂળ કે પ્રાથમિક દસ્તાવેજ',newPage:'નવુ પાનું',save:'સેવ',preview:'પૂર્વદર્શન',cut:'કાપવું',copy:'નકલ',paste:'પેસ્ટ',print:'પ્રિન્ટ',underline:'અન્ડર્લાઇન, નીચે લીટી',bold:'બોલ્ડ/સ્પષ્ટ',italic:'ઇટેલિક, ત્રાંસા',selectAll:'બઘું પસંદ કરવું',removeFormat:'ફૉર્મટ કાઢવું',strike:'છેકી નાખવું',subscript:'એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન',superscript:'એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.',horizontalrule:'સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી',pagebreak:'ઇન્સર્ટ પેજબ્રેક/પાનાને અલગ કરવું/દાખલ કરવું',pagebreakAlt:'Page Break',unlink:'લિંક કાઢવી',undo:'રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી',redo:'રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી',common:{browseServer:'સર્વર બ્રાઉઝ કરો',url:'URL',protocol:'પ્રોટોકૉલ',upload:'અપલોડ',uploadSubmit:'આ સર્વરને મોકલવું',image:'ચિત્ર',flash:'ફ્લૅશ',form:'ફૉર્મ/પત્રક',checkbox:'ચેક બોક્સ',radio:'રેડિઓ બટન',textField:'ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર',textarea:'ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર',hiddenField:'ગુપ્ત ક્ષેત્ર',button:'બટન',select:'પસંદગી ક્ષેત્ર',imageButton:'ચિત્ર બટન',notSet:'<સેટ નથી>',id:'Id',name:'નામ',langDir:'ભાષા લેખવાની પદ્ધતિ',langDirLtr:'ડાબે થી જમણે (LTR)',langDirRtl:'જમણે થી ડાબે (RTL)',langCode:'ભાષા કોડ',longDescr:'વધારે માહિતી માટે URL',cssClass:'સ્ટાઇલ-શીટ ક્લાસ',advisoryTitle:'મુખ્ય મથાળું',cssStyle:'સ્ટાઇલ',ok:'ઠીક છે',cancel:'રદ કરવું',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'અડ્વાન્સડ',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'પહોળાઈ',height:'ઊંચાઈ',align:'લાઇનદોરીમાં ગોઠવવું',alignLeft:'ડાબી બાજુ ગોઠવવું',alignRight:'જમણી',alignCenter:'મધ્ય સેન્ટર',alignTop:'ઉપર',alignMiddle:'વચ્ચે',alignBottom:'નીચે',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું',title:'સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો',options:'Special Character Options'},link:{toolbar:'લિંક ઇન્સર્ટ/દાખલ કરવી',other:'<other>',menu:' લિંક એડિટ/માં ફેરફાર કરવો',title:'લિંક',info:'લિંક ઇન્ફૉ ટૅબ',target:'ટાર્ગેટ/લક્ષ્ય',upload:'અપલોડ',advanced:'અડ્વાન્સડ',type:'લિંક પ્રકાર',toUrl:'URL',toAnchor:'આ પેજનો ઍંકર',toEmail:'ઈ-મેલ',targetFrame:'<ફ્રેમ>',targetPopup:'<પૉપ-અપ વિન્ડો>',targetFrameName:'ટાર્ગેટ ફ્રેમ નું નામ',targetPopupName:'પૉપ-અપ વિન્ડો નું નામ',popupFeatures:'પૉપ-અપ વિન્ડો ફીચરસૅ',popupResizable:'Resizable',popupStatusBar:'સ્ટૅટસ બાર',popupLocationBar:'લોકેશન બાર',popupToolbar:'ટૂલ બાર',popupMenuBar:'મેન્યૂ બાર',popupFullScreen:'ફુલ સ્ક્રીન (IE)',popupScrollBars:'સ્ક્રોલ બાર',popupDependent:'ડિપેન્ડન્ટ (Netscape)',popupLeft:'ડાબી બાજુ',popupTop:'જમણી બાજુ',id:'Id',langDir:'ભાષા લેખવાની પદ્ધતિ',langDirLTR:'ડાબે થી જમણે (LTR)',langDirRTL:'જમણે થી ડાબે (RTL)',acccessKey:'ઍક્સેસ કી',name:'નામ',langCode:'ભાષા લેખવાની પદ્ધતિ',tabIndex:'ટૅબ ઇન્ડેક્સ',advisoryTitle:'મુખ્ય મથાળું',advisoryContentType:'મુખ્ય કન્ટેન્ટ પ્રકાર',cssClasses:'સ્ટાઇલ-શીટ ક્લાસ',charset:'લિંક રિસૉર્સ કૅરિક્ટર સેટ',styles:'સ્ટાઇલ',selectAnchor:'ઍંકર પસંદ કરો',anchorName:'ઍંકર નામથી પસંદ કરો',anchorId:'ઍંકર એલિમન્ટ Id થી પસંદ કરો',emailAddress:'ઈ-મેલ સરનામું',emailSubject:'ઈ-મેલ વિષય',emailBody:'સંદેશ',noAnchors:'(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)',noUrl:'લિંક URL ટાઇપ કરો',noEmail:'ઈ-મેલ સરનામું ટાઇપ કરો'},anchor:{toolbar:'ઍંકર ઇન્સર્ટ/દાખલ કરવી',menu:'ઍંકરના ગુણ',title:'ઍંકરના ગુણ',name:'ઍંકરનું નામ',errorName:'ઍંકરનું નામ ટાઈપ કરો'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'શોધવું અને બદલવું',find:'શોધવું',replace:'રિપ્લેસ/બદલવું',findWhat:'આ શોધો',replaceWith:'આનાથી બદલો',notFoundMsg:'તમે શોધેલી ટેક્સ્ટ નથી મળી',matchCase:'કેસ સરખા રાખો',matchWord:'બઘા શબ્દ સરખા રાખો',matchCyclic:'Match cyclic',replaceAll:'બઘા બદલી ',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'ટેબલ, કોઠો',title:'ટેબલ, કોઠાનું મથાળું',menu:'ટેબલ, કોઠાનું મથાળું',deleteTable:'કોઠો ડિલીટ/કાઢી નાખવું',rows:'પંક્તિના ખાના',columns:'કૉલમ/ઊભી કટાર',border:'કોઠાની બાજુ(બોર્ડર) સાઇઝ',widthPx:'પિકસલ',widthPc:'પ્રતિશત',widthUnit:'width unit',cellSpace:'સેલ અંતર',cellPad:'સેલ પૅડિંગ',caption:'મથાળું/કૅપ્શન ',summary:'ટૂંકો એહેવાલ',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'કોષના ખાના',insertBefore:'પહેલાં કોષ ઉમેરવો',insertAfter:'પછી કોષ ઉમેરવો',deleteCell:'કોષ ડિલીટ/કાઢી નાખવો',merge:'કોષ ભેગા કરવા',mergeRight:'જમણી બાજુ ભેગા કરવા',mergeDown:'નીચે ભેગા કરવા',splitHorizontal:'કોષને સમસ્તરીય વિભાજન કરવું',splitVertical:'કોષને સીધું ને ઊભું વિભાજન કરવું',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'પંક્તિના ખાના',insertBefore:'પહેલાં પંક્તિ ઉમેરવી',insertAfter:'પછી પંક્તિ ઉમેરવી',deleteRow:'પંક્તિઓ ડિલીટ/કાઢી નાખવી'},column:{menu:'કૉલમ/ઊભી કટાર',insertBefore:'પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી',insertAfter:'પછી કૉલમ/ઊભી કટાર ઉમેરવી',deleteColumn:'કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી'}},button:{title:'બટનના ગુણ',text:'ટેક્સ્ટ (વૅલ્યૂ)',type:'પ્રકાર',typeBtn:'બટન',typeSbm:'સબ્મિટ',typeRst:'રિસેટ'},checkboxAndRadio:{checkboxTitle:'ચેક બોક્સ ગુણ',radioTitle:'રેડિઓ બટનના ગુણ',value:'વૅલ્યૂ',selected:'સિલેક્ટેડ'},form:{title:'ફૉર્મ/પત્રકના ગુણ',menu:'ફૉર્મ/પત્રકના ગુણ',action:'ક્રિયા',method:'પદ્ધતિ',encoding:'Encoding'},select:{title:'પસંદગી ક્ષેત્રના ગુણ',selectInfo:'સૂચના',opAvail:'ઉપલબ્ધ વિકલ્પ',value:'વૅલ્યૂ',size:'સાઇઝ',lines:'લીટીઓ',chkMulti:'એકથી વધારે પસંદ કરી શકો',opText:'ટેક્સ્ટ',opValue:'વૅલ્યૂ',btnAdd:'ઉમેરવું',btnModify:'બદલવું',btnUp:'ઉપર',btnDown:'નીચે',btnSetValue:'પસંદ કરલી વૅલ્યૂ સેટ કરો',btnDelete:'રદ કરવું'},textarea:{title:'ટેક્સ્ટ એઅરિઆ, શબ્દ વિસ્તારના ગુણ',cols:'કૉલમ/ઊભી કટાર',rows:'પંક્તિઓ'},textfield:{title:'ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્રના ગુણ',name:'નામ',value:'વૅલ્યૂ',charWidth:'કેરેક્ટરની પહોળાઈ',maxChars:'અધિકતમ કેરેક્ટર',type:'ટાઇપ',typeText:'ટેક્સ્ટ',typePass:'પાસવર્ડ'},hidden:{title:'ગુપ્ત ક્ષેત્રના ગુણ',name:'નામ',value:'વૅલ્યૂ'},image:{title:'ચિત્રના ગુણ',titleButton:'ચિત્ર બટનના ગુણ',menu:'ચિત્રના ગુણ',infoTab:'ચિત્ર ની જાણકારી',btnUpload:'આ સર્વરને મોકલવું',upload:'અપલોડ',alt:'ઑલ્ટર્નટ ટેક્સ્ટ',lockRatio:'લૉક ગુણોત્તર',unlockRatio:'Unlock Ratio',resetSize:'રીસેટ સાઇઝ',border:'બોર્ડર',hSpace:'સમસ્તરીય જગ્યા',vSpace:'લંબરૂપ જગ્યા',alertUrl:'ચિત્રની URL ટાઇપ કરો',linkTab:'લિંક',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ફ્લૅશના ગુણ',propertiesTab:'Properties',title:'ફ્લૅશ ગુણ',chkPlay:'ઑટો/સ્વયં પ્લે',chkLoop:'લૂપ',chkMenu:'ફ્લૅશ મેન્યૂ નો પ્રયોગ કરો',chkFull:'Allow Fullscreen',scale:'સ્કેલ',scaleAll:'સ્કેલ ઓલ/બધુ બતાવો',scaleNoBorder:'સ્કેલ બોર્ડર વગર',scaleFit:'સ્કેલ એકદમ ફીટ',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs નીચે',alignAbsMiddle:'Abs ઉપર',alignBaseline:'આધાર લીટી',alignTextTop:'ટેક્સ્ટ ઉપર',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'બૅકગ્રાઉન્ડ રંગ,',hSpace:'સમસ્તરીય જગ્યા',vSpace:'લંબરૂપ જગ્યા',validateSrc:'લિંક URL ટાઇપ કરો',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'જોડણી (સ્પેલિંગ) તપાસવી',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'શબ્દકોશમાં નથી',changeTo:'આનાથી બદલવું',btnIgnore:'ઇગ્નોર/અવગણના કરવી',btnIgnoreAll:'બધાની ઇગ્નોર/અવગણના કરવી',btnReplace:'બદલવું',btnReplaceAll:'બધા બદલી કરો',btnUndo:'અન્ડૂ',noSuggestions:'- કઇ સજેશન નથી -',progress:'શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...',noMispell:'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી',noChanges:'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી',oneChange:'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે',manyChanges:'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે',ieSpellDownload:'સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?'},smiley:{toolbar:'સ્માઇલી',title:'સ્માઇલી પસંદ કરો',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'સંખ્યાંકન સૂચિ',bulletedlist:'બુલેટ સૂચિ',indent:'ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી',outdent:'ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી',justify:{left:'ડાબી બાજુએ/બાજુ તરફ',center:'સંકેંદ્રણ/સેંટરિંગ',right:'જમણી બાજુએ/બાજુ તરફ',block:'બ્લૉક, અંતરાય જસ્ટિફાઇ'},blockquote:'બ્લૉક-કોટ, અવતરણચિહ્નો',clipboard:{title:'પેસ્ટ',cutError:'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.',copyError:'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+C) का प्रयोग करें।',pasteMsg:'Ctrl/Cmd+V નો પ્રયોગ કરી પેસ્ટ કરો',securityMsg:'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'પેસ્ટ (વડૅ ટેક્સ્ટ)',title:'પેસ્ટ (વડૅ ટેક્સ્ટ)',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'પેસ્ટ (ટેક્સ્ટ)',title:'પેસ્ટ (ટેક્સ્ટ)'},templates:{button:'ટેમ્પ્લેટ',title:'કન્ટેન્ટ ટેમ્પ્લેટ',options:'Template Options',insertOption:'મૂળ શબ્દને બદલો',selectPromptMsg:'એડિટરમાં ઓપન કરવા ટેમ્પ્લેટ પસંદ કરો (વર્તમાન કન્ટેન્ટ સેવ નહીં થાય):',emptyListMsg:'(કોઈ ટેમ્પ્લેટ ડિફાઇન નથી)'},showBlocks:'બ્લૉક બતાવવું',stylesCombo:{label:'શૈલી/રીત',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી',panelTitle:'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી',tag_p:'સામાન્ય',tag_pre:'ફૉર્મટેડ',tag_address:'સરનામું',tag_h1:'શીર્ષક 1',tag_h2:'શીર્ષક 2',tag_h3:'શીર્ષક 3',tag_h4:'શીર્ષક 4',tag_h5:'શીર્ષક 5',tag_h6:'શીર્ષક 6',tag_div:'શીર્ષક (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ફૉન્ટ',voiceLabel:'Font',panelTitle:'ફૉન્ટ'},fontSize:{label:'ફૉન્ટ સાઇઝ/કદ',voiceLabel:'Font Size',panelTitle:'ફૉન્ટ સાઇઝ/કદ'},colorButton:{textColorTitle:'શબ્દનો રંગ',bgColorTitle:'બૅકગ્રાઉન્ડ રંગ,',panelTitle:'Colors',auto:'સ્વચાલિત',more:'ઔર રંગ...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/he.js b/modules_v2/ckeditor/lang/he.js new file mode 100644 index 0000000000..567197fa5f --- /dev/null +++ b/modules_v2/ckeditor/lang/he.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.he={dir:'rtl',editorTitle:'עורך טקסט עשיר, %1, לחץ אלט (ALT) + 0 לעזרה.',toolbar:'סרגל הכלים',editor:'עורך טקסט עשיר',source:'מקור',newPage:'דף חדש',save:'שמירה',preview:'תצוגה מקדימה',cut:'גזירה',copy:'העתקה',paste:'הדבקה',print:'הדפסה',underline:'קו תחתון',bold:'מודגש',italic:'נטוי',selectAll:'בחירת הכל',removeFormat:'הסרת העיצוב',strike:'כתיב מחוק',subscript:'כתיב תחתון',superscript:'כתיב עליון',horizontalrule:'הוספת קו אופקי',pagebreak:'הוספת שבירת דף',pagebreakAlt:'שבירת דף',unlink:'הסרת הקישור',undo:'ביטול צעד אחרון',redo:'חזרה על צעד אחרון',common:{browseServer:'סייר השרת',url:'כתובת (URL)',protocol:'פרוטוקול',upload:'העלאה',uploadSubmit:'שליחה לשרת',image:'תמונה',flash:'פלאש',form:'טופס',checkbox:'תיבת סימון',radio:'לחצן אפשרויות',textField:'שדה טקסט',textarea:'איזור טקסט',hiddenField:'שדה חבוי',button:'כפתור',select:'שדה בחירה',imageButton:'כפתור תמונה',notSet:'<לא נקבע>',id:'זיהוי (ID)',name:'שם',langDir:'כיוון שפה',langDirLtr:'שמאל לימין (LTR)',langDirRtl:'ימין לשמאל (RTL)',langCode:'קוד שפה',longDescr:'קישור לתיאור מפורט',cssClass:'מחלקת עיצוב (CSS Class)',advisoryTitle:'כותרת מוצעת',cssStyle:'סגנון',ok:'אישור',cancel:'ביטול',close:'סגירה',preview:'תצוגה מקדימה',generalTab:'כללי',advancedTab:'אפשרויות מתקדמות',validateNumberFailed:'הערך חייב להיות מספרי.',confirmNewPage:'כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?',confirmCancel:'חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?',options:'אפשרויות',target:'מטרה',targetNew:'חלון חדש (_blank)',targetTop:'החלון העליון ביותר (_top)',targetSelf:'אותו חלון (_self)',targetParent:'חלון האב (_parent)',langDirLTR:'שמאל לימין (LTR)',langDirRTL:'ימין לשמאל (RTL)',styles:'סגנון',cssClasses:'מחלקות גליונות סגנון',width:'רוחב',height:'גובה',align:'יישור',alignLeft:'לשמאל',alignRight:'לימין',alignCenter:'מרכז',alignTop:'למעלה',alignMiddle:'לאמצע',alignBottom:'לתחתית',invalidHeight:'הגובה חייב להיות מספר.',invalidWidth:'הרוחב חייב להיות מספר.',unavailable:'%1<span class="cke_accessibility">, לא זמין</span>'},contextmenu:{options:'אפשרויות תפריט ההקשר'},specialChar:{toolbar:'הוספת תו מיוחד',title:'בחירת תו מיוחד',options:'אפשרויות תווים מיוחדים'},link:{toolbar:'הוספת/עריכת קישור',other:'<אחר>',menu:'מאפייני קישור',title:'קישור',info:'מידע על הקישור',target:'מטרה',upload:'העלאה',advanced:'אפשרויות מתקדמות',type:'סוג קישור',toUrl:'כתובת (URL)',toAnchor:'עוגן בעמוד זה',toEmail:'דוא"ל',targetFrame:'<מסגרת>',targetPopup:'<חלון קופץ>',targetFrameName:'שם מסגרת היעד',targetPopupName:'שם החלון הקופץ',popupFeatures:'תכונות החלון הקופץ',popupResizable:'שינוי גודל',popupStatusBar:'סרגל חיווי',popupLocationBar:'סרגל כתובת',popupToolbar:'סרגל הכלים',popupMenuBar:'סרגל תפריט',popupFullScreen:'מסך מלא (IE)',popupScrollBars:'ניתן לגלילה',popupDependent:'תלוי (Netscape)',popupLeft:'מיקום צד שמאל',popupTop:'מיקום צד עליון',id:'זיהוי (ID)',langDir:'כיוון שפה',langDirLTR:'שמאל לימין (LTR)',langDirRTL:'ימין לשמאל (RTL)',acccessKey:'מקש גישה',name:'שם',langCode:'קוד שפה',tabIndex:'מספר טאב',advisoryTitle:'כותרת מוצעת',advisoryContentType:'Content Type מוצע',cssClasses:'גיליונות עיצוב קבוצות',charset:'קידוד המשאב המקושר',styles:'סגנון',selectAnchor:'בחירת עוגן',anchorName:'עפ"י שם העוגן',anchorId:'עפ"י זיהוי (ID) האלמנט',emailAddress:'כתובת הדוא"ל',emailSubject:'נושא ההודעה',emailBody:'גוף ההודעה',noAnchors:'(אין עוגנים זמינים בדף)',noUrl:'יש להקליד את כתובת הקישור (URL)',noEmail:'יש להקליד את כתובת הדוא"ל'},anchor:{toolbar:'הוספת/עריכת נקודת עיגון',menu:'מאפייני נקודת עיגון',title:'מאפייני נקודת עיגון',name:'שם לנקודת עיגון',errorName:'יש להקליד שם לנקודת עיגון'},list:{numberedTitle:'תכונות רשימה ממוספרת',bulletedTitle:'תכונות רשימת תבליטים',type:'סוג',start:'תחילת מספור',validateStartNumber:'שדה תחילת המספור חייב להכיל מספר שלם.',circle:'עיגול ריק',disc:'עיגול מלא',square:'ריבוע',none:'ללא',notset:'<לא נקבע>',armenian:'ספרות ארמניות',georgian:"ספרות גיאורגיות (an, ban, gan וכו')",lowerRoman:"ספירה רומית באותיות קטנות (i, ii, iii, iv, v וכו')",upperRoman:"ספירה רומיות באותיות גדולות (I, II, III, IV, V וכו')",lowerAlpha:"אותיות אנגליות קטנות (a, b, c, d, e וכו')",upperAlpha:"אותיות אנגליות גדולות (A, B, C, D, E וכו')",lowerGreek:"אותיות יווניות קטנות (alpha, beta, gamma וכו')",decimal:"ספרות (1, 2, 3 וכו')",decimalLeadingZero:"ספרות עם 0 בהתחלה (01, 02, 03 וכו')"},findAndReplace:{title:'חיפוש והחלפה',find:'חיפוש',replace:'החלפה',findWhat:'חיפוש מחרוזת:',replaceWith:'החלפה במחרוזת:',notFoundMsg:'הטקסט המבוקש לא נמצא.',matchCase:'הבחנה בין אותיות רשיות לקטנות (Case)',matchWord:'התאמה למילה המלאה',matchCyclic:'התאמה מחזורית',replaceAll:'החלפה בכל העמוד',replaceSuccessMsg:'%1 טקסטים הוחלפו.'},table:{toolbar:'טבלה',title:'מאפייני טבלה',menu:'מאפייני טבלה',deleteTable:'מחק טבלה',rows:'שורות',columns:'עמודות',border:'גודל מסגרת',widthPx:'פיקסלים',widthPc:'אחוז',widthUnit:'יחידת רוחב',cellSpace:'מרווח תא',cellPad:'ריפוד תא',caption:'כיתוב',summary:'תקציר',headers:'כותרות',headersNone:'אין',headersColumn:'עמודה ראשונה',headersRow:'שורה ראשונה',headersBoth:'שניהם',invalidRows:'שדה מספר השורות חייב להיות מספר גדול מ 0.',invalidCols:'שדה מספר העמודות חייב להיות מספר גדול מ 0.',invalidBorder:'שדה גודל המסגרת חייב להיות מספר.',invalidWidth:'שדה רוחב הטבלה חייב להיות מספר.',invalidHeight:'שדה גובה הטבלה חייב להיות מספר.',invalidCellSpacing:'שדה ריווח התאים חייב להיות מספר.',invalidCellPadding:'שדה ריפוד התאים חייב להיות מספר.',cell:{menu:'מאפייני תא',insertBefore:'הוספת תא לפני',insertAfter:'הוספת תא אחרי',deleteCell:'מחיקת תאים',merge:'מיזוג תאים',mergeRight:'מזג ימינה',mergeDown:'מזג למטה',splitHorizontal:'פיצול תא אופקית',splitVertical:'פיצול תא אנכית',title:'תכונות התא',cellType:'סוג התא',rowSpan:'מתיחת השורות',colSpan:'מתיחת התאים',wordWrap:'מניעת גלישת שורות',hAlign:'יישור אופקי',vAlign:'יישור אנכי',alignBaseline:'שורת בסיס',bgColor:'צבע רקע',borderColor:'צבע מסגרת',data:'מידע',header:'כותרת',yes:'כן',no:'לא',invalidWidth:'שדה רוחב התא חייב להיות מספר.',invalidHeight:'שדה גובה התא חייב להיות מספר.',invalidRowSpan:'שדה מתיחת השורות חייב להיות מספר שלם.',invalidColSpan:'שדה מתיחת העמודות חייב להיות מספר שלם.',chooseColor:'בחר'},row:{menu:'שורה',insertBefore:'הוספת שורה לפני',insertAfter:'הוספת שורה אחרי',deleteRow:'מחיקת שורות'},column:{menu:'עמודה',insertBefore:'הוספת עמודה לפני',insertAfter:'הוספת עמודה אחרי',deleteColumn:'מחיקת עמודות'}},button:{title:'מאפייני כפתור',text:'טקסט (ערך)',type:'סוג',typeBtn:'כפתור',typeSbm:'שליחה',typeRst:'איפוס'},checkboxAndRadio:{checkboxTitle:'מאפייני תיבת סימון',radioTitle:'מאפייני לחצן אפשרויות',value:'ערך',selected:'מסומן'},form:{title:'מאפיני טופס',menu:'מאפיני טופס',action:'שלח אל',method:'סוג שליחה',encoding:'קידוד'},select:{title:'מאפייני שדה בחירה',selectInfo:'מידע',opAvail:'אפשרויות זמינות',value:'ערך',size:'גודל',lines:'שורות',chkMulti:'איפשור בחירות מרובות',opText:'טקסט',opValue:'ערך',btnAdd:'הוספה',btnModify:'שינוי',btnUp:'למעלה',btnDown:'למטה',btnSetValue:'קביעה כברירת מחדל',btnDelete:'מחיקה'},textarea:{title:'מאפייני איזור טקסט',cols:'עמודות',rows:'שורות'},textfield:{title:'מאפייני שדה טקסט',name:'שם',value:'ערך',charWidth:'רוחב לפי תווים',maxChars:'מקסימום תווים',type:'סוג',typeText:'טקסט',typePass:'סיסמה'},hidden:{title:'מאפיני שדה חבוי',name:'שם',value:'ערך'},image:{title:'מאפייני התמונה',titleButton:'מאפיני כפתור תמונה',menu:'תכונות התמונה',infoTab:'מידע על התמונה',btnUpload:'שליחה לשרת',upload:'העלאה',alt:'טקסט חלופי',lockRatio:'נעילת היחס',unlockRatio:'ביטול נעילת היחס',resetSize:'איפוס הגודל',border:'מסגרת',hSpace:'מרווח אופקי',vSpace:'מרווח אנכי',alertUrl:'יש להקליד את כתובת התמונה',linkTab:'קישור',button2Img:'האם להפוך את תמונת הכפתור לתמונה פשוטה?',img2Button:'האם להפוך את התמונה לכפתור תמונה?',urlMissing:'כתובת התמונה חסרה.',validateBorder:'שדה המסגרת חייב להיות מספר שלם.',validateHSpace:'שדה המרווח האופקי חייב להיות מספר שלם.',validateVSpace:'שדה המרווח האנכי חייב להיות מספר שלם.'},flash:{properties:'מאפייני פלאש',propertiesTab:'מאפיינים',title:'מאפיני פלאש',chkPlay:'ניגון אוטומטי',chkLoop:'לולאה',chkMenu:'אפשר תפריט פלאש',chkFull:'אפשר חלון מלא',scale:'גודל',scaleAll:'הצג הכל',scaleNoBorder:'ללא גבולות',scaleFit:'התאמה מושלמת',access:'גישת סקריפט',accessAlways:'תמיד',accessSameDomain:'דומיין זהה',accessNever:'אף פעם',alignAbsBottom:'לתחתית האבסולוטית',alignAbsMiddle:'מרכוז אבסולוטי',alignBaseline:'לקו התחתית',alignTextTop:'לראש הטקסט',quality:'איכות',qualityBest:'מעולה',qualityHigh:'גבוהה',qualityAutoHigh:'גבוהה אוטומטית',qualityMedium:'ממוצעת',qualityAutoLow:'נמוכה אוטומטית',qualityLow:'נמוכה',windowModeWindow:'חלון',windowModeOpaque:'אטום',windowModeTransparent:'שקוף',windowMode:'מצב חלון',flashvars:'משתנים לפלאש',bgcolor:'צבע רקע',hSpace:'מרווח אופקי',vSpace:'מרווח אנכי',validateSrc:'יש להקליד את כתובת סרטון הפלאש (URL)',validateHSpace:'המרווח האופקי חייב להיות מספר.',validateVSpace:'המרווח האנכי חייב להיות מספר.'},spellCheck:{toolbar:'בדיקת איות',title:'בדיקת איות',notAvailable:'לא נמצא שירות זמין.',errorLoading:'שגיאה בהעלאת השירות: %s.',notInDic:'לא נמצא במילון',changeTo:'שינוי ל',btnIgnore:'התעלמות',btnIgnoreAll:'התעלמות מהכל',btnReplace:'החלפה',btnReplaceAll:'החלפת הכל',btnUndo:'החזרה',noSuggestions:'- אין הצעות -',progress:'בודק האיות בתהליך בדיקה....',noMispell:'בדיקות איות הסתיימה: לא נמצאו שגיאות כתיב',noChanges:'בדיקות איות הסתיימה: לא שונתה אף מילה',oneChange:'בדיקות איות הסתיימה: שונתה מילה אחת',manyChanges:'בדיקות איות הסתיימה: %1 מילים שונו',ieSpellDownload:'בודק האיות לא מותקן, האם להורידו?'},smiley:{toolbar:'סמיילי',title:'הוספת סמיילי',options:'אפשרויות סמיילים'},elementsPath:{eleLabel:'עץ האלמנטים',eleTitle:'%1 אלמנט'},numberedlist:'רשימה ממוספרת',bulletedlist:'רשימת נקודות',indent:'הגדלת הזחה',outdent:'הקטנת הזחה',justify:{left:'יישור לשמאל',center:'מרכוז',right:'יישור לימין',block:'יישור לשוליים'},blockquote:'בלוק ציטוט',clipboard:{title:'הדבקה',cutError:'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).',copyError:'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).',pasteMsg:'נא להדביק בתוך הקופסה באמצעות (<b>Ctrl/Cmd+V</b>) וללחוץ על <b>אישור</b>.',securityMsg:'עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.',pasteArea:'איזור הדבקה'},pastefromword:{confirmCleanup:'נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?',toolbar:'הדבקה מ-Word',title:'הדבקה מ-Word',error:'לא ניתן היה לנקות את המידע בשל תקלה פנימית.'},pasteText:{button:'הדבקה כטקסט פשוט',title:'הדבקה כטקסט פשוט'},templates:{button:'תבניות',title:'תביות תוכן',options:'אפשרויות התבניות',insertOption:'החלפת תוכן ממשי',selectPromptMsg:'יש לבחור תבנית לפתיחה בעורך.<br />התוכן המקורי ימחק:',emptyListMsg:'(לא הוגדרו תבניות)'},showBlocks:'הצגת בלוקים',stylesCombo:{label:'סגנון',panelTitle:'סגנונות פורמט',panelTitle1:'סגנונות בלוק',panelTitle2:'סגנונות רצף',panelTitle3:'סגנונות אובייקט'},format:{label:'עיצוב',panelTitle:'עיצוב',tag_p:'נורמלי',tag_pre:'קוד',tag_address:'כתובת',tag_h1:'כותרת',tag_h2:'כותרת 2',tag_h3:'כותרת 3',tag_h4:'כותרת 4',tag_h5:'כותרת 5',tag_h6:'כותרת 6',tag_div:'נורמלי (DIV)'},div:{title:'יצירת מיכל (Div)',toolbar:'יצירת מיכל (Div)',cssClassInputLabel:'מחלקת עיצוב',styleSelectLabel:'סגנון',IdInputLabel:'מזהה (ID)',languageCodeInputLabel:'קוד שפה',inlineStyleInputLabel:'סגנון פנימי',advisoryTitleInputLabel:'כותרת מוצעת',langDirLabel:'כיוון שפה',langDirLTRLabel:'שמאל לימין (LTR)',langDirRTLLabel:'ימין לשמאל (RTL)',edit:'עריכת מיכל (Div)',remove:'הסרת מיכל (Div)'},iframe:{title:'מאפייני חלון פנימי (iFrame)',toolbar:'חלון פנימי (iFrame)',noUrl:'יש להכניס כתובת לחלון.',scrolling:'אפשר פסי גלילה',border:'הראה מסגרת לחלון'},font:{label:'גופן',voiceLabel:'גופן',panelTitle:'גופן'},fontSize:{label:'גודל',voiceLabel:'גודל',panelTitle:'גודל'},colorButton:{textColorTitle:'צבע טקסט',bgColorTitle:'צבע רקע',panelTitle:'צבעים',auto:'אוטומטי',more:'צבעים נוספים...'},colors:{'000':'שחור',800000:'סגול כהה','8B4513':'חום בהיר','2F4F4F':'אפור צפחה','008080':'כחול-ירוק','000080':'כחול-סגול','4B0082':'אינדיגו',696969:'אפור מעומעם',B22222:'אדום-חום',A52A2A:'חום',DAA520:'כתום זהב','006400':'ירוק כהה','40E0D0':'טורקיז','0000CD':'כחול בינוני',800080:'סגול',808080:'אפור',F00:'אדום',FF8C00:'כתום כהה',FFD700:'זהב','008000':'ירוק','0FF':'ציאן','00F':'כחול',EE82EE:'סגלגל',A9A9A9:'אפור כהה',FFA07A:'כתום-וורוד',FFA500:'כתום',FFFF00:'צהוב','00FF00':'ליים',AFEEEE:'טורקיז בהיר',ADD8E6:'כחול בהיר',DDA0DD:'שזיף',D3D3D3:'אפור בהיר',FFF0F5:'לבנדר מסמיק',FAEBD7:'לבן עתיק',FFFFE0:'צהוב בהיר',F0FFF0:'טל דבש',F0FFFF:'תכלת',F0F8FF:'כחול טיפת מים',E6E6FA:'לבנדר',FFF:'לבן'},scayt:{title:'בדיקת איות בזמן כתיבה (SCAYT)',opera_title:'לא זמין בדפדפן אופרה',enable:'אפשר SCAYT',disable:'בטל SCAYT',about:'אודות SCAYT',toggle:'שינוי SCAYT',options:'אפשרויות',langs:'שפות',moreSuggestions:'הצעות נוספות',ignore:'התעלמות',ignoreAll:'התעלמות מהכל',addWord:'הוספת מילה',emptyDic:'יש לבחור מילון.',optionsTab:'אפשרויות',allCaps:'התעלם ממילים שכל אותיותיהן גדולות',ignoreDomainNames:'התעלם משמות מתחם',mixedCase:'התעלם ממילים עם אותיות גדולות וקטנות ביחד',mixedWithDigits:'התעלם ממילים עם מספרים',languagesTab:'שפות',dictionariesTab:'מילון',dic_field_name:'שם המילון',dic_create:'יצירה',dic_restore:'שחזור',dic_delete:'מחיקה',dic_rename:'שינוי שם',dic_info:'בהתחלה מילון המשתמש מאוחסן בעוגיה, אך עוגיות מוגבלות במקום. כאשר המילון מגיע לגודל בו הוא אינו יכול להתאכסן בעוגיה, המילון צריך להתאכסן בשרתנו. לשם כך עליך לתת שם למילון. אם כבר יש לך מילון מאוחסן, יש להכניס את שמו וללחוץ על כפתור השחזור.',aboutTab:'אודות'},about:{title:'אודות CKEditor',dlgTitle:'אודות CKEditor',moreInfo:'למידע נוסף בקרו באתרנו:',copy:'Copyright © $1. כל הזכויות שמורות.'},maximize:'הגדלה למקסימום',minimize:'הקטנה למינימום',fakeobjects:{anchor:'עוגן',flash:'סרטון פלאש',iframe:'חלון פנימי (iFrame)',hiddenfield:'שדה חבוי',unknown:'אובייקט לא ידוע'},resize:'יש לגרור בכדי לשנות את הגודל',colordialog:{title:'בחירת צבע',options:'אפשרויות צבע',highlight:'סימון',selected:'בחירה',clear:'ניקוי'},toolbarCollapse:'מזעור סרגל כלים',toolbarExpand:'הרחבת סרגל כלים',bidi:{ltr:'כיוון טקסט משמאל לימין (LTR)',rtl:'כיוון טקסט מימין לשמאל (RTL)'}};
diff --git a/modules_v2/ckeditor/lang/hi.js b/modules_v2/ckeditor/lang/hi.js new file mode 100644 index 0000000000..02d78941ea --- /dev/null +++ b/modules_v2/ckeditor/lang/hi.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.hi={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'सोर्स',newPage:'नया पेज',save:'सेव',preview:'प्रीव्यू',cut:'कट',copy:'कॉपी',paste:'पेस्ट',print:'प्रिन्ट',underline:'रेखांकण',bold:'बोल्ड',italic:'इटैलिक',selectAll:'सब सॅलॅक्ट करें',removeFormat:'फ़ॉर्मैट हटायें',strike:'स्ट्राइक थ्रू',subscript:'अधोलेख',superscript:'अभिलेख',horizontalrule:'हॉरिज़ॉन्टल रेखा इन्सर्ट करें',pagebreak:'पेज ब्रेक इन्सर्ट् करें',pagebreakAlt:'Page Break',unlink:'लिंक हटायें',undo:'अन्डू',redo:'रीडू',common:{browseServer:'सर्वर ब्राउज़ करें',url:'URL',protocol:'प्रोटोकॉल',upload:'अपलोड',uploadSubmit:'इसे सर्वर को भेजें',image:'तस्वीर',flash:'फ़्लैश',form:'फ़ॉर्म',checkbox:'चॅक बॉक्स',radio:'रेडिओ बटन',textField:'टेक्स्ट फ़ील्ड',textarea:'टेक्स्ट एरिया',hiddenField:'गुप्त फ़ील्ड',button:'बटन',select:'चुनाव फ़ील्ड',imageButton:'तस्वीर बटन',notSet:'<सॅट नहीं>',id:'Id',name:'नाम',langDir:'भाषा लिखने की दिशा',langDirLtr:'बायें से दायें (LTR)',langDirRtl:'दायें से बायें (RTL)',langCode:'भाषा कोड',longDescr:'अधिक विवरण के लिए URL',cssClass:'स्टाइल-शीट क्लास',advisoryTitle:'परामर्श शीर्शक',cssStyle:'स्टाइल',ok:'ठीक है',cancel:'रद्द करें',close:'Close',preview:'Preview',generalTab:'सामान्य',advancedTab:'ऍड्वान्स्ड',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'चौड़ाई',height:'ऊँचाई',align:'ऍलाइन',alignLeft:'दायें',alignRight:'दायें',alignCenter:'बीच में',alignTop:'ऊपर',alignMiddle:'मध्य',alignBottom:'नीचे',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'विशेष करॅक्टर इन्सर्ट करें',title:'विशेष करॅक्टर चुनें',options:'Special Character Options'},link:{toolbar:'लिंक इन्सर्ट/संपादन',other:'<अन्य>',menu:'लिंक संपादन',title:'लिंक',info:'लिंक ',target:'टार्गेट',upload:'अपलोड',advanced:'ऍड्वान्स्ड',type:'लिंक प्रकार',toUrl:'URL',toAnchor:'इस पेज का ऐंकर',toEmail:'ई-मेल',targetFrame:'<फ़्रेम>',targetPopup:'<पॉप-अप विन्डो>',targetFrameName:'टार्गेट फ़्रेम का नाम',targetPopupName:'पॉप-अप विन्डो का नाम',popupFeatures:'पॉप-अप विन्डो फ़ीचर्स',popupResizable:'Resizable',popupStatusBar:'स्टेटस बार',popupLocationBar:'लोकेशन बार',popupToolbar:'टूल बार',popupMenuBar:'मॅन्यू बार',popupFullScreen:'फ़ुल स्क्रीन (IE)',popupScrollBars:'स्क्रॉल बार',popupDependent:'डिपेन्डॅन्ट (Netscape)',popupLeft:'बायीं तरफ',popupTop:'दायीं तरफ',id:'Id',langDir:'भाषा लिखने की दिशा',langDirLTR:'बायें से दायें (LTR)',langDirRTL:'दायें से बायें (RTL)',acccessKey:'ऍक्सॅस की',name:'नाम',langCode:'भाषा लिखने की दिशा',tabIndex:'टैब इन्डॅक्स',advisoryTitle:'परामर्श शीर्शक',advisoryContentType:'परामर्श कन्टॅन्ट प्रकार',cssClasses:'स्टाइल-शीट क्लास',charset:'लिंक रिसोर्स करॅक्टर सॅट',styles:'स्टाइल',selectAnchor:'ऐंकर चुनें',anchorName:'ऐंकर नाम से',anchorId:'ऍलीमॅन्ट Id से',emailAddress:'ई-मेल पता',emailSubject:'संदेश विषय',emailBody:'संदेश',noAnchors:'(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)',noUrl:'लिंक URL टाइप करें',noEmail:'ई-मेल पता टाइप करें'},anchor:{toolbar:'ऐंकर इन्सर्ट/संपादन',menu:'ऐंकर प्रॉपर्टीज़',title:'ऐंकर प्रॉपर्टीज़',name:'ऐंकर का नाम',errorName:'ऐंकर का नाम टाइप करें'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'खोजें और बदलें',find:'खोजें',replace:'रीप्लेस',findWhat:'यह खोजें:',replaceWith:'इससे रिप्लेस करें:',notFoundMsg:'आपके द्वारा दिया गया टेक्स्ट नहीं मिला',matchCase:'केस मिलायें',matchWord:'पूरा शब्द मिलायें',matchCyclic:'Match cyclic',replaceAll:'सभी रिप्लेस करें',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'टेबल',title:'टेबल प्रॉपर्टीज़',menu:'टेबल प्रॉपर्टीज़',deleteTable:'टेबल डिलीट करें',rows:'पंक्तियाँ',columns:'कालम',border:'बॉर्डर साइज़',widthPx:'पिक्सैल',widthPc:'प्रतिशत',widthUnit:'width unit',cellSpace:'सैल अंतर',cellPad:'सैल पैडिंग',caption:'शीर्षक',summary:'सारांश',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'खाना',insertBefore:'पहले सैल डालें',insertAfter:'बाद में सैल डालें',deleteCell:'सैल डिलीट करें',merge:'सैल मिलायें',mergeRight:'बाँया विलय',mergeDown:'नीचे विलय करें',splitHorizontal:'सैल को क्षैतिज स्थिति में विभाजित करें',splitVertical:'सैल को लम्बाकार में विभाजित करें',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'पंक्ति',insertBefore:'पहले पंक्ति डालें',insertAfter:'बाद में पंक्ति डालें',deleteRow:'पंक्तियाँ डिलीट करें'},column:{menu:'कालम',insertBefore:'पहले कालम डालें',insertAfter:'बाद में कालम डालें',deleteColumn:'कालम डिलीट करें'}},button:{title:'बटन प्रॉपर्टीज़',text:'टेक्स्ट (वैल्यू)',type:'प्रकार',typeBtn:'बटन',typeSbm:'सब्मिट',typeRst:'रिसेट'},checkboxAndRadio:{checkboxTitle:'चॅक बॉक्स प्रॉपर्टीज़',radioTitle:'रेडिओ बटन प्रॉपर्टीज़',value:'वैल्यू',selected:'सॅलॅक्टॅड'},form:{title:'फ़ॉर्म प्रॉपर्टीज़',menu:'फ़ॉर्म प्रॉपर्टीज़',action:'क्रिया',method:'तरीका',encoding:'Encoding'},select:{title:'चुनाव फ़ील्ड प्रॉपर्टीज़',selectInfo:'सूचना',opAvail:'उपलब्ध विकल्प',value:'वैल्यू',size:'साइज़',lines:'पंक्तियाँ',chkMulti:'एक से ज्यादा विकल्प चुनने दें',opText:'टेक्स्ट',opValue:'वैल्यू',btnAdd:'जोड़ें',btnModify:'बदलें',btnUp:'ऊपर',btnDown:'नीचे',btnSetValue:'चुनी गई वैल्यू सॅट करें',btnDelete:'डिलीट'},textarea:{title:'टेक्स्त एरिया प्रॉपर्टीज़',cols:'कालम',rows:'पंक्तियां'},textfield:{title:'टेक्स्ट फ़ील्ड प्रॉपर्टीज़',name:'नाम',value:'वैल्यू',charWidth:'करॅक्टर की चौढ़ाई',maxChars:'अधिकतम करॅक्टर',type:'टाइप',typeText:'टेक्स्ट',typePass:'पास्वर्ड'},hidden:{title:'गुप्त फ़ील्ड प्रॉपर्टीज़',name:'नाम',value:'वैल्यू'},image:{title:'तस्वीर प्रॉपर्टीज़',titleButton:'तस्वीर बटन प्रॉपर्टीज़',menu:'तस्वीर प्रॉपर्टीज़',infoTab:'तस्वीर की जानकारी',btnUpload:'इसे सर्वर को भेजें',upload:'अपलोड',alt:'वैकल्पिक टेक्स्ट',lockRatio:'लॉक अनुपात',unlockRatio:'Unlock Ratio',resetSize:'रीसॅट साइज़',border:'बॉर्डर',hSpace:'हॉरिज़ॉन्टल स्पेस',vSpace:'वर्टिकल स्पेस',alertUrl:'तस्वीर का URL टाइप करें ',linkTab:'लिंक',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'फ़्लैश प्रॉपर्टीज़',propertiesTab:'Properties',title:'फ़्लैश प्रॉपर्टीज़',chkPlay:'ऑटो प्ले',chkLoop:'लूप',chkMenu:'फ़्लैश मॅन्यू का प्रयोग करें',chkFull:'Allow Fullscreen',scale:'स्केल',scaleAll:'सभी दिखायें',scaleNoBorder:'कोई बॉर्डर नहीं',scaleFit:'बिल्कुल फ़िट',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs नीचे',alignAbsMiddle:'Abs ऊपर',alignBaseline:'मूल रेखा',alignTextTop:'टेक्स्ट ऊपर',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'बैक्ग्राउन्ड रंग',hSpace:'हॉरिज़ॉन्टल स्पेस',vSpace:'वर्टिकल स्पेस',validateSrc:'लिंक URL टाइप करें',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'वर्तनी (स्पेलिंग) जाँच',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'शब्दकोश में नहीं',changeTo:'इसमें बदलें',btnIgnore:'इग्नोर',btnIgnoreAll:'सभी इग्नोर करें',btnReplace:'रिप्लेस',btnReplaceAll:'सभी रिप्लेस करें',btnUndo:'अन्डू',noSuggestions:'- कोई सुझाव नहीं -',progress:'वर्तनी की जाँच (स्पॅल-चॅक) जारी है...',noMispell:'वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई',noChanges:'वर्तनी की जाँच :कोई शब्द नहीं बदला गया',oneChange:'वर्तनी की जाँच : एक शब्द बदला गया',manyChanges:'वर्तनी की जाँच : %1 शब्द बदले गये',ieSpellDownload:'स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?'},smiley:{toolbar:'स्माइली',title:'स्माइली इन्सर्ट करें',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'अंकीय सूची',bulletedlist:'बुलॅट सूची',indent:'इन्डॅन्ट बढ़ायें',outdent:'इन्डॅन्ट कम करें',justify:{left:'बायीं तरफ',center:'बीच में',right:'दायीं तरफ',block:'ब्लॉक जस्टीफ़ाई'},blockquote:'ब्लॉक-कोट',clipboard:{title:'पेस्ट',cutError:'आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।',copyError:'आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।',pasteMsg:'Ctrl/Cmd+V का प्रयोग करके पेस्ट करें और ठीक है करें.',securityMsg:'आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'पेस्ट (वर्ड से)',title:'पेस्ट (वर्ड से)',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'पेस्ट (सादा टॅक्स्ट)',title:'पेस्ट (सादा टॅक्स्ट)'},templates:{button:'टॅम्प्लेट',title:'कन्टेन्ट टॅम्प्लेट',options:'Template Options',insertOption:'मूल शब्दों को बदलें',selectPromptMsg:'ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):',emptyListMsg:'(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)'},showBlocks:'ब्लॉक दिखायें',stylesCombo:{label:'स्टाइल',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'फ़ॉर्मैट',panelTitle:'फ़ॉर्मैट',tag_p:'साधारण',tag_pre:'फ़ॉर्मैटॅड',tag_address:'पता',tag_h1:'शीर्षक 1',tag_h2:'शीर्षक 2',tag_h3:'शीर्षक 3',tag_h4:'शीर्षक 4',tag_h5:'शीर्षक 5',tag_h6:'शीर्षक 6',tag_div:'शीर्षक (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'फ़ॉन्ट',voiceLabel:'Font',panelTitle:'फ़ॉन्ट'},fontSize:{label:'साइज़',voiceLabel:'Font Size',panelTitle:'साइज़'},colorButton:{textColorTitle:'टेक्स्ट रंग',bgColorTitle:'बैक्ग्राउन्ड रंग',panelTitle:'Colors',auto:'स्वचालित',more:'और रंग...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/hr.js b/modules_v2/ckeditor/lang/hr.js new file mode 100644 index 0000000000..9a682e8a71 --- /dev/null +++ b/modules_v2/ckeditor/lang/hr.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.hr={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Kôd',newPage:'Nova stranica',save:'Snimi',preview:'Pregledaj',cut:'Izreži',copy:'Kopiraj',paste:'Zalijepi',print:'Ispiši',underline:'Potcrtano',bold:'Podebljaj',italic:'Ukosi',selectAll:'Odaberi sve',removeFormat:'Ukloni formatiranje',strike:'Precrtano',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Ubaci vodoravnu liniju',pagebreak:'Ubaci prijelom stranice',pagebreakAlt:'Page Break',unlink:'Ukloni link',undo:'Poništi',redo:'Ponovi',common:{browseServer:'Pretraži server',url:'URL',protocol:'Protokol',upload:'Pošalji',uploadSubmit:'Pošalji na server',image:'Slika',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<nije postavljeno>',id:'Id',name:'Naziv',langDir:'Smjer jezika',langDirLtr:'S lijeva na desno (LTR)',langDirRtl:'S desna na lijevo (RTL)',langCode:'Kôd jezika',longDescr:'Dugački opis URL',cssClass:'Stylesheet klase',advisoryTitle:'Advisory naslov',cssStyle:'Stil',ok:'OK',cancel:'Poništi',close:'Close',preview:'Preview',generalTab:'Općenito',advancedTab:'Napredno',validateNumberFailed:'Ova vrijednost nije broj.',confirmNewPage:'Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?',confirmCancel:'Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Širina',height:'Visina',align:'Poravnaj',alignLeft:'Lijevo',alignRight:'Desno',alignCenter:'Središnje',alignTop:'Vrh',alignMiddle:'Sredina',alignBottom:'Dolje',invalidHeight:'Visina mora biti broj.',invalidWidth:'Širina mora biti broj.',unavailable:'%1<span class="cke_accessibility">, nedostupno</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Ubaci posebne znakove',title:'Odaberite posebni karakter',options:'Special Character Options'},link:{toolbar:'Ubaci/promijeni link',other:'<drugi>',menu:'Promijeni link',title:'Link',info:'Link Info',target:'Meta',upload:'Pošalji',advanced:'Napredno',type:'Link vrsta',toUrl:'URL',toAnchor:'Sidro na ovoj stranici',toEmail:'E-Mail',targetFrame:'<okvir>',targetPopup:'<popup prozor>',targetFrameName:'Ime ciljnog okvira',targetPopupName:'Naziv popup prozora',popupFeatures:'Mogućnosti popup prozora',popupResizable:'Promjenjiva veličina',popupStatusBar:'Statusna traka',popupLocationBar:'Traka za lokaciju',popupToolbar:'Traka s alatima',popupMenuBar:'Izborna traka',popupFullScreen:'Cijeli ekran (IE)',popupScrollBars:'Scroll traka',popupDependent:'Ovisno (Netscape)',popupLeft:'Lijeva pozicija',popupTop:'Gornja pozicija',id:'Id',langDir:'Smjer jezika',langDirLTR:'S lijeva na desno (LTR)',langDirRTL:'S desna na lijevo (RTL)',acccessKey:'Pristupna tipka',name:'Naziv',langCode:'Smjer jezika',tabIndex:'Tab Indeks',advisoryTitle:'Advisory naslov',advisoryContentType:'Advisory vrsta sadržaja',cssClasses:'Stylesheet klase',charset:'Kodna stranica povezanih resursa',styles:'Stil',selectAnchor:'Odaberi sidro',anchorName:'Po nazivu sidra',anchorId:'Po Id elementa',emailAddress:'E-Mail adresa',emailSubject:'Naslov',emailBody:'Sadržaj poruke',noAnchors:'(Nema dostupnih sidra)',noUrl:'Molimo upišite URL link',noEmail:'Molimo upišite e-mail adresu'},anchor:{toolbar:'Ubaci/promijeni sidro',menu:'Svojstva sidra',title:'Svojstva sidra',name:'Ime sidra',errorName:'Molimo unesite ime sidra'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Pronađi i zamijeni',find:'Pronađi',replace:'Zamijeni',findWhat:'Pronađi:',replaceWith:'Zamijeni s:',notFoundMsg:'Traženi tekst nije pronađen.',matchCase:'Usporedi mala/velika slova',matchWord:'Usporedi cijele riječi',matchCyclic:'Usporedi kružno',replaceAll:'Zamijeni sve',replaceSuccessMsg:'Zamijenjeno %1 pojmova.'},table:{toolbar:'Tablica',title:'Svojstva tablice',menu:'Svojstva tablice',deleteTable:'Izbriši tablicu',rows:'Redova',columns:'Kolona',border:'Veličina okvira',widthPx:'piksela',widthPc:'postotaka',widthUnit:'width unit',cellSpace:'Prostornost ćelija',cellPad:'Razmak ćelija',caption:'Naslov',summary:'Sažetak',headers:'Zaglavlje',headersNone:'Ništa',headersColumn:'Prva kolona',headersRow:'Prvi red',headersBoth:'Oba',invalidRows:'Broj redova mora biti broj veći od 0.',invalidCols:'Broj kolona mora biti broj veći od 0.',invalidBorder:'Debljina ruba mora biti broj.',invalidWidth:'Širina tablice mora biti broj.',invalidHeight:'Visina tablice mora biti broj.',invalidCellSpacing:'Prostornost ćelija mora biti broj.',invalidCellPadding:'Razmak ćelija mora biti broj.',cell:{menu:'Ćelija',insertBefore:'Ubaci ćeliju prije',insertAfter:'Ubaci ćeliju poslije',deleteCell:'Izbriši ćelije',merge:'Spoji ćelije',mergeRight:'Spoji desno',mergeDown:'Spoji dolje',splitHorizontal:'Podijeli ćeliju vodoravno',splitVertical:'Podijeli ćeliju okomito',title:'Svojstva ćelije',cellType:'Vrsta ćelije',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Prelazak u novi red',hAlign:'Vodoravno poravnanje',vAlign:'Okomito poravnanje',alignBaseline:'Osnovna linija',bgColor:'Boja pozadine',borderColor:'Boja ruba',data:'Podatak',header:'Zaglavlje',yes:'Da',no:'ne',invalidWidth:'Širina ćelije mora biti broj.',invalidHeight:'Visina ćelije mora biti broj.',invalidRowSpan:'Rows span mora biti cijeli broj.',invalidColSpan:'Columns span mora biti cijeli broj.',chooseColor:'Choose'},row:{menu:'Red',insertBefore:'Ubaci red prije',insertAfter:'Ubaci red poslije',deleteRow:'Izbriši redove'},column:{menu:'Kolona',insertBefore:'Ubaci kolonu prije',insertAfter:'Ubaci kolonu poslije',deleteColumn:'Izbriši kolone'}},button:{title:'Image Button svojstva',text:'Tekst (vrijednost)',type:'Vrsta',typeBtn:'Gumb',typeSbm:'Pošalji',typeRst:'Poništi'},checkboxAndRadio:{checkboxTitle:'Checkbox svojstva',radioTitle:'Radio Button svojstva',value:'Vrijednost',selected:'Odabrano'},form:{title:'Form svojstva',menu:'Form svojstva',action:'Akcija',method:'Metoda',encoding:'Encoding'},select:{title:'Selection svojstva',selectInfo:'Info',opAvail:'Dostupne opcije',value:'Vrijednost',size:'Veličina',lines:'linija',chkMulti:'Dozvoli višestruki odabir',opText:'Tekst',opValue:'Vrijednost',btnAdd:'Dodaj',btnModify:'Promijeni',btnUp:'Gore',btnDown:'Dolje',btnSetValue:'Postavi kao odabranu vrijednost',btnDelete:'Obriši'},textarea:{title:'Textarea svojstva',cols:'Kolona',rows:'Redova'},textfield:{title:'Text Field svojstva',name:'Ime',value:'Vrijednost',charWidth:'Širina',maxChars:'Najviše karaktera',type:'Vrsta',typeText:'Tekst',typePass:'Šifra'},hidden:{title:'Hidden Field svojstva',name:'Ime',value:'Vrijednost'},image:{title:'Svojstva slika',titleButton:'Image Button svojstva',menu:'Svojstva slika',infoTab:'Info slike',btnUpload:'Pošalji na server',upload:'Pošalji',alt:'Alternativni tekst',lockRatio:'Zaključaj odnos',unlockRatio:'Unlock Ratio',resetSize:'Obriši veličinu',border:'Okvir',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Unesite URL slike',linkTab:'Link',button2Img:'Želite li promijeniti odabrani gumb u jednostavnu sliku?',img2Button:'Želite li promijeniti odabranu sliku u gumb?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash svojstva',propertiesTab:'Svojstva',title:'Flash svojstva',chkPlay:'Auto Play',chkLoop:'Ponavljaj',chkMenu:'Omogući Flash izbornik',chkFull:'Omogući Fullscreen',scale:'Omjer',scaleAll:'Prikaži sve',scaleNoBorder:'Bez okvira',scaleFit:'Točna veličina',access:'Script Access',accessAlways:'Uvijek',accessSameDomain:'Ista domena',accessNever:'Nikad',alignAbsBottom:'Abs dolje',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignTextTop:'Vrh teksta',quality:'Kvaliteta',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Vrsta prozora',flashvars:'Varijable za Flash',bgcolor:'Boja pozadine',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Molimo upišite URL link',validateHSpace:'HSpace mora biti broj.',validateVSpace:'VSpace mora biti broj.'},spellCheck:{toolbar:'Provjeri pravopis',title:'Provjera pravopisa',notAvailable:'Žao nam je, ali usluga trenutno nije dostupna.',errorLoading:'Greška učitavanja aplikacije: %s.',notInDic:'Nije u rječniku',changeTo:'Promijeni u',btnIgnore:'Zanemari',btnIgnoreAll:'Zanemari sve',btnReplace:'Zamijeni',btnReplaceAll:'Zamijeni sve',btnUndo:'Vrati',noSuggestions:'-Nema preporuke-',progress:'Provjera u tijeku...',noMispell:'Provjera završena: Nema grešaka',noChanges:'Provjera završena: Nije napravljena promjena',oneChange:'Provjera završena: Jedna riječ promjenjena',manyChanges:'Provjera završena: Promijenjeno %1 riječi',ieSpellDownload:'Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?'},smiley:{toolbar:'Smješko',title:'Ubaci smješka',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Brojčana lista',bulletedlist:'Obična lista',indent:'Pomakni udesno',outdent:'Pomakni ulijevo',justify:{left:'Lijevo poravnanje',center:'Središnje poravnanje',right:'Desno poravnanje',block:'Blok poravnanje'},blockquote:'Blockquote',clipboard:{title:'Zalijepi',cutError:'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).',copyError:'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).',pasteMsg:'Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.',securityMsg:'Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?',toolbar:'Zalijepi iz Worda',title:'Zalijepi iz Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Zalijepi kao čisti tekst',title:'Zalijepi kao čisti tekst'},templates:{button:'Predlošci',title:'Predlošci sadržaja',options:'Template Options',insertOption:'Zamijeni trenutne sadržaje',selectPromptMsg:'Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):',emptyListMsg:'(Nema definiranih predložaka)'},showBlocks:'Prikaži blokove',stylesCombo:{label:'Stil',panelTitle:'Formatting Styles',panelTitle1:'Block stilovi',panelTitle2:'Inline stilovi',panelTitle3:'Object stilovi'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatirano',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'Veličina',voiceLabel:'Veličina slova',panelTitle:'Veličina'},colorButton:{textColorTitle:'Boja teksta',bgColorTitle:'Boja pozadine',panelTitle:'Colors',auto:'Automatski',more:'Više boja...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Provjeri pravopis tijekom tipkanja (SCAYT)',opera_title:'Not supported by Opera',enable:'Omogući SCAYT',disable:'Onemogući SCAYT',about:'O SCAYT',toggle:'Omoguću/Onemogući SCAYT',options:'Opcije',langs:'Jezici',moreSuggestions:'Više prijedloga',ignore:'Zanemari',ignoreAll:'Zanemari sve',addWord:'Dodaj riječ',emptyDic:'Naziv rječnika ne smije biti prazno.',optionsTab:'Opcije',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Jezici',dictionariesTab:'Rječnici',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'O SCAYT'},about:{title:'O CKEditoru',dlgTitle:'O CKEditoru',moreInfo:'Za informacije o licencama posjetite našu web stranicu:',copy:'Copyright © $1. All rights reserved.'},maximize:'Povećaj',minimize:'Minimize',fakeobjects:{anchor:'Sidro',flash:'Flash animacija',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Nepoznati objekt'},resize:'Povuci za promjenu veličine',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/hu.js b/modules_v2/ckeditor/lang/hu.js new file mode 100644 index 0000000000..20bfe79373 --- /dev/null +++ b/modules_v2/ckeditor/lang/hu.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.hu={dir:'ltr',editorTitle:'HTML szerkesztő',toolbar:'Eszköztár',editor:'HTML szerkesztő',source:'Forráskód',newPage:'Új oldal',save:'Mentés',preview:'Előnézet',cut:'Kivágás',copy:'Másolás',paste:'Beillesztés',print:'Nyomtatás',underline:'Aláhúzott',bold:'Félkövér',italic:'Dőlt',selectAll:'Mindent kijelöl',removeFormat:'Formázás eltávolítása',strike:'Áthúzott',subscript:'Alsó index',superscript:'Felső index',horizontalrule:'Elválasztóvonal beillesztése',pagebreak:'Oldaltörés beillesztése',pagebreakAlt:'Page Break',unlink:'Hivatkozás törlése',undo:'Visszavonás',redo:'Ismétlés',common:{browseServer:'Böngészés a szerveren',url:'Hivatkozás',protocol:'Protokoll',upload:'Feltöltés',uploadSubmit:'Küldés a szerverre',image:'Kép',flash:'Flash',form:'Űrlap',checkbox:'Jelölőnégyzet',radio:'Választógomb',textField:'Szövegmező',textarea:'Szövegterület',hiddenField:'Rejtettmező',button:'Gomb',select:'Legördülő lista',imageButton:'Képgomb',notSet:'<nincs beállítva>',id:'Azonosító',name:'Név',langDir:'Írás iránya',langDirLtr:'Balról jobbra',langDirRtl:'Jobbról balra',langCode:'Nyelv kódja',longDescr:'Részletes leírás webcíme',cssClass:'Stíluskészlet',advisoryTitle:'Súgócimke',cssStyle:'Stílus',ok:'Rendben',cancel:'Mégsem',close:'Bezárás',preview:'Előnézet',generalTab:'Általános',advancedTab:'További opciók',validateNumberFailed:'A mezőbe csak számokat írhat.',confirmNewPage:'Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?',confirmCancel:'Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?',options:'Beállítások',target:'Cél',targetNew:'Új ablak (_blank)',targetTop:'Legfelső ablak (_top)',targetSelf:'Aktuális ablakban (_self)',targetParent:'Szülő ablak (_parent)',langDirLTR:'Balról jobbra (LTR)',langDirRTL:'Jobbról balra (RTL)',styles:'Stílus',cssClasses:'Stíluslap osztály',width:'Szélesség',height:'Magasság',align:'Igazítás',alignLeft:'Bal',alignRight:'Jobbra',alignCenter:'Középre',alignTop:'Tetejére',alignMiddle:'Középre',alignBottom:'Aljára',invalidHeight:'A magasság mezőbe csak számokat írhat.',invalidWidth:'A szélesség mezőbe csak számokat írhat.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Helyi menü opciók'},specialChar:{toolbar:'Speciális karakter beillesztése',title:'Speciális karakter választása',options:'Speciális karakter opciók'},link:{toolbar:'Hivatkozás beillesztése/módosítása',other:'<más>',menu:'Hivatkozás módosítása',title:'Hivatkozás tulajdonságai',info:'Alaptulajdonságok',target:'Tartalom megjelenítése',upload:'Feltöltés',advanced:'További opciók',type:'Hivatkozás típusa',toUrl:'URL',toAnchor:'Horgony az oldalon',toEmail:'E-Mail',targetFrame:'<keretben>',targetPopup:'<felugró ablakban>',targetFrameName:'Keret neve',targetPopupName:'Felugró ablak neve',popupFeatures:'Felugró ablak jellemzői',popupResizable:'Átméretezés',popupStatusBar:'Állapotsor',popupLocationBar:'Címsor',popupToolbar:'Eszköztár',popupMenuBar:'Menü sor',popupFullScreen:'Teljes képernyő (csak IE)',popupScrollBars:'Gördítősáv',popupDependent:'Szülőhöz kapcsolt (csak Netscape)',popupLeft:'Bal pozíció',popupTop:'Felső pozíció',id:'Id',langDir:'Írás iránya',langDirLTR:'Balról jobbra',langDirRTL:'Jobbról balra',acccessKey:'Billentyűkombináció',name:'Név',langCode:'Írás iránya',tabIndex:'Tabulátor index',advisoryTitle:'Súgócimke',advisoryContentType:'Súgó tartalomtípusa',cssClasses:'Stíluskészlet',charset:'Hivatkozott tartalom kódlapja',styles:'Stílus',selectAnchor:'Horgony választása',anchorName:'Horgony név szerint',anchorId:'Azonosító szerint',emailAddress:'E-Mail cím',emailSubject:'Üzenet tárgya',emailBody:'Üzenet',noAnchors:'(Nincs horgony a dokumentumban)',noUrl:'Adja meg a hivatkozás webcímét',noEmail:'Adja meg az E-Mail címet'},anchor:{toolbar:'Horgony beillesztése/szerkesztése',menu:'Horgony tulajdonságai',title:'Horgony tulajdonságai',name:'Horgony neve',errorName:'Kérem adja meg a horgony nevét'},list:{numberedTitle:'Sorszámozott lista tulajdonságai',bulletedTitle:'Pontozott lista tulajdonságai',type:'Típus',start:'Kezdőszám',validateStartNumber:'A kezdőszám nem lehet tört érték.',circle:'Kör',disc:'Korong',square:'Négyzet',none:'Nincs',notset:'<Nincs beállítva>',armenian:'Örmény számozás',georgian:'Grúz számozás (an, ban, gan, stb.)',lowerRoman:'Római kisbetűs (i, ii, iii, iv, v, stb.)',upperRoman:'Római nagybetűs (I, II, III, IV, V, stb.)',lowerAlpha:'Kisbetűs (a, b, c, d, e, stb.)',upperAlpha:'Nagybetűs (A, B, C, D, E, stb.)',lowerGreek:'Görög (alpha, beta, gamma, stb.)',decimal:'Arab számozás (1, 2, 3, stb.)',decimalLeadingZero:'Számozás bevezető nullákkal (01, 02, 03, stb.)'},findAndReplace:{title:'Keresés és csere',find:'Keresés',replace:'Csere',findWhat:'Keresett szöveg:',replaceWith:'Csere erre:',notFoundMsg:'A keresett szöveg nem található.',matchCase:'kis- és nagybetű megkülönböztetése',matchWord:'csak ha ez a teljes szó',matchCyclic:'Ciklikus keresés',replaceAll:'Az összes cseréje',replaceSuccessMsg:'%1 egyezőség cserélve.'},table:{toolbar:'Táblázat',title:'Táblázat tulajdonságai',menu:'Táblázat tulajdonságai',deleteTable:'Táblázat törlése',rows:'Sorok',columns:'Oszlopok',border:'Szegélyméret',widthPx:'képpont',widthPc:'százalék',widthUnit:'Szélesség egység',cellSpace:'Cella térköz',cellPad:'Cella belső margó',caption:'Felirat',summary:'Leírás',headers:'Fejlécek',headersNone:'Nincsenek',headersColumn:'Első oszlop',headersRow:'Első sor',headersBoth:'Mindkettő',invalidRows:'A sorok számának nagyobbnak kell lenni mint 0.',invalidCols:'Az oszlopok számának nagyobbnak kell lenni mint 0.',invalidBorder:'A szegélyméret mezőbe csak számokat írhat.',invalidWidth:'A szélesség mezőbe csak számokat írhat.',invalidHeight:'A magasság mezőbe csak számokat írhat.',invalidCellSpacing:'A cella térköz mezőbe csak számokat írhat.',invalidCellPadding:'A cella belső margó mezőbe csak számokat írhat.',cell:{menu:'Cella',insertBefore:'Beszúrás balra',insertAfter:'Beszúrás jobbra',deleteCell:'Cellák törlése',merge:'Cellák egyesítése',mergeRight:'Cellák egyesítése jobbra',mergeDown:'Cellák egyesítése lefelé',splitHorizontal:'Cellák szétválasztása vízszintesen',splitVertical:'Cellák szétválasztása függőlegesen',title:'Cella tulajdonságai',cellType:'Cella típusa',rowSpan:'Függőleges egyesítés',colSpan:'Vízszintes egyesítés',wordWrap:'Hosszú sorok törése',hAlign:'Vízszintes igazítás',vAlign:'Függőleges igazítás',alignBaseline:'Alapvonalra',bgColor:'Háttér színe',borderColor:'Keret színe',data:'Adat',header:'Fejléc',yes:'Igen',no:'Nem',invalidWidth:'A szélesség mezőbe csak számokat írhat.',invalidHeight:'A magasság mezőbe csak számokat írhat.',invalidRowSpan:'A függőleges egyesítés mezőbe csak számokat írhat.',invalidColSpan:'A vízszintes egyesítés mezőbe csak számokat írhat.',chooseColor:'Válasszon'},row:{menu:'Sor',insertBefore:'Beszúrás fölé',insertAfter:'Beszúrás alá',deleteRow:'Sorok törlése'},column:{menu:'Oszlop',insertBefore:'Beszúrás balra',insertAfter:'Beszúrás jobbra',deleteColumn:'Oszlopok törlése'}},button:{title:'Gomb tulajdonságai',text:'Szöveg (Érték)',type:'Típus',typeBtn:'Gomb',typeSbm:'Küldés',typeRst:'Alaphelyzet'},checkboxAndRadio:{checkboxTitle:'Jelölőnégyzet tulajdonságai',radioTitle:'Választógomb tulajdonságai',value:'Érték',selected:'Kiválasztott'},form:{title:'Űrlap tulajdonságai',menu:'Űrlap tulajdonságai',action:'Adatfeldolgozást végző hivatkozás',method:'Adatküldés módja',encoding:'Kódolás'},select:{title:'Legördülő lista tulajdonságai',selectInfo:'Alaptulajdonságok',opAvail:'Elérhető opciók',value:'Érték',size:'Méret',lines:'sor',chkMulti:'több sor is kiválasztható',opText:'Szöveg',opValue:'Érték',btnAdd:'Hozzáad',btnModify:'Módosít',btnUp:'Fel',btnDown:'Le',btnSetValue:'Legyen az alapértelmezett érték',btnDelete:'Töröl'},textarea:{title:'Szövegterület tulajdonságai',cols:'Karakterek száma egy sorban',rows:'Sorok száma'},textfield:{title:'Szövegmező tulajdonságai',name:'Név',value:'Érték',charWidth:'Megjelenített karakterek száma',maxChars:'Maximális karakterszám',type:'Típus',typeText:'Szöveg',typePass:'Jelszó'},hidden:{title:'Rejtett mező tulajdonságai',name:'Név',value:'Érték'},image:{title:'Kép tulajdonságai',titleButton:'Képgomb tulajdonságai',menu:'Kép tulajdonságai',infoTab:'Alaptulajdonságok',btnUpload:'Küldés a szerverre',upload:'Feltöltés',alt:'Buborék szöveg',lockRatio:'Arány megtartása',unlockRatio:'Arány figyelmen kívül hagyása',resetSize:'Eredeti méret',border:'Keret',hSpace:'Vízsz. táv',vSpace:'Függ. táv',alertUrl:'Töltse ki a kép webcímét',linkTab:'Hivatkozás',button2Img:'A kiválasztott képgombból sima képet szeretne csinálni?',img2Button:'A kiválasztott képből képgombot szeretne csinálni?',urlMissing:'Hiányzik a kép URL-je',validateBorder:'A keret méretének egész számot kell beírni!',validateHSpace:'Vízszintes távolságnak egész számot kell beírni!',validateVSpace:'Függőleges távolságnak egész számot kell beírni!'},flash:{properties:'Flash tulajdonságai',propertiesTab:'Tulajdonságok',title:'Flash tulajdonságai',chkPlay:'Automata lejátszás',chkLoop:'Folyamatosan',chkMenu:'Flash menü engedélyezése',chkFull:'Teljes képernyő engedélyezése',scale:'Méretezés',scaleAll:'Mindent mutat',scaleNoBorder:'Keret nélkül',scaleFit:'Teljes kitöltés',access:'Szkript hozzáférés',accessAlways:'Mindig',accessSameDomain:'Azonos domainről',accessNever:'Soha',alignAbsBottom:'Legaljára',alignAbsMiddle:'Közepére',alignBaseline:'Alapvonalhoz',alignTextTop:'Szöveg tetejére',quality:'Minőség',qualityBest:'Legjobb',qualityHigh:'Jó',qualityAutoHigh:'Automata jó',qualityMedium:'Közepes',qualityAutoLow:'Automata gyenge',qualityLow:'Gyenge',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Ablak mód',flashvars:'Flash változók',bgcolor:'Háttérszín',hSpace:'Vízsz. táv',vSpace:'Függ. táv',validateSrc:'Adja meg a hivatkozás webcímét',validateHSpace:'A vízszintes távolsűág mezőbe csak számokat írhat.',validateVSpace:'A függőleges távolsűág mezőbe csak számokat írhat.'},spellCheck:{toolbar:'Helyesírás-ellenőrzés',title:'Helyesírás ellenörző',notAvailable:'Sajnálom, de a szolgáltatás jelenleg nem elérhető.',errorLoading:'Hiba a szolgáltatás host betöltése közben: %s.',notInDic:'Nincs a szótárban',changeTo:'Módosítás',btnIgnore:'Kihagyja',btnIgnoreAll:'Mindet kihagyja',btnReplace:'Csere',btnReplaceAll:'Összes cseréje',btnUndo:'Visszavonás',noSuggestions:'Nincs javaslat',progress:'Helyesírás-ellenőrzés folyamatban...',noMispell:'Helyesírás-ellenőrzés kész: Nem találtam hibát',noChanges:'Helyesírás-ellenőrzés kész: Nincs változtatott szó',oneChange:'Helyesírás-ellenőrzés kész: Egy szó cserélve',manyChanges:'Helyesírás-ellenőrzés kész: %1 szó cserélve',ieSpellDownload:'A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?'},smiley:{toolbar:'Hangulatjelek',title:'Hangulatjel beszúrása',options:'Hangulatjel opciók'},elementsPath:{eleLabel:'Elem utak',eleTitle:'%1 elem'},numberedlist:'Számozás',bulletedlist:'Felsorolás',indent:'Behúzás növelése',outdent:'Behúzás csökkentése',justify:{left:'Balra',center:'Középre',right:'Jobbra',block:'Sorkizárt'},blockquote:'Idézet blokk',clipboard:{title:'Beillesztés',cutError:'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).',copyError:'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).',pasteMsg:'Másolja be az alábbi mezőbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.',securityMsg:'A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.',pasteArea:'Beszúrás mező'},pastefromword:{confirmCleanup:'Úgy tűnik a beillesztett szöveget Word-ből másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)',toolbar:'Beillesztés Word-ből',title:'Beillesztés Word-ből',error:'Egy belső hiba miatt nem sikerült megtisztítani a szöveget'},pasteText:{button:'Beillesztés formázatlan szövegként',title:'Beillesztés formázatlan szövegként'},templates:{button:'Sablonok',title:'Elérhető sablonok',options:'Sablon opciók',insertOption:'Kicseréli a jelenlegi tartalmat',selectPromptMsg:'Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):',emptyListMsg:'(Nincs sablon megadva)'},showBlocks:'Blokkok megjelenítése',stylesCombo:{label:'Stílus',panelTitle:'Formázási stílusok',panelTitle1:'Blokk stílusok',panelTitle2:'Inline stílusok',panelTitle3:'Objektum stílusok'},format:{label:'Formátum',panelTitle:'Formátum',tag_p:'Normál',tag_pre:'Formázott',tag_address:'Címsor',tag_h1:'Fejléc 1',tag_h2:'Fejléc 2',tag_h3:'Fejléc 3',tag_h4:'Fejléc 4',tag_h5:'Fejléc 5',tag_h6:'Fejléc 6',tag_div:'Bekezdés (DIV)'},div:{title:'DIV tároló létrehozása',toolbar:'DIV tároló létrehozása',cssClassInputLabel:'Stíluslap osztály',styleSelectLabel:'Stílus',IdInputLabel:'Azonosító',languageCodeInputLabel:' Nyelv kódja',inlineStyleInputLabel:'Inline stílus',advisoryTitleInputLabel:'Tipp szöveg',langDirLabel:'Nyelvi irány',langDirLTRLabel:'Balról jobbra (LTR)',langDirRTLLabel:'Jobbról balra (RTL)',edit:'DIV szerkesztése',remove:'DIV eltávolítása'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Betűtípus',voiceLabel:'Betűtípus',panelTitle:'Betűtípus'},fontSize:{label:'Méret',voiceLabel:'Betűméret',panelTitle:'Méret'},colorButton:{textColorTitle:'Betűszín',bgColorTitle:'Háttérszín',panelTitle:'Színek',auto:'Automatikus',more:'További színek...'},colors:{'000':'Fekete',800000:'Bordó','8B4513':'Barna','2F4F4F':'Sötét türkiz','008080':'Türkiz','000080':'Király kék','4B0082':'Indigó kék',696969:'Szürke',B22222:'Tégla vörös',A52A2A:'Vörös',DAA520:'Arany sárga','006400':'Sötét zöld','40E0D0':'Türkiz','0000CD':'Kék',800080:'Lila',808080:'Szürke',F00:'Piros',FF8C00:'Sötét narancs',FFD700:'Arany','008000':'Zöld','0FF':'Türkiz','00F':'Kék',EE82EE:'Rózsaszín',A9A9A9:'Sötét szürke',FFA07A:'Lazac',FFA500:'Narancs',FFFF00:'Citromsárga','00FF00':'Neon zöld',AFEEEE:'Világos türkiz',ADD8E6:'Világos kék',DDA0DD:'Világos lila',D3D3D3:'Világos szürke',FFF0F5:'Lavender Blush',FAEBD7:'Törtfehér',FFFFE0:'Világos sárga',F0FFF0:'Menta',F0FFFF:'Azúr kék',F0F8FF:'Halvány kék',E6E6FA:'Lavender',FFF:'Fehér'},scayt:{title:'Helyesírás ellenőrzés gépelés közben',opera_title:'Az Opera nem támogatja',enable:'SCAYT engedélyezése',disable:'SCAYT letiltása',about:'SCAYT névjegy',toggle:'SCAYT kapcsolása',options:'Beállítások',langs:'Nyelvek',moreSuggestions:'További javaslatok',ignore:'Kihagy',ignoreAll:'Összes kihagyása',addWord:'Szó hozzáadása',emptyDic:'A szótár nevét meg kell adni.',optionsTab:'Beállítások',allCaps:'Nagybetűs szavak kihagyása',ignoreDomainNames:'Domain nevek kihagyása',mixedCase:'Kis és nagybetűt is tartalmazó szavak kihagyása',mixedWithDigits:'Számokat tartalmazó szavak kihagyása',languagesTab:'Nyelvek',dictionariesTab:'Szótár',dic_field_name:'Szótár neve',dic_create:'Létrehozás',dic_restore:'Visszaállítás',dic_delete:'Törlés',dic_rename:'Átnevezés',dic_info:'Kezdetben a felhasználói szótár böngésző sütiben tárolódik. Azonban a sütik maximális mérete korlátozott. Amikora a szótár akkora lesz, hogy már sütiben nem lehet tárolni, akkor a szótárat tárolhatja a szerveren is. Ehhez egy nevet kell megadni a szótárhoz. Amennyiben már van szerveren tárolt szótára, adja meg a nevét és kattintson a visszaállítás gombra.',aboutTab:'Névjegy'},about:{title:'CKEditor névjegy',dlgTitle:'CKEditor névjegy',moreInfo:'Licenszelési információkért kérjük látogassa meg weboldalunkat:',copy:'Copyright © $1. Minden jog fenntartva.'},maximize:'Teljes méret',minimize:'Kis méret',fakeobjects:{anchor:'Horgony',flash:'Flash animáció',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Ismeretlen objektum'},resize:'Húzza az átméretezéshez',colordialog:{title:'Válasszon színt',options:'Szín opciók',highlight:'Nagyítás',selected:'Kiválasztott',clear:'Ürítés'},toolbarCollapse:'Eszköztár összecsukása',toolbarExpand:'Eszköztár szétnyitása',bidi:{ltr:'Szöveg iránya balról jobbra',rtl:'Szöveg iránya jobbról balra'}};
diff --git a/modules_v2/ckeditor/lang/is.js b/modules_v2/ckeditor/lang/is.js new file mode 100644 index 0000000000..37a437218b --- /dev/null +++ b/modules_v2/ckeditor/lang/is.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.is={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Kóði',newPage:'Ný síða',save:'Vista',preview:'Forskoða',cut:'Klippa',copy:'Afrita',paste:'Líma',print:'Prenta',underline:'Undirstrikað',bold:'Feitletrað',italic:'Skáletrað',selectAll:'Velja allt',removeFormat:'Fjarlægja snið',strike:'Yfirstrikað',subscript:'Niðurskrifað',superscript:'Uppskrifað',horizontalrule:'Lóðrétt lína',pagebreak:'Setja inn síðuskil',pagebreakAlt:'Page Break',unlink:'Fjarlægja stiklu',undo:'Afturkalla',redo:'Hætta við afturköllun',common:{browseServer:'Fletta í skjalasafni',url:'Vefslóð',protocol:'Samskiptastaðall',upload:'Senda upp',uploadSubmit:'Hlaða upp',image:'Setja inn mynd',flash:'Flash',form:'Setja inn innsláttarform',checkbox:'Setja inn hökunarreit',radio:'Setja inn valhnapp',textField:'Setja inn textareit',textarea:'Setja inn textasvæði',hiddenField:'Setja inn falið svæði',button:'Setja inn hnapp',select:'Setja inn lista',imageButton:'Setja inn myndahnapp',notSet:'<ekkert valið>',id:'Auðkenni',name:'Nafn',langDir:'Lesstefna',langDirLtr:'Frá vinstri til hægri (LTR)',langDirRtl:'Frá hægri til vinstri (RTL)',langCode:'Tungumálakóði',longDescr:'Nánari lýsing',cssClass:'Stílsniðsflokkur',advisoryTitle:'Titill',cssStyle:'Stíll',ok:'Í lagi',cancel:'Hætta við',close:'Close',preview:'Preview',generalTab:'Almennt',advancedTab:'Tæknilegt',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Breidd',height:'Hæð',align:'Jöfnun',alignLeft:'Vinstri',alignRight:'Hægri',alignCenter:'Miðjað',alignTop:'Efst',alignMiddle:'Miðjuð',alignBottom:'Neðst',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Setja inn merki',title:'Velja tákn',options:'Special Character Options'},link:{toolbar:'Stofna/breyta stiklu',other:'<annar>',menu:'Breyta stiklu',title:'Stikla',info:'Almennt',target:'Mark',upload:'Senda upp',advanced:'Tæknilegt',type:'Stikluflokkur',toUrl:'URL',toAnchor:'Bókamerki á þessari síðu',toEmail:'Netfang',targetFrame:'<rammi>',targetPopup:'<sprettigluggi>',targetFrameName:'Nafn markglugga',targetPopupName:'Nafn sprettiglugga',popupFeatures:'Eigindi sprettiglugga',popupResizable:'Resizable',popupStatusBar:'Stöðustika',popupLocationBar:'Fanglína',popupToolbar:'Verkfærastika',popupMenuBar:'Vallína',popupFullScreen:'Heilskjár (IE)',popupScrollBars:'Skrunstikur',popupDependent:'Háð venslum (Netscape)',popupLeft:'Fjarlægð frá vinstri',popupTop:'Fjarlægð frá efri brún',id:'Id',langDir:'Lesstefna',langDirLTR:'Frá vinstri til hægri (LTR)',langDirRTL:'Frá hægri til vinstri (RTL)',acccessKey:'Skammvalshnappur',name:'Nafn',langCode:'Lesstefna',tabIndex:'Raðnúmer innsláttarreits',advisoryTitle:'Titill',advisoryContentType:'Tegund innihalds',cssClasses:'Stílsniðsflokkur',charset:'Táknróf',styles:'Stíll',selectAnchor:'Veldu akkeri',anchorName:'Eftir akkerisnafni',anchorId:'Eftir auðkenni einingar',emailAddress:'Netfang',emailSubject:'Efni',emailBody:'Meginmál',noAnchors:'<Engin bókamerki á skrá>',noUrl:'Sláðu inn veffang stiklunnar!',noEmail:'Sláðu inn netfang!'},anchor:{toolbar:'Stofna/breyta kaflamerki',menu:'Eigindi kaflamerkis',title:'Eigindi kaflamerkis',name:'Nafn bókamerkis',errorName:'Sláðu inn nafn bókamerkis!'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Finna og skipta',find:'Leita',replace:'Skipta út',findWhat:'Leita að:',replaceWith:'Skipta út fyrir:',notFoundMsg:'Leitartexti fannst ekki!',matchCase:'Gera greinarmun á¡ há¡- og lágstöfum',matchWord:'Aðeins heil orð',matchCyclic:'Match cyclic',replaceAll:'Skipta út allsstaðar',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tafla',title:'Eigindi töflu',menu:'Eigindi töflu',deleteTable:'Fella töflu',rows:'Raðir',columns:'Dálkar',border:'Breidd ramma',widthPx:'myndeindir',widthPc:'prósent',widthUnit:'width unit',cellSpace:'Bil milli reita',cellPad:'Reitaspássía',caption:'Titill',summary:'Áfram',headers:'Fyrirsagnir',headersNone:'Engar',headersColumn:'Fyrsti dálkur',headersRow:'Fyrsta röð',headersBoth:'Hvort tveggja',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Reitur',insertBefore:'Skjóta inn reiti fyrir aftan',insertAfter:'Skjóta inn reiti fyrir framan',deleteCell:'Fella reit',merge:'Sameina reiti',mergeRight:'Sameina til hægri',mergeDown:'Sameina niður á við',splitHorizontal:'Kljúfa reit lárétt',splitVertical:'Kljúfa reit lóðrétt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Röð',insertBefore:'Skjóta inn röð fyrir ofan',insertAfter:'Skjóta inn röð fyrir neðan',deleteRow:'Eyða röð'},column:{menu:'Dálkur',insertBefore:'Skjóta inn dálki vinstra megin',insertAfter:'Skjóta inn dálki hægra megin',deleteColumn:'Fella dálk'}},button:{title:'Eigindi hnapps',text:'Texti',type:'Gerð',typeBtn:'Hnappur',typeSbm:'Staðfesta',typeRst:'Hreinsa'},checkboxAndRadio:{checkboxTitle:'Eigindi markreits',radioTitle:'Eigindi valhnapps',value:'Gildi',selected:'Valið'},form:{title:'Eigindi innsláttarforms',menu:'Eigindi innsláttarforms',action:'Aðgerð',method:'Aðferð',encoding:'Encoding'},select:{title:'Eigindi lista',selectInfo:'Upplýsingar',opAvail:'Kostir',value:'Gildi',size:'Stærð',lines:'línur',chkMulti:'Leyfa fleiri kosti',opText:'Texti',opValue:'Gildi',btnAdd:'Bæta við',btnModify:'Breyta',btnUp:'Upp',btnDown:'Niður',btnSetValue:'Merkja sem valið',btnDelete:'Eyða'},textarea:{title:'Eigindi textasvæðis',cols:'Dálkar',rows:'Línur'},textfield:{title:'Eigindi textareits',name:'Nafn',value:'Gildi',charWidth:'Breidd (leturtákn)',maxChars:'Hámarksfjöldi leturtákna',type:'Gerð',typeText:'Texti',typePass:'Lykilorð'},hidden:{title:'Eigindi falins svæðis',name:'Nafn',value:'Gildi'},image:{title:'Eigindi myndar',titleButton:'Eigindi myndahnapps',menu:'Eigindi myndar',infoTab:'Almennt',btnUpload:'Hlaða upp',upload:'Hlaða upp',alt:'Baklægur texti',lockRatio:'Festa stærðarhlutfall',unlockRatio:'Unlock Ratio',resetSize:'Reikna stærð',border:'Rammi',hSpace:'Vinstri bil',vSpace:'Hægri bil',alertUrl:'Sláðu inn slóðina að myndinni',linkTab:'Stikla',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Eigindi Flash',propertiesTab:'Properties',title:'Eigindi Flash',chkPlay:'Sjálfvirk spilun',chkLoop:'Endurtekning',chkMenu:'Sýna Flash-valmynd',chkFull:'Allow Fullscreen',scale:'Skali',scaleAll:'Sýna allt',scaleNoBorder:'Án ramma',scaleFit:'Fella skala að stærð',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs neðst',alignAbsMiddle:'Abs miðjuð',alignBaseline:'Grunnlína',alignTextTop:'Efri brún texta',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Bakgrunnslitur',hSpace:'Vinstri bil',vSpace:'Hægri bil',validateSrc:'Sláðu inn veffang stiklunnar!',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Villuleit',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ekki í orðabókinni',changeTo:'Tillaga',btnIgnore:'Hunsa',btnIgnoreAll:'Hunsa allt',btnReplace:'Skipta',btnReplaceAll:'Skipta öllu',btnUndo:'Til baka',noSuggestions:'- engar tillögur -',progress:'Villuleit í gangi...',noMispell:'Villuleit lokið: Engin villa fannst',noChanges:'Villuleit lokið: Engu orði breytt',oneChange:'Villuleit lokið: Einu orði breytt',manyChanges:'Villuleit lokið: %1 orðum breytt',ieSpellDownload:'Villuleit ekki sett upp.<br>Viltu setja hana upp?'},smiley:{toolbar:'Svipur',title:'Velja svip',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Númeraður listi',bulletedlist:'Punktalisti',indent:'Minnka inndrátt',outdent:'Auka inndrátt',justify:{left:'Vinstrijöfnun',center:'Miðja texta',right:'Hægrijöfnun',block:'Jafna báðum megin'},blockquote:'Inndráttur',clipboard:{title:'Líma',cutError:'Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).',copyError:'Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).',pasteMsg:'Límdu í svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.',securityMsg:'Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Líma úr Word',title:'Líma úr Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Líma sem ósniðinn texta',title:'Líma sem ósniðinn texta'},templates:{button:'Sniðmát',title:'Innihaldssniðmát',options:'Template Options',insertOption:'Skipta út raunverulegu innihaldi',selectPromptMsg:'Veldu sniðmát til að opna í ritlinum.<br>(Núverandi innihald víkur fyrir því!):',emptyListMsg:'(Ekkert sniðmát er skilgreint!)'},showBlocks:'Sýna blokkir',stylesCombo:{label:'Stílflokkur',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Stílsnið',panelTitle:'Stílsnið',tag_p:'Venjulegt letur',tag_pre:'Forsniðið',tag_address:'Vistfang',tag_h1:'Fyrirsögn 1',tag_h2:'Fyrirsögn 2',tag_h3:'Fyrirsögn 3',tag_h4:'Fyrirsögn 4',tag_h5:'Fyrirsögn 5',tag_h6:'Fyrirsögn 6',tag_div:'Venjulegt (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Leturgerð ',voiceLabel:'Font',panelTitle:'Leturgerð '},fontSize:{label:'Leturstærð ',voiceLabel:'Font Size',panelTitle:'Leturstærð '},colorButton:{textColorTitle:'Litur texta',bgColorTitle:'Bakgrunnslitur',panelTitle:'Colors',auto:'Sjálfval',more:'Fleiri liti...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/it.js b/modules_v2/ckeditor/lang/it.js new file mode 100644 index 0000000000..61eb0b9d85 --- /dev/null +++ b/modules_v2/ckeditor/lang/it.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.it={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Codice Sorgente',newPage:'Nuova pagina vuota',save:'Salva',preview:'Anteprima',cut:'Taglia',copy:'Copia',paste:'Incolla',print:'Stampa',underline:'Sottolineato',bold:'Grassetto',italic:'Corsivo',selectAll:'Seleziona tutto',removeFormat:'Elimina formattazione',strike:'Barrato',subscript:'Pedice',superscript:'Apice',horizontalrule:'Inserisci riga orizzontale',pagebreak:'Inserisci interruzione di pagina',pagebreakAlt:'Page Break',unlink:'Elimina collegamento',undo:'Annulla',redo:'Ripristina',common:{browseServer:'Cerca sul server',url:'URL',protocol:'Protocollo',upload:'Carica',uploadSubmit:'Invia al server',image:'Immagine',flash:'Oggetto Flash',form:'Modulo',checkbox:'Checkbox',radio:'Radio Button',textField:'Campo di testo',textarea:'Area di testo',hiddenField:'Campo nascosto',button:'Bottone',select:'Menu di selezione',imageButton:'Bottone immagine',notSet:'<non impostato>',id:'Id',name:'Nome',langDir:'Direzione scrittura',langDirLtr:'Da Sinistra a Destra (LTR)',langDirRtl:'Da Destra a Sinistra (RTL)',langCode:'Codice Lingua',longDescr:'URL descrizione estesa',cssClass:'Nome classe CSS',advisoryTitle:'Titolo',cssStyle:'Stile',ok:'OK',cancel:'Annulla',close:'Close',preview:'Preview',generalTab:'Generale',advancedTab:'Avanzate',validateNumberFailed:'Il valore inserito non è un numero.',confirmNewPage:'Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?',confirmCancel:'Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Larghezza',height:'Altezza',align:'Allineamento',alignLeft:'Sinistra',alignRight:'Destra',alignCenter:'Centrato',alignTop:'In Alto',alignMiddle:'Centrato',alignBottom:'In Basso',invalidHeight:"L'altezza dev'essere un numero",invalidWidth:"La Larghezza dev'essere un numero",unavailable:'%1<span class="cke_accessibility">, non disponibile</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Inserisci carattere speciale',title:'Seleziona carattere speciale',options:'Special Character Options'},link:{toolbar:'Inserisci/Modifica collegamento',other:'<altro>',menu:'Modifica collegamento',title:'Collegamento',info:'Informazioni collegamento',target:'Destinazione',upload:'Carica',advanced:'Avanzate',type:'Tipo di Collegamento',toUrl:'URL',toAnchor:'Ancora nella pagina',toEmail:'E-Mail',targetFrame:'<riquadro>',targetPopup:'<finestra popup>',targetFrameName:'Nome del riquadro di destinazione',targetPopupName:'Nome finestra popup',popupFeatures:'Caratteristiche finestra popup',popupResizable:'Ridimensionabile',popupStatusBar:'Barra di stato',popupLocationBar:'Barra degli indirizzi',popupToolbar:'Barra degli strumenti',popupMenuBar:'Barra del menu',popupFullScreen:'A tutto schermo (IE)',popupScrollBars:'Barre di scorrimento',popupDependent:'Dipendente (Netscape)',popupLeft:'Posizione da sinistra',popupTop:"Posizione dall'alto",id:'Id',langDir:'Direzione scrittura',langDirLTR:'Da Sinistra a Destra (LTR)',langDirRTL:'Da Destra a Sinistra (RTL)',acccessKey:'Scorciatoia<br />da tastiera',name:'Nome',langCode:'Direzione scrittura',tabIndex:'Ordine di tabulazione',advisoryTitle:'Titolo',advisoryContentType:'Tipo della risorsa collegata',cssClasses:'Nome classe CSS',charset:'Set di caretteri della risorsa collegata',styles:'Stile',selectAnchor:'Scegli Ancora',anchorName:'Per Nome',anchorId:'Per id elemento',emailAddress:'Indirizzo E-Mail',emailSubject:'Oggetto del messaggio',emailBody:'Corpo del messaggio',noAnchors:'(Nessuna ancora disponibile nel documento)',noUrl:"Devi inserire l'URL del collegamento",noEmail:"Devi inserire un'indirizzo e-mail"},anchor:{toolbar:'Inserisci/Modifica Ancora',menu:'Proprietà ancora',title:'Proprietà ancora',name:'Nome ancora',errorName:"Inserici il nome dell'ancora"},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Cerca e Sostituisci',find:'Trova',replace:'Sostituisci',findWhat:'Trova:',replaceWith:'Sostituisci con:',notFoundMsg:"L'elemento cercato non è stato trovato.",matchCase:'Maiuscole/minuscole',matchWord:'Solo parole intere',matchCyclic:'Ricerca ciclica',replaceAll:'Sostituisci tutto',replaceSuccessMsg:'%1 occorrenza(e) sostituite.'},table:{toolbar:'Tabella',title:'Proprietà tabella',menu:'Proprietà tabella',deleteTable:'Cancella Tabella',rows:'Righe',columns:'Colonne',border:'Dimensione bordo',widthPx:'pixel',widthPc:'percento',widthUnit:'width unit',cellSpace:'Spaziatura celle',cellPad:'Padding celle',caption:'Intestazione',summary:'Indice',headers:'Intestazione',headersNone:'Nessuna',headersColumn:'Prima Colonna',headersRow:'Prima Riga',headersBoth:'Entrambe',invalidRows:"Il numero di righe dev'essere un numero maggiore di 0.",invalidCols:"Il numero di colonne dev'essere un numero maggiore di 0.",invalidBorder:"La dimensione del bordo dev'essere un numero.",invalidWidth:"La larghezza della tabella dev'essere un numero.",invalidHeight:"L'altezza della tabella dev'essere un numero.",invalidCellSpacing:"La spaziatura tra le celle dev'essere un numero.",invalidCellPadding:"Il pagging delle celle dev'essere un numero",cell:{menu:'Cella',insertBefore:'Inserisci Cella Prima',insertAfter:'Inserisci Cella Dopo',deleteCell:'Elimina celle',merge:'Unisce celle',mergeRight:'Unisci a Destra',mergeDown:'Unisci in Basso',splitHorizontal:'Dividi Cella Orizzontalmente',splitVertical:'Dividi Cella Verticalmente',title:'Proprietà della cella',cellType:'Tipo di cella',rowSpan:'Su più righe',colSpan:'Su più colonne',wordWrap:'Ritorno a capo',hAlign:'Allineamento orizzontale',vAlign:'Allineamento verticale',alignBaseline:'Linea Base',bgColor:'Colore di Sfondo',borderColor:'Colore del Bordo',data:'Dati',header:'Intestazione',yes:'Si',no:'No',invalidWidth:"La larghezza della cella dev'essere un numero.",invalidHeight:"L'altezza della cella dev'essere un numero.",invalidRowSpan:"Il numero di righe dev'essere un numero intero.",invalidColSpan:"Il numero di colonne dev'essere un numero intero.",chooseColor:'Choose'},row:{menu:'Riga',insertBefore:'Inserisci Riga Prima',insertAfter:'Inserisci Riga Dopo',deleteRow:'Elimina righe'},column:{menu:'Colonna',insertBefore:'Inserisci Colonna Prima',insertAfter:'Inserisci Colonna Dopo',deleteColumn:'Elimina colonne'}},button:{title:'Proprietà bottone',text:'Testo (Value)',type:'Tipo',typeBtn:'Bottone',typeSbm:'Invio',typeRst:'Annulla'},checkboxAndRadio:{checkboxTitle:'Proprietà checkbox',radioTitle:'Proprietà radio button',value:'Valore',selected:'Selezionato'},form:{title:'Proprietà modulo',menu:'Proprietà modulo',action:'Azione',method:'Metodo',encoding:'Codifica'},select:{title:'Proprietà menu di selezione',selectInfo:'Info',opAvail:'Opzioni disponibili',value:'Valore',size:'Dimensione',lines:'righe',chkMulti:'Permetti selezione multipla',opText:'Testo',opValue:'Valore',btnAdd:'Aggiungi',btnModify:'Modifica',btnUp:'Su',btnDown:'Gi',btnSetValue:'Imposta come predefinito',btnDelete:'Rimuovi'},textarea:{title:'Proprietà area di testo',cols:'Colonne',rows:'Righe'},textfield:{title:'Proprietà campo di testo',name:'Nome',value:'Valore',charWidth:'Larghezza',maxChars:'Numero massimo di caratteri',type:'Tipo',typeText:'Testo',typePass:'Password'},hidden:{title:'Proprietà campo nascosto',name:'Nome',value:'Valore'},image:{title:'Proprietà immagine',titleButton:'Proprietà bottone immagine',menu:'Proprietà immagine',infoTab:'Informazioni immagine',btnUpload:'Invia al server',upload:'Carica',alt:'Testo alternativo',lockRatio:'Blocca rapporto',unlockRatio:'Unlock Ratio',resetSize:'Reimposta dimensione',border:'Bordo',hSpace:'HSpace',vSpace:'VSpace',alertUrl:"Devi inserire l'URL per l'immagine",linkTab:'Collegamento',button2Img:"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?",img2Button:"Vuoi trasferomare l'immagine selezionata in un bottone immagine?",urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Proprietà Oggetto Flash',propertiesTab:'Proprietà',title:'Proprietà Oggetto Flash',chkPlay:'Avvio Automatico',chkLoop:'Riavvio automatico',chkMenu:'Abilita Menu di Flash',chkFull:'Permetti la modalità tutto schermo',scale:'Ridimensiona',scaleAll:'Mostra Tutto',scaleNoBorder:'Senza Bordo',scaleFit:'Dimensione Esatta',access:'Accesso Script',accessAlways:'Sempre',accessSameDomain:'Solo stesso dominio',accessNever:'Mai',alignAbsBottom:'In basso assoluto',alignAbsMiddle:'Centrato assoluto',alignBaseline:'Linea base',alignTextTop:'In alto al testo',quality:'Qualità',qualityBest:'Massima',qualityHigh:'Alta',qualityAutoHigh:'Alta Automatica',qualityMedium:'Intermedia',qualityAutoLow:'Bassa Automatica',qualityLow:'Bassa',windowModeWindow:'Finestra',windowModeOpaque:'Opaca',windowModeTransparent:'Trasparente',windowMode:'Modalità finestra',flashvars:'Variabili per Flash',bgcolor:'Colore sfondo',hSpace:'HSpace',vSpace:'VSpace',validateSrc:"Devi inserire l'URL del collegamento",validateHSpace:"L'HSpace dev'essere un numero.",validateVSpace:"Il VSpace dev'essere un numero."},spellCheck:{toolbar:'Correttore ortografico',title:'Controllo ortografico',notAvailable:'Il servizio non è momentaneamente disponibile.',errorLoading:"Errore nel caricamento dell'host col servizio applicativo: %s.",notInDic:'Non nel dizionario',changeTo:'Cambia in',btnIgnore:'Ignora',btnIgnoreAll:'Ignora tutto',btnReplace:'Cambia',btnReplaceAll:'Cambia tutto',btnUndo:'Annulla',noSuggestions:'- Nessun suggerimento -',progress:'Controllo ortografico in corso',noMispell:'Controllo ortografico completato: nessun errore trovato',noChanges:'Controllo ortografico completato: nessuna parola cambiata',oneChange:'Controllo ortografico completato: 1 parola cambiata',manyChanges:'Controllo ortografico completato: %1 parole cambiate',ieSpellDownload:'Contollo ortografico non installato. Lo vuoi scaricare ora?'},smiley:{toolbar:'Emoticon',title:'Inserisci emoticon',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 elemento'},numberedlist:'Elenco numerato',bulletedlist:'Elenco puntato',indent:'Aumenta rientro',outdent:'Riduci rientro',justify:{left:'Allinea a sinistra',center:'Centra',right:'Allinea a destra',block:'Giustifica'},blockquote:'Citazione',clipboard:{title:'Incolla',cutError:'Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).',copyError:'Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).',pasteMsg:"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.",securityMsg:"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.",pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?',toolbar:'Incolla da Word',title:'Incolla da Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Incolla come testo semplice',title:'Incolla come testo semplice'},templates:{button:'Modelli',title:'Contenuto dei modelli',options:'Template Options',insertOption:'Cancella il contenuto corrente',selectPromptMsg:"Seleziona il modello da aprire nell'editor<br />(il contenuto attuale verrà eliminato):",emptyListMsg:'(Nessun modello definito)'},showBlocks:'Visualizza Blocchi',stylesCombo:{label:'Stile',panelTitle:'Formatting Styles',panelTitle1:'Stili per blocchi',panelTitle2:'Stili in linea',panelTitle3:'Stili per oggetti'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normale',tag_pre:'Formattato',tag_address:'Indirizzo',tag_h1:'Titolo 1',tag_h2:'Titolo 2',tag_h3:'Titolo 3',tag_h4:'Titolo 4',tag_h5:'Titolo 5',tag_h6:'Titolo 6',tag_div:'Paragrafo (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'Dimensione',voiceLabel:'Dimensione Font',panelTitle:'Dimensione'},colorButton:{textColorTitle:'Colore testo',bgColorTitle:'Colore sfondo',panelTitle:'Colors',auto:'Automatico',more:'Altri colori...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Controllo Ortografico Mentre Scrivi',opera_title:'Not supported by Opera',enable:'Abilita COMS',disable:'Disabilita COMS',about:'About COMS',toggle:'Inverti abilitazione SCOMS',options:'Opzioni',langs:'Lingue',moreSuggestions:'Altri suggerimenti',ignore:'Ignora',ignoreAll:'Ignora tutti',addWord:'Aggiungi Parola',emptyDic:'Il nome del dizionario non può essere vuoto.',optionsTab:'Opzioni',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Lingue',dictionariesTab:'Dizionari',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'Per le informazioni sulla licenza si prega di visitare il nostro sito:',copy:'Copyright © $1. Tutti i diritti riservati.'},maximize:'Massimizza',minimize:'Minimize',fakeobjects:{anchor:'Ancora',flash:'Animazione Flash',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Oggetto sconosciuto'},resize:'Trascina per ridimensionare',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/ja.js b/modules_v2/ckeditor/lang/ja.js new file mode 100644 index 0000000000..9dcf383abe --- /dev/null +++ b/modules_v2/ckeditor/lang/ja.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.ja={dir:'ltr',editorTitle:'リッチテキストエディタ, %1, ヘルプは ALT 0 を押してください',toolbar:'ツールバー',editor:'リッチテキストエディタ',source:'ソース',newPage:'新しいページ',save:'保存',preview:'プレビュー',cut:'切り取り',copy:'コピー',paste:'貼り付け',print:'印刷',underline:'下線',bold:'太字',italic:'斜体',selectAll:'すべて選択',removeFormat:'フォーマット削除',strike:'打ち消し線',subscript:'添え字',superscript:'上付き文字',horizontalrule:'横罫線',pagebreak:'改ページ挿入',pagebreakAlt:'Page Break',unlink:'リンク削除',undo:'元に戻す',redo:'やり直し',common:{browseServer:'サーバーブラウザー',url:'URL',protocol:'プロトコル',upload:'アップロード',uploadSubmit:'サーバーに送信',image:'イメージ',flash:'Flash',form:'フォーム',checkbox:'チェックボックス',radio:'ラジオボタン',textField:'1行テキスト',textarea:'テキストエリア',hiddenField:'不可視フィールド',button:'ボタン',select:'選択フィールド',imageButton:'画像ボタン',notSet:'<なし>',id:'Id',name:'Name属性',langDir:'文字表記の方向',langDirLtr:'左から右 (LTR)',langDirRtl:'右から左 (RTL)',langCode:'言語コード',longDescr:'longdesc属性(長文説明)',cssClass:'スタイルシートクラス',advisoryTitle:'Title属性',cssStyle:'スタイルシート',ok:'OK',cancel:'キャンセル',close:'閉じる',preview:'プレビュー',generalTab:'全般',advancedTab:'高度な設定',validateNumberFailed:'値が数ではありません',confirmNewPage:'変更内容を保存せず、 新しいページを開いてもよろしいでしょうか?',confirmCancel:'オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか?',options:'オプション',target:'ターゲット',targetNew:'新しいウィンドウ (_空白)',targetTop:'最上部ウィンドウ (_トップ)',targetSelf:'同じウィンドウ (_同一)',targetParent:'親ウィンドウ (_親)',langDirLTR:'左から右 (LTR)',langDirRTL:'右から左 (RTL)',styles:'スタイル',cssClasses:'スタイルシートクラス',width:'幅',height:'高さ',align:'行揃え',alignLeft:'左',alignRight:'右',alignCenter:'中央',alignTop:'上',alignMiddle:'中央',alignBottom:'下',invalidHeight:'高さは数値で入力してください。',invalidWidth:'幅は数値で入力してください。',unavailable:'%1<span class="cke_accessibility">, 利用不可能</span>'},contextmenu:{options:'コンテキストメニューオプション'},specialChar:{toolbar:'特殊文字挿入',title:'特殊文字選択',options:'特殊文字オプション'},link:{toolbar:'リンク挿入/編集',other:'<その他の>',menu:'リンク編集',title:'ハイパーリンク',info:'ハイパーリンク 情報',target:'ターゲット',upload:'アップロード',advanced:'高度な設定',type:'リンクタイプ',toUrl:'URL',toAnchor:'このページのアンカー',toEmail:'E-Mail',targetFrame:'<フレーム>',targetPopup:'<ポップアップウィンドウ>',targetFrameName:'目的のフレーム名',targetPopupName:'ポップアップウィンドウ名',popupFeatures:'ポップアップウィンドウ特徴',popupResizable:'サイズ可変',popupStatusBar:'ステータスバー',popupLocationBar:'ロケーションバー',popupToolbar:'ツールバー',popupMenuBar:'メニューバー',popupFullScreen:'全画面モード(IE)',popupScrollBars:'スクロールバー',popupDependent:'開いたウィンドウに連動して閉じる (Netscape)',popupLeft:'左端からの座標で指定',popupTop:'上端からの座標で指定',id:'Id',langDir:'文字表記の方向',langDirLTR:'左から右 (LTR)',langDirRTL:'右から左 (RTL)',acccessKey:'アクセスキー',name:'Name属性',langCode:'言語コード',tabIndex:'タブインデックス',advisoryTitle:'Title属性',advisoryContentType:'Content Type属性',cssClasses:'スタイルシートクラス',charset:'リンクcharset属性',styles:'スタイルシート',selectAnchor:'アンカーを選択',anchorName:'アンカー名',anchorId:'エレメントID',emailAddress:'E-Mail アドレス',emailSubject:'件名',emailBody:'本文',noAnchors:'(ドキュメントにおいて利用可能なアンカーはありません。)',noUrl:'リンクURLを入力してください。',noEmail:'メールアドレスを入力してください。'},anchor:{toolbar:'アンカー挿入/編集',menu:'アンカー プロパティ',title:'アンカー プロパティ',name:'アンカー名',errorName:'アンカー名を必ず入力してください。'},list:{numberedTitle:'段落番号 プロパティ',bulletedTitle:'箇条書き プロパティ',type:'タイプ',start:'開始',validateStartNumber:'リスト開始番号は数値で入力してください。',circle:'白丸',disc:'黒丸',square:'四角',none:'なし',notset:'<なし>',armenian:'アルメニア数字',georgian:'グルジア数字 (an, ban, gan, etc.)',lowerRoman:'小文字ローマ数字 (i, ii, iii, iv, v, etc.)',upperRoman:'大文字ローマ数字 (I, II, III, IV, V, etc.)',lowerAlpha:'小文字アルファベット (a, b, c, d, e, etc.)',upperAlpha:'大文字アルファベット (A, B, C, D, E, etc.)',lowerGreek:'小文字ギリシャ文字 (alpha, beta, gamma, etc.)',decimal:'数字 (1, 2, 3, etc.)',decimalLeadingZero:'上位桁に0をつけた数字 (01, 02, 03, etc.)'},findAndReplace:{title:'検索して置換',find:'検索',replace:'置き換え',findWhat:'検索する文字列:',replaceWith:'置換えする文字列:',notFoundMsg:'指定された文字列は見つかりませんでした。',matchCase:'大文字と小文字を区別する',matchWord:'単語単位で探す',matchCyclic:'一周する',replaceAll:'すべて置換え',replaceSuccessMsg:'%1 個置換しました。'},table:{toolbar:'テーブル',title:'テーブル プロパティ',menu:'テーブル プロパティ',deleteTable:'テーブル削除',rows:'行',columns:'列',border:'ボーダーサイズ',widthPx:'ピクセル',widthPc:'パーセント',widthUnit:'ユニット',cellSpace:'セル内余白',cellPad:'セル内間隔',caption:'キャプション',summary:'テーブルの概要',headers:'テーブルヘッダ(th)',headersNone:'なし',headersColumn:'初めの列のみ',headersRow:'初めの行のみ',headersBoth:'両方',invalidRows:'行は0より大きな数値で入力してください。',invalidCols:'列は0より大きな数値で入力してください。',invalidBorder:'ボーダーサイズは数値で入力してください。',invalidWidth:'幅は数値で入力してください。',invalidHeight:'高さは数値で入力してください。',invalidCellSpacing:'セル内余白は数値で入力してください。',invalidCellPadding:'セル内間隔は数値で入力してください。',cell:{menu:'セル',insertBefore:'セルの前に挿入',insertAfter:'セルの後に挿入',deleteCell:'セル削除',merge:'セル結合',mergeRight:'右に結合',mergeDown:'下に結合',splitHorizontal:'セルを水平方向分割',splitVertical:'セルを垂直方向に分割',title:'セルプロパティ',cellType:'セルタイプ',rowSpan:'縦幅(行数)',colSpan:'横幅(列数)',wordWrap:'折り返し',hAlign:'セル横の整列',vAlign:'セル縦の整列',alignBaseline:'ベースライン',bgColor:'背景色',borderColor:'ボーダーカラー',data:'テーブルデータ(td)',header:'テーブルヘッダ(th)',yes:'Yes',no:'No',invalidWidth:'セル幅は数値で入力してください。',invalidHeight:'セル高さは数値で入力してください。',invalidRowSpan:'縦幅(行数)は数値で入力してください。',invalidColSpan:'横幅(列数)は数値で入力してください。',chooseColor:'色の選択'},row:{menu:'行',insertBefore:'行の前に挿入',insertAfter:'行の後に挿入',deleteRow:'行削除'},column:{menu:'カラム',insertBefore:'カラムの前に挿入',insertAfter:'カラムの後に挿入',deleteColumn:'列削除'}},button:{title:'ボタン プロパティ',text:'テキスト (値)',type:'タイプ',typeBtn:'ボタン',typeSbm:'送信',typeRst:'リセット'},checkboxAndRadio:{checkboxTitle:'チェックボックス プロパティ',radioTitle:'ラジオボタン プロパティ',value:'値',selected:'選択済み'},form:{title:'フォーム プロパティ',menu:'フォーム プロパティ',action:'アクション',method:'メソッド',encoding:'エンコーディング'},select:{title:'選択フィールド プロパティ',selectInfo:'情報',opAvail:'利用可能なオプション',value:'選択項目値',size:'サイズ',lines:'行',chkMulti:'複数項目選択を許可',opText:'選択項目名',opValue:'値',btnAdd:'追加',btnModify:'編集',btnUp:'上へ',btnDown:'下へ',btnSetValue:'選択した値を設定',btnDelete:'削除'},textarea:{title:'テキストエリア プロパティ',cols:'列',rows:'行'},textfield:{title:'1行テキスト プロパティ',name:'名前',value:'値',charWidth:'サイズ',maxChars:'最大長',type:'タイプ',typeText:'テキスト',typePass:'パスワード入力'},hidden:{title:'不可視フィールド プロパティ',name:'名前',value:'値'},image:{title:'イメージ プロパティ',titleButton:'画像ボタン プロパティ',menu:'イメージ プロパティ',infoTab:'イメージ 情報',btnUpload:'サーバーに送信',upload:'アップロード',alt:'代替テキスト',lockRatio:'ロック比率',unlockRatio:'アンロック比率',resetSize:'サイズリセット',border:'ボーダー',hSpace:'横間隔',vSpace:'縦間隔',alertUrl:'イメージのURLを入力してください。',linkTab:'リンク',button2Img:'選択したボタンを画像に置き換えますか?',img2Button:'選択した画像をボタンに置き換えますか?',urlMissing:'イメージのURLを入力してください。',validateBorder:'ボーダーは数値で入力してください。',validateHSpace:'横間隔は数値で入力してください。',validateVSpace:'縦間隔は数値で入力してください。'},flash:{properties:'Flash プロパティ',propertiesTab:'プロパティ',title:'Flash プロパティ',chkPlay:'再生',chkLoop:'ループ再生',chkMenu:'Flashメニュー可能',chkFull:'フルスクリーン許可',scale:'拡大縮小設定',scaleAll:'すべて表示',scaleNoBorder:'外が見えない様に拡大',scaleFit:'上下左右にフィット',access:'スプリクトアクセス(AllowScriptAccess)',accessAlways:'すべての場合に通信可能(Always)',accessSameDomain:'同一ドメインのみに通信可能(Same domain)',accessNever:'すべての場合に通信不可能(Never)',alignAbsBottom:'下部(絶対的)',alignAbsMiddle:'中央(絶対的)',alignBaseline:'ベースライン',alignTextTop:'テキスト上部',quality:'画質',qualityBest:'品質優先',qualityHigh:'高',qualityAutoHigh:'自動/高',qualityMedium:'中',qualityAutoLow:'自動/低',qualityLow:'低',windowModeWindow:'標準',windowModeOpaque:'背景を不透明設定',windowModeTransparent:'背景を透過設定',windowMode:'ウィンドウモード',flashvars:'フラッシュに渡す変数(FlashVars)',bgcolor:'背景色',hSpace:'横間隔',vSpace:'縦間隔',validateSrc:'リンクURLを入力してください。',validateHSpace:'横間隔は数値で入力してください。',validateVSpace:'縦間隔は数値で入力してください。'},spellCheck:{toolbar:'スペルチェック',title:'スペルチェック',notAvailable:'申し訳ありません、現在サービスを利用することができません',errorLoading:'アプリケーションサービスホスト読込みエラー: %s.',notInDic:'辞書にありません',changeTo:'変更',btnIgnore:'無視',btnIgnoreAll:'すべて無視',btnReplace:'置換',btnReplaceAll:'すべて置換',btnUndo:'やり直し',noSuggestions:'- 該当なし -',progress:'スペルチェック処理中...',noMispell:'スペルチェック完了: スペルの誤りはありませんでした',noChanges:'スペルチェック完了: 語句は変更されませんでした',oneChange:'スペルチェック完了: 1語句変更されました',manyChanges:'スペルチェック完了: %1 語句変更されました',ieSpellDownload:'スペルチェッカーがインストールされていません。今すぐダウンロードしますか?'},smiley:{toolbar:'絵文字',title:'顔文字挿入',options:'絵文字オプション'},elementsPath:{eleLabel:'エレメントパス',eleTitle:'%1 エレメント'},numberedlist:'段落番号',bulletedlist:'箇条書き',indent:'インデント',outdent:'インデント解除',justify:{left:'左揃え',center:'中央揃え',right:'右揃え',block:'両端揃え'},blockquote:'ブロック引用',clipboard:{title:'貼り付け',cutError:'ブラウザーのセキュリティ設定によりエディタの切り取り操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。',copyError:'ブラウザーのセキュリティ設定によりエディタのコピー操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。',pasteMsg:'キーボード(<STRONG>Ctrl/Cmd+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。',securityMsg:'ブラウザのセキュリティ設定により、エディタはクリップボード・データに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。',pasteArea:'貼り付け場所'},pastefromword:{confirmCleanup:'貼り付けを行うテキストは、ワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?',toolbar:'ワード文章から貼り付け',title:'ワード文章から貼り付け',error:'内部エラーにより貼り付けたデータがクリアできませんでした'},pasteText:{button:'プレーンテキスト貼り付け',title:'プレーンテキスト貼り付け'},templates:{button:'テンプレート(雛形)',title:'テンプレート内容',options:'テンプレートオプション',insertOption:'現在のエディタの内容と置換えをします',selectPromptMsg:'エディターで使用するテンプレートを選択してください。<br>(現在のエディタの内容は失われます):',emptyListMsg:'(テンプレートが定義されていません)'},showBlocks:'ブロック表示',stylesCombo:{label:'スタイル',panelTitle:'スタイル',panelTitle1:'ブロックスタイル',panelTitle2:'インラインスタイル',panelTitle3:'オブジェクトスタイル'},format:{label:'フォーマット',panelTitle:'フォーマット',tag_p:'標準',tag_pre:'書式付き',tag_address:'アドレス',tag_h1:'見出し 1',tag_h2:'見出し 2',tag_h3:'見出し 3',tag_h4:'見出し 4',tag_h5:'見出し 5',tag_h6:'見出し 6',tag_div:'標準 (DIV)'},div:{title:'Divコンテナ',toolbar:'Divコンテナ',cssClassInputLabel:'スタイルシートクラス',styleSelectLabel:'スタイル',IdInputLabel:'Id',languageCodeInputLabel:' 言語コード',inlineStyleInputLabel:'インラインスタイル',advisoryTitleInputLabel:'Title属性',langDirLabel:'文字表記の方向',langDirLTRLabel:'左から右 (LTR)',langDirRTLLabel:'右から左 (RTL)',edit:'Divコンテナ 編集',remove:'Divコンテナ 削除'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'フォント',voiceLabel:'フォント',panelTitle:'フォント'},fontSize:{label:'サイズ',voiceLabel:'フォントサイズ',panelTitle:'サイズ'},colorButton:{textColorTitle:'テキスト色',bgColorTitle:'背景色',panelTitle:'色',auto:'自動',more:'その他の色...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'スペルチェック設定(SCAYT)',opera_title:'Operaではサポートされません',enable:'SCAYT有効',disable:'SCAYT無効',about:'SCAYTバージョン',toggle:'SCAYT切替',options:'オプション',langs:'言語',moreSuggestions:'他の候補',ignore:'無視',ignoreAll:'すべて無視',addWord:'語句追加',emptyDic:'辞書名は必ず入力してください',optionsTab:'オプション',allCaps:'全て大文字の単語を無視',ignoreDomainNames:'ドメイン名を無視',mixedCase:'大文字小文字混在の単語を無視',mixedWithDigits:'数字付き単語を無視',languagesTab:'言語',dictionariesTab:'辞書',dic_field_name:'辞書名',dic_create:'登録',dic_restore:'元に戻す',dic_delete:'削除',dic_rename:'名前変更',dic_info:'始めユーザーディレクトリは、Cookieに保存されます。但し Cookie はサイズに制限があります。ユーザーディレクトリがCookieに保存できないサイズに到達するとディレクトリはサーバー上に保存されます。個人のディレクトリをサーバー上に保存するには、ディレクトリ名を明示する必要があります。もし既に保存されたディレクトリがある場合、その名前を入力し、元に戻すボタンを押してください。',aboutTab:'バージョン情報'},about:{title:'CKEditorバージョン情報',dlgTitle:'CKEditorバージョン情報',moreInfo:'ライセンス情報の詳細はウェブサイトにて確認してください:',copy:'Copyright © $1. All rights reserved.'},maximize:'最大化',minimize:'最小化',fakeobjects:{anchor:'アンカー',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'ドラッグしてリサイズ',colordialog:{title:'色選択',options:'カラーオプション',highlight:'ハイライト',selected:'選択された色',clear:'クリア'},toolbarCollapse:'ツールバーを閉じる',toolbarExpand:'ツールバーを開く',bidi:{ltr:'テキストの向き : 左から右へ',rtl:'テキストの向き : 右から左へ'}};
diff --git a/modules_v2/ckeditor/lang/km.js b/modules_v2/ckeditor/lang/km.js new file mode 100644 index 0000000000..ea798df20a --- /dev/null +++ b/modules_v2/ckeditor/lang/km.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.km={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'កូត',newPage:'ទំព័រថ្មី',save:'រក្សាទុក',preview:'មើលសាកល្បង',cut:'កាត់យក',copy:'ចំលងយក',paste:'ចំលងដាក់',print:'បោះពុម្ភ',underline:'ដិតបន្ទាត់ពីក្រោមអក្សរ',bold:'អក្សរដិតធំ',italic:'អក្សរផ្តេក',selectAll:'ជ្រើសរើសទាំងអស់',removeFormat:'លប់ចោល ការរចនា',strike:'ដិតបន្ទាត់ពាក់កណ្តាលអក្សរ',subscript:'អក្សរតូចក្រោម',superscript:'អក្សរតូចលើ',horizontalrule:'បន្ថែមបន្ទាត់ផ្តេក',pagebreak:'បន្ថែម ការផ្តាច់ទំព័រ',pagebreakAlt:'Page Break',unlink:'លប់ឈ្នាប់',undo:'សារឡើងវិញ',redo:'ធ្វើឡើងវិញ',common:{browseServer:'មើល',url:'URL',protocol:'ប្រូតូកូល',upload:'ទាញយក',uploadSubmit:'បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា',image:'រូបភាព',flash:'Flash',form:'បែបបទ',checkbox:'ប្រអប់ជ្រើសរើស',radio:'ប៉ូតុនរង្វង់មូល',textField:'ជួរសរសេរអត្ថបទ',textarea:'តំបន់សរសេរអត្ថបទ',hiddenField:'ជួរលាក់',button:'ប៉ូតុន',select:'ជួរជ្រើសរើស',imageButton:'ប៉ូតុនរូបភាព',notSet:'<មិនមែន>',id:'Id',name:'ឈ្មោះ',langDir:'ទិសដៅភាសា',langDirLtr:'ពីឆ្វេងទៅស្តាំ(LTR)',langDirRtl:'ពីស្តាំទៅឆ្វេង(RTL)',langCode:'លេខកូតភាសា',longDescr:'អធិប្បាយ URL វែង',cssClass:'Stylesheet Classes',advisoryTitle:'ចំណងជើង ប្រឹក្សា',cssStyle:'ម៉ូត',ok:'យល់ព្រម',cancel:'មិនយល់ព្រម',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'កំរិតខ្ពស់',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'ទទឹង',height:'កំពស់',align:'កំណត់ទីតាំង',alignLeft:'ខាងឆ្វង',alignRight:'ខាងស្តាំ',alignCenter:'កណ្តាល',alignTop:'ខាងលើ',alignMiddle:'កណ្តាល',alignBottom:'ខាងក្រោម',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'បន្ថែមអក្សរពិសេស',title:'តូអក្សរពិសេស',options:'Special Character Options'},link:{toolbar:'បន្ថែម/កែប្រែ ឈ្នាប់',other:'<other>',menu:'កែប្រែឈ្នាប់',title:'ឈ្នាប់',info:'ពត៌មានអំពីឈ្នាប់',target:'គោលដៅ',upload:'ទាញយក',advanced:'កំរិតខ្ពស់',type:'ប្រភេទឈ្នាប់',toUrl:'URL',toAnchor:'យុថ្កានៅក្នុងទំព័រនេះ',toEmail:'អ៊ីមែល',targetFrame:'<ហ្វ្រេម>',targetPopup:'<វីនដូវ លោត>',targetFrameName:'ឈ្មោះហ្រ្វេមដែលជាគោលដៅ',targetPopupName:'ឈ្មោះវីនដូវលោត',popupFeatures:'លក្ខណះរបស់វីនដូលលោត',popupResizable:'Resizable',popupStatusBar:'របា ពត៌មាន',popupLocationBar:'របា ទីតាំង',popupToolbar:'របា ឩបករណ៍',popupMenuBar:'របា មឺនុយ',popupFullScreen:'អេក្រុងពេញ(IE)',popupScrollBars:'របា ទាញ',popupDependent:'អាស្រ័យលើ (Netscape)',popupLeft:'ទីតាំងខាងឆ្វេង',popupTop:'ទីតាំងខាងលើ',id:'Id',langDir:'ទិសដៅភាសា',langDirLTR:'ពីឆ្វេងទៅស្តាំ(LTR)',langDirRTL:'ពីស្តាំទៅឆ្វេង(RTL)',acccessKey:'ឃី សំរាប់ចូល',name:'ឈ្មោះ',langCode:'ទិសដៅភាសា',tabIndex:'លេខ Tab',advisoryTitle:'ចំណងជើង ប្រឹក្សា',advisoryContentType:'ប្រភេទអត្ថបទ ប្រឹក្សា',cssClasses:'Stylesheet Classes',charset:'លេខកូតអក្សររបស់ឈ្នាប់',styles:'ម៉ូត',selectAnchor:'ជ្រើសរើសយុថ្កា',anchorName:'តាមឈ្មោះរបស់យុថ្កា',anchorId:'តាម Id',emailAddress:'អ៊ីមែល',emailSubject:'ចំណងជើងអត្ថបទ',emailBody:'អត្ថបទ',noAnchors:'(No anchors available in the document)',noUrl:'សូមសរសេរ អាស័យដ្ឋាន URL',noEmail:'សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល'},anchor:{toolbar:'បន្ថែម/កែប្រែ យុថ្កា',menu:'ការកំណត់យុថ្កា',title:'ការកំណត់យុថ្កា',name:'ឈ្មោះយុទ្ធថ្កា',errorName:'សូមសរសេរ ឈ្មោះយុទ្ធថ្កា'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'ស្វែងរក',replace:'ជំនួស',findWhat:'ស្វែងរកអ្វី:',replaceWith:'ជំនួសជាមួយ:',notFoundMsg:'ពាក្យនេះ រកមិនឃើញទេ ។',matchCase:'ករណ៉ត្រូវរក',matchWord:'ត្រូវពាក្យទាំងអស់',matchCyclic:'Match cyclic',replaceAll:'ជំនួសទាំងអស់',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'តារាង',title:'ការកំណត់ តារាង',menu:'ការកំណត់ តារាង',deleteTable:'លប់តារាង',rows:'ជួរផ្តេក',columns:'ជួរឈរ',border:'ទំហំស៊ុម',widthPx:'ភីកសែល',widthPc:'ភាគរយ',widthUnit:'width unit',cellSpace:'គំលាតសែល',cellPad:'គែមសែល',caption:'ចំណងជើង',summary:'សេចក្តីសង្ខេប',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'លប់សែល',merge:'បញ្ជូលសែល',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'លប់ជួរផ្តេក'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'លប់ជួរឈរ'}},button:{title:'ការកំណត់ ប៉ូតុន',text:'អត្ថបទ(តំលៃ)',type:'ប្រភេទ',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'ការកំណត់ប្រអប់ជ្រើសរើស',radioTitle:'ការកំណត់ប៉ូតុនរង្វង់',value:'តំលៃ',selected:'បានជ្រើសរើស'},form:{title:'ការកំណត់បែបបទ',menu:'ការកំណត់បែបបទ',action:'សកម្មភាព',method:'វិធី',encoding:'Encoding'},select:{title:'ការកំណត់ជួរជ្រើសរើស',selectInfo:'ពត៌មាន',opAvail:'ការកំណត់ជ្រើសរើស ដែលអាចកំណត់បាន',value:'តំលៃ',size:'ទំហំ',lines:'បន្ទាត់',chkMulti:'អនុញ្ញាតអោយជ្រើសរើសច្រើន',opText:'ពាក្យ',opValue:'តំលៃ',btnAdd:'បន្ថែម',btnModify:'ផ្លាស់ប្តូរ',btnUp:'លើ',btnDown:'ក្រោម',btnSetValue:'Set as selected value',btnDelete:'លប់'},textarea:{title:'ការកំណត់កន្លែងសរសេរអត្ថបទ',cols:'ជូរឈរ',rows:'ជូរផ្តេក'},textfield:{title:'ការកំណត់ជួរអត្ថបទ',name:'ឈ្មោះ',value:'តំលៃ',charWidth:'ទទឹង អក្សរ',maxChars:'អក្សរអតិបរិមា',type:'ប្រភេទ',typeText:'ពាក្យ',typePass:'ពាក្យសំងាត់'},hidden:{title:'ការកំណត់ជួរលាក់',name:'ឈ្មោះ',value:'តំលៃ'},image:{title:'ការកំណត់រូបភាព',titleButton:'ការកំណត់ប៉ូតុនរូបភាព',menu:'ការកំណត់រូបភាព',infoTab:'ពត៌មានអំពីរូបភាព',btnUpload:'បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា',upload:'ទាញយក',alt:'អត្ថបទជំនួស',lockRatio:'អត្រាឡុក',unlockRatio:'Unlock Ratio',resetSize:'កំណត់ទំហំឡើងវិញ',border:'ស៊ុម',hSpace:'គំលាតទទឹង',vSpace:'គំលាតបណ្តោយ',alertUrl:'សូមសរសេរងាស័យដ្ឋានរបស់រូបភាព',linkTab:'ឈ្នាប់',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'ការកំណត់ Flash',propertiesTab:'Properties',title:'ការកំណត់ Flash',chkPlay:'លេងដោយស្វ័យប្រវត្ត',chkLoop:'ចំនួនដង',chkMenu:'បង្ហាញ មឺនុយរបស់ Flash',chkFull:'Allow Fullscreen',scale:'ទំហំ',scaleAll:'បង្ហាញទាំងអស់',scaleNoBorder:'មិនបង្ហាញស៊ុម',scaleFit:'ត្រូវល្មម',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'បន្ទាត់ជាមូលដ្ឋាន',alignTextTop:'លើអត្ថបទ',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'ពណ៌ផ្ទៃខាងក្រោយ',hSpace:'គំលាតទទឹង',vSpace:'គំលាតបណ្តោយ',validateSrc:'សូមសរសេរ អាស័យដ្ឋាន URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'ពិនិត្យអក្ខរាវិរុទ្ធ',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'គ្មានក្នុងវចនានុក្រម',changeTo:'ផ្លាស់ប្តូរទៅ',btnIgnore:'មិនផ្លាស់ប្តូរ',btnIgnoreAll:'មិនផ្លាស់ប្តូរ ទាំងអស់',btnReplace:'ជំនួស',btnReplaceAll:'ជំនួសទាំងអស់',btnUndo:'សារឡើងវិញ',noSuggestions:'- គ្មានសំណើរ -',progress:'កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...',noMispell:'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស',noChanges:'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ',oneChange:'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ',manyChanges:'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ',ieSpellDownload:'ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?'},smiley:{toolbar:'រូបភាព',title:'បញ្ជូលរូបភាព',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'បញ្ជីជាអក្សរ',bulletedlist:'បញ្ជីជារង្វង់មូល',indent:'បន្ថែមការចូលបន្ទាត់',outdent:'បន្ថយការចូលបន្ទាត់',justify:{left:'តំរឹមឆ្វេង',center:'តំរឹមកណ្តាល',right:'តំរឹមស្តាំ',block:'តំរឹមសងខាង'},blockquote:'Block Quote',clipboard:{title:'ចំលងដាក់',cutError:'ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+X) ។',copyError:'ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។',pasteMsg:'សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី (<STRONG>Ctrl/Cmd+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'ចំលងដាក់ពី Word',title:'ចំលងដាក់ពី Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'ចំលងដាក់អត្ថបទធម្មតា',title:'ចំលងដាក់អត្ថបទធម្មតា'},templates:{button:'ឯកសារគំរូ',title:'ឯកសារគំរូ របស់អត្ថន័យ',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'សូមជ្រើសរើសឯកសារគំរូ ដើម្បីបើកនៅក្នុងកម្មវិធីតាក់តែងអត្ថបទ<br>(អត្ថបទនឹងបាត់បង់):',emptyListMsg:'(ពុំមានឯកសារគំរូត្រូវបានកំណត់)'},showBlocks:'Show Blocks',stylesCombo:{label:'ម៉ូត',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'រចនា',panelTitle:'រចនា',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'ហ្វុង',voiceLabel:'Font',panelTitle:'ហ្វុង'},fontSize:{label:'ទំហំ',voiceLabel:'Font Size',panelTitle:'ទំហំ'},colorButton:{textColorTitle:'ពណ៌អក្សរ',bgColorTitle:'ពណ៌ផ្ទៃខាងក្រោយ',panelTitle:'Colors',auto:'ស្វ័យប្រវត្ត',more:'ពណ៌ផ្សេងទៀត..'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/ko.js b/modules_v2/ckeditor/lang/ko.js new file mode 100644 index 0000000000..427750b501 --- /dev/null +++ b/modules_v2/ckeditor/lang/ko.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.ko={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'소스',newPage:'새 문서',save:'저장하기',preview:'미리보기',cut:'잘라내기',copy:'복사하기',paste:'붙여넣기',print:'인쇄하기',underline:'밑줄',bold:'진하게',italic:'이텔릭',selectAll:'전체선택',removeFormat:'포맷 지우기',strike:'취소선',subscript:'아래 첨자',superscript:'위 첨자',horizontalrule:'수평선 삽입',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'링크 삭제',undo:'취소',redo:'재실행',common:{browseServer:'서버 보기',url:'URL',protocol:'프로토콜',upload:'업로드',uploadSubmit:'서버로 전송',image:'이미지',flash:'플래쉬',form:'폼',checkbox:'체크박스',radio:'라디오버튼',textField:'입력필드',textarea:'입력영역',hiddenField:'숨김필드',button:'버튼',select:'펼침목록',imageButton:'이미지버튼',notSet:'<설정되지 않음>',id:'ID',name:'Name',langDir:'쓰기 방향',langDirLtr:'왼쪽에서 오른쪽 (LTR)',langDirRtl:'오른쪽에서 왼쪽 (RTL)',langCode:'언어 코드',longDescr:'URL 설명',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'예',cancel:'아니오',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'자세히',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'너비',height:'높이',align:'정렬',alignLeft:'왼쪽',alignRight:'오른쪽',alignCenter:'가운데',alignTop:'위',alignMiddle:'중간',alignBottom:'아래',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'특수문자 삽입',title:'특수문자 선택',options:'Special Character Options'},link:{toolbar:'링크 삽입/변경',other:'<기타>',menu:'링크 수정',title:'링크',info:'링크 정보',target:'타겟',upload:'업로드',advanced:'자세히',type:'링크 종류',toUrl:'URL',toAnchor:'책갈피',toEmail:'이메일',targetFrame:'<프레임>',targetPopup:'<팝업창>',targetFrameName:'타겟 프레임 이름',targetPopupName:'팝업창 이름',popupFeatures:'팝업창 설정',popupResizable:'Resizable',popupStatusBar:'상태바',popupLocationBar:'주소표시줄',popupToolbar:'툴바',popupMenuBar:'메뉴바',popupFullScreen:'전체화면 (IE)',popupScrollBars:'스크롤바',popupDependent:'Dependent (Netscape)',popupLeft:'왼쪽 위치',popupTop:'윗쪽 위치',id:'Id',langDir:'쓰기 방향',langDirLTR:'왼쪽에서 오른쪽 (LTR)',langDirRTL:'오른쪽에서 왼쪽 (RTL)',acccessKey:'엑세스 키',name:'Name',langCode:'쓰기 방향',tabIndex:'탭 순서',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'책갈피 선택',anchorName:'책갈피 이름',anchorId:'책갈피 ID',emailAddress:'이메일 주소',emailSubject:'제목',emailBody:'내용',noAnchors:'(문서에 책갈피가 없습니다.)',noUrl:'링크 URL을 입력하십시요.',noEmail:'이메일주소를 입력하십시요.'},anchor:{toolbar:'책갈피 삽입/변경',menu:'책갈피 속성',title:'책갈피 속성',name:'책갈피 이름',errorName:'책갈피 이름을 입력하십시요.'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'찾기 & 바꾸기',find:'찾기',replace:'바꾸기',findWhat:'찾을 문자열:',replaceWith:'바꿀 문자열:',notFoundMsg:'문자열을 찾을 수 없습니다.',matchCase:'대소문자 구분',matchWord:'온전한 단어',matchCyclic:'Match cyclic',replaceAll:'모두 바꾸기',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'표',title:'표 설정',menu:'표 설정',deleteTable:'표 삭제',rows:'가로줄',columns:'세로줄',border:'테두리 크기',widthPx:'픽셀',widthPc:'퍼센트',widthUnit:'width unit',cellSpace:'셀 간격',cellPad:'셀 여백',caption:'캡션',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'셀/칸(Cell)',insertBefore:'앞에 셀/칸 삽입',insertAfter:'뒤에 셀/칸 삽입',deleteCell:'셀 삭제',merge:'셀 합치기',mergeRight:'오른쪽 뭉치기',mergeDown:'왼쪽 뭉치기',splitHorizontal:'수평 나누기',splitVertical:'수직 나누기',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'행(Row)',insertBefore:'앞에 행 삽입',insertAfter:'뒤에 행 삽입',deleteRow:'가로줄 삭제'},column:{menu:'열(Column)',insertBefore:'앞에 열 삽입',insertAfter:'뒤에 열 삽입',deleteColumn:'세로줄 삭제'}},button:{title:'버튼 속성',text:'버튼글자(값)',type:'버튼종류',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'체크박스 속성',radioTitle:'라디오버튼 속성',value:'값',selected:'선택됨'},form:{title:'폼 속성',menu:'폼 속성',action:'실행경로(Action)',method:'방법(Method)',encoding:'Encoding'},select:{title:'펼침목록 속성',selectInfo:'정보',opAvail:'선택옵션',value:'값',size:'세로크기',lines:'줄',chkMulti:'여러항목 선택 허용',opText:'이름',opValue:'값',btnAdd:'추가',btnModify:'변경',btnUp:'위로',btnDown:'아래로',btnSetValue:'선택된것으로 설정',btnDelete:'삭제'},textarea:{title:'입력영역 속성',cols:'칸수',rows:'줄수'},textfield:{title:'입력필드 속성',name:'이름',value:'값',charWidth:'글자 너비',maxChars:'최대 글자수',type:'종류',typeText:'문자열',typePass:'비밀번호'},hidden:{title:'숨김필드 속성',name:'이름',value:'값'},image:{title:'이미지 설정',titleButton:'이미지버튼 속성',menu:'이미지 설정',infoTab:'이미지 정보',btnUpload:'서버로 전송',upload:'업로드',alt:'이미지 설명',lockRatio:'비율 유지',unlockRatio:'Unlock Ratio',resetSize:'원래 크기로',border:'테두리',hSpace:'수평여백',vSpace:'수직여백',alertUrl:'이미지 URL을 입력하십시요',linkTab:'링크',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'플래쉬 속성',propertiesTab:'Properties',title:'플래쉬 등록정보',chkPlay:'자동재생',chkLoop:'반복',chkMenu:'플래쉬메뉴 가능',chkFull:'Allow Fullscreen',scale:'영역',scaleAll:'모두보기',scaleNoBorder:'경계선없음',scaleFit:'영역자동조절',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'줄아래(Abs Bottom)',alignAbsMiddle:'줄중간(Abs Middle)',alignBaseline:'기준선',alignTextTop:'글자상단',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'배경 색상',hSpace:'수평여백',vSpace:'수직여백',validateSrc:'링크 URL을 입력하십시요.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'철자검사',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'사전에 없는 단어',changeTo:'변경할 단어',btnIgnore:'건너뜀',btnIgnoreAll:'모두 건너뜀',btnReplace:'변경',btnReplaceAll:'모두 변경',btnUndo:'취소',noSuggestions:'- 추천단어 없음 -',progress:'철자검사를 진행중입니다...',noMispell:'철자검사 완료: 잘못된 철자가 없습니다.',noChanges:'철자검사 완료: 변경된 단어가 없습니다.',oneChange:'철자검사 완료: 단어가 변경되었습니다.',manyChanges:'철자검사 완료: %1 단어가 변경되었습니다.',ieSpellDownload:'철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?'},smiley:{toolbar:'아이콘',title:'아이콘 삽입',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'순서있는 목록',bulletedlist:'순서없는 목록',indent:'들여쓰기',outdent:'내어쓰기',justify:{left:'왼쪽 정렬',center:'가운데 정렬',right:'오른쪽 정렬',block:'양쪽 맞춤'},blockquote:'Block Quote',clipboard:{title:'붙여넣기',cutError:'브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl/Cmd+X).',copyError:'브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl/Cmd+C).',pasteMsg:'키보드의 (<STRONG>Ctrl/Cmd+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.',securityMsg:'브러우저 보안 설정으로 인해, 클립보드의 자료를 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'MS Word 형식에서 붙여넣기',title:'MS Word 형식에서 붙여넣기',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'텍스트로 붙여넣기',title:'텍스트로 붙여넣기'},templates:{button:'템플릿',title:'내용 템플릿',options:'Template Options',insertOption:'현재 내용 바꾸기',selectPromptMsg:'에디터에서 사용할 템플릿을 선택하십시요.<br>(지금까지 작성된 내용은 사라집니다.):',emptyListMsg:'(템플릿이 없습니다.)'},showBlocks:'Show Blocks',stylesCombo:{label:'스타일',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'포맷',panelTitle:'포맷',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'폰트',voiceLabel:'Font',panelTitle:'폰트'},fontSize:{label:'글자 크기',voiceLabel:'Font Size',panelTitle:'글자 크기'},colorButton:{textColorTitle:'글자 색상',bgColorTitle:'배경 색상',panelTitle:'Colors',auto:'기본색상',more:'색상선택...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/lt.js b/modules_v2/ckeditor/lang/lt.js new file mode 100644 index 0000000000..ac6fee661c --- /dev/null +++ b/modules_v2/ckeditor/lang/lt.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.lt={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Šaltinis',newPage:'Naujas puslapis',save:'Išsaugoti',preview:'Peržiūra',cut:'Iškirpti',copy:'Kopijuoti',paste:'Įdėti',print:'Spausdinti',underline:'Pabrauktas',bold:'Pusjuodis',italic:'Kursyvas',selectAll:'Pažymėti viską',removeFormat:'Panaikinti formatą',strike:'Perbrauktas',subscript:'Apatinis indeksas',superscript:'Viršutinis indeksas',horizontalrule:'Įterpti horizontalią liniją',pagebreak:'Įterpti puslapių skirtuką',pagebreakAlt:'Page Break',unlink:'Panaikinti nuorodą',undo:'Atšaukti',redo:'Atstatyti',common:{browseServer:'Naršyti po serverį',url:'URL',protocol:'Protokolas',upload:'Siųsti',uploadSubmit:'Siųsti į serverį',image:'Vaizdas',flash:'Flash',form:'Forma',checkbox:'Žymimasis langelis',radio:'Žymimoji akutė',textField:'Teksto laukas',textarea:'Teksto sritis',hiddenField:'Nerodomas laukas',button:'Mygtukas',select:'Atrankos laukas',imageButton:'Vaizdinis mygtukas',notSet:'<nėra nustatyta>',id:'Id',name:'Vardas',langDir:'Teksto kryptis',langDirLtr:'Iš kairės į dešinę (LTR)',langDirRtl:'Iš dešinės į kairę (RTL)',langCode:'Kalbos kodas',longDescr:'Ilgas aprašymas URL',cssClass:'Stilių lentelės klasės',advisoryTitle:'Konsultacinė antraštė',cssStyle:'Stilius',ok:'OK',cancel:'Nutraukti',close:'Close',preview:'Preview',generalTab:'Bendros savybės',advancedTab:'Papildomas',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Plotis',height:'Aukštis',align:'Lygiuoti',alignLeft:'Kairę',alignRight:'Dešinę',alignCenter:'Centrą',alignTop:'Viršūnę',alignMiddle:'Vidurį',alignBottom:'Apačią',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Įterpti specialų simbolį',title:'Pasirinkite specialų simbolį',options:'Special Character Options'},link:{toolbar:'Įterpti/taisyti nuorodą',other:'<kitas>',menu:'Taisyti nuorodą',title:'Nuoroda',info:'Nuorodos informacija',target:'Paskirties vieta',upload:'Siųsti',advanced:'Papildomas',type:'Nuorodos tipas',toUrl:'URL',toAnchor:'Žymė šiame puslapyje',toEmail:'El.paštas',targetFrame:'<kadras>',targetPopup:'<išskleidžiamas langas>',targetFrameName:'Paskirties kadro vardas',targetPopupName:'Paskirties lango vardas',popupFeatures:'Išskleidžiamo lango savybės',popupResizable:'Resizable',popupStatusBar:'Būsenos juosta',popupLocationBar:'Adreso juosta',popupToolbar:'Mygtukų juosta',popupMenuBar:'Meniu juosta',popupFullScreen:'Visas ekranas (IE)',popupScrollBars:'Slinkties juostos',popupDependent:'Priklausomas (Netscape)',popupLeft:'Kairė pozicija',popupTop:'Viršutinė pozicija',id:'Id',langDir:'Teksto kryptis',langDirLTR:'Iš kairės į dešinę (LTR)',langDirRTL:'Iš dešinės į kairę (RTL)',acccessKey:'Prieigos raktas',name:'Vardas',langCode:'Teksto kryptis',tabIndex:'Tabuliavimo indeksas',advisoryTitle:'Konsultacinė antraštė',advisoryContentType:'Konsultacinio turinio tipas',cssClasses:'Stilių lentelės klasės',charset:'Susietų išteklių simbolių lentelė',styles:'Stilius',selectAnchor:'Pasirinkite žymę',anchorName:'Pagal žymės vardą',anchorId:'Pagal žymės Id',emailAddress:'El.pašto adresas',emailSubject:'Žinutės tema',emailBody:'Žinutės turinys',noAnchors:'(Šiame dokumente žymių nėra)',noUrl:'Prašome įvesti nuorodos URL',noEmail:'Prašome įvesti el.pašto adresą'},anchor:{toolbar:'Įterpti/modifikuoti žymę',menu:'Žymės savybės',title:'Žymės savybės',name:'Žymės vardas',errorName:'Prašome įvesti žymės vardą'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Surasti ir pakeisti',find:'Rasti',replace:'Pakeisti',findWhat:'Surasti tekstą:',replaceWith:'Pakeisti tekstu:',notFoundMsg:'Nurodytas tekstas nerastas.',matchCase:'Skirti didžiąsias ir mažąsias raides',matchWord:'Atitikti pilną žodį',matchCyclic:'Match cyclic',replaceAll:'Pakeisti viską',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Lentelė',title:'Lentelės savybės',menu:'Lentelės savybės',deleteTable:'Šalinti lentelę',rows:'Eilutės',columns:'Stulpeliai',border:'Rėmelio dydis',widthPx:'taškais',widthPc:'procentais',widthUnit:'width unit',cellSpace:'Tarpas tarp langelių',cellPad:'Trapas nuo langelio rėmo iki teksto',caption:'Antraštė',summary:'Santrauka',headers:'Antraštės',headersNone:'Nėra',headersColumn:'Pirmas stulpelis',headersRow:'Pirma eilutė',headersBoth:'Abu',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Langelis',insertBefore:'Įterpti langelį prieš',insertAfter:'Įterpti langelį po',deleteCell:'Šalinti langelius',merge:'Sujungti langelius',mergeRight:'Sujungti su dešine',mergeDown:'Sujungti su apačia',splitHorizontal:'Skaidyti langelį horizontaliai',splitVertical:'Skaidyti langelį vertikaliai',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Eilutė',insertBefore:'Įterpti eilutę prieš',insertAfter:'Įterpti eilutę po',deleteRow:'Šalinti eilutes'},column:{menu:'Stulpelis',insertBefore:'Įterpti stulpelį prieš',insertAfter:'Įterpti stulpelį po',deleteColumn:'Šalinti stulpelius'}},button:{title:'Mygtuko savybės',text:'Tekstas (Reikšmė)',type:'Tipas',typeBtn:'Mygtukas',typeSbm:'Siųsti',typeRst:'Išvalyti'},checkboxAndRadio:{checkboxTitle:'Žymimojo langelio savybės',radioTitle:'Žymimosios akutės savybės',value:'Reikšmė',selected:'Pažymėtas'},form:{title:'Formos savybės',menu:'Formos savybės',action:'Veiksmas',method:'Metodas',encoding:'Encoding'},select:{title:'Atrankos lauko savybės',selectInfo:'Informacija',opAvail:'Galimos parinktys',value:'Reikšmė',size:'Dydis',lines:'eilučių',chkMulti:'Leisti daugeriopą atranką',opText:'Tekstas',opValue:'Reikšmė',btnAdd:'Įtraukti',btnModify:'Modifikuoti',btnUp:'Aukštyn',btnDown:'Žemyn',btnSetValue:'Laikyti pažymėta reikšme',btnDelete:'Trinti'},textarea:{title:'Teksto srities savybės',cols:'Ilgis',rows:'Plotis'},textfield:{title:'Teksto lauko savybės',name:'Vardas',value:'Reikšmė',charWidth:'Ilgis simboliais',maxChars:'Maksimalus simbolių skaičius',type:'Tipas',typeText:'Tekstas',typePass:'Slaptažodis'},hidden:{title:'Nerodomo lauko savybės',name:'Vardas',value:'Reikšmė'},image:{title:'Vaizdo savybės',titleButton:'Vaizdinio mygtuko savybės',menu:'Vaizdo savybės',infoTab:'Vaizdo informacija',btnUpload:'Siųsti į serverį',upload:'Nusiųsti',alt:'Alternatyvus Tekstas',lockRatio:'Išlaikyti proporciją',unlockRatio:'Unlock Ratio',resetSize:'Atstatyti dydį',border:'Rėmelis',hSpace:'Hor.Erdvė',vSpace:'Vert.Erdvė',alertUrl:'Prašome įvesti vaizdo URL',linkTab:'Nuoroda',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash savybės',propertiesTab:'Properties',title:'Flash savybės',chkPlay:'Automatinis paleidimas',chkLoop:'Ciklas',chkMenu:'Leisti Flash meniu',chkFull:'Allow Fullscreen',scale:'Mastelis',scaleAll:'Rodyti visą',scaleNoBorder:'Be rėmelio',scaleFit:'Tikslus atitikimas',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Absoliučią apačią',alignAbsMiddle:'Absoliutų vidurį',alignBaseline:'Apatinę liniją',alignTextTop:'Teksto viršūnę',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Fono spalva',hSpace:'Hor.Erdvė',vSpace:'Vert.Erdvė',validateSrc:'Prašome įvesti nuorodos URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Rašybos tikrinimas',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Žodyne nerastas',changeTo:'Pakeisti į',btnIgnore:'Ignoruoti',btnIgnoreAll:'Ignoruoti visus',btnReplace:'Pakeisti',btnReplaceAll:'Pakeisti visus',btnUndo:'Atšaukti',noSuggestions:'- Nėra pasiūlymų -',progress:'Vyksta rašybos tikrinimas...',noMispell:'Rašybos tikrinimas baigtas: Nerasta rašybos klaidų',noChanges:'Rašybos tikrinimas baigtas: Nėra pakeistų žodžių',oneChange:'Rašybos tikrinimas baigtas: Vienas žodis pakeistas',manyChanges:'Rašybos tikrinimas baigtas: Pakeista %1 žodžių',ieSpellDownload:'Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?'},smiley:{toolbar:'Veideliai',title:'Įterpti veidelį',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numeruotas sąrašas',bulletedlist:'Suženklintas sąrašas',indent:'Padidinti įtrauką',outdent:'Sumažinti įtrauką',justify:{left:'Lygiuoti kairę',center:'Centruoti',right:'Lygiuoti dešinę',block:'Lygiuoti abi puses'},blockquote:'Citata',clipboard:{title:'Įdėti',cutError:'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).',copyError:'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).',pasteMsg:'Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.',securityMsg:'Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Įdėti iš Word',title:'Įdėti iš Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Įdėti kaip gryną tekstą',title:'Įdėti kaip gryną tekstą'},templates:{button:'Šablonai',title:'Turinio šablonai',options:'Template Options',insertOption:'Pakeisti dabartinį turinį pasirinktu šablonu',selectPromptMsg:'Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):',emptyListMsg:'(Šablonų sąrašas tuščias)'},showBlocks:'Rodyti blokus',stylesCombo:{label:'Stilius',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Šrifto formatas',panelTitle:'Šrifto formatas',tag_p:'Normalus',tag_pre:'Formuotas',tag_address:'Kreipinio',tag_h1:'Antraštinis 1',tag_h2:'Antraštinis 2',tag_h3:'Antraštinis 3',tag_h4:'Antraštinis 4',tag_h5:'Antraštinis 5',tag_h6:'Antraštinis 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Šriftas',voiceLabel:'Font',panelTitle:'Šriftas'},fontSize:{label:'Šrifto dydis',voiceLabel:'Font Size',panelTitle:'Šrifto dydis'},colorButton:{textColorTitle:'Teksto spalva',bgColorTitle:'Fono spalva',panelTitle:'Colors',auto:'Automatinis',more:'Daugiau spalvų...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/lv.js b/modules_v2/ckeditor/lang/lv.js new file mode 100644 index 0000000000..388afa5542 --- /dev/null +++ b/modules_v2/ckeditor/lang/lv.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.lv={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'HTML kods',newPage:'Jauna lapa',save:'Saglabāt',preview:'Pārskatīt',cut:'Izgriezt',copy:'Kopēt',paste:'Ievietot',print:'Drukāt',underline:'Apakšsvītra',bold:'Treknu šriftu',italic:'Slīprakstā',selectAll:'Iezīmēt visu',removeFormat:'Noņemt stilus',strike:'Pārsvītrots',subscript:'Zemrakstā',superscript:'Augšrakstā',horizontalrule:'Ievietot horizontālu Atdalītājsvītru',pagebreak:'Ievietot lapas pārtraukumu',pagebreakAlt:'Page Break',unlink:'Noņemt hipersaiti',undo:'Atcelt',redo:'Atkārtot',common:{browseServer:'Skatīt servera saturu',url:'URL',protocol:'Protokols',upload:'Augšupielādēt',uploadSubmit:'Nosūtīt serverim',image:'Attēls',flash:'Flash',form:'Forma',checkbox:'Atzīmēšanas kastīte',radio:'Izvēles poga',textField:'Teksta rinda',textarea:'Teksta laukums',hiddenField:'Paslēpta teksta rinda',button:'Poga',select:'Iezīmēšanas lauks',imageButton:'Attēlpoga',notSet:'<nav iestatīts>',id:'Id',name:'Nosaukums',langDir:'Valodas lasīšanas virziens',langDirLtr:'No kreisās uz labo (LTR)',langDirRtl:'No labās uz kreiso (RTL)',langCode:'Valodas kods',longDescr:'Gara apraksta Hipersaite',cssClass:'Stilu saraksta klases',advisoryTitle:'Konsultatīvs virsraksts',cssStyle:'Stils',ok:'Darīts!',cancel:'Atcelt',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Izvērstais',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Platums',height:'Augstums',align:'Nolīdzināt',alignLeft:'Pa kreisi',alignRight:'Pa labi',alignCenter:'Centrēti',alignTop:'Augšā',alignMiddle:'Vertikāli centrēts',alignBottom:'Apakšā',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Ievietot speciālo simbolu',title:'Ievietot īpašu simbolu',options:'Special Character Options'},link:{toolbar:'Ievietot/Labot hipersaiti',other:'<cits>',menu:'Labot hipersaiti',title:'Hipersaite',info:'Hipersaites informācija',target:'Mērķis',upload:'Augšupielādēt',advanced:'Izvērstais',type:'Hipersaites tips',toUrl:'URL',toAnchor:'Iezīme šajā lapā',toEmail:'E-pasts',targetFrame:'<ietvars>',targetPopup:'<uznirstošā logā>',targetFrameName:'Mērķa ietvara nosaukums',targetPopupName:'Uznirstošā loga nosaukums',popupFeatures:'Uznirstošā loga nosaukums īpašības',popupResizable:'Resizable',popupStatusBar:'Statusa josla',popupLocationBar:'Atrašanās vietas josla',popupToolbar:'Rīku josla',popupMenuBar:'Izvēlnes josla',popupFullScreen:'Pilnā ekrānā (IE)',popupScrollBars:'Ritjoslas',popupDependent:'Atkarīgs (Netscape)',popupLeft:'Kreisā koordināte',popupTop:'Augšējā koordināte',id:'Id',langDir:'Valodas lasīšanas virziens',langDirLTR:'No kreisās uz labo (LTR)',langDirRTL:'No labās uz kreiso (RTL)',acccessKey:'Pieejas kods',name:'Nosaukums',langCode:'Valodas lasīšanas virziens',tabIndex:'Ciļņu indekss',advisoryTitle:'Konsultatīvs virsraksts',advisoryContentType:'Konsultatīvs satura tips',cssClasses:'Stilu saraksta klases',charset:'Pievienotā resursa kodu tabula',styles:'Stils',selectAnchor:'Izvēlēties iezīmi',anchorName:'Pēc iezīmes nosaukuma',anchorId:'Pēc elementa ID',emailAddress:'E-pasta adrese',emailSubject:'Ziņas tēma',emailBody:'Ziņas saturs',noAnchors:'(Šajā dokumentā nav iezīmju)',noUrl:'Lūdzu norādi hipersaiti',noEmail:'Lūdzu norādi e-pasta adresi'},anchor:{toolbar:'Ievietot/Labot iezīmi',menu:'Iezīmes īpašības',title:'Iezīmes īpašības',name:'Iezīmes nosaukums',errorName:'Lūdzu norādiet iezīmes nosaukumu'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Meklēt',replace:'Nomainīt',findWhat:'Meklēt:',replaceWith:'Nomainīt uz:',notFoundMsg:'Norādītā frāze netika atrasta.',matchCase:'Reģistrjūtīgs',matchWord:'Jāsakrīt pilnībā',matchCyclic:'Match cyclic',replaceAll:'Aizvietot visu',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabula',title:'Tabulas īpašības',menu:'Tabulas īpašības',deleteTable:'Dzēst tabulu',rows:'Rindas',columns:'Kolonnas',border:'Rāmja izmērs',widthPx:'pikseļos',widthPc:'procentuāli',widthUnit:'width unit',cellSpace:'Rūtiņu atstatums',cellPad:'Rūtiņu nobīde',caption:'Leģenda',summary:'Anotācija',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Šūna',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Dzēst rūtiņas',merge:'Apvienot rūtiņas',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Rinda',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Dzēst rindas'},column:{menu:'Kolonna',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Dzēst kolonnas'}},button:{title:'Pogas īpašības',text:'Teksts (vērtība)',type:'Tips',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Atzīmēšanas kastītes īpašības',radioTitle:'Izvēles poga īpašības',value:'Vērtība',selected:'Iezīmēts'},form:{title:'Formas īpašības',menu:'Formas īpašības',action:'Darbība',method:'Metode',encoding:'Encoding'},select:{title:'Iezīmēšanas lauka īpašības',selectInfo:'Informācija',opAvail:'Pieejamās iespējas',value:'Vērtība',size:'Izmērs',lines:'rindas',chkMulti:'Atļaut vairākus iezīmējumus',opText:'Teksts',opValue:'Vērtība',btnAdd:'Pievienot',btnModify:'Veikt izmaiņas',btnUp:'Augšup',btnDown:'Lejup',btnSetValue:'Noteikt kā iezīmēto vērtību',btnDelete:'Dzēst'},textarea:{title:'Teksta laukuma īpašības',cols:'Kolonnas',rows:'Rindas'},textfield:{title:'Teksta rindas īpašības',name:'Nosaukums',value:'Vērtība',charWidth:'Simbolu platums',maxChars:'Simbolu maksimālais daudzums',type:'Tips',typeText:'Teksts',typePass:'Parole'},hidden:{title:'Paslēptās teksta rindas īpašības',name:'Nosaukums',value:'Vērtība'},image:{title:'Attēla īpašības',titleButton:'Attēlpogas īpašības',menu:'Attēla īpašības',infoTab:'Informācija par attēlu',btnUpload:'Nosūtīt serverim',upload:'Augšupielādēt',alt:'Alternatīvais teksts',lockRatio:'Nemainīga Augstuma/Platuma attiecība',unlockRatio:'Unlock Ratio',resetSize:'Atjaunot sākotnējo izmēru',border:'Rāmis',hSpace:'Horizontālā telpa',vSpace:'Vertikālā telpa',alertUrl:'Lūdzu norādīt attēla hipersaiti',linkTab:'Hipersaite',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash īpašības',propertiesTab:'Properties',title:'Flash īpašības',chkPlay:'Automātiska atskaņošana',chkLoop:'Nepārtraukti',chkMenu:'Atļaut Flash izvēlni',chkFull:'Allow Fullscreen',scale:'Mainīt izmēru',scaleAll:'Rādīt visu',scaleNoBorder:'Bez rāmja',scaleFit:'Precīzs izmērs',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Absolūti apakšā',alignAbsMiddle:'Absolūti vertikāli centrēts',alignBaseline:'Pamatrindā',alignTextTop:'Teksta augšā',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Fona krāsa',hSpace:'Horizontālā telpa',vSpace:'Vertikālā telpa',validateSrc:'Lūdzu norādi hipersaiti',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Pareizrakstības pārbaude',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Netika atrasts vārdnīcā',changeTo:'Nomainīt uz',btnIgnore:'Ignorēt',btnIgnoreAll:'Ignorēt visu',btnReplace:'Aizvietot',btnReplaceAll:'Aizvietot visu',btnUndo:'Atcelt',noSuggestions:'- Nav ieteikumu -',progress:'Notiek pareizrakstības pārbaude...',noMispell:'Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas',noChanges:'Pareizrakstības pārbaude pabeigta: nekas netika labots',oneChange:'Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts',manyChanges:'Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti',ieSpellDownload:'Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?'},smiley:{toolbar:'Smaidiņi',title:'Ievietot smaidiņu',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numurēts saraksts',bulletedlist:'Izcelts saraksts',indent:'Palielināt atkāpi',outdent:'Samazināt atkāpi',justify:{left:'Izlīdzināt pa kreisi',center:'Izlīdzināt pret centru',right:'Izlīdzināt pa labi',block:'Izlīdzināt malas'},blockquote:'Block Quote',clipboard:{title:'Ievietot',cutError:'Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt izgriešanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+X, lai veiktu šo darbību.',copyError:'Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt kopēšanas darbību. Lūdzu, izmantojiet (Ctrl/Cmd+C), lai veiktu šo darbību.',pasteMsg:'Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Ievietot no Worda',title:'Ievietot no Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Ievietot kā vienkāršu tekstu',title:'Ievietot kā vienkāršu tekstu'},templates:{button:'Sagataves',title:'Satura sagataves',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Lūdzu, norādiet sagatavi, ko atvērt editorā<br>(patreizējie dati tiks zaudēti):',emptyListMsg:'(Nav norādītas sagataves)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stils',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formāts',panelTitle:'Formāts',tag_p:'Normāls teksts',tag_pre:'Formatēts teksts',tag_address:'Adrese',tag_h1:'Virsraksts 1',tag_h2:'Virsraksts 2',tag_h3:'Virsraksts 3',tag_h4:'Virsraksts 4',tag_h5:'Virsraksts 5',tag_h6:'Virsraksts 6',tag_div:'Rindkopa (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Šrifts',voiceLabel:'Font',panelTitle:'Šrifts'},fontSize:{label:'Izmērs',voiceLabel:'Font Size',panelTitle:'Izmērs'},colorButton:{textColorTitle:'Teksta krāsa',bgColorTitle:'Fona krāsa',panelTitle:'Colors',auto:'Automātiska',more:'Plašāka palete...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/mn.js b/modules_v2/ckeditor/lang/mn.js new file mode 100644 index 0000000000..bf6daeede5 --- /dev/null +++ b/modules_v2/ckeditor/lang/mn.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.mn={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Код',newPage:'Шинэ хуудас',save:'Хадгалах',preview:'Уридчлан харах',cut:'Хайчлах',copy:'Хуулах',paste:'Буулгах',print:'Хэвлэх',underline:'Доогуур нь зураастай болгох',bold:'Тод бүдүүн',italic:'Налуу',selectAll:'Бүгдийг нь сонгох',removeFormat:'Формат авч хаях',strike:'Дундуур нь зураастай болгох',subscript:'Суурь болгох',superscript:'Зэрэг болгох',horizontalrule:'Хөндлөн зураас оруулах',pagebreak:'Хуудас тусгаарлагч оруулах',pagebreakAlt:'Page Break',unlink:'Линк авч хаях',undo:'Хүчингүй болгох',redo:'Өмнөх үйлдлээ сэргээх',common:{browseServer:'Сервер харуулах',url:'URL',protocol:'Протокол',upload:'Хуулах',uploadSubmit:'Үүнийг сервэррүү илгээ',image:'Зураг',flash:'Флаш',form:'Форм',checkbox:'Чекбокс',radio:'Радио товч',textField:'Техт талбар',textarea:'Техт орчин',hiddenField:'Нууц талбар',button:'Товч',select:'Сонгогч талбар',imageButton:'Зурагтай товч',notSet:'<Оноохгүй>',id:'Id',name:'Нэр',langDir:'Хэлний чиглэл',langDirLtr:'Зүүнээс баруун (LTR)',langDirRtl:'Баруунаас зүүн (RTL)',langCode:'Хэлний код',longDescr:'URL-ын тайлбар',cssClass:'Stylesheet классууд',advisoryTitle:'Зөвлөлдөх гарчиг',cssStyle:'Загвар',ok:'OK',cancel:'Болих',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Нэмэлт',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Өргөн',height:'Өндөр',align:'Эгнээ',alignLeft:'Зүүн',alignRight:'Баруун',alignCenter:'Төвд',alignTop:'Дээд талд',alignMiddle:'Дунд талд',alignBottom:'Доод талд',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Онцгой тэмдэгт оруулах',title:'Онцгой тэмдэгт сонгох',options:'Special Character Options'},link:{toolbar:'Линк Оруулах/Засварлах',other:'<other>',menu:'Холбоос засварлах',title:'Линк',info:'Линкийн мэдээлэл',target:'Байрлал',upload:'Хуулах',advanced:'Нэмэлт',type:'Линкийн төрөл',toUrl:'URL',toAnchor:'Энэ хуудасандах холбоос',toEmail:'E-Mail',targetFrame:'<Агуулах хүрээ>',targetPopup:'<popup цонх>',targetFrameName:'Очих фремын нэр',targetPopupName:'Popup цонхны нэр',popupFeatures:'Popup цонхны онцлог',popupResizable:'Resizable',popupStatusBar:'Статус хэсэг',popupLocationBar:'Location хэсэг',popupToolbar:'Багажны хэсэг',popupMenuBar:'Meню хэсэг',popupFullScreen:'Цонх дүүргэх (IE)',popupScrollBars:'Скрол хэсэгүүд',popupDependent:'Хамаатай (Netscape)',popupLeft:'Зүүн байрлал',popupTop:'Дээд байрлал',id:'Id',langDir:'Хэлний чиглэл',langDirLTR:'Зүүнээс баруун (LTR)',langDirRTL:'Баруунаас зүүн (RTL)',acccessKey:'Холбох түлхүүр',name:'Нэр',langCode:'Хэлний чиглэл',tabIndex:'Tab индекс',advisoryTitle:'Зөвлөлдөх гарчиг',advisoryContentType:'Зөвлөлдөх төрлийн агуулга',cssClasses:'Stylesheet классууд',charset:'Тэмдэгт оноох нөөцөд холбогдсон',styles:'Загвар',selectAnchor:'Холбоос сонгох',anchorName:'Холбоосын нэрээр',anchorId:'Элемэнт Id-гаар',emailAddress:'E-Mail Хаяг',emailSubject:'Message гарчиг',emailBody:'Message-ийн агуулга',noAnchors:'(Баримт бичиг холбоосгүй байна)',noUrl:'Линк URL-ээ төрөлжүүлнэ үү',noEmail:'Е-mail хаягаа төрөлжүүлнэ үү'},anchor:{toolbar:'Холбоос Оруулах/Засварлах',menu:'Холбоос шинж чанар',title:'Холбоос шинж чанар',name:'Холбоос нэр',errorName:'Холбоос төрөл оруулна уу'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Хай мөн Дарж бич',find:'Хайх',replace:'Солих',findWhat:'Хайх үг/үсэг:',replaceWith:'Солих үг:',notFoundMsg:'Хайсан текст олсонгүй.',matchCase:'Тэнцэх төлөв',matchWord:'Тэнцэх бүтэн үг',matchCyclic:'Match cyclic',replaceAll:'Бүгдийг нь Солих',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Хүснэгт',title:'Хүснэгт',menu:'Хүснэгт',deleteTable:'Хүснэгт устгах',rows:'Мөр',columns:'Багана',border:'Хүрээний хэмжээ',widthPx:'цэг',widthPc:'хувь',widthUnit:'width unit',cellSpace:'Нүх хоорондын зай (spacing)',cellPad:'Нүх доторлох(padding)',caption:'Тайлбар',summary:'Тайлбар',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Нүх/зай',insertBefore:'Нүх/зай өмнө нь оруулах',insertAfter:'Нүх/зай дараа нь оруулах',deleteCell:'Нүх устгах',merge:'Нүх нэгтэх',mergeRight:'Баруун тийш нэгтгэх',mergeDown:'Доош нэгтгэх',splitHorizontal:'Нүх/зайг босоогоор нь тусгаарлах',splitVertical:'Нүх/зайг хөндлөнгөөр нь тусгаарлах',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Мөр',insertBefore:'Мөр өмнө нь оруулах',insertAfter:'Мөр дараа нь оруулах',deleteRow:'Мөр устгах'},column:{menu:'Багана',insertBefore:'Багана өмнө нь оруулах',insertAfter:'Багана дараа нь оруулах',deleteColumn:'Багана устгах'}},button:{title:'Товчны шинж чанар',text:'Тэкст (Утга)',type:'Төрөл',typeBtn:'Товч',typeSbm:'Submit',typeRst:'Болих'},checkboxAndRadio:{checkboxTitle:'Чекбоксны шинж чанар',radioTitle:'Радио товчны шинж чанар',value:'Утга',selected:'Сонгогдсон'},form:{title:'Форм шинж чанар',menu:'Форм шинж чанар',action:'Үйлдэл',method:'Арга',encoding:'Encoding'},select:{title:'Согогч талбарын шинж чанар',selectInfo:'Мэдээлэл',opAvail:'Идвэхтэй сонголт',value:'Утга',size:'Хэмжээ',lines:'Мөр',chkMulti:'Олон сонголт зөвшөөрөх',opText:'Тэкст',opValue:'Утга',btnAdd:'Нэмэх',btnModify:'Өөрчлөх',btnUp:'Дээш',btnDown:'Доош',btnSetValue:'Сонгогдсан утга оноох',btnDelete:'Устгах'},textarea:{title:'Текст орчны шинж чанар',cols:'Багана',rows:'Мөр'},textfield:{title:'Текст талбарын шинж чанар',name:'Нэр',value:'Утга',charWidth:'Тэмдэгтын өргөн',maxChars:'Хамгийн их тэмдэгт',type:'Төрөл',typeText:'Текст',typePass:'Нууц үг'},hidden:{title:'Нууц талбарын шинж чанар',name:'Нэр',value:'Утга'},image:{title:'Зураг',titleButton:'Зурган товчны шинж чанар',menu:'Зураг',infoTab:'Зурагны мэдээлэл',btnUpload:'Үүнийг сервэррүү илгээ',upload:'Хуулах',alt:'Тайлбар текст',lockRatio:'Радио түгжих',unlockRatio:'Unlock Ratio',resetSize:'хэмжээ дахин оноох',border:'Хүрээ',hSpace:'Хөндлөн зай',vSpace:'Босоо зай',alertUrl:'Зурагны URL-ын төрлийн сонгоно уу',linkTab:'Линк',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Флаш шинж чанар',propertiesTab:'Properties',title:'Флаш шинж чанар',chkPlay:'Автоматаар тоглох',chkLoop:'Давтах',chkMenu:'Флаш цэс идвэхжүүлэх',chkFull:'Allow Fullscreen',scale:'Өргөгтгөх',scaleAll:'Бүгдийг харуулах',scaleNoBorder:'Хүрээгүй',scaleFit:'Яг тааруулах',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs доод талд',alignAbsMiddle:'Abs Дунд талд',alignBaseline:'Baseline',alignTextTop:'Текст дээр',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Фонны өнгө',hSpace:'Хөндлөн зай',vSpace:'Босоо зай',validateSrc:'Линк URL-ээ төрөлжүүлнэ үү',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Үгийн дүрэх шалгах',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Толь бичиггүй',changeTo:'Өөрчлөх',btnIgnore:'Зөвшөөрөх',btnIgnoreAll:'Бүгдийг зөвшөөрөх',btnReplace:'Дарж бичих',btnReplaceAll:'Бүгдийг Дарж бичих',btnUndo:'Буцаах',noSuggestions:'- Тайлбаргүй -',progress:'Дүрэм шалгаж байгаа үйл явц...',noMispell:'Дүрэм шалгаад дууссан: Алдаа олдсонгүй',noChanges:'Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй',oneChange:'Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн',manyChanges:'Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн',ieSpellDownload:'Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?'},smiley:{toolbar:'Тодорхойлолт',title:'Тодорхойлолт оруулах',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Дугаарлагдсан жагсаалт',bulletedlist:'Цэгтэй жагсаалт',indent:'Догол мөр хасах',outdent:'Догол мөр нэмэх',justify:{left:'Зүүн талд байрлуулах',center:'Төвд байрлуулах',right:'Баруун талд байрлуулах',block:'Блок хэлбэрээр байрлуулах'},blockquote:'Хайрцаглах',clipboard:{title:'Буулгах',cutError:'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.',copyError:'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.',pasteMsg:'(<strong>Ctrl/Cmd+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.',securityMsg:'Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Word-оос буулгах',title:'Word-оос буулгах',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Plain Text-ээс буулгах',title:'Plain Text-ээс буулгах'},templates:{button:'Загварууд',title:'Загварын агуулга',options:'Template Options',insertOption:'Одоогийн агууллагыг дарж бичих',selectPromptMsg:'Загварыг нээж editor-рүү сонгож оруулна уу<br />(Одоогийн агууллагыг устаж магадгүй):',emptyListMsg:'(Загвар тодорхойлогдоогүй байна)'},showBlocks:'Block-уудыг үзүүлэх',stylesCombo:{label:'Загвар',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Формат',panelTitle:'Формат',tag_p:'Хэвийн',tag_pre:'Formatted',tag_address:'Хаяг',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Paragraph (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Фонт',voiceLabel:'Font',panelTitle:'Фонт'},fontSize:{label:'Хэмжээ',voiceLabel:'Font Size',panelTitle:'Хэмжээ'},colorButton:{textColorTitle:'Фонтны өнгө',bgColorTitle:'Фонны өнгө',panelTitle:'Colors',auto:'Автоматаар',more:'Нэмэлт өнгөнүүд...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/ms.js b/modules_v2/ckeditor/lang/ms.js new file mode 100644 index 0000000000..d4dedd66bd --- /dev/null +++ b/modules_v2/ckeditor/lang/ms.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.ms={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Sumber',newPage:'Helaian Baru',save:'Simpan',preview:'Prebiu',cut:'Potong',copy:'Salin',paste:'Tampal',print:'Cetak',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Pilih Semua',removeFormat:'Buang Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Masukkan Garisan Membujur',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Buang Sambungan',undo:'Batalkan',redo:'Ulangkan',common:{browseServer:'Browse Server',url:'URL',protocol:'Protokol',upload:'Muat Naik',uploadSubmit:'Hantar ke Server',image:'Gambar',flash:'Flash',form:'Borang',checkbox:'Checkbox',radio:'Butang Radio',textField:'Text Field',textarea:'Textarea',hiddenField:'Field Tersembunyi',button:'Butang',select:'Field Pilihan',imageButton:'Butang Bergambar',notSet:'<tidak di set>',id:'Id',name:'Nama',langDir:'Arah Tulisan',langDirLtr:'Kiri ke Kanan (LTR)',langDirRtl:'Kanan ke Kiri (RTL)',langCode:'Kod Bahasa',longDescr:'Butiran Panjang URL',cssClass:'Kelas-kelas Stylesheet',advisoryTitle:'Tajuk Makluman',cssStyle:'Stail',ok:'OK',cancel:'Batal',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Lebar',height:'Tinggi',align:'Jajaran',alignLeft:'Kiri',alignRight:'Kanan',alignCenter:'Tengah',alignTop:'Atas',alignMiddle:'Pertengahan',alignBottom:'Bawah',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Masukkan Huruf Istimewa',title:'Sila pilih huruf istimewa',options:'Special Character Options'},link:{toolbar:'Masukkan/Sunting Sambungan',other:'<lain>',menu:'Sunting Sambungan',title:'Sambungan',info:'Butiran Sambungan',target:'Sasaran',upload:'Muat Naik',advanced:'Advanced',type:'Jenis Sambungan',toUrl:'URL',toAnchor:'Pautan dalam muka surat ini',toEmail:'E-Mail',targetFrame:'<bingkai>',targetPopup:'<tetingkap popup>',targetFrameName:'Nama Bingkai Sasaran',targetPopupName:'Nama Tetingkap Popup',popupFeatures:'Ciri Tetingkap Popup',popupResizable:'Resizable',popupStatusBar:'Bar Status',popupLocationBar:'Bar Lokasi',popupToolbar:'Toolbar',popupMenuBar:'Bar Menu',popupFullScreen:'Skrin Penuh (IE)',popupScrollBars:'Bar-bar skrol',popupDependent:'Bergantungan (Netscape)',popupLeft:'Posisi Kiri',popupTop:'Posisi Atas',id:'Id',langDir:'Arah Tulisan',langDirLTR:'Kiri ke Kanan (LTR)',langDirRTL:'Kanan ke Kiri (RTL)',acccessKey:'Kunci Akses',name:'Nama',langCode:'Arah Tulisan',tabIndex:'Indeks Tab ',advisoryTitle:'Tajuk Makluman',advisoryContentType:'Jenis Kandungan Makluman',cssClasses:'Kelas-kelas Stylesheet',charset:'Linked Resource Charset',styles:'Stail',selectAnchor:'Sila pilih pautan',anchorName:'dengan menggunakan nama pautan',anchorId:'dengan menggunakan ID elemen',emailAddress:'Alamat E-Mail',emailSubject:'Subjek Mesej',emailBody:'Isi Kandungan Mesej',noAnchors:'(Tiada pautan terdapat dalam dokumen ini)',noUrl:'Sila taip sambungan URL',noEmail:'Sila taip alamat e-mail'},anchor:{toolbar:'Masukkan/Sunting Pautan',menu:'Ciri-ciri Pautan',title:'Ciri-ciri Pautan',name:'Nama Pautan',errorName:'Sila taip nama pautan'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Cari',replace:'Ganti',findWhat:'Perkataan yang dicari:',replaceWith:'Diganti dengan:',notFoundMsg:'Text yang dicari tidak dijumpai.',matchCase:'Padanan case huruf',matchWord:'Padana Keseluruhan perkataan',matchCyclic:'Match cyclic',replaceAll:'Ganti semua',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Jadual',title:'Ciri-ciri Jadual',menu:'Ciri-ciri Jadual',deleteTable:'Delete Table',rows:'Barisan',columns:'Jaluran',border:'Saiz Border',widthPx:'piksel-piksel',widthPc:'peratus',widthUnit:'width unit',cellSpace:'Ruangan Antara Sel',cellPad:'Tambahan Ruang Sel',caption:'Keterangan',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Buangkan Sel-sel',merge:'Cantumkan Sel-sel',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Buangkan Baris'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Buangkan Lajur'}},button:{title:'Ciri-ciri Butang',text:'Teks (Nilai)',type:'Jenis',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Ciri-ciri Checkbox',radioTitle:'Ciri-ciri Butang Radio',value:'Nilai',selected:'Dipilih'},form:{title:'Ciri-ciri Borang',menu:'Ciri-ciri Borang',action:'Tindakan borang',method:'Cara borang dihantar',encoding:'Encoding'},select:{title:'Ciri-ciri Selection Field',selectInfo:'Select Info',opAvail:'Pilihan sediada',value:'Nilai',size:'Saiz',lines:'garisan',chkMulti:'Benarkan pilihan pelbagai',opText:'Teks',opValue:'Nilai',btnAdd:'Tambah Pilihan',btnModify:'Ubah Pilihan',btnUp:'Naik ke atas',btnDown:'Turun ke bawah',btnSetValue:'Set sebagai nilai terpilih',btnDelete:'Padam'},textarea:{title:'Ciri-ciri Textarea',cols:'Lajur',rows:'Baris'},textfield:{title:'Ciri-ciri Text Field',name:'Nama',value:'Nilai',charWidth:'Lebar isian',maxChars:'Isian Maksimum',type:'Jenis',typeText:'Teks',typePass:'Kata Laluan'},hidden:{title:'Ciri-ciri Field Tersembunyi',name:'Nama',value:'Nilai'},image:{title:'Ciri-ciri Imej',titleButton:'Ciri-ciri Butang Bergambar',menu:'Ciri-ciri Imej',infoTab:'Info Imej',btnUpload:'Hantar ke Server',upload:'Muat Naik',alt:'Text Alternatif',lockRatio:'Tetapkan Nisbah',unlockRatio:'Unlock Ratio',resetSize:'Saiz Set Semula',border:'Border',hSpace:'Ruang Melintang',vSpace:'Ruang Menegak',alertUrl:'Sila taip URL untuk fail gambar',linkTab:'Sambungan',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Bawah Mutlak',alignAbsMiddle:'Pertengahan Mutlak',alignBaseline:'Garis Dasar',alignTextTop:'Atas Text',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Warna Latarbelakang',hSpace:'Ruang Melintang',vSpace:'Ruang Menegak',validateSrc:'Sila taip sambungan URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Semak Ejaan',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Tidak terdapat didalam kamus',changeTo:'Tukarkan kepada',btnIgnore:'Biar',btnIgnoreAll:'Biarkan semua',btnReplace:'Ganti',btnReplaceAll:'Gantikan Semua',btnUndo:'Batalkan',noSuggestions:'- Tiada cadangan -',progress:'Pemeriksaan ejaan sedang diproses...',noMispell:'Pemeriksaan ejaan siap: Tiada salah ejaan',noChanges:'Pemeriksaan ejaan siap: Tiada perkataan diubah',oneChange:'Pemeriksaan ejaan siap: Satu perkataan telah diubah',manyChanges:'Pemeriksaan ejaan siap: %1 perkataan diubah',ieSpellDownload:'Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?'},smiley:{toolbar:'Smiley',title:'Masukkan Smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Senarai bernombor',bulletedlist:'Senarai tidak bernombor',indent:'Tambahkan Inden',outdent:'Kurangkan Inden',justify:{left:'Jajaran Kiri',center:'Jajaran Tengah',right:'Jajaran Kanan',block:'Jajaran Blok'},blockquote:'Block Quote',clipboard:{title:'Tampal',cutError:'Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).',copyError:'Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).',pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Tampal dari Word',title:'Tampal dari Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Tampal sebagai text biasa',title:'Tampal sebagai text biasa'},templates:{button:'Templat',title:'Templat Kandungan',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):',emptyListMsg:'(Tiada Templat Disimpan)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stail',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Telah Diformat',tag_address:'Alamat',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Perenggan (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'Saiz',voiceLabel:'Font Size',panelTitle:'Saiz'},colorButton:{textColorTitle:'Warna Text',bgColorTitle:'Warna Latarbelakang',panelTitle:'Colors',auto:'Otomatik',more:'Warna lain-lain...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/nb.js b/modules_v2/ckeditor/lang/nb.js new file mode 100644 index 0000000000..6f2e20ed37 --- /dev/null +++ b/modules_v2/ckeditor/lang/nb.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.nb={dir:'ltr',editorTitle:'Rikteksteditor, %1, trykk ALT 0 for hjelp.',toolbar:'Verktøylinje',editor:'Rikteksteditor',source:'Kilde',newPage:'Ny Side',save:'Lagre',preview:'Forhåndsvis',cut:'Klipp ut',copy:'Kopier',paste:'Lim inn',print:'Skriv ut',underline:'Understrek',bold:'Fet',italic:'Kursiv',selectAll:'Merk alt',removeFormat:'Fjern format',strike:'Gjennomstrek',subscript:'Senket skrift',superscript:'Hevet skrift',horizontalrule:'Sett inn horisontal linje',pagebreak:'Sett inn sideskift',pagebreakAlt:'Page Break',unlink:'Fjern lenke',undo:'Angre',redo:'Gjør om',common:{browseServer:'Bla igjennom server',url:'URL',protocol:'Protokoll',upload:'Last opp',uploadSubmit:'Send det til serveren',image:'Bilde',flash:'Flash',form:'Skjema',checkbox:'Avmerkingsboks',radio:'Alternativknapp',textField:'Tekstboks',textarea:'Tekstområde',hiddenField:'Skjult felt',button:'Knapp',select:'Rullegardinliste',imageButton:'Bildeknapp',notSet:'<ikke satt>',id:'Id',name:'Navn',langDir:'Språkretning',langDirLtr:'Venstre til høyre (VTH)',langDirRtl:'Høyre til venstre (HTV)',langCode:'Språkkode',longDescr:'Utvidet beskrivelse',cssClass:'Stilarkklasser',advisoryTitle:'Tittel',cssStyle:'Stil',ok:'OK',cancel:'Avbryt',close:'Lukk',preview:'Forhåndsvis',generalTab:'Generelt',advancedTab:'Avansert',validateNumberFailed:'Denne verdien er ikke ett nummer',confirmNewPage:'Alle endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?',confirmCancel:'Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?',options:'Valg',target:'Mål',targetNew:'Nytt vindu (_blank)',targetTop:'Hele vindu (_top)',targetSelf:'Samme vindu (_self)',targetParent:'Foreldrevindu (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Bredde',height:'Høyde',align:'Juster',alignLeft:'Venstre',alignRight:'Høyre',alignCenter:'Midtjuster',alignTop:'Topp',alignMiddle:'Midten',alignBottom:'Bunn',invalidHeight:'Høyde må være ett nummer',invalidWidth:'Bredde må være ett nummer.',unavailable:'%1<span class="cke_accessibility">, utilgjenglig</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Sett inn spesielt tegn',title:'Velg spesielt tegn',options:'Special Character Options'},link:{toolbar:'Sett inn/Rediger lenke',other:'<other>',menu:'Rediger lenke',title:'Lenke',info:'Lenkeinfo',target:'Mål',upload:'Last opp',advanced:'Avansert',type:'Lenketype',toUrl:'URL',toAnchor:'Lenke til anker i teksten',toEmail:'E-post',targetFrame:'<ramme>',targetPopup:'<popup vindu>',targetFrameName:'Målramme',targetPopupName:'Navn på popup-vindus',popupFeatures:'Egenskaper for popup-vindu',popupResizable:'Skalérbar',popupStatusBar:'Statuslinje',popupLocationBar:'Adresselinje',popupToolbar:'Verktøylinje',popupMenuBar:'Menylinje',popupFullScreen:'Full skjerm (IE)',popupScrollBars:'Scrollbar',popupDependent:'Avhenging (Netscape)',popupLeft:'Venstre posisjon',popupTop:'Topp-posisjon',id:'Id',langDir:'Språkretning',langDirLTR:'Venstre til høyre (VTH)',langDirRTL:'Høyre til venstre (HTV)',acccessKey:'Aksessknapp',name:'Navn',langCode:'Språkretning',tabIndex:'Tab Indeks',advisoryTitle:'Tittel',advisoryContentType:'Type',cssClasses:'Stilarkklasser',charset:'Lenket språkkart',styles:'Stil',selectAnchor:'Velg et anker',anchorName:'Anker etter navn',anchorId:'Element etter ID',emailAddress:'E-postadresse',emailSubject:'Meldingsemne',emailBody:'Melding',noAnchors:'(Ingen anker i dokumentet)',noUrl:'Vennligst skriv inn lenkens url',noEmail:'Vennligst skriv inn e-postadressen'},anchor:{toolbar:'Sett inn/Rediger anker',menu:'Egenskaper for anker',title:'Egenskaper for anker',name:'Ankernavn',errorName:'Vennligst skriv inn ankernavnet'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Søk og erstatt',find:'Søk',replace:'Erstatt',findWhat:'Søk etter:',replaceWith:'Erstatt med:',notFoundMsg:'Fant ikke søketeksten.',matchCase:'Skill mellom store og små bokstaver',matchWord:'Bare hele ord',matchCyclic:'Søk i hele dokumentet',replaceAll:'Erstatt alle',replaceSuccessMsg:'%1 tilfelle erstattet.'},table:{toolbar:'Tabell',title:'Egenskaper for tabell',menu:'Egenskaper for tabell',deleteTable:'Slett tabell',rows:'Rader',columns:'Kolonner',border:'Rammestørrelse',widthPx:'piksler',widthPc:'prosent',widthUnit:'Bredde-enhet',cellSpace:'Cellemarg',cellPad:'Cellepolstring',caption:'Tittel',summary:'Sammendrag',headers:'Overskrifter',headersNone:'Ingen',headersColumn:'Første kolonne',headersRow:'Første rad',headersBoth:'Begge',invalidRows:'Antall rader må være ett tall større enn 0.',invalidCols:'Antall kolonner må være ett tall større enn 0.',invalidBorder:'Rammestørrelse må være ett tall.',invalidWidth:'Tabellbredde må være ett nummer.',invalidHeight:'Tabellhøyde må være ett nummer.',invalidCellSpacing:'Cellemellomrom må være ett nummer.',invalidCellPadding:'Cellefyll må være ett nummer.',cell:{menu:'Celle',insertBefore:'Sett inn celle før',insertAfter:'Sett inn celle etter',deleteCell:'Slett celler',merge:'Slå sammen celler',mergeRight:'Slå sammen høyre',mergeDown:'Slå sammen ned',splitHorizontal:'Del celle horisontalt',splitVertical:'Del celle vertikalt',title:'Celleegenskaper',cellType:'Celletype',rowSpan:'Radspenn',colSpan:'Kolonnespenn',wordWrap:'Tekstbrytning',hAlign:'Horisontal justering',vAlign:'Vertikal justering',alignBaseline:'Grunnlinje',bgColor:'Bakgrunnsfarge',borderColor:'Rammefarge',data:'Data',header:'Overskrift',yes:'Ja',no:'Nei',invalidWidth:'Cellebredde må være ett nummer',invalidHeight:'Cellehøyde må være ett nummer',invalidRowSpan:'Radspenn må være ett nummer.',invalidColSpan:'Kolonnespenn må være ett nummer.',chooseColor:'Velg'},row:{menu:'Rader',insertBefore:'Sett inn rad før',insertAfter:'Sett inn rad etter',deleteRow:'Slett rader'},column:{menu:'Kolonne',insertBefore:'Sett inn kolonne før',insertAfter:'Sett inn kolonne etter',deleteColumn:'Slett kolonner'}},button:{title:'Egenskaper for knapp',text:'Tekst (verdi)',type:'Type',typeBtn:'Knapp',typeSbm:'Send',typeRst:'Nullstill'},checkboxAndRadio:{checkboxTitle:'Egenskaper for avmerkingsboks',radioTitle:'Egenskaper for alternativknapp',value:'Verdi',selected:'Valgt'},form:{title:'Egenskaper for skjema',menu:'Egenskaper for skjema',action:'Handling',method:'Metode',encoding:'Encoding'},select:{title:'Egenskaper for rullegardinliste',selectInfo:'Info',opAvail:'Tilgjenglige alternativer',value:'Verdi',size:'Størrelse',lines:'Linjer',chkMulti:'Tillat flervalg',opText:'Tekst',opValue:'Verdi',btnAdd:'Legg til',btnModify:'Endre',btnUp:'Opp',btnDown:'Ned',btnSetValue:'Sett som valgt',btnDelete:'Slett'},textarea:{title:'Egenskaper for tekstområde',cols:'Kolonner',rows:'Rader'},textfield:{title:'Egenskaper for tekstfelt',name:'Navn',value:'Verdi',charWidth:'Tegnbredde',maxChars:'Maks antall tegn',type:'Type',typeText:'Tekst',typePass:'Passord'},hidden:{title:'Egenskaper for skjult felt',name:'Navn',value:'Verdi'},image:{title:'Bildeegenskaper',titleButton:'Egenskaper for bildeknapp',menu:'Bildeegenskaper',infoTab:'Bildeinformasjon',btnUpload:'Send det til serveren',upload:'Last opp',alt:'Alternativ tekst',lockRatio:'Lås forhold',unlockRatio:'Ikke lås forhold',resetSize:'Tilbakestill størrelse',border:'Ramme',hSpace:'HMarg',vSpace:'VMarg',alertUrl:'Vennligst skriv bilde-urlen',linkTab:'Lenke',button2Img:'Vil du endre den valgte bildeknappen til ett vanlig bilde?',img2Button:'Vil du endre det valgte bildet til en bildeknapp?',urlMissing:'Bildets adresse mangler.',validateBorder:'Ramme må være ett nummer.',validateHSpace:'HSpace må være ett nummer.',validateVSpace:'VSpace må være ett nummer.'},flash:{properties:'Egenskaper for Flash-objekt',propertiesTab:'Egenskaper',title:'Flash-egenskaper',chkPlay:'Autospill',chkLoop:'Loop',chkMenu:'Slå på Flash-meny',chkFull:'Tillat fullskjerm',scale:'Skaler',scaleAll:'Vis alt',scaleNoBorder:'Ingen ramme',scaleFit:'Skaler til å passe',access:'Scripttilgang',accessAlways:'Alltid',accessSameDomain:'Samme domene',accessNever:'Aldri',alignAbsBottom:'Abs bunn',alignAbsMiddle:'Abs midten',alignBaseline:'Bunnlinje',alignTextTop:'Tekst topp',quality:'Kvalitet',qualityBest:'Best',qualityHigh:'Høy',qualityAutoHigh:'Auto Høy',qualityMedium:'Medium',qualityAutoLow:'Auto Lav',qualityLow:'Lav',windowModeWindow:'Vindu',windowModeOpaque:'Opaque',windowModeTransparent:'Gjennomsiktig',windowMode:'Vindu modus',flashvars:'Variabler for flash',bgcolor:'Bakgrunnsfarge',hSpace:'HMarg',vSpace:'VMarg',validateSrc:'Vennligst skriv inn lenkens url',validateHSpace:'HSpace må være ett nummer.',validateVSpace:'VSpace må være ett nummer.'},spellCheck:{toolbar:'Stavekontroll',title:'Stavekontroll',notAvailable:'Beklager, tjenesten er utilgjenglig nå.',errorLoading:'Feil under lasting av applicationstjeneste tjener: %s.',notInDic:'Ikke i ordboken',changeTo:'Endre til',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer alle',btnReplace:'Erstatt',btnReplaceAll:'Erstatt alle',btnUndo:'Angre',noSuggestions:'- Ingen forslag -',progress:'Stavekontroll pågår...',noMispell:'Stavekontroll fullført: ingen feilstavinger funnet',noChanges:'Stavekontroll fullført: ingen ord endret',oneChange:'Stavekontroll fullført: Ett ord endret',manyChanges:'Stavekontroll fullført: %1 ord endret',ieSpellDownload:'Stavekontroll er ikke installert. Vil du laste den ned nå?'},smiley:{toolbar:'Smil',title:'Sett inn smil',options:'Smiley Options'},elementsPath:{eleLabel:'Element-sti',eleTitle:'%1 element'},numberedlist:'Nummerert liste',bulletedlist:'Uordnet liste',indent:'Øk nivå',outdent:'Senk nivå',justify:{left:'Venstrejuster',center:'Midtjuster',right:'Høyrejuster',block:'Blokkjuster'},blockquote:'Blockquote',clipboard:{title:'Lim inn',cutError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).',copyError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).',pasteMsg:'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',securityMsg:'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.',pasteArea:'Innlimingsområde'},pastefromword:{confirmCleanup:'Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?',toolbar:'Lim inn fra Word',title:'Lim inn fra Word',error:'Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil'},pasteText:{button:'Lim inn som ren tekst',title:'Lim inn som ren tekst'},templates:{button:'Maler',title:'Innholdsmaler',options:'Template Options',insertOption:'Erstatt faktisk innold',selectPromptMsg:'Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):',emptyListMsg:'(Ingen maler definert)'},showBlocks:'Vis blokker',stylesCombo:{label:'Stil',panelTitle:'Stilformater',panelTitle1:'Blokkstiler',panelTitle2:'Inlinestiler',panelTitle3:'Objektstiler'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatert',tag_address:'Adresse',tag_h1:'Tittel 1',tag_h2:'Tittel 2',tag_h3:'Tittel 3',tag_h4:'Tittel 4',tag_h5:'Tittel 5',tag_h6:'Tittel 6',tag_div:'Normal (DIV)'},div:{title:'Sett inn Div Container',toolbar:'Sett inn Div Container',cssClassInputLabel:'Stilark-klasser',styleSelectLabel:'Stil',IdInputLabel:'Id',languageCodeInputLabel:' Språk-kode',inlineStyleInputLabel:'Inlinestiler',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Språkretning',langDirLTRLabel:'Venstre til høyre (VTH)',langDirRTLLabel:'Høyre til venstre (HTV)',edit:'Rediger Div',remove:'Fjern Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Skrift',voiceLabel:'Font',panelTitle:'Skrift'},fontSize:{label:'Størrelse',voiceLabel:'Font Størrelse',panelTitle:'Størrelse'},colorButton:{textColorTitle:'Tekstfarge',bgColorTitle:'Bakgrunnsfarge',panelTitle:'Farger',auto:'Automatisk',more:'Flere farger...'},colors:{'000':'Svart',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Marine','4B0082':'Indigo',696969:'Svak grå',B22222:'Fire Brick',A52A2A:'Brun',DAA520:'Golden Rod','006400':'Mørk grå','40E0D0':'Turkis','0000CD':'Medium Blå',800080:'Purple',808080:'Grå',F00:'Red',FF8C00:'Mørk oransje',FFD700:'gull','008000':'Grønn','0FF':'Cyan','00F':'Blå',EE82EE:'Fiolett',A9A9A9:'Mørk grå',FFA07A:'Light Salmon',FFA500:'Oransje',FFFF00:'gul','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Lys Blå',DDA0DD:'Plomme',D3D3D3:'Lys grå',FFF0F5:'Lavender Blush',FAEBD7:'Antikk-hvit',FFFFE0:'Lys gul',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'Hvit'},scayt:{title:'Stavekontroll mens du skriver',opera_title:'Not supported by Opera',enable:'Slå på SCAYT',disable:'Slå av SCAYT',about:'Om SCAYT',toggle:'Veksle SCAYT',options:'Valg',langs:'Språk',moreSuggestions:'Flere forslag',ignore:'Ignorer',ignoreAll:'Ignorer Alle',addWord:'Legg til ord',emptyDic:'Ordboknavn skal ikke være tom',optionsTab:'Valg',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Språk',dictionariesTab:'Ordbøker',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Om'},about:{title:'Om CKEditor',dlgTitle:'Om CKEditor',moreInfo:'For lisensieringsinformasjon vennligst besøk vårt nettsted:',copy:'Copyright © $1. Alle rettigheter reservert.'},maximize:'Maksimer',minimize:'Minimer',fakeobjects:{anchor:'Anker',flash:'Flash Animasjon',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Ukjent objekt'},resize:'Dra for å skalere',colordialog:{title:'Velg farge',options:'Color Options',highlight:'Merk',selected:'Valgt',clear:'Tøm'},toolbarCollapse:'Slå sammen verktøylinje',toolbarExpand:'Vis verktøylinje',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/nl.js b/modules_v2/ckeditor/lang/nl.js new file mode 100644 index 0000000000..b78a0bff6f --- /dev/null +++ b/modules_v2/ckeditor/lang/nl.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.nl={dir:'ltr',editorTitle:'Tekstverwerker, %1, druk op ALT 0 voor hulp.',toolbar:'Werkbalk',editor:'Tekstverwerker',source:'Code',newPage:'Nieuwe pagina',save:'Opslaan',preview:'Voorbeeld',cut:'Knippen',copy:'Kopiëren',paste:'Plakken',print:'Printen',underline:'Onderstreept',bold:'Vet',italic:'Schuingedrukt',selectAll:'Alles selecteren',removeFormat:'Opmaak verwijderen',strike:'Doorhalen',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Horizontale lijn invoegen',pagebreak:'Pagina-einde invoegen',pagebreakAlt:'Page Break',unlink:'Link verwijderen',undo:'Ongedaan maken',redo:'Opnieuw uitvoeren',common:{browseServer:'Bladeren op server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Naar server verzenden',image:'Afbeelding',flash:'Flash',form:'Formulier',checkbox:'Aanvinkvakje',radio:'Selectievakje',textField:'Tekstveld',textarea:'Tekstvak',hiddenField:'Verborgen veld',button:'Knop',select:'Selectieveld',imageButton:'Afbeeldingsknop',notSet:'<niet ingevuld>',id:'Kenmerk',name:'Naam',langDir:'Schrijfrichting',langDirLtr:'Links naar rechts (LTR)',langDirRtl:'Rechts naar links (RTL)',langCode:'Taalcode',longDescr:'Lange URL-omschrijving',cssClass:'Stylesheet-klassen',advisoryTitle:'Aanbevolen titel',cssStyle:'Stijl',ok:'OK',cancel:'Annuleren',close:'Sluiten',preview:'Voorbeeld',generalTab:'Algemeen',advancedTab:'Geavanceerd',validateNumberFailed:'Deze waarde is geen geldig getal.',confirmNewPage:'Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?',confirmCancel:'Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?',options:'Opties',target:'Doel',targetNew:'Nieuw venster (_blank)',targetTop:'Hele venster (_top)',targetSelf:'Zelfde venster (_self)',targetParent:'Origineel venster (_parent)',langDirLTR:'Links naar rechts (LTR)',langDirRTL:'Rechts naar links (RTL)',styles:'Stijlen',cssClasses:'Stylesheet klassen',width:'Breedte',height:'Hoogte',align:'Uitlijning',alignLeft:'Links',alignRight:'Rechts',alignCenter:'Centreren',alignTop:'Boven',alignMiddle:'Midden',alignBottom:'Beneden',invalidHeight:'De hoogte moet een getal zijn.',invalidWidth:'De breedte moet een getal zijn.',unavailable:'%1<span class="cke_accessibility">, niet beschikbaar</span>'},contextmenu:{options:'Context menu opties'},specialChar:{toolbar:'Speciaal teken invoegen',title:'Selecteer speciaal teken',options:'Speciale tekens opties'},link:{toolbar:'Link invoegen/wijzigen',other:'<ander>',menu:'Link wijzigen',title:'Link',info:'Linkomschrijving',target:'Doel',upload:'Upload',advanced:'Geavanceerd',type:'Linktype',toUrl:'URL',toAnchor:'Interne link in pagina',toEmail:'E-mail',targetFrame:'<frame>',targetPopup:'<popup window>',targetFrameName:'Naam doelframe',targetPopupName:'Naam popupvenster',popupFeatures:'Instellingen popupvenster',popupResizable:'Herschaalbaar',popupStatusBar:'Statusbalk',popupLocationBar:'Locatiemenu',popupToolbar:'Menubalk',popupMenuBar:'Menubalk',popupFullScreen:'Volledig scherm (IE)',popupScrollBars:'Schuifbalken',popupDependent:'Afhankelijk (Netscape)',popupLeft:'Positie links',popupTop:'Positie boven',id:'Id',langDir:'Schrijfrichting',langDirLTR:'Links naar rechts (LTR)',langDirRTL:'Rechts naar links (RTL)',acccessKey:'Toegangstoets',name:'Naam',langCode:'Schrijfrichting',tabIndex:'Tabvolgorde',advisoryTitle:'Aanbevolen titel',advisoryContentType:'Aanbevolen content-type',cssClasses:'Stylesheet-klassen',charset:'Karakterset van gelinkte bron',styles:'Stijl',selectAnchor:'Kies een interne link',anchorName:'Op naam interne link',anchorId:'Op kenmerk interne link',emailAddress:'E-mailadres',emailSubject:'Onderwerp bericht',emailBody:'Inhoud bericht',noAnchors:'(Geen interne links in document gevonden)',noUrl:'Geef de link van de URL',noEmail:'Geef een e-mailadres'},anchor:{toolbar:'Interne link',menu:'Eigenschappen interne link',title:'Eigenschappen interne link',name:'Naam interne link',errorName:'Geef de naam van de interne link op'},list:{numberedTitle:'Eigenschappen genummerde lijst',bulletedTitle:'Eigenschappen lijst met opsommingstekens',type:'Type',start:'Start',validateStartNumber:'Starnummer van de lijst moet een heel nummer zijn.',circle:'Cirkel',disc:'Schijf',square:'Vierkant',none:'Geen',notset:'<niet gezet>',armenian:'Armeense numering',georgian:'Greorgische numering (an, ban, gan, etc.)',lowerRoman:'Romeins kleine letters (i, ii, iii, iv, v, etc.)',upperRoman:'Romeins hoofdletters (I, II, III, IV, V, etc.)',lowerAlpha:'Kleine letters (a, b, c, d, e, etc.)',upperAlpha:'Hoofdletters (A, B, C, D, E, etc.)',lowerGreek:'Grieks kleine letters (alpha, beta, gamma, etc.)',decimal:'Cijfers (1, 2, 3, etc.)',decimalLeadingZero:'Cijfers beginnen met nul (01, 02, 03, etc.)'},findAndReplace:{title:'Zoeken en vervangen',find:'Zoeken',replace:'Vervangen',findWhat:'Zoeken naar:',replaceWith:'Vervangen met:',notFoundMsg:'De opgegeven tekst is niet gevonden.',matchCase:'Hoofdlettergevoelig',matchWord:'Hele woord moet voorkomen',matchCyclic:'Doorlopend zoeken',replaceAll:'Alles vervangen',replaceSuccessMsg:'%1 resulaten vervangen.'},table:{toolbar:'Tabel',title:'Eigenschappen tabel',menu:'Eigenschappen tabel',deleteTable:'Tabel verwijderen',rows:'Rijen',columns:'Kolommen',border:'Breedte rand',widthPx:'pixels',widthPc:'procent',widthUnit:'eenheid breedte',cellSpace:'Afstand tussen cellen',cellPad:'Ruimte in de cel',caption:'Naam',summary:'Samenvatting',headers:'Koppen',headersNone:'Geen',headersColumn:'Eerste kolom',headersRow:'Eerste rij',headersBoth:'Beide',invalidRows:'Het aantal rijen moet een getal zijn groter dan 0.',invalidCols:'Het aantal kolommen moet een getal zijn groter dan 0.',invalidBorder:'De rand breedte moet een getal zijn.',invalidWidth:'De tabel breedte moet een getal zijn.',invalidHeight:'De tabel hoogte moet een getal zijn.',invalidCellSpacing:'Afstand tussen cellen moet een getal zijn.',invalidCellPadding:'Ruimte in de cel moet een getal zijn.',cell:{menu:'Cel',insertBefore:'Voeg cel in voor',insertAfter:'Voeg cel in achter',deleteCell:'Cellen verwijderen',merge:'Cellen samenvoegen',mergeRight:'Voeg samen naar rechts',mergeDown:'Voeg samen naar beneden',splitHorizontal:'Splits cellen horizontaal',splitVertical:'Splits cellen verticaal',title:'Cel eigenschappen',cellType:'Cel type',rowSpan:'Rijen samenvoegen',colSpan:'Kolommen samenvoegen',wordWrap:'Automatische terugloop',hAlign:'Horizontale uitlijning',vAlign:'Verticale uitlijning',alignBaseline:'Basislijn',bgColor:'Achtergrondkleur',borderColor:'Kleur rand',data:'Inhoud',header:'Kop',yes:'Ja',no:'Nee',invalidWidth:'De celbreedte moet een getal zijn.',invalidHeight:'De celhoogte moet een getal zijn.',invalidRowSpan:'Rijen samenvoegen moet een heel getal zijn.',invalidColSpan:'Kolommen samenvoegen moet een heel getal zijn.',chooseColor:'Kies'},row:{menu:'Rij',insertBefore:'Voeg rij in voor',insertAfter:'Voeg rij in achter',deleteRow:'Rijen verwijderen'},column:{menu:'Kolom',insertBefore:'Voeg kolom in voor',insertAfter:'Voeg kolom in achter',deleteColumn:'Kolommen verwijderen'}},button:{title:'Eigenschappen knop',text:'Tekst (waarde)',type:'Soort',typeBtn:'Knop',typeSbm:'Versturen',typeRst:'Leegmaken'},checkboxAndRadio:{checkboxTitle:'Eigenschappen aanvinkvakje',radioTitle:'Eigenschappen selectievakje',value:'Waarde',selected:'Geselecteerd'},form:{title:'Eigenschappen formulier',menu:'Eigenschappen formulier',action:'Actie',method:'Methode',encoding:'Codering'},select:{title:'Eigenschappen selectieveld',selectInfo:'Informatie',opAvail:'Beschikbare opties',value:'Waarde',size:'Grootte',lines:'Regels',chkMulti:'Gecombineerde selecties toestaan',opText:'Tekst',opValue:'Waarde',btnAdd:'Toevoegen',btnModify:'Wijzigen',btnUp:'Omhoog',btnDown:'Omlaag',btnSetValue:'Als geselecteerde waarde instellen',btnDelete:'Verwijderen'},textarea:{title:'Eigenschappen tekstvak',cols:'Kolommen',rows:'Rijen'},textfield:{title:'Eigenschappen tekstveld',name:'Naam',value:'Waarde',charWidth:'Breedte (tekens)',maxChars:'Maximum aantal tekens',type:'Soort',typeText:'Tekst',typePass:'Wachtwoord'},hidden:{title:'Eigenschappen verborgen veld',name:'Naam',value:'Waarde'},image:{title:'Eigenschappen afbeelding',titleButton:'Eigenschappen afbeeldingsknop',menu:'Eigenschappen afbeelding',infoTab:'Informatie afbeelding',btnUpload:'Naar server verzenden',upload:'Upload',alt:'Alternatieve tekst',lockRatio:'Afmetingen vergrendelen',unlockRatio:'Afmetingen ontgrendelen',resetSize:'Afmetingen resetten',border:'Rand',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Geef de URL van de afbeelding',linkTab:'Link',button2Img:'Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?',img2Button:'Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?',urlMissing:'De URL naar de afbeelding ontbreekt.',validateBorder:'Rand moet een heel nummer zijn.',validateHSpace:'HSpace moet een heel nummer zijn.',validateVSpace:'VSpace moet een heel nummer zijn.'},flash:{properties:'Eigenschappen Flash',propertiesTab:'Eigenschappen',title:'Eigenschappen Flash',chkPlay:'Automatisch afspelen',chkLoop:'Herhalen',chkMenu:"Flashmenu's inschakelen",chkFull:'Schermvullend toestaan',scale:'Schaal',scaleAll:'Alles tonen',scaleNoBorder:'Geen rand',scaleFit:'Precies passend',access:'Script toegang',accessAlways:'Altijd',accessSameDomain:'Zelfde domeinnaam',accessNever:'Nooit',alignAbsBottom:'Absoluut-onder',alignAbsMiddle:'Absoluut-midden',alignBaseline:'Basislijn',alignTextTop:'Boven tekst',quality:'Kwaliteit',qualityBest:'Beste',qualityHigh:'Hoog',qualityAutoHigh:'Automatisch hoog',qualityMedium:'Gemiddeld',qualityAutoLow:'Automatisch laag',qualityLow:'Laag',windowModeWindow:'Venster',windowModeOpaque:'Ondoorzichtig',windowModeTransparent:'Doorzichtig',windowMode:'Venster modus',flashvars:'Variabelen voor Flash',bgcolor:'Achtergrondkleur',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Geef de link van de URL',validateHSpace:'De HSpace moet een getal zijn.',validateVSpace:'De VSpace moet een getal zijn.'},spellCheck:{toolbar:'Spellingscontrole',title:'Spellingscontrole',notAvailable:'Excuses, deze dienst is momenteel niet beschikbaar.',errorLoading:'Er is een fout opgetreden bij het laden van de diesnt: %s.',notInDic:'Niet in het woordenboek',changeTo:'Wijzig in',btnIgnore:'Negeren',btnIgnoreAll:'Alles negeren',btnReplace:'Vervangen',btnReplaceAll:'Alles vervangen',btnUndo:'Ongedaan maken',noSuggestions:'-Geen suggesties-',progress:'Bezig met spellingscontrole...',noMispell:'Klaar met spellingscontrole: geen fouten gevonden',noChanges:'Klaar met spellingscontrole: geen woorden aangepast',oneChange:'Klaar met spellingscontrole: één woord aangepast',manyChanges:'Klaar met spellingscontrole: %1 woorden aangepast',ieSpellDownload:'De spellingscontrole niet geïnstalleerd. Wilt u deze nu downloaden?'},smiley:{toolbar:'Smiley',title:'Smiley invoegen',options:'Smiley opties'},elementsPath:{eleLabel:'Elementenpad',eleTitle:'%1 element'},numberedlist:'Genummerde lijst',bulletedlist:'Opsomming',indent:'Inspringen vergroten',outdent:'Inspringen verkleinen',justify:{left:'Links uitlijnen',center:'Centreren',right:'Rechts uitlijnen',block:'Uitvullen'},blockquote:'Citaatblok',clipboard:{title:'Plakken',cutError:'De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.',copyError:'De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.',pasteMsg:'Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op <strong>OK</strong>.',securityMsg:'Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.',pasteArea:'Plakgebied'},pastefromword:{confirmCleanup:'De tekst die u plakte lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?',toolbar:'Plakken als Word-gegevens',title:'Plakken als Word-gegevens',error:'Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout'},pasteText:{button:'Plakken als platte tekst',title:'Plakken als platte tekst'},templates:{button:'Sjablonen',title:'Inhoud sjabonen',options:'Template opties',insertOption:'Vervang de huidige inhoud',selectPromptMsg:'Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):',emptyListMsg:'(Geen sjablonen gedefinieerd)'},showBlocks:'Toon blokken',stylesCombo:{label:'Stijl',panelTitle:'Opmaakstijlen',panelTitle1:'Blok stijlen',panelTitle2:'In-line stijlen',panelTitle3:'Object stijlen'},format:{label:'Opmaak',panelTitle:'Opmaak',tag_p:'Normaal',tag_pre:'Met opmaak',tag_address:'Adres',tag_h1:'Kop 1',tag_h2:'Kop 2',tag_h3:'Kop 3',tag_h4:'Kop 4',tag_h5:'Kop 5',tag_h6:'Kop 6',tag_div:'Normaal (DIV)'},div:{title:'Div aanmaken',toolbar:'Div aanmaken',cssClassInputLabel:'Stylesheet klassen',styleSelectLabel:'Stijl',IdInputLabel:'Id',languageCodeInputLabel:' Taalcode',inlineStyleInputLabel:'Inline stijl',advisoryTitleInputLabel:'informatieve titel',langDirLabel:'Schrijfrichting',langDirLTRLabel:'Links naar rechts (LTR)',langDirRTLLabel:'Rechts naar links (RTL)',edit:'Div wijzigen',remove:'Div verwijderen'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Lettertype',voiceLabel:'Lettertype',panelTitle:'Lettertype'},fontSize:{label:'Lettergrootte',voiceLabel:'Lettergrootte',panelTitle:'Lettergrootte'},colorButton:{textColorTitle:'Tekstkleur',bgColorTitle:'Achtergrondkleur',panelTitle:'Kleuren',auto:'Automatisch',more:'Meer kleuren...'},colors:{'000':'Zwart',800000:'Kastanjebruin','8B4513':'Chocoladebruin','2F4F4F':'Donkerleigrijs','008080':'Blauwgroen','000080':'Marine','4B0082':'Indigo',696969:'Donkergrijs',B22222:'Baksteen',A52A2A:'Bruin',DAA520:'Donkergeel','006400':'Donkergroen','40E0D0':'Turquoise','0000CD':'Middenblauw',800080:'Paars',808080:'Grijs',F00:'Rood',FF8C00:'Donkeroranje',FFD700:'Goud','008000':'Groen','0FF':'Cyaan','00F':'Blauw',EE82EE:'Violet',A9A9A9:'Donkergrijs',FFA07A:'Lichtzalm',FFA500:'Oranje',FFFF00:'Geel','00FF00':'Felgroen',AFEEEE:'Lichtturquoise',ADD8E6:'Lichtblauw',DDA0DD:'Pruim',D3D3D3:'Lichtgrijs',FFF0F5:'Linnen',FAEBD7:'Ivoor',FFFFE0:'Lichtgeel',F0FFF0:'Honingdauw',F0FFFF:'Azuur',F0F8FF:'Licht hemelsblauw',E6E6FA:'Lavendel',FFF:'Wit'},scayt:{title:'Controleer de spelling tijdens het typen',opera_title:'Niet ondersteund door Opera',enable:'SCAYT inschakelen',disable:'SCAYT uitschakelen',about:'Over SCAYT',toggle:'SCAYT in/uitschakelen',options:'Opties',langs:'Talen',moreSuggestions:'Meer suggesties',ignore:'Negeren',ignoreAll:'Alles negeren',addWord:'Woord toevoegen',emptyDic:'De naam van het woordenboek mag niet leeg zijn.',optionsTab:'Opties',allCaps:'Negeer woorden helemaal in hoofdletters',ignoreDomainNames:'Negeer domeinnamen',mixedCase:'Negeer woorden met hoofd- en kleine letters',mixedWithDigits:'Negeer woorden met cijfers',languagesTab:'Talen',dictionariesTab:'Woordenboeken',dic_field_name:'Naam woordenboek',dic_create:'Aanmaken',dic_restore:'Terugzetten',dic_delete:'Verwijderen',dic_rename:'Hernoemen',dic_info:'Initieel wordt het gebruikerswoordenboek opgeslagen in een cookie. Cookies zijn echter beperkt in grootte. Zodra het gebruikerswoordenboek het punt bereikt waarop het niet meer in een cookie opgeslagen kan worden, dan wordt het woordenboek op de server opgeslagen. Om je persoonlijke woordenboek op je eigen server op te slaan, moet je een mapnaam opgeven. Indien je al een woordenboek hebt opgeslagen, typ dan de naam en klik op de Terugzetten knop.',aboutTab:'Over'},about:{title:'Over CKEditor',dlgTitle:'Over CKEditor',moreInfo:'Voor licentie informatie, bezoek onze website:',copy:'Copyright © $1. Alle rechten voorbehouden.'},maximize:'Maximaliseren',minimize:'Minimaliseren',fakeobjects:{anchor:'Anker',flash:'Flash animatie',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Onbekend object'},resize:'Sleep om te herschalen',colordialog:{title:'Selecteer kleur',options:'Kleuropties',highlight:'Actief',selected:'Geselecteerd',clear:'Wissen'},toolbarCollapse:'Werkbalk inklappen',toolbarExpand:'Werkbalk uitklappen',bidi:{ltr:'Schrijfrichting van links naar rechts',rtl:'Schrijfrichting van rechts naar links'}};
diff --git a/modules_v2/ckeditor/lang/no.js b/modules_v2/ckeditor/lang/no.js new file mode 100644 index 0000000000..04d86b0c2a --- /dev/null +++ b/modules_v2/ckeditor/lang/no.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.no={dir:'ltr',editorTitle:'Rikteksteditor, %1, trykk ALT 0 for hjelp.',toolbar:'Verktøylinje',editor:'Rikteksteditor',source:'Kilde',newPage:'Ny Side',save:'Lagre',preview:'Forhåndsvis',cut:'Klipp ut',copy:'Kopier',paste:'Lim inn',print:'Skriv ut',underline:'Understrek',bold:'Fet',italic:'Kursiv',selectAll:'Merk alt',removeFormat:'Fjern format',strike:'Gjennomstrek',subscript:'Senket skrift',superscript:'Hevet skrift',horizontalrule:'Sett inn horisontal linje',pagebreak:'Sett inn sideskift',pagebreakAlt:'Page Break',unlink:'Fjern lenke',undo:'Angre',redo:'Gjør om',common:{browseServer:'Bla igjennom server',url:'URL',protocol:'Protokoll',upload:'Last opp',uploadSubmit:'Send det til serveren',image:'Bilde',flash:'Flash',form:'Skjema',checkbox:'Avmerkingsboks',radio:'Alternativknapp',textField:'Tekstboks',textarea:'Tekstområde',hiddenField:'Skjult felt',button:'Knapp',select:'Rullegardinliste',imageButton:'Bildeknapp',notSet:'<ikke satt>',id:'Id',name:'Navn',langDir:'Språkretning',langDirLtr:'Venstre til høyre (VTH)',langDirRtl:'Høyre til venstre (HTV)',langCode:'Språkkode',longDescr:'Utvidet beskrivelse',cssClass:'Stilarkklasser',advisoryTitle:'Tittel',cssStyle:'Stil',ok:'OK',cancel:'Avbryt',close:'Lukk',preview:'Forhåndsvis',generalTab:'Generelt',advancedTab:'Avansert',validateNumberFailed:'Denne verdien er ikke ett nummer',confirmNewPage:'Alle endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?',confirmCancel:'Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?',options:'Valg',target:'Mål',targetNew:'Nytt vindu (_blank)',targetTop:'Hele vindu (_top)',targetSelf:'Samme vindu (_self)',targetParent:'Foreldrevindu (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Bredde',height:'Høyde',align:'Juster',alignLeft:'Venstre',alignRight:'Høyre',alignCenter:'Midtjuster',alignTop:'Topp',alignMiddle:'Midten',alignBottom:'Bunn',invalidHeight:'Høyde må være ett nummer',invalidWidth:'Bredde må være ett nummer.',unavailable:'%1<span class="cke_accessibility">, utilgjenglig</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Sett inn spesielt tegn',title:'Velg spesielt tegn',options:'Special Character Options'},link:{toolbar:'Sett inn/Rediger lenke',other:'<other>',menu:'Rediger lenke',title:'Lenke',info:'Lenkeinfo',target:'Mål',upload:'Last opp',advanced:'Avansert',type:'Lenketype',toUrl:'URL',toAnchor:'Lenke til anker i teksten',toEmail:'E-post',targetFrame:'<ramme>',targetPopup:'<popup vindu>',targetFrameName:'Målramme',targetPopupName:'Navn på popup-vindus',popupFeatures:'Egenskaper for popup-vindu',popupResizable:'Skalérbar',popupStatusBar:'Statuslinje',popupLocationBar:'Adresselinje',popupToolbar:'Verktøylinje',popupMenuBar:'Menylinje',popupFullScreen:'Full skjerm (IE)',popupScrollBars:'Scrollbar',popupDependent:'Avhenging (Netscape)',popupLeft:'Venstre posisjon',popupTop:'Topp-posisjon',id:'Id',langDir:'Språkretning',langDirLTR:'Venstre til høyre (VTH)',langDirRTL:'Høyre til venstre (HTV)',acccessKey:'Aksessknapp',name:'Navn',langCode:'Språkretning',tabIndex:'Tab Indeks',advisoryTitle:'Tittel',advisoryContentType:'Type',cssClasses:'Stilarkklasser',charset:'Lenket språkkart',styles:'Stil',selectAnchor:'Velg et anker',anchorName:'Anker etter navn',anchorId:'Element etter ID',emailAddress:'E-postadresse',emailSubject:'Meldingsemne',emailBody:'Melding',noAnchors:'(Ingen anker i dokumentet)',noUrl:'Vennligst skriv inn lenkens url',noEmail:'Vennligst skriv inn e-postadressen'},anchor:{toolbar:'Sett inn/Rediger anker',menu:'Egenskaper for anker',title:'Egenskaper for anker',name:'Ankernavn',errorName:'Vennligst skriv inn ankernavnet'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Søk og erstatt',find:'Søk',replace:'Erstatt',findWhat:'Søk etter:',replaceWith:'Erstatt med:',notFoundMsg:'Fant ikke søketeksten.',matchCase:'Skill mellom store og små bokstaver',matchWord:'Bare hele ord',matchCyclic:'Søk i hele dokumentet',replaceAll:'Erstatt alle',replaceSuccessMsg:'%1 tilfelle erstattet.'},table:{toolbar:'Tabell',title:'Egenskaper for tabell',menu:'Egenskaper for tabell',deleteTable:'Slett tabell',rows:'Rader',columns:'Kolonner',border:'Rammestørrelse',widthPx:'piksler',widthPc:'prosent',widthUnit:'Bredde-enhet',cellSpace:'Cellemarg',cellPad:'Cellepolstring',caption:'Tittel',summary:'Sammendrag',headers:'Overskrifter',headersNone:'Ingen',headersColumn:'Første kolonne',headersRow:'Første rad',headersBoth:'Begge',invalidRows:'Antall rader må være ett tall større enn 0.',invalidCols:'Antall kolonner må være ett tall større enn 0.',invalidBorder:'Rammestørrelse må være ett tall.',invalidWidth:'Tabellbredde må være ett nummer.',invalidHeight:'Tabellhøyde må være ett nummer.',invalidCellSpacing:'Cellemellomrom må være ett nummer.',invalidCellPadding:'Cellefyll må være ett nummer.',cell:{menu:'Celle',insertBefore:'Sett inn celle før',insertAfter:'Sett inn celle etter',deleteCell:'Slett celler',merge:'Slå sammen celler',mergeRight:'Slå sammen høyre',mergeDown:'Slå sammen ned',splitHorizontal:'Del celle horisontalt',splitVertical:'Del celle vertikalt',title:'Celleegenskaper',cellType:'Celletype',rowSpan:'Radspenn',colSpan:'Kolonnespenn',wordWrap:'Tekstbrytning',hAlign:'Horisontal justering',vAlign:'Vertikal justering',alignBaseline:'Grunnlinje',bgColor:'Bakgrunnsfarge',borderColor:'Rammefarge',data:'Data',header:'Overskrift',yes:'Ja',no:'Nei',invalidWidth:'Cellebredde må være ett nummer',invalidHeight:'Cellehøyde må være ett nummer',invalidRowSpan:'Radspenn må være ett nummer.',invalidColSpan:'Kolonnespenn må være ett nummer.',chooseColor:'Velg'},row:{menu:'Rader',insertBefore:'Sett inn rad før',insertAfter:'Sett inn rad etter',deleteRow:'Slett rader'},column:{menu:'Kolonne',insertBefore:'Sett inn kolonne før',insertAfter:'Sett inn kolonne etter',deleteColumn:'Slett kolonner'}},button:{title:'Egenskaper for knapp',text:'Tekst (verdi)',type:'Type',typeBtn:'Knapp',typeSbm:'Send',typeRst:'Nullstill'},checkboxAndRadio:{checkboxTitle:'Egenskaper for avmerkingsboks',radioTitle:'Egenskaper for alternativknapp',value:'Verdi',selected:'Valgt'},form:{title:'Egenskaper for skjema',menu:'Egenskaper for skjema',action:'Handling',method:'Metode',encoding:'Encoding'},select:{title:'Egenskaper for rullegardinliste',selectInfo:'Info',opAvail:'Tilgjenglige alternativer',value:'Verdi',size:'Størrelse',lines:'Linjer',chkMulti:'Tillat flervalg',opText:'Tekst',opValue:'Verdi',btnAdd:'Legg til',btnModify:'Endre',btnUp:'Opp',btnDown:'Ned',btnSetValue:'Sett som valgt',btnDelete:'Slett'},textarea:{title:'Egenskaper for tekstområde',cols:'Kolonner',rows:'Rader'},textfield:{title:'Egenskaper for tekstfelt',name:'Navn',value:'Verdi',charWidth:'Tegnbredde',maxChars:'Maks antall tegn',type:'Type',typeText:'Tekst',typePass:'Passord'},hidden:{title:'Egenskaper for skjult felt',name:'Navn',value:'Verdi'},image:{title:'Bildeegenskaper',titleButton:'Egenskaper for bildeknapp',menu:'Bildeegenskaper',infoTab:'Bildeinformasjon',btnUpload:'Send det til serveren',upload:'Last opp',alt:'Alternativ tekst',lockRatio:'Lås forhold',unlockRatio:'Ikke lås forhold',resetSize:'Tilbakestill størrelse',border:'Ramme',hSpace:'HMarg',vSpace:'VMarg',alertUrl:'Vennligst skriv bilde-urlen',linkTab:'Lenke',button2Img:'Vil du endre den valgte bildeknappen til ett vanlig bilde?',img2Button:'Vil du endre det valgte bildet til en bildeknapp?',urlMissing:'Bildets adresse mangler.',validateBorder:'Ramme må være ett nummer.',validateHSpace:'HSpace må være ett nummer.',validateVSpace:'VSpace må være ett nummer.'},flash:{properties:'Egenskaper for Flash-objekt',propertiesTab:'Egenskaper',title:'Flash-egenskaper',chkPlay:'Autospill',chkLoop:'Loop',chkMenu:'Slå på Flash-meny',chkFull:'Tillat fullskjerm',scale:'Skaler',scaleAll:'Vis alt',scaleNoBorder:'Ingen ramme',scaleFit:'Skaler til å passe',access:'Scripttilgang',accessAlways:'Alltid',accessSameDomain:'Samme domene',accessNever:'Aldri',alignAbsBottom:'Abs bunn',alignAbsMiddle:'Abs midten',alignBaseline:'Bunnlinje',alignTextTop:'Tekst topp',quality:'Kvalitet',qualityBest:'Best',qualityHigh:'Høy',qualityAutoHigh:'Auto Høy',qualityMedium:'Medium',qualityAutoLow:'Auto Lav',qualityLow:'Lav',windowModeWindow:'Vindu',windowModeOpaque:'Opaque',windowModeTransparent:'Gjennomsiktig',windowMode:'Vindu modus',flashvars:'Variabler for flash',bgcolor:'Bakgrunnsfarge',hSpace:'HMarg',vSpace:'VMarg',validateSrc:'Vennligst skriv inn lenkens url',validateHSpace:'HSpace må være ett nummer.',validateVSpace:'VSpace må være ett nummer.'},spellCheck:{toolbar:'Stavekontroll',title:'Stavekontroll',notAvailable:'Beklager, tjenesten er utilgjenglig nå.',errorLoading:'Feil under lasting av applicationstjeneste tjener: %s.',notInDic:'Ikke i ordboken',changeTo:'Endre til',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer alle',btnReplace:'Erstatt',btnReplaceAll:'Erstatt alle',btnUndo:'Angre',noSuggestions:'- Ingen forslag -',progress:'Stavekontroll pågår...',noMispell:'Stavekontroll fullført: ingen feilstavinger funnet',noChanges:'Stavekontroll fullført: ingen ord endret',oneChange:'Stavekontroll fullført: Ett ord endret',manyChanges:'Stavekontroll fullført: %1 ord endret',ieSpellDownload:'Stavekontroll er ikke installert. Vil du laste den ned nå?'},smiley:{toolbar:'Smil',title:'Sett inn smil',options:'Smiley Options'},elementsPath:{eleLabel:'Element-sti',eleTitle:'%1 element'},numberedlist:'Nummerert liste',bulletedlist:'Uordnet liste',indent:'Øk nivå',outdent:'Senk nivå',justify:{left:'Venstrejuster',center:'Midtjuster',right:'Høyrejuster',block:'Blokkjuster'},blockquote:'Blockquote',clipboard:{title:'Lim inn',cutError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).',copyError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).',pasteMsg:'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',securityMsg:'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.',pasteArea:'Innlimingsområde'},pastefromword:{confirmCleanup:'Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?',toolbar:'Lim inn fra Word',title:'Lim inn fra Word',error:'Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil'},pasteText:{button:'Lim inn som ren tekst',title:'Lim inn som ren tekst'},templates:{button:'Maler',title:'Innholdsmaler',options:'Template Options',insertOption:'Erstatt faktisk innold',selectPromptMsg:'Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):',emptyListMsg:'(Ingen maler definert)'},showBlocks:'Vis blokker',stylesCombo:{label:'Stil',panelTitle:'Stilformater',panelTitle1:'Blokkstiler',panelTitle2:'Inlinestiler',panelTitle3:'Objektstiler'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatert',tag_address:'Adresse',tag_h1:'Tittel 1',tag_h2:'Tittel 2',tag_h3:'Tittel 3',tag_h4:'Tittel 4',tag_h5:'Tittel 5',tag_h6:'Tittel 6',tag_div:'Normal (DIV)'},div:{title:'Sett inn Div Container',toolbar:'Sett inn Div Container',cssClassInputLabel:'Stilark-klasser',styleSelectLabel:'Stil',IdInputLabel:'Id',languageCodeInputLabel:' Språk-kode',inlineStyleInputLabel:'Inlinestiler',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Språkretning',langDirLTRLabel:'Venstre til høyre (VTH)',langDirRTLLabel:'Høyre til venstre (HTV)',edit:'Rediger Div',remove:'Fjern Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Skrift',voiceLabel:'Font',panelTitle:'Skrift'},fontSize:{label:'Størrelse',voiceLabel:'Font Størrelse',panelTitle:'Størrelse'},colorButton:{textColorTitle:'Tekstfarge',bgColorTitle:'Bakgrunnsfarge',panelTitle:'Farger',auto:'Automatisk',more:'Flere farger...'},colors:{'000':'Svart',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Marine','4B0082':'Indigo',696969:'Svak grå',B22222:'Fire Brick',A52A2A:'Brun',DAA520:'Golden Rod','006400':'Mørk grå','40E0D0':'Turkis','0000CD':'Medium Blå',800080:'Purple',808080:'Grå',F00:'Red',FF8C00:'Mørk oransje',FFD700:'gull','008000':'Grønn','0FF':'Cyan','00F':'Blå',EE82EE:'Fiolett',A9A9A9:'Mørk grå',FFA07A:'Light Salmon',FFA500:'Oransje',FFFF00:'gul','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Lys Blå',DDA0DD:'Plomme',D3D3D3:'Lys grå',FFF0F5:'Lavender Blush',FAEBD7:'Antikk-hvit',FFFFE0:'Lys gul',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'Hvit'},scayt:{title:'Stavekontroll mens du skriver',opera_title:'Not supported by Opera',enable:'Slå på SCAYT',disable:'Slå av SCAYT',about:'Om SCAYT',toggle:'Veksle SCAYT',options:'Valg',langs:'Språk',moreSuggestions:'Flere forslag',ignore:'Ignorer',ignoreAll:'Ignorer Alle',addWord:'Legg til ord',emptyDic:'Ordboknavn skal ikke være tom',optionsTab:'Valg',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Språk',dictionariesTab:'Ordbøker',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Om'},about:{title:'Om CKEditor',dlgTitle:'Om CKEditor',moreInfo:'For lisensieringsinformasjon vennligst besøk vårt nettsted:',copy:'Copyright © $1. Alle rettigheter reservert.'},maximize:'Maksimer',minimize:'Minimer',fakeobjects:{anchor:'Anker',flash:'Flash Animasjon',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Ukjent objekt'},resize:'Dra for å skalere',colordialog:{title:'Velg farge',options:'Color Options',highlight:'Merk',selected:'Valgt',clear:'Tøm'},toolbarCollapse:'Slå sammen verktøylinje',toolbarExpand:'Vis verktøylinje',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/pl.js b/modules_v2/ckeditor/lang/pl.js new file mode 100644 index 0000000000..6a1683b531 --- /dev/null +++ b/modules_v2/ckeditor/lang/pl.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.pl={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Źródło dokumentu',newPage:'Nowa strona',save:'Zapisz',preview:'Podgląd',cut:'Wytnij',copy:'Kopiuj',paste:'Wklej',print:'Drukuj',underline:'Podkreślenie',bold:'Pogrubienie',italic:'Kursywa',selectAll:'Zaznacz wszystko',removeFormat:'Usuń formatowanie',strike:'Przekreślenie',subscript:'Indeks dolny',superscript:'Indeks górny',horizontalrule:'Wstaw poziomą linię',pagebreak:'Wstaw odstęp',pagebreakAlt:'Page Break',unlink:'Usuń hiperłącze',undo:'Cofnij',redo:'Ponów',common:{browseServer:'Przeglądaj',url:'Adres URL',protocol:'Protokół',upload:'Wyślij',uploadSubmit:'Wyślij',image:'Obrazek',flash:'Flash',form:'Formularz',checkbox:'Pole wyboru (checkbox)',radio:'Pole wyboru (radio)',textField:'Pole tekstowe',textarea:'Obszar tekstowy',hiddenField:'Pole ukryte',button:'Przycisk',select:'Lista wyboru',imageButton:'Przycisk-obrazek',notSet:'<nie ustawione>',id:'Id',name:'Nazwa',langDir:'Kierunek tekstu',langDirLtr:'Od lewej do prawej (LTR)',langDirRtl:'Od prawej do lewej (RTL)',langCode:'Kod języka',longDescr:'Długi opis hiperłącza',cssClass:'Nazwa klasy CSS',advisoryTitle:'Opis obiektu docelowego',cssStyle:'Styl',ok:'OK',cancel:'Anuluj',close:'Close',preview:'Preview',generalTab:'Ogólne',advancedTab:'Zaawansowane',validateNumberFailed:'Ta wartość nie jest liczbą.',confirmNewPage:'Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę?',confirmCancel:'Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Szerokość',height:'Wysokość',align:'Wyrównaj',alignLeft:'Do lewej',alignRight:'Do prawej',alignCenter:'Do środka',alignTop:'Do góry',alignMiddle:'Do środka',alignBottom:'Do dołu',invalidHeight:'Wysokość musi być liczbą.',invalidWidth:'Szerokość musi być liczbą.',unavailable:'%1<span class="cke_accessibility">, niedostępne</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Wstaw znak specjalny',title:'Wybierz znak specjalny',options:'Special Character Options'},link:{toolbar:'Wstaw/edytuj hiperłącze',other:'<inny>',menu:'Edytuj hiperłącze',title:'Hiperłącze',info:'Informacje ',target:'Cel',upload:'Wyślij',advanced:'Zaawansowane',type:'Typ hiperłącza',toUrl:'URL',toAnchor:'Odnośnik wewnątrz strony',toEmail:'Adres e-mail',targetFrame:'<ramka>',targetPopup:'<wyskakujące okno>',targetFrameName:'Nazwa Ramki Docelowej',targetPopupName:'Nazwa wyskakującego okna',popupFeatures:'Właściwości wyskakującego okna',popupResizable:'Skalowalny',popupStatusBar:'Pasek statusu',popupLocationBar:'Pasek adresu',popupToolbar:'Pasek narzędzi',popupMenuBar:'Pasek menu',popupFullScreen:'Pełny ekran (IE)',popupScrollBars:'Paski przewijania',popupDependent:'Okno zależne (Netscape)',popupLeft:'Pozycja w poziomie',popupTop:'Pozycja w pionie',id:'Id',langDir:'Kierunek tekstu',langDirLTR:'Od lewej do prawej (LTR)',langDirRTL:'Od prawej do lewej (RTL)',acccessKey:'Klawisz dostępu',name:'Nazwa',langCode:'Kierunek tekstu',tabIndex:'Indeks tabeli',advisoryTitle:'Opis obiektu docelowego',advisoryContentType:'Typ MIME obiektu docelowego',cssClasses:'Nazwa klasy CSS',charset:'Kodowanie znaków obiektu docelowego',styles:'Styl',selectAnchor:'Wybierz etykietę',anchorName:'Wg etykiety',anchorId:'Wg identyfikatora elementu',emailAddress:'Adres e-mail',emailSubject:'Temat',emailBody:'Treść',noAnchors:'(W dokumencie nie zdefiniowano żadnych etykiet)',noUrl:'Podaj adres URL',noEmail:'Podaj adres e-mail'},anchor:{toolbar:'Wstaw/edytuj kotwicę',menu:'Właściwości kotwicy',title:'Właściwości kotwicy',name:'Nazwa kotwicy',errorName:'Wpisz nazwę kotwicy'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Znajdź i zamień',find:'Znajdź',replace:'Zamień',findWhat:'Znajdź:',replaceWith:'Zastąp przez:',notFoundMsg:'Nie znaleziono szukanego hasła.',matchCase:'Uwzględnij wielkość liter',matchWord:'Całe słowa',matchCyclic:'Cykliczne dopasowanie',replaceAll:'Zastąp wszystko',replaceSuccessMsg:'%1 wystąpień zastąpionych.'},table:{toolbar:'Tabela',title:'Właściwości tabeli',menu:'Właściwości tabeli',deleteTable:'Usuń tabelę',rows:'Liczba wierszy',columns:'Liczba kolumn',border:'Grubość ramki',widthPx:'piksele',widthPc:'%',widthUnit:'width unit',cellSpace:'Odstęp pomiędzy komórkami',cellPad:'Margines wewnętrzny komórek',caption:'Tytuł',summary:'Podsumowanie',headers:'Nagłowki',headersNone:'Brak',headersColumn:'Pierwsza kolumna',headersRow:'Pierwszy wiersz',headersBoth:'Oba',invalidRows:'Liczba wierszy musi być liczbą większą niż 0.',invalidCols:'Liczba kolumn musi być liczbą większą niż 0.',invalidBorder:'Liczba obramowań musi być liczbą.',invalidWidth:'Szerokość tabeli musi być liczbą.',invalidHeight:'Wysokość tabeli musi być liczbą.',invalidCellSpacing:'Odstęp komórek musi być liczbą.',invalidCellPadding:'Dopełnienie komórek musi być liczbą.',cell:{menu:'Komórka',insertBefore:'Wstaw komórkę z lewej',insertAfter:'Wstaw komórkę z prawej',deleteCell:'Usuń komórki',merge:'Połącz komórki',mergeRight:'Połącz z komórką z prawej',mergeDown:'Połącz z komórką poniżej',splitHorizontal:'Podziel komórkę poziomo',splitVertical:'Podziel komórkę pionowo',title:'Właściwości komórki',cellType:'Typ komórki',rowSpan:'Scalenie wierszy',colSpan:'Scalenie komórek',wordWrap:'Zawijanie słów',hAlign:'Wyrównanie poziome',vAlign:'Wyrównanie pionowe',alignBaseline:'Linia bazowa',bgColor:'Kolor tła',borderColor:'Kolor obramowania',data:'Dane',header:'Nagłowek',yes:'Tak',no:'Nie',invalidWidth:'Szerokość komórki musi być liczbą.',invalidHeight:'Wysokość komórki musi być liczbą.',invalidRowSpan:'Scalenie wierszy musi być liczbą całkowitą.',invalidColSpan:'Scalenie komórek musi być liczbą całkowitą.',chooseColor:'Wybierz'},row:{menu:'Wiersz',insertBefore:'Wstaw wiersz powyżej',insertAfter:'Wstaw wiersz poniżej',deleteRow:'Usuń wiersze'},column:{menu:'Kolumna',insertBefore:'Wstaw kolumnę z lewej',insertAfter:'Wstaw kolumnę z prawej',deleteColumn:'Usuń kolumny'}},button:{title:'Właściwości przycisku',text:'Tekst (Wartość)',type:'Typ',typeBtn:'Przycisk',typeSbm:'Wyślij',typeRst:'Wyzeruj'},checkboxAndRadio:{checkboxTitle:'Właściwości pola wyboru (checkbox)',radioTitle:'Właściwości pola wyboru (radio)',value:'Wartość',selected:'Zaznaczone'},form:{title:'Właściwości formularza',menu:'Właściwości formularza',action:'Akcja',method:'Metoda',encoding:'Kodowanie'},select:{title:'Właściwości listy wyboru',selectInfo:'Informacje',opAvail:'Dostępne opcje',value:'Wartość',size:'Rozmiar',lines:'linii',chkMulti:'Wielokrotny wybór',opText:'Tekst',opValue:'Wartość',btnAdd:'Dodaj',btnModify:'Zmień',btnUp:'Do góry',btnDown:'Do dołu',btnSetValue:'Ustaw wartość zaznaczoną',btnDelete:'Usuń'},textarea:{title:'Właściwości obszaru tekstowego',cols:'Kolumnu',rows:'Wiersze'},textfield:{title:'Właściwości pola tekstowego',name:'Nazwa',value:'Wartość',charWidth:'Szerokość w znakach',maxChars:'Max. szerokość',type:'Typ',typeText:'Tekst',typePass:'Hasło'},hidden:{title:'Właściwości pola ukrytego',name:'Nazwa',value:'Wartość'},image:{title:'Właściwości obrazka',titleButton:'Właściwości przycisku obrazka',menu:'Właściwości obrazka',infoTab:'Informacje o obrazku',btnUpload:'Wyślij',upload:'Wyślij',alt:'Tekst zastępczy',lockRatio:'Zablokuj proporcje',unlockRatio:'Unlock Ratio',resetSize:'Przywróć rozmiar',border:'Ramka',hSpace:'Odstęp poziomy',vSpace:'Odstęp pionowy',alertUrl:'Podaj adres obrazka.',linkTab:'Hiperłącze',button2Img:'Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?',img2Button:'Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?',urlMissing:'Podaj adres URL obrazka.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Właściwości elementu Flash',propertiesTab:'Właściwości',title:'Właściwości elementu Flash',chkPlay:'Autoodtwarzanie',chkLoop:'Pętla',chkMenu:'Włącz menu',chkFull:'Dopuść pełny ekran',scale:'Skaluj',scaleAll:'Pokaż wszystko',scaleNoBorder:'Bez Ramki',scaleFit:'Dokładne dopasowanie',access:'Dostęp skryptów',accessAlways:'Zawsze',accessSameDomain:'Ta sama domena',accessNever:'Nigdy',alignAbsBottom:'Do dołu',alignAbsMiddle:'Do środka w pionie',alignBaseline:'Do linii bazowej',alignTextTop:'Do góry tekstu',quality:'Jakość',qualityBest:'Najlepsza',qualityHigh:'Wysoka',qualityAutoHigh:'Auto wysoka',qualityMedium:'Średnia',qualityAutoLow:'Auto niska',qualityLow:'Niska',windowModeWindow:'Okno',windowModeOpaque:'Nieprzeźroczyste',windowModeTransparent:'Przeźroczyste',windowMode:'Tryb okna',flashvars:'Zmienne dla Flasha',bgcolor:'Kolor tła',hSpace:'Odstęp poziomy',vSpace:'Odstęp pionowy',validateSrc:'Podaj adres URL',validateHSpace:'Odstęp poziomy musi być liczbą.',validateVSpace:'Odstęp pionowy musi być liczbą.'},spellCheck:{toolbar:'Sprawdź pisownię',title:'Sprawdź pisownię',notAvailable:'Przepraszamy, ale usługa jest obecnie niedostępna.',errorLoading:'Błąd wczytywania hosta aplikacji usługi: %s.',notInDic:'Słowa nie ma w słowniku',changeTo:'Zmień na',btnIgnore:'Ignoruj',btnIgnoreAll:'Ignoruj wszystkie',btnReplace:'Zmień',btnReplaceAll:'Zmień wszystkie',btnUndo:'Cofnij',noSuggestions:'- Brak sugestii -',progress:'Trwa sprawdzanie...',noMispell:'Sprawdzanie zakończone: nie znaleziono błędów',noChanges:'Sprawdzanie zakończone: nie zmieniono żadnego słowa',oneChange:'Sprawdzanie zakończone: zmieniono jedno słowo',manyChanges:'Sprawdzanie zakończone: zmieniono %l słów',ieSpellDownload:'Słownik nie jest zainstalowany. Chcesz go ściągnąć?'},smiley:{toolbar:'Emotikona',title:'Wstaw emotikonę',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'element %1'},numberedlist:'Lista numerowana',bulletedlist:'Lista wypunktowana',indent:'Zwiększ wcięcie',outdent:'Zmniejsz wcięcie',justify:{left:'Wyrównaj do lewej',center:'Wyrównaj do środka',right:'Wyrównaj do prawej',block:'Wyrównaj do lewej i prawej'},blockquote:'Cytat',clipboard:{title:'Wklej',cutError:'Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.',copyError:'Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.',pasteMsg:'Proszę wkleić w poniższym polu używając klawiaturowego skrótu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknąć <STRONG>OK</STRONG>.',securityMsg:'Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę dane wkleić ponownie w tym okienku.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Word. Czy chcesz go wyczyścic przed wklejeniem?',toolbar:'Wklej z Worda',title:'Wklej z Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Wklej jako czysty tekst',title:'Wklej jako czysty tekst'},templates:{button:'Szablony',title:'Szablony zawartości',options:'Template Options',insertOption:'Zastąp aktualną zawartość',selectPromptMsg:'Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):',emptyListMsg:'(Brak zdefiniowanych szablonów)'},showBlocks:'Pokaż bloki',stylesCombo:{label:'Styl',panelTitle:'Formatting Styles',panelTitle1:'Style blokowe',panelTitle2:'Style liniowe',panelTitle3:'Style obiektowe'},format:{label:'Format',panelTitle:'Format',tag_p:'Normalny',tag_pre:'Tekst sformatowany',tag_address:'Adres',tag_h1:'Nagłówek 1',tag_h2:'Nagłówek 2',tag_h3:'Nagłówek 3',tag_h4:'Nagłówek 4',tag_h5:'Nagłówek 5',tag_h6:'Nagłówek 6',tag_div:'Normalny (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Czcionka',voiceLabel:'Czcionka',panelTitle:'Czcionka'},fontSize:{label:'Rozmiar',voiceLabel:'Rozmiar czcionki',panelTitle:'Rozmiar'},colorButton:{textColorTitle:'Kolor tekstu',bgColorTitle:'Kolor tła',panelTitle:'Colors',auto:'Automatycznie',more:'Więcej kolorów...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Sprawdź pisownię podczas pisania (SCAYT)',opera_title:'Not supported by Opera',enable:'Włącz SCAYT',disable:'Wyłącz SCAYT',about:'Na temat SCAYT',toggle:'Przełącz SCAYT',options:'Opcje',langs:'Języki',moreSuggestions:'Więcej sugestii',ignore:'Ignoruj',ignoreAll:'Ignoruj wszystkie',addWord:'Dodaj słowo',emptyDic:'Nazwa słownika nie może być pusta.',optionsTab:'Opcje',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Języki',dictionariesTab:'Słowniki',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Na temat SCAYT'},about:{title:'Na temat CKEditor',dlgTitle:'Na temat CKEditor',moreInfo:'Informacje na temat licencji można znaleźć na naszej stronie:',copy:'Copyright © $1. Wszelkie prawa zastrzeżone.'},maximize:'Maksymalizuj',minimize:'Minimalizuj',fakeobjects:{anchor:'Kotwica',flash:'Animacja Flash',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Nieznany obiekt'},resize:'Przeciągnij, aby zmienić rozmiar',colordialog:{title:'Wybierz kolor',options:'Color Options',highlight:'Zaznacz',selected:'Wybrany',clear:'Wyczyść'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/pt-br.js b/modules_v2/ckeditor/lang/pt-br.js new file mode 100644 index 0000000000..341fd2df60 --- /dev/null +++ b/modules_v2/ckeditor/lang/pt-br.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang['pt-br']={dir:'ltr',editorTitle:'Editor de Texto, %1, pressione ALT 0 para obter ajuda.',toolbar:'Barra de Ferramentas',editor:'Editor de Texto',source:'Código-Fonte',newPage:'Novo',save:'Salvar',preview:'Visualizar',cut:'Recortar',copy:'Copiar',paste:'Colar',print:'Imprimir',underline:'Sublinhado',bold:'Negrito',italic:'Itálico',selectAll:'Selecionar Tudo',removeFormat:'Remover Formatação',strike:'Tachado',subscript:'Subscrito',superscript:'Sobrescrito',horizontalrule:'Inserir Linha Horizontal',pagebreak:'Inserir Quebra de Página',pagebreakAlt:'Page Break',unlink:'Remover Link',undo:'Desfazer',redo:'Refazer',common:{browseServer:'Localizar no Servidor',url:'URL',protocol:'Protocolo',upload:'Enviar ao Servidor',uploadSubmit:'Enviar para o Servidor',image:'Imagem',flash:'Flash',form:'Formulário',checkbox:'Caixa de Seleção',radio:'Botão de Opção',textField:'Caixa de Texto',textarea:'Área de Texto',hiddenField:'Campo Oculto',button:'Botão',select:'Caixa de Listagem',imageButton:'Botão de Imagem',notSet:'<não ajustado>',id:'Id',name:'Nome',langDir:'Direção do idioma',langDirLtr:'Esquerda para Direita (LTR)',langDirRtl:'Direita para Esquerda (RTL)',langCode:'Idioma',longDescr:'Descrição da URL',cssClass:'Classe de CSS',advisoryTitle:'Título',cssStyle:'Estilos',ok:'OK',cancel:'Cancelar',close:'Fechar',preview:'Visualizar',generalTab:'Geral',advancedTab:'Avançado',validateNumberFailed:'Este valor não é um número.',confirmNewPage:'Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?',confirmCancel:'Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?',options:'Opções',target:'Destino',targetNew:'Nova Janela (_blank)',targetTop:'Janela de Cima (_top)',targetSelf:'Mesma Janela (_self)',targetParent:'Janela Pai (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Largura',height:'Altura',align:'Alinhamento',alignLeft:'Esquerda',alignRight:'Direita',alignCenter:'Centralizado',alignTop:'Superior',alignMiddle:'Centralizado',alignBottom:'Inferior',invalidHeight:'A altura tem que ser um número',invalidWidth:'A largura tem que ser um número.',unavailable:'%1<span class="cke_accessibility">, indisponível</span>'},contextmenu:{options:'Opções Menu de Contexto'},specialChar:{toolbar:'Inserir Caractere Especial',title:'Selecione um Caractere Especial',options:'Opções de Caractere Especial'},link:{toolbar:'Inserir/Editar Link',other:'<outro>',menu:'Editar Link',title:'Editar Link',info:'Informações',target:'Destino',upload:'Enviar ao Servidor',advanced:'Avançado',type:'Tipo de hiperlink',toUrl:'URL',toAnchor:'Âncora nesta página',toEmail:'E-Mail',targetFrame:'<frame>',targetPopup:'<janela popup>',targetFrameName:'Nome do Frame de Destino',targetPopupName:'Nome da Janela Pop-up',popupFeatures:'Propriedades da Janela Pop-up',popupResizable:'Redimensionável',popupStatusBar:'Barra de Status',popupLocationBar:'Barra de Endereços',popupToolbar:'Barra de Ferramentas',popupMenuBar:'Barra de Menus',popupFullScreen:'Modo Tela Cheia (IE)',popupScrollBars:'Barras de Rolagem',popupDependent:'Dependente (Netscape)',popupLeft:'Esquerda',popupTop:'Topo',id:'Id',langDir:'Direção do idioma',langDirLTR:'Esquerda para Direita (LTR)',langDirRTL:'Direita para Esquerda (RTL)',acccessKey:'Chave de Acesso',name:'Nome',langCode:'Direção do idioma',tabIndex:'Índice de Tabulação',advisoryTitle:'Título',advisoryContentType:'Tipo de Conteúdo',cssClasses:'Classe de CSS',charset:'Charset do Link',styles:'Estilos',selectAnchor:'Selecione uma âncora',anchorName:'Nome da âncora',anchorId:'Id da âncora',emailAddress:'Endereço E-Mail',emailSubject:'Assunto da Mensagem',emailBody:'Corpo da Mensagem',noAnchors:'(Não há âncoras no documento)',noUrl:'Por favor, digite o endereço do Link',noEmail:'Por favor, digite o endereço de e-mail'},anchor:{toolbar:'Inserir/Editar Âncora',menu:'Formatar Âncora',title:'Formatar Âncora',name:'Nome da Âncora',errorName:'Por favor, digite o nome da âncora'},list:{numberedTitle:'Propriedades da Lista Numerada',bulletedTitle:'Propriedades da Lista sem Numeros',type:'Tipo',start:'Início',validateStartNumber:'List start number must be a whole number.',circle:'Círculo',disc:'Disco',square:'Quadrado',none:'Nenhum',notset:'<não definido>',armenian:'Numeração Armêna',georgian:'Numeração da Geórgia (an, ban, gan, etc.)',lowerRoman:'Numeração Romana minúscula (i, ii, iii, iv, v, etc.)',upperRoman:'Numeração Romana maiúscula (I, II, III, IV, V, etc.)',lowerAlpha:'Numeração Alfabética minúscula (a, b, c, d, e, etc.)',upperAlpha:'Numeração Alfabética Maiúscula (A, B, C, D, E, etc.)',lowerGreek:'Numeração Grega minúscula (alpha, beta, gamma, etc.)',decimal:'Numeração Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Numeração Decimal com zeros (01, 02, 03, etc.)'},findAndReplace:{title:'Localizar e Substituir',find:'Localizar',replace:'Substituir',findWhat:'Procurar por:',replaceWith:'Substituir por:',notFoundMsg:'O texto especificado não foi encontrado.',matchCase:'Coincidir Maiúsculas/Minúsculas',matchWord:'Coincidir a palavra inteira',matchCyclic:'Coincidir cíclico',replaceAll:'Substituir Tudo',replaceSuccessMsg:'%1 ocorrência(s) substituída(s).'},table:{toolbar:'Tabela',title:'Formatar Tabela',menu:'Formatar Tabela',deleteTable:'Apagar Tabela',rows:'Linhas',columns:'Colunas',border:'Borda',widthPx:'pixels',widthPc:'%',widthUnit:'unidade largura',cellSpace:'Espaçamento',cellPad:'Margem interna',caption:'Legenda',summary:'Resumo',headers:'Cabeçalho',headersNone:'Nenhum',headersColumn:'Primeira coluna',headersRow:'Primeira linha',headersBoth:'Ambos',invalidRows:'O número de linhas tem que ser um número maior que 0.',invalidCols:'O número de colunas tem que ser um número maior que 0.',invalidBorder:'O tamanho da borda tem que ser um número.',invalidWidth:'A largura da tabela tem que ser um número.',invalidHeight:'A altura da tabela tem que ser um número.',invalidCellSpacing:'O espaçamento das células tem que ser um número.',invalidCellPadding:'A margem interna das células tem que ser um número.',cell:{menu:'Célula',insertBefore:'Inserir célula a esquerda',insertAfter:'Inserir célula a direita',deleteCell:'Remover Células',merge:'Mesclar Células',mergeRight:'Mesclar com célula a direita',mergeDown:'Mesclar com célula abaixo',splitHorizontal:'Dividir célula horizontalmente',splitVertical:'Dividir célula verticalmente',title:'Propriedades da célula',cellType:'Tipo de célula',rowSpan:'Linhas cobertas',colSpan:'Colunas cobertas',wordWrap:'Quebra de palavra',hAlign:'Alinhamento horizontal',vAlign:'Alinhamento vertical',alignBaseline:'Patamar de alinhamento',bgColor:'Cor de fundo',borderColor:'Cor das bordas',data:'Dados',header:'Cabeçalho',yes:'Sim',no:'Não',invalidWidth:'A largura da célula tem que ser um número.',invalidHeight:'A altura da célula tem que ser um número.',invalidRowSpan:'Linhas cobertas tem que ser um número inteiro.',invalidColSpan:'Colunas cobertas tem que ser um número inteiro.',chooseColor:'Escolher'},row:{menu:'Linha',insertBefore:'Inserir linha acima',insertAfter:'Inserir linha abaixo',deleteRow:'Remover Linhas'},column:{menu:'Coluna',insertBefore:'Inserir coluna a esquerda',insertAfter:'Inserir coluna a direita',deleteColumn:'Remover Colunas'}},button:{title:'Formatar Botão',text:'Texto (Valor)',type:'Tipo',typeBtn:'Botão',typeSbm:'Enviar',typeRst:'Limpar'},checkboxAndRadio:{checkboxTitle:'Formatar Caixa de Seleção',radioTitle:'Formatar Botão de Opção',value:'Valor',selected:'Selecionado'},form:{title:'Formatar Formulário',menu:'Formatar Formulário',action:'Ação',method:'Método',encoding:'Codificação'},select:{title:'Formatar Caixa de Listagem',selectInfo:'Informações',opAvail:'Opções disponíveis',value:'Valor',size:'Tamanho',lines:'linhas',chkMulti:'Permitir múltiplas seleções',opText:'Texto',opValue:'Valor',btnAdd:'Adicionar',btnModify:'Modificar',btnUp:'Para cima',btnDown:'Para baixo',btnSetValue:'Definir como selecionado',btnDelete:'Remover'},textarea:{title:'Formatar Área de Texto',cols:'Colunas',rows:'Linhas'},textfield:{title:'Formatar Caixa de Texto',name:'Nome',value:'Valor',charWidth:'Comprimento (em caracteres)',maxChars:'Número Máximo de Caracteres',type:'Tipo',typeText:'Texto',typePass:'Senha'},hidden:{title:'Formatar Campo Oculto',name:'Nome',value:'Valor'},image:{title:'Formatar Imagem',titleButton:'Formatar Botão de Imagem',menu:'Formatar Imagem',infoTab:'Informações da Imagem',btnUpload:'Enviar para o Servidor',upload:'Enviar',alt:'Texto Alternativo',lockRatio:'Travar Proporções',unlockRatio:'Destravar Proporções',resetSize:'Redefinir para o Tamanho Original',border:'Borda',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Por favor, digite a URL da imagem.',linkTab:'Link',button2Img:'Deseja transformar o botão de imagem em uma imagem comum?',img2Button:'Deseja transformar a imagem em um botão de imagem?',urlMissing:'URL da imagem está faltando.',validateBorder:'A borda deve ser um número inteiro.',validateHSpace:'O HSpace deve ser um número inteiro.',validateVSpace:'O VSpace deve ser um número inteiro.'},flash:{properties:'Propriedades do Flash',propertiesTab:'Propriedades',title:'Propriedades do Flash',chkPlay:'Tocar Automaticamente',chkLoop:'Tocar Infinitamente',chkMenu:'Habilita Menu Flash',chkFull:'Permitir tela cheia',scale:'Escala',scaleAll:'Mostrar tudo',scaleNoBorder:'Sem Borda',scaleFit:'Escala Exata',access:'Acesso ao script',accessAlways:'Sempre',accessSameDomain:'Acessar Mesmo Domínio',accessNever:'Nunca',alignAbsBottom:'Inferior Absoluto',alignAbsMiddle:'Centralizado Absoluto',alignBaseline:'Baseline',alignTextTop:'Superior Absoluto',quality:'Qualidade',qualityBest:'Qualidade Melhor',qualityHigh:'Qualidade Alta',qualityAutoHigh:'Qualidade Alta Automática',qualityMedium:'Qualidade Média',qualityAutoLow:'Qualidade Baixa Automática',qualityLow:'Qualidade Baixa',windowModeWindow:'Janela',windowModeOpaque:'Opaca',windowModeTransparent:'Transparente',windowMode:'Modo da janela',flashvars:'Variáveis do Flash',bgcolor:'Cor do Plano de Fundo',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Por favor, digite o endereço do link',validateHSpace:'O HSpace tem que ser um número',validateVSpace:'O VSpace tem que ser um número.'},spellCheck:{toolbar:'Verificar Ortografia',title:'Corretor Ortográfico',notAvailable:'Desculpe, o serviço não está disponível no momento.',errorLoading:'Erro carregando servidor de aplicação: %s.',notInDic:'Não encontrada',changeTo:'Alterar para',btnIgnore:'Ignorar uma vez',btnIgnoreAll:'Ignorar Todas',btnReplace:'Alterar',btnReplaceAll:'Alterar Todas',btnUndo:'Desfazer',noSuggestions:'-sem sugestões de ortografia-',progress:'Verificação ortográfica em andamento...',noMispell:'Verificação encerrada: Não foram encontrados erros de ortografia',noChanges:'Verificação ortográfica encerrada: Não houve alterações',oneChange:'Verificação ortográfica encerrada: Uma palavra foi alterada',manyChanges:'Verificação ortográfica encerrada: %1 palavras foram alteradas',ieSpellDownload:'A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?'},smiley:{toolbar:'Emoticon',title:'Inserir Emoticon',options:'Opções de Emoticons'},elementsPath:{eleLabel:'Caminho dos Elementos',eleTitle:'Elemento %1'},numberedlist:'Lista numerada',bulletedlist:'Lista sem números',indent:'Aumentar Recuo',outdent:'Diminuir Recuo',justify:{left:'Alinhar Esquerda',center:'Centralizar',right:'Alinhar Direita',block:'Justificado'},blockquote:'Citação',clipboard:{title:'Colar',cutError:'As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).',copyError:'As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).',pasteMsg:'Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.',securityMsg:'As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.',pasteArea:'Área para Colar'},pastefromword:{confirmCleanup:'O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?',toolbar:'Colar do Word',title:'Colar do Word',error:'Não foi possível limpar os dados colados devido a um erro interno'},pasteText:{button:'Colar como Texto sem Formatação',title:'Colar como Texto sem Formatação'},templates:{button:'Modelos de layout',title:'Modelo de layout de conteúdo',options:'Opções de Template',insertOption:'Substituir o conteúdo atual',selectPromptMsg:'Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):',emptyListMsg:'(Não foram definidos modelos de layout)'},showBlocks:'Mostrar blocos de código',stylesCombo:{label:'Estilo',panelTitle:'Estilos de Formatação',panelTitle1:'Estilos de bloco',panelTitle2:'Estilos de texto corrido',panelTitle3:'Estilos de objeto'},format:{label:'Formatação',panelTitle:'Formatação',tag_p:'Normal',tag_pre:'Formatado',tag_address:'Endereço',tag_h1:'Título 1',tag_h2:'Título 2',tag_h3:'Título 3',tag_h4:'Título 4',tag_h5:'Título 5',tag_h6:'Título 6',tag_div:'Normal (DIV)'},div:{title:'Criar Container de DIV',toolbar:'Criar Container de DIV',cssClassInputLabel:'Classes de CSS',styleSelectLabel:'Estilo',IdInputLabel:'Id',languageCodeInputLabel:'Código de Idioma',inlineStyleInputLabel:'Estilo Inline',advisoryTitleInputLabel:'Título Consulta',langDirLabel:'Direção da Escrita',langDirLTRLabel:'Esquerda para Direita (LTR)',langDirRTLLabel:'Direita para Esquerda (RTL)',edit:'Editar Div',remove:'Remover Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Fonte',voiceLabel:'Fonte',panelTitle:'Fonte'},fontSize:{label:'Tamanho',voiceLabel:'Tamanho da fonte',panelTitle:'Tamanho'},colorButton:{textColorTitle:'Cor do Texto',bgColorTitle:'Cor do Plano de Fundo',panelTitle:'Cores',auto:'Automático',more:'Mais Cores...'},colors:{'000':'Preto',800000:'Foquete','8B4513':'Marrom 1','2F4F4F':'Cinza 1','008080':'Cerceta','000080':'Azul Marinho','4B0082':'Índigo',696969:'Cinza 2',B22222:'Tijolo de Fogo',A52A2A:'Marrom 2',DAA520:'Vara Dourada','006400':'Verde Escuro','40E0D0':'Turquesa','0000CD':'Azul Médio',800080:'Roxo',808080:'Cinza 3',F00:'Vermelho',FF8C00:'Laranja Escuro',FFD700:'Dourado','008000':'Verde','0FF':'Ciano','00F':'Azul',EE82EE:'Violeta',A9A9A9:'Cinza Escuro',FFA07A:'Salmão Claro',FFA500:'Laranja',FFFF00:'Amarelo','00FF00':'Lima',AFEEEE:'Turquesa Pálido',ADD8E6:'Azul Claro',DDA0DD:'Ameixa',D3D3D3:'Cinza Claro',FFF0F5:'Lavanda 1',FAEBD7:'Branco Antiguidade',FFFFE0:'Amarelo Claro',F0FFF0:'Orvalho',F0FFFF:'Azure',F0F8FF:'Azul Alice',E6E6FA:'Lavanda 2',FFF:'Branco'},scayt:{title:'Correção ortográfica durante a digitação',opera_title:'Não suportado no Opera',enable:'Habilitar correção ortográfica durante a digitação',disable:'Desabilitar correção ortográfica durante a digitação',about:'Sobre a correção ortográfica durante a digitação',toggle:'Ativar/desativar correção ortográfica durante a digitação',options:'Opções',langs:'Idiomas',moreSuggestions:'Mais sugestões',ignore:'Ignorar',ignoreAll:'Ignorar todas',addWord:'Adicionar palavra',emptyDic:'O nome do dicionário não deveria estar vazio.',optionsTab:'Opções',allCaps:'Ignorar palavras maiúsculas',ignoreDomainNames:'Ignorar nomes de domínio',mixedCase:'Ignorar palavras com maiúsculas e minúsculas misturadas',mixedWithDigits:'Ignorar palavras com números',languagesTab:'Idiomas',dictionariesTab:'Dicionários',dic_field_name:'Nome do Dicionário',dic_create:'Criar',dic_restore:'Restaurar',dic_delete:'Excluir',dic_rename:'Renomear',dic_info:'Inicialmente, o dicionário do usuário fica armazenado em um Cookie. Porém, Cookies tem tamanho limitado, portanto quand o dicionário do usuário atingir o tamanho limite poderá ser armazenado no nosso servidor. Para armazenar seu dicionário pessoal no nosso servidor deverá especificar um nome para ele. Se já tiver um dicionário armazenado por favor especifique o seu nome e clique em Restaurar.',aboutTab:'Sobre'},about:{title:'Sobre o CKEditor',dlgTitle:'Sobre o CKEditor',moreInfo:'Para informações sobre a licença por favor visite o nosso site:',copy:'Copyright © $1. Todos os direitos reservados.'},maximize:'Maximizar',minimize:'Minimize',fakeobjects:{anchor:'Âncora',flash:'Animação em Flash',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Objeto desconhecido'},resize:'Arraste para redimensionar',colordialog:{title:'Selecione uma cor',options:'Opções de Cor',highlight:'Grifar',selected:'Cor Selecionada',clear:'Limpar'},toolbarCollapse:'Diminuir Barra de Ferramentas',toolbarExpand:'Aumentar Barra de Ferramentas',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/pt.js b/modules_v2/ckeditor/lang/pt.js new file mode 100644 index 0000000000..277b6695f1 --- /dev/null +++ b/modules_v2/ckeditor/lang/pt.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.pt={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Fonte',newPage:'Nova Página',save:'Guardar',preview:'Pré-visualizar',cut:'Cortar',copy:'Copiar',paste:'Colar',print:'Imprimir',underline:'Sublinhado',bold:'Negrito',italic:'Itálico',selectAll:'Seleccionar Tudo',removeFormat:'Eliminar Formato',strike:'Rasurado',subscript:'Superior à Linha',superscript:'Inferior à Linha',horizontalrule:'Inserir Linha Horizontal',pagebreak:'Inserir Quebra de Página',pagebreakAlt:'Page Break',unlink:'Eliminar Hiperligação',undo:'Anular',redo:'Repetir',common:{browseServer:'Navegar no Servidor',url:'URL',protocol:'Protocolo',upload:'Carregar',uploadSubmit:'Enviar para o Servidor',image:'Imagem',flash:'Flash',form:'Formulário',checkbox:'Caixa de Verificação',radio:'Botão de Opção',textField:'Campo de Texto',textarea:'Área de Texto',hiddenField:'Campo Escondido',button:'Botão',select:'Caixa de Combinação',imageButton:'Botão de Imagem',notSet:'<Não definido>',id:'Id',name:'Nome',langDir:'Orientação de idioma',langDirLtr:'Esquerda à Direita (LTR)',langDirRtl:'Direita a Esquerda (RTL)',langCode:'Código de Idioma',longDescr:'Descrição Completa do URL',cssClass:'Classes de Estilo de Folhas Classes',advisoryTitle:'Título',cssStyle:'Estilo',ok:'OK',cancel:'Cancelar',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Avançado',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Largura',height:'Altura',align:'Alinhamento',alignLeft:'Esquerda',alignRight:'Direita',alignCenter:'Centrado',alignTop:'Topo',alignMiddle:'Centro',alignBottom:'Fundo',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Inserir Caracter Especial',title:'Seleccione um caracter especial',options:'Special Character Options'},link:{toolbar:'Inserir/Editar Hiperligação',other:'<outro>',menu:'Editar Hiperligação',title:'Hiperligação',info:'Informação de Hiperligação',target:'Destino',upload:'Carregar',advanced:'Avançado',type:'Tipo de Hiperligação',toUrl:'URL',toAnchor:'Referência a esta página',toEmail:'E-Mail',targetFrame:'<Frame>',targetPopup:'<Janela de popup>',targetFrameName:'Nome do Frame Destino',targetPopupName:'Nome da Janela de Popup',popupFeatures:'Características de Janela de Popup',popupResizable:'Resizable',popupStatusBar:'Barra de Estado',popupLocationBar:'Barra de localização',popupToolbar:'Barra de Ferramentas',popupMenuBar:'Barra de Menu',popupFullScreen:'Janela Completa (IE)',popupScrollBars:'Barras de deslocamento',popupDependent:'Dependente (Netscape)',popupLeft:'Posição Esquerda',popupTop:'Posição Direita',id:'Id',langDir:'Orientação de idioma',langDirLTR:'Esquerda à Direita (LTR)',langDirRTL:'Direita a Esquerda (RTL)',acccessKey:'Chave de Acesso',name:'Nome',langCode:'Orientação de idioma',tabIndex:'Índice de Tubulação',advisoryTitle:'Título',advisoryContentType:'Tipo de Conteúdo',cssClasses:'Classes de Estilo de Folhas Classes',charset:'Fonte de caracteres vinculado',styles:'Estilo',selectAnchor:'Seleccionar una referência',anchorName:'Por Nome de Referência',anchorId:'Por ID de elemento',emailAddress:'Endereço de E-Mail',emailSubject:'Título de Mensagem',emailBody:'Corpo da Mensagem',noAnchors:'(Não há referências disponíveis no documento)',noUrl:'Por favor introduza a hiperligação URL',noEmail:'Por favor introduza o endereço de e-mail'},anchor:{toolbar:' Inserir/Editar Âncora',menu:'Propriedades da Âncora',title:'Propriedades da Âncora',name:'Nome da Âncora',errorName:'Por favor, introduza o nome da âncora'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Procurar',replace:'Substituir',findWhat:'Texto a Procurar:',replaceWith:'Substituir por:',notFoundMsg:'O texto especificado não foi encontrado.',matchCase:'Maiúsculas/Minúsculas',matchWord:'Coincidir com toda a palavra',matchCyclic:'Match cyclic',replaceAll:'Substituir Tudo',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Propriedades da Tabela',menu:'Propriedades da Tabela',deleteTable:'Eliminar Tabela',rows:'Linhas',columns:'Colunas',border:'Tamanho do Limite',widthPx:'pixeis',widthPc:'percentagem',widthUnit:'width unit',cellSpace:'Esp. e/células',cellPad:'Esp. interior',caption:'Título',summary:'Sumário',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Célula',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Eliminar Célula',merge:'Unir Células',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Linha',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Eliminar Linhas'},column:{menu:'Coluna',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Eliminar Coluna'}},button:{title:'Propriedades do Botão',text:'Texto (Valor)',type:'Tipo',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Propriedades da Caixa de Verificação',radioTitle:'Propriedades do Botão de Opção',value:'Valor',selected:'Seleccionado'},form:{title:'Propriedades do Formulário',menu:'Propriedades do Formulário',action:'Acção',method:'Método',encoding:'Encoding'},select:{title:'Propriedades da Caixa de Combinação',selectInfo:'Informação',opAvail:'Opções Possíveis',value:'Valor',size:'Tamanho',lines:'linhas',chkMulti:'Permitir selecções múltiplas',opText:'Texto',opValue:'Valor',btnAdd:'Adicionar',btnModify:'Modificar',btnUp:'Para cima',btnDown:'Para baixo',btnSetValue:'Definir um valor por defeito',btnDelete:'Apagar'},textarea:{title:'Propriedades da Área de Texto',cols:'Colunas',rows:'Linhas'},textfield:{title:'Propriedades do Campo de Texto',name:'Nome',value:'Valor',charWidth:'Tamanho do caracter',maxChars:'Nr. Máximo de Caracteres',type:'Tipo',typeText:'Texto',typePass:'Palavra-chave'},hidden:{title:'Propriedades do Campo Escondido',name:'Nome',value:'Valor'},image:{title:'Propriedades da Imagem',titleButton:'Propriedades do Botão de imagens',menu:'Propriedades da Imagem',infoTab:'Informação da Imagem',btnUpload:'Enviar para o Servidor',upload:'Carregar',alt:'Texto Alternativo',lockRatio:'Proporcional',unlockRatio:'Unlock Ratio',resetSize:'Tamanho Original',border:'Limite',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',alertUrl:'Por favor introduza o URL da imagem',linkTab:'Hiperligação',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Propriedades do Flash',propertiesTab:'Properties',title:'Propriedades do Flash',chkPlay:'Reproduzir automaticamente',chkLoop:'Loop',chkMenu:'Permitir Menu do Flash',chkFull:'Allow Fullscreen',scale:'Escala',scaleAll:'Mostrar tudo',scaleNoBorder:'Sem Limites',scaleFit:'Tamanho Exacto',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs inferior',alignAbsMiddle:'Abs centro',alignBaseline:'Linha de base',alignTextTop:'Topo do texto',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Cor de Fundo',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',validateSrc:'Por favor introduza a hiperligação URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Verificação Ortográfica',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Não está num directório',changeTo:'Mudar para',btnIgnore:'Ignorar',btnIgnoreAll:'Ignorar Tudo',btnReplace:'Substituir',btnReplaceAll:'Substituir Tudo',btnUndo:'Anular',noSuggestions:'- Sem sugestões -',progress:'Verificação ortográfica em progresso…',noMispell:'Verificação ortográfica completa: não foram encontrados erros',noChanges:'Verificação ortográfica completa: não houve alteração de palavras',oneChange:'Verificação ortográfica completa: uma palavra alterada',manyChanges:'Verificação ortográfica completa: %1 palavras alteradas',ieSpellDownload:' Verificação ortográfica não instalada. Quer descarregar agora?'},smiley:{toolbar:'Emoticons',title:'Inserir um Emoticon',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numeração',bulletedlist:'Marcas',indent:'Aumentar Avanço',outdent:'Diminuir Avanço',justify:{left:'Alinhar à Esquerda',center:'Alinhar ao Centro',right:'Alinhar à Direita',block:'Justificado'},blockquote:'Block Quote',clipboard:{title:'Colar',cutError:'A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).',copyError:'A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).',pasteMsg:'Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prima <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Colar do Word',title:'Colar do Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Colar como Texto Simples',title:'Colar como Texto Simples'},templates:{button:'Modelos',title:'Modelo de Conteúdo',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):',emptyListMsg:'(Sem modelos definidos)'},showBlocks:'Show Blocks',stylesCombo:{label:'Estilo',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formato',panelTitle:'Formato',tag_p:'Normal',tag_pre:'Formatado',tag_address:'Endereço',tag_h1:'Título 1',tag_h2:'Título 2',tag_h3:'Título 3',tag_h4:'Título 4',tag_h5:'Título 5',tag_h6:'Título 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Tipo de Letra',voiceLabel:'Font',panelTitle:'Tipo de Letra'},fontSize:{label:'Tamanho',voiceLabel:'Font Size',panelTitle:'Tamanho'},colorButton:{textColorTitle:'Cor do Texto',bgColorTitle:'Cor de Fundo',panelTitle:'Colors',auto:'Automático',more:'Mais Cores...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/ro.js b/modules_v2/ckeditor/lang/ro.js new file mode 100644 index 0000000000..c20ebb85f6 --- /dev/null +++ b/modules_v2/ckeditor/lang/ro.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.ro={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Sursa',newPage:'Pagină nouă',save:'Salvează',preview:'Previzualizare',cut:'Taie',copy:'Copiază',paste:'Adaugă',print:'Printează',underline:'Subliniat (underline)',bold:'Îngroşat (bold)',italic:'Înclinat (italic)',selectAll:'Selectează tot',removeFormat:'Înlătură formatarea',strike:'Tăiat (strike through)',subscript:'Indice (subscript)',superscript:'Putere (superscript)',horizontalrule:'Inserează linie orizontă',pagebreak:'Inserează separator de pagină (Page Break)',pagebreakAlt:'Page Break',unlink:'Înlătură link (legătură web)',undo:'Starea anterioară (undo)',redo:'Starea ulterioară (redo)',common:{browseServer:'Răsfoieşte server',url:'URL',protocol:'Protocol',upload:'Încarcă',uploadSubmit:'Trimite la server',image:'Imagine',flash:'Flash',form:'Formular (Form)',checkbox:'Bifă (Checkbox)',radio:'Buton radio (RadioButton)',textField:'Câmp text (TextField)',textarea:'Suprafaţă text (Textarea)',hiddenField:'Câmp ascuns (HiddenField)',button:'Buton',select:'Câmp selecţie (SelectionField)',imageButton:'Buton imagine (ImageButton)',notSet:'<nesetat>',id:'Id',name:'Nume',langDir:'Direcţia cuvintelor',langDirLtr:'stânga-dreapta (LTR)',langDirRtl:'dreapta-stânga (RTL)',langCode:'Codul limbii',longDescr:'Descrierea lungă URL',cssClass:'Clasele cu stilul paginii (CSS)',advisoryTitle:'Titlul consultativ',cssStyle:'Stil',ok:'Bine',cancel:'Anulare',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Avansat',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Lăţime',height:'Înălţime',align:'Aliniere',alignLeft:'Stânga',alignRight:'Dreapta',alignCenter:'Centru',alignTop:'Sus',alignMiddle:'Mijloc',alignBottom:'Jos',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Inserează caracter special',title:'Selectează caracter special',options:'Special Character Options'},link:{toolbar:'Inserează/Editează link (legătură web)',other:'<alt>',menu:'Editează Link',title:'Link (Legătură web)',info:'Informaţii despre link (Legătură web)',target:'Ţintă (Target)',upload:'Încarcă',advanced:'Avansat',type:'Tipul link-ului (al legăturii web)',toUrl:'URL',toAnchor:'Ancoră în această pagină',toEmail:'E-Mail',targetFrame:'<frame>',targetPopup:'<fereastra popup>',targetFrameName:'Numele frame-ului ţintă',targetPopupName:'Numele ferestrei popup',popupFeatures:'Proprietăţile ferestrei popup',popupResizable:'Resizable',popupStatusBar:'Bara de status',popupLocationBar:'Bara de locaţie',popupToolbar:'Bara de opţiuni',popupMenuBar:'Bara de meniu',popupFullScreen:'Tot ecranul (Full Screen)(IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupLeft:'Poziţia la stânga',popupTop:'Poziţia la dreapta',id:'Id',langDir:'Direcţia cuvintelor',langDirLTR:'stânga-dreapta (LTR)',langDirRTL:'dreapta-stânga (RTL)',acccessKey:'Tasta de acces',name:'Nume',langCode:'Direcţia cuvintelor',tabIndex:'Indexul tabului',advisoryTitle:'Titlul consultativ',advisoryContentType:'Tipul consultativ al titlului',cssClasses:'Clasele cu stilul paginii (CSS)',charset:'Setul de caractere al resursei legate',styles:'Stil',selectAnchor:'Selectaţi o ancoră',anchorName:'după numele ancorei',anchorId:'după Id-ul elementului',emailAddress:'Adresă de e-mail',emailSubject:'Subiectul mesajului',emailBody:'Conţinutul mesajului',noAnchors:'(Nicio ancoră disponibilă în document)',noUrl:'Vă rugăm să scrieţi URL-ul',noEmail:'Vă rugăm să scrieţi adresa de e-mail'},anchor:{toolbar:'Inserează/Editează ancoră',menu:'Proprietăţi ancoră',title:'Proprietăţi ancoră',name:'Numele ancorei',errorName:'Vă rugăm scrieţi numele ancorei'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Găseşte şi înlocuieşte',find:'Găseşte',replace:'Înlocuieşte',findWhat:'Găseşte:',replaceWith:'Înlocuieşte cu:',notFoundMsg:'Textul specificat nu a fost găsit.',matchCase:'Deosebeşte majuscule de minuscule (Match case)',matchWord:'Doar cuvintele întregi',matchCyclic:'Match cyclic',replaceAll:'Înlocuieşte tot',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabel',title:'Proprietăţile tabelului',menu:'Proprietăţile tabelului',deleteTable:'Şterge tabel',rows:'Linii',columns:'Coloane',border:'Mărimea marginii',widthPx:'pixeli',widthPc:'procente',widthUnit:'width unit',cellSpace:'Spaţiu între celule',cellPad:'Spaţiu în cadrul celulei',caption:'Titlu (Caption)',summary:'Rezumat',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Celulă',insertBefore:'Inserează celulă înainte',insertAfter:'Inserează celulă după',deleteCell:'Şterge celule',merge:'Uneşte celule',mergeRight:'Uneşte la dreapta',mergeDown:'Uneşte jos',splitHorizontal:'Împarte celula pe orizontală',splitVertical:'Împarte celula pe verticală',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Linie',insertBefore:'Inserează linie înainte',insertAfter:'Inserează linie după',deleteRow:'Şterge linii'},column:{menu:'Coloană',insertBefore:'Inserează coloană înainte',insertAfter:'Inserează coloană după',deleteColumn:'Şterge celule'}},button:{title:'Proprietăţi buton',text:'Text (Valoare)',type:'Tip',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Proprietăţi bifă (Checkbox)',radioTitle:'Proprietăţi buton radio (Radio Button)',value:'Valoare',selected:'Selectat'},form:{title:'Proprietăţi formular (Form)',menu:'Proprietăţi formular (Form)',action:'Acţiune',method:'Metodă',encoding:'Encoding'},select:{title:'Proprietăţi câmp selecţie (Selection Field)',selectInfo:'Informaţii',opAvail:'Opţiuni disponibile',value:'Valoare',size:'Mărime',lines:'linii',chkMulti:'Permite selecţii multiple',opText:'Text',opValue:'Valoare',btnAdd:'Adaugă',btnModify:'Modifică',btnUp:'Sus',btnDown:'Jos',btnSetValue:'Setează ca valoare selectată',btnDelete:'Şterge'},textarea:{title:'Proprietăţi suprafaţă text (Textarea)',cols:'Coloane',rows:'Linii'},textfield:{title:'Proprietăţi câmp text (Text Field)',name:'Nume',value:'Valoare',charWidth:'Lărgimea caracterului',maxChars:'Caractere maxime',type:'Tip',typeText:'Text',typePass:'Parolă'},hidden:{title:'Proprietăţi câmp ascuns (Hidden Field)',name:'Nume',value:'Valoare'},image:{title:'Proprietăţile imaginii',titleButton:'Proprietăţi buton imagine (Image Button)',menu:'Proprietăţile imaginii',infoTab:'Informaţii despre imagine',btnUpload:'Trimite la server',upload:'Încarcă',alt:'Text alternativ',lockRatio:'Păstrează proporţiile',unlockRatio:'Unlock Ratio',resetSize:'Resetează mărimea',border:'Margine',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Vă rugăm să scrieţi URL-ul imaginii',linkTab:'Link (Legătură web)',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Proprietăţile flash-ului',propertiesTab:'Properties',title:'Proprietăţile flash-ului',chkPlay:'Rulează automat',chkLoop:'Repetă (Loop)',chkMenu:'Activează meniul flash',chkFull:'Allow Fullscreen',scale:'Scală',scaleAll:'Arată tot',scaleNoBorder:'Fără margini (No border)',scaleFit:'Potriveşte',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Jos absolut (Abs Bottom)',alignAbsMiddle:'Mijloc absolut (Abs Middle)',alignBaseline:'Linia de jos (Baseline)',alignTextTop:'Text sus',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Coloarea fundalului',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Vă rugăm să scrieţi URL-ul',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Verifică text',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nu e în dicţionar',changeTo:'Schimbă în',btnIgnore:'Ignoră',btnIgnoreAll:'Ignoră toate',btnReplace:'Înlocuieşte',btnReplaceAll:'Înlocuieşte tot',btnUndo:'Starea anterioară (undo)',noSuggestions:'- Fără sugestii -',progress:'Verificarea textului în desfăşurare...',noMispell:'Verificarea textului terminată: Nicio greşeală găsită',noChanges:'Verificarea textului terminată: Niciun cuvânt modificat',oneChange:'Verificarea textului terminată: Un cuvânt modificat',manyChanges:'Verificarea textului terminată: 1% cuvinte modificate',ieSpellDownload:'Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?'},smiley:{toolbar:'Figură expresivă (Emoticon)',title:'Inserează o figură expresivă (Emoticon)',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Listă numerotată',bulletedlist:'Listă cu puncte',indent:'Creşte indentarea',outdent:'Scade indentarea',justify:{left:'Aliniere la stânga',center:'Aliniere centrală',right:'Aliniere la dreapta',block:'Aliniere în bloc (Block Justify)'},blockquote:'Citat',clipboard:{title:'Adaugă',cutError:'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).',copyError:'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).',pasteMsg:'Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl/Cmd+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.',securityMsg:'Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Adaugă din Word',title:'Adaugă din Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Adaugă ca text simplu (Plain Text)',title:'Adaugă ca text simplu (Plain Text)'},templates:{button:'Template-uri (şabloane)',title:'Template-uri (şabloane) de conţinut',options:'Template Options',insertOption:'Înlocuieşte cuprinsul actual',selectPromptMsg:'Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):',emptyListMsg:'(Niciun template (şablon) definit)'},showBlocks:'Arată blocurile',stylesCombo:{label:'Stil',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formatare',panelTitle:'Formatare',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'Mărime',voiceLabel:'Font Size',panelTitle:'Mărime'},colorButton:{textColorTitle:'Culoarea textului',bgColorTitle:'Coloarea fundalului',panelTitle:'Colors',auto:'Automatic',more:'Mai multe culori...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/ru.js b/modules_v2/ckeditor/lang/ru.js new file mode 100644 index 0000000000..8a264ad86c --- /dev/null +++ b/modules_v2/ckeditor/lang/ru.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.ru={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Источник',newPage:'Новая страница',save:'Сохранить',preview:'Предварительный просмотр',cut:'Вырезать',copy:'Копировать',paste:'Вставить',print:'Печать',underline:'Подчеркнутый',bold:'Жирный',italic:'Курсив',selectAll:'Выделить все',removeFormat:'Убрать форматирование',strike:'Зачеркнутый',subscript:'Подстрочный индекс',superscript:'Надстрочный индекс',horizontalrule:'Вставить горизонтальную линию',pagebreak:'Вставить разрыв страницы',pagebreakAlt:'Page Break',unlink:'Убрать ссылку',undo:'Отменить',redo:'Повторить',common:{browseServer:'Просмотреть на сервере',url:'URL',protocol:'Протокол',upload:'Закачать',uploadSubmit:'Послать на сервер',image:'Изображение',flash:'Flash',form:'Форма',checkbox:'Флаговая кнопка',radio:'Кнопка выбора',textField:'Текстовое поле',textarea:'Текстовая область',hiddenField:'Скрытое поле',button:'Кнопка',select:'Список',imageButton:'Кнопка с изображением',notSet:'<не определено>',id:'Идентификатор',name:'Имя',langDir:'Направление языка',langDirLtr:'Слева на право (LTR)',langDirRtl:'Справа на лево (RTL)',langCode:'Язык',longDescr:'Длинное описание URL',cssClass:'Класс CSS',advisoryTitle:'Заголовок',cssStyle:'Стиль CSS',ok:'ОК',cancel:'Отмена',close:'Close',preview:'Preview',generalTab:'Информация',advancedTab:'Расширенный',validateNumberFailed:'Это значение не является числом.',confirmNewPage:'Все несохраненные изменения будут утеряны. Вы уверены, что хотите перейти на другую страницу?',confirmCancel:'Некоторые опции были изменены. Вы уверены, что хотите закрыть диалог?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Ширина',height:'Высота',align:'Выравнивание',alignLeft:'По левому краю',alignRight:'По правому краю',alignCenter:'По центру',alignTop:'По верху',alignMiddle:'Посередине',alignBottom:'Понизу',invalidHeight:'Высота задается числом.',invalidWidth:'Ширина задается числом.',unavailable:'%1<span class="cke_accessibility">, недоступно</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Вставить специальный символ',title:'Выберите специальный символ',options:'Special Character Options'},link:{toolbar:'Вставить/Редактировать ссылку',other:'<другой>',menu:'Вставить ссылку',title:'Ссылка',info:'Информация ссылки',target:'Цель',upload:'Закачать',advanced:'Расширенный',type:'Тип ссылки',toUrl:'URL',toAnchor:'Якорь на эту страницу',toEmail:'Эл. почта',targetFrame:'<фрейм>',targetPopup:'<всплывающее окно>',targetFrameName:'Имя целевого фрейма',targetPopupName:'Имя всплывающего окна',popupFeatures:'Свойства всплывающего окна',popupResizable:'Изменяемый размер',popupStatusBar:'Строка состояния',popupLocationBar:'Панель локации',popupToolbar:'Панель инструментов',popupMenuBar:'Панель меню',popupFullScreen:'Полный экран (IE)',popupScrollBars:'Полосы прокрутки',popupDependent:'Зависимый (Netscape)',popupLeft:'Позиция слева',popupTop:'Позиция сверху',id:'Id',langDir:'Направление языка',langDirLTR:'Слева направо (LTR)',langDirRTL:'Справа налево (RTL)',acccessKey:'Горячая клавиша',name:'Имя',langCode:'Код языка',tabIndex:'Последовательность перехода',advisoryTitle:'Заголовок',advisoryContentType:'Тип содержимого',cssClasses:'Класс CSS',charset:'Кодировка',styles:'Стиль CSS',selectAnchor:'Выберите якорь',anchorName:'По имени якоря',anchorId:'По идентификатору элемента',emailAddress:'Адрес эл. почты',emailSubject:'Заголовок сообщения',emailBody:'Тело сообщения',noAnchors:'(Нет якорей доступных в этом документе)',noUrl:'Пожалуйста, введите URL ссылки',noEmail:'Пожалуйста, введите адрес эл. почты'},anchor:{toolbar:'Вставить/Редактировать якорь',menu:'Свойства якоря',title:'Свойства якоря',name:'Имя якоря',errorName:'Пожалуйста, введите имя якоря'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Найти и заменить',find:'Найти',replace:'Заменить',findWhat:'Найти:',replaceWith:'Заменить на:',notFoundMsg:'Указанный текст не найден.',matchCase:'Учитывать регистр',matchWord:'Только слово целиком',matchCyclic:'Начинать с начала после достижения конца',replaceAll:'Заменить все',replaceSuccessMsg:'%1 совпадение(й) заменено.'},table:{toolbar:'Таблица',title:'Свойства таблицы',menu:'Свойства таблицы',deleteTable:'Удалить таблицу',rows:'Строки',columns:'Колонки',border:'Размер бордюра',widthPx:'пикселей',widthPc:'процентов',widthUnit:'width unit',cellSpace:'Промежуток (spacing)',cellPad:'Отступ (padding)',caption:'Заголовок',summary:'Резюме',headers:'Заголовки',headersNone:'Нет',headersColumn:'Первый столбец',headersRow:'Первая строка',headersBoth:'Оба варианта',invalidRows:'Число строк должно быть больше 0.',invalidCols:'Число столбцов должно быть больше 0.',invalidBorder:'Ширина бордюра должна быть числом.',invalidWidth:'Ширина таблицы должна быть числом.',invalidHeight:'Высота таблицы должна быть числом.',invalidCellSpacing:'Размер промежутков (cellspacing) между ячейками должны быть числом.',invalidCellPadding:'Отступы внутри ячеек (cellpadding) должны быть числом.',cell:{menu:'Ячейка',insertBefore:'Вставить ячейку до',insertAfter:'Вставить ячейку после',deleteCell:'Удалить ячейки',merge:'Объединить ячейки',mergeRight:'Объединить с правой',mergeDown:'Объединить с нижней',splitHorizontal:'Разбить ячейку горизонтально',splitVertical:'Разбить ячейку вертикально',title:'Свойства ячейки',cellType:'Тип ячейки',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Перенос по словам',hAlign:'Выравнивание по горизонтали',vAlign:'Выравнивание по вертикали',alignBaseline:'По базовой линии',bgColor:'Цвет фона',borderColor:'Цвет границы',data:'Данные',header:'Заголовок',yes:'Да',no:'Нет',invalidWidth:'Ширина ячейки должна быть числом.',invalidHeight:'Высота ячейки должна быть числом.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Выберите'},row:{menu:'Строка',insertBefore:'Вставить строку до',insertAfter:'Вставить строку после',deleteRow:'Удалить строки'},column:{menu:'Колонка',insertBefore:'Вставить колонку до',insertAfter:'Вставить колонку после',deleteColumn:'Удалить колонки'}},button:{title:'Свойства кнопки',text:'Текст (Значение)',type:'Тип',typeBtn:'Кнопка',typeSbm:'Отправить',typeRst:'Сбросить'},checkboxAndRadio:{checkboxTitle:'Свойства флаговой кнопки',radioTitle:'Свойства кнопки выбора',value:'Значение',selected:'Выбранная'},form:{title:'Свойства формы',menu:'Свойства формы',action:'Действие',method:'Метод',encoding:'Кодировка'},select:{title:'Свойства списка',selectInfo:'Информация',opAvail:'Доступные варианты',value:'Значение',size:'Размер',lines:'линии',chkMulti:'Разрешить множественный выбор',opText:'Текст',opValue:'Значение',btnAdd:'Добавить',btnModify:'Модифицировать',btnUp:'Вверх',btnDown:'Вниз',btnSetValue:'Установить как выбранное значение',btnDelete:'Удалить'},textarea:{title:'Свойства текстовой области',cols:'Колонки',rows:'Строки'},textfield:{title:'Свойства текстового поля',name:'Имя',value:'Значение',charWidth:'Ширина',maxChars:'Макс. кол-во символов',type:'Тип',typeText:'Текст',typePass:'Пароль'},hidden:{title:'Свойства скрытого поля',name:'Имя',value:'Значение'},image:{title:'Свойства изображения',titleButton:'Свойства кнопки с изображением',menu:'Свойства изображения',infoTab:'Информация о изображении',btnUpload:'Отправить на сервер',upload:'Закачать',alt:'Альтернативный текст',lockRatio:'Сохранять пропорции',unlockRatio:'Unlock Ratio',resetSize:'Сбросить размер',border:'Бордюр',hSpace:'Горизонтальный отступ',vSpace:'Вертикальный отступ',alertUrl:'Пожалуйста, введите URL изображения',linkTab:'Ссылка',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Отсутствует URL картинки.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Свойства Flash',propertiesTab:'Свойства',title:'Свойства Flash',chkPlay:'Авто проигрывание',chkLoop:'Повтор',chkMenu:'Включить меню Flash',chkFull:'разрешить полноэкранный режим',scale:'Масштабировать',scaleAll:'Показывать все',scaleNoBorder:'Без бордюра',scaleFit:'Точное совпадение',access:'Область доступа скрипта',accessAlways:'Всегда',accessSameDomain:'Тот же домен',accessNever:'Никогда',alignAbsBottom:'Абс понизу',alignAbsMiddle:'Абс посередине',alignBaseline:'По базовой линии',alignTextTop:'Текст наверху',quality:'Качество',qualityBest:'Лучшее',qualityHigh:'Высокое',qualityAutoHigh:'Высокое (авто)',qualityMedium:'Среднее',qualityAutoLow:'Низкое (авто)',qualityLow:'Низкое',windowModeWindow:'Окно',windowModeOpaque:'Непрозрачный',windowModeTransparent:'Прозрачный',windowMode:'Оконный режим',flashvars:'Переменные для Flash',bgcolor:'Цвет фона',hSpace:'Горизонтальный отступ',vSpace:'Вертикальный отступ',validateSrc:'Пожалуйста, введите URL ссылки',validateHSpace:'Горизонтальный отступ задается числом.',validateVSpace:'Вертикальный отступ задается числом.'},spellCheck:{toolbar:'Проверить орфографию',title:'Проверка правописания',notAvailable:'Извините, сервис сейчас недоступен.',errorLoading:'Ошибка при загрузке служебного хоста приложения: %s.',notInDic:'Нет в словаре',changeTo:'Заменить на',btnIgnore:'Игнорировать',btnIgnoreAll:'Игнорировать все',btnReplace:'Заменить',btnReplaceAll:'Заменить все',btnUndo:'Отменить',noSuggestions:'- Нет предположений -',progress:'Идет проверка орфографии...',noMispell:'Проверка орфографии закончена: ошибок не найдено',noChanges:'Проверка орфографии закончена: ни одного слова не изменено',oneChange:'Проверка орфографии закончена: одно слово изменено',manyChanges:'Проверка орфографии закончена: 1% слов изменено',ieSpellDownload:'Модуль проверки орфографии не установлен. Хотите скачать его сейчас?'},smiley:{toolbar:'Смайлик',title:'Вставить смайлик',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 элемент'},numberedlist:'Нумерованный список',bulletedlist:'Маркированный список',indent:'Увеличить отступ',outdent:'Уменьшить отступ',justify:{left:'По левому краю',center:'По центру',right:'По правому краю',block:'По ширине'},blockquote:'Цитата',clipboard:{title:'Вставить',cutError:'Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вырезания. Пожалуйста, используйте клавиатуру для этого (Ctrl/Cmd+X).',copyError:'Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции копирования. Пожалуйста, используйте клавиатуру для этого (Ctrl/Cmd+C).',pasteMsg:'Пожалуйста, вставьте текст в прямоугольник, используя сочетание клавиш (<STRONG>Ctrl/Cmd+V</STRONG>), и нажмите <STRONG>OK</STRONG>.',securityMsg:'По причине настроек безопасности браузера, редактор не имеет доступа к данным буфера обмена напрямую. Вам необходимо вставить текст снова в это окно.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'Текст, который вы хотите вставить, похож на копируемый из Word. Вы хотите очистить его перед вставкой?',toolbar:'Вставить из Word',title:'Вставить из Word',error:'Невозможно очистить вставленные данные из-за внутренней ошибки'},pasteText:{button:'Вставить только текст',title:'Вставить только текст'},templates:{button:'Шаблоны',title:'Шаблоны содержимого',options:'Template Options',insertOption:'Заменить текущее содержание',selectPromptMsg:'Пожалуйста, выберете шаблон для открытия в редакторе<br>(текущее содержимое будет потеряно):',emptyListMsg:'(Ни одного шаблона не определено)'},showBlocks:'Показать блоки',stylesCombo:{label:'Стиль',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Стили объекта'},format:{label:'Форматирование',panelTitle:'Форматирование',tag_p:'Нормальный',tag_pre:'Форматированный',tag_address:'Адрес',tag_h1:'Заголовок 1',tag_h2:'Заголовок 2',tag_h3:'Заголовок 3',tag_h4:'Заголовок 4',tag_h5:'Заголовок 5',tag_h6:'Заголовок 6',tag_div:'Нормальный (DIV)'},div:{title:'Создать Div-контейнер',toolbar:'Создать Div-контейнер',cssClassInputLabel:'Классы таблицы стилей',styleSelectLabel:'Стиль',IdInputLabel:'Id',languageCodeInputLabel:'Код языка',inlineStyleInputLabel:'Локальный стиль',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Направление письма',langDirLTRLabel:'Слева направо (LTR)',langDirRTLLabel:'Справа налево (RTL)',edit:'Редактировать Div',remove:'Убрать Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Шрифт',voiceLabel:'Шрифт',panelTitle:'Шрифт'},fontSize:{label:'Размер',voiceLabel:'Размер шрифта',panelTitle:'Размер'},colorButton:{textColorTitle:'Цвет текста',bgColorTitle:'Цвет фона',panelTitle:'Colors',auto:'Автоматический',more:'Цвета...'},colors:{'000':'Черный',800000:'Бордовый','8B4513':'Старой кожи','2F4F4F':'Темный синевато-серый','008080':'Чайный','000080':'Темно-синиый','4B0082':'Индиго',696969:'Грязно-серый',B22222:'Огнеупорный кирпич',A52A2A:'Коричневый',DAA520:'Красное золото','006400':'Темно-зеленый','40E0D0':'Бирюзовый','0000CD':'Синий',800080:'Пурпурный',808080:'Серый',F00:'Красный',FF8C00:'Темно-оранжевый',FFD700:'Золотой','008000':'Зеленый','0FF':'Морской волны','00F':'Голубой',EE82EE:'Фиолетовый',A9A9A9:'Темно-серый',FFA07A:'Светлый оранжево-розовый',FFA500:'Оранжевый',FFFF00:'Желтый','00FF00':'Известковый',AFEEEE:'Бледно-бирюзовый',ADD8E6:'Свелто-синий',DDA0DD:'Сливовый',D3D3D3:'Светло-серый',FFF0F5:'Бледный розово-лиловый ',FAEBD7:'Античный белый',FFFFE0:'Светло-желтый',F0FFF0:'Свежего меда',F0FFFF:'Лазурь',F0F8FF:'Бледно-голубой',E6E6FA:'Бледно-лиловый',FFF:'Белый'},scayt:{title:'Проверка Орфографии по Мере Ввода',opera_title:'Not supported by Opera',enable:'Включить ПОМВ',disable:'Отключить ПОМВ',about:'О ПОМВ',toggle:'Переключить ПОМВ',options:'Настройки',langs:'Языки',moreSuggestions:'Больше вариантов',ignore:'Пропустить',ignoreAll:'Пропустить всё',addWord:'Добавить слово',emptyDic:'Имя словаря должно быть не пустым.',optionsTab:'Настройки',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Языки',dictionariesTab:'Словари',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'О словарях'},about:{title:'О программе CKEditor',dlgTitle:'О программе CKEditor',moreInfo:'По вопросам лицензирования обращайтесь на наш сайт:',copy:'Copyright © $1. Все права защищены.'},maximize:'Максимизировать',minimize:'Минимизировать',fakeobjects:{anchor:'Якорь',flash:'Flash-анимация',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Неизвестный объект'},resize:'Перетащите для изменения размера',colordialog:{title:'Выберите цвет',options:'Color Options',highlight:'Выделить',selected:'Выбранное',clear:'Очистить'},toolbarCollapse:'Свернуть панель инструментов',toolbarExpand:'Развернуть панель инструментов',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/sk.js b/modules_v2/ckeditor/lang/sk.js new file mode 100644 index 0000000000..5e3242aa8a --- /dev/null +++ b/modules_v2/ckeditor/lang/sk.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.sk={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Zdroj',newPage:'Nová stránka',save:'Uložiť',preview:'Náhľad',cut:'Vystrihnúť',copy:'Kopírovať',paste:'Vložiť',print:'Tlač',underline:'Podčiarknuté',bold:'Tučné',italic:'Kurzíva',selectAll:'Vybrať všetko',removeFormat:'Odstrániť formátovanie',strike:'Prečiarknuté',subscript:'Dolný index',superscript:'Horný index',horizontalrule:'Vložiť vodorovnú čiaru',pagebreak:'Vložiť oddeľovač stránky',pagebreakAlt:'Page Break',unlink:'Odstrániť odkaz',undo:'Späť',redo:'Znovu',common:{browseServer:'Prechádzať server',url:'URL',protocol:'Protokol',upload:'Odoslať',uploadSubmit:'Odoslať na server',image:'Obrázok',flash:'Flash',form:'Formulár',checkbox:'Zaškrtávacie políčko',radio:'Prepínač',textField:'Textové pole',textarea:'Textová oblasť',hiddenField:'Skryté pole',button:'Tlačidlo',select:'Rozbaľovací zoznam',imageButton:'Obrázkové tlačidlo',notSet:'<nenastavené>',id:'Id',name:'Meno',langDir:'Orientácia jazyka',langDirLtr:'Zľava doprava (LTR)',langDirRtl:'Sprava doľava (RTL)',langCode:'Kód jazyka',longDescr:'Dlhý popis URL',cssClass:'Trieda štýlu',advisoryTitle:'Pomocný titulok',cssStyle:'Štýl',ok:'OK',cancel:'Zrušiť',close:'Close',preview:'Preview',generalTab:'Hlavné',advancedTab:'Rozšírené',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Šírka',height:'Výška',align:'Zarovnanie',alignLeft:'Vľavo',alignRight:'Vpravo',alignCenter:'Na stred',alignTop:'Nahor',alignMiddle:'Na stred',alignBottom:'Dole',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Vložiť špeciálne znaky',title:'Výber špeciálneho znaku',options:'Special Character Options'},link:{toolbar:'Vložiť/zmeniť odkaz',other:'<iný>',menu:'Zmeniť odkaz',title:'Odkaz',info:'Informácie o odkaze',target:'Cieľ',upload:'Odoslať',advanced:'Rozšírené',type:'Typ odkazu',toUrl:'URL',toAnchor:'Kotva v tejto stránke',toEmail:'E-Mail',targetFrame:'<rámec>',targetPopup:'<vyskakovacie okno>',targetFrameName:'Meno rámu cieľa',targetPopupName:'Názov vyskakovacieho okna',popupFeatures:'Vlastnosti vyskakovacieho okna',popupResizable:'Resizable',popupStatusBar:'Stavový riadok',popupLocationBar:'Panel umiestnenia',popupToolbar:'Panel nástrojov',popupMenuBar:'Panel ponuky',popupFullScreen:'Celá obrazovka (IE)',popupScrollBars:'Posuvníky',popupDependent:'Závislosť (Netscape)',popupLeft:'Ľavý okraj',popupTop:'Horný okraj',id:'Id',langDir:'Orientácia jazyka',langDirLTR:'Zľava doprava (LTR)',langDirRTL:'Sprava doľava (RTL)',acccessKey:'Prístupový kľúč',name:'Meno',langCode:'Orientácia jazyka',tabIndex:'Poradie prvku',advisoryTitle:'Pomocný titulok',advisoryContentType:'Pomocný typ obsahu',cssClasses:'Trieda štýlu',charset:'Priradená znaková sada',styles:'Štýl',selectAnchor:'Vybrať kotvu',anchorName:'Podľa mena kotvy',anchorId:'Podľa Id objektu',emailAddress:'E-Mailová adresa',emailSubject:'Predmet správy',emailBody:'Telo správy',noAnchors:'(V stránke nie je definovaná žiadna kotva)',noUrl:'Zadajte prosím URL odkazu',noEmail:'Zadajte prosím e-mailovú adresu'},anchor:{toolbar:'Vložiť/zmeniť kotvu',menu:'Vlastnosti kotvy',title:'Vlastnosti kotvy',name:'Meno kotvy',errorName:'Zadajte prosím meno kotvy'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Nájsť a nahradiť',find:'Hľadať',replace:'Nahradiť',findWhat:'Čo hľadať:',replaceWith:'Čím nahradiť:',notFoundMsg:'Hľadaný text nebol nájdený.',matchCase:'Rozlišovať malé/veľké písmená',matchWord:'Len celé slová',matchCyclic:'Match cyclic',replaceAll:'Nahradiť všetko',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabuľka',title:'Vlastnosti tabuľky',menu:'Vlastnosti tabuľky',deleteTable:'Vymazať tabuľku',rows:'Riadky',columns:'Stĺpce',border:'Ohraničenie',widthPx:'pixelov',widthPc:'percent',widthUnit:'width unit',cellSpace:'Vzdialenosť buniek',cellPad:'Odsadenie obsahu',caption:'Popis',summary:'Prehľad',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Bunka',insertBefore:'Vložiť bunku pred',insertAfter:'Vložiť bunku za',deleteCell:'Vymazať bunky',merge:'Zlúčiť bunky',mergeRight:'Zlúčiť doprava',mergeDown:'Zlúčiť dole',splitHorizontal:'Rozdeliť bunky horizontálne',splitVertical:'Rozdeliť bunky vertikálne',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Riadok',insertBefore:'Vložiť riadok za',insertAfter:'Vložiť riadok pred',deleteRow:'Vymazať riadok'},column:{menu:'Stĺpec',insertBefore:'Vložiť stĺpec za',insertAfter:'Vložiť stĺpec pred',deleteColumn:'Zmazať stĺpec'}},button:{title:'Vlastnosti tlačidla',text:'Text',type:'Typ',typeBtn:'Tlačidlo',typeSbm:'Odoslať',typeRst:'Vymazať'},checkboxAndRadio:{checkboxTitle:'Vlastnosti zaškrtávacieho políčka',radioTitle:'Vlastnosti prepínača',value:'Hodnota',selected:'Vybrané'},form:{title:'Vlastnosti formulára',menu:'Vlastnosti formulára',action:'Akcie',method:'Metóda',encoding:'Encoding'},select:{title:'Vlastnosti rozbaľovacieho zoznamu',selectInfo:'Info',opAvail:'Dostupné možnosti',value:'Hodnota',size:'Veľkosť',lines:'riadkov',chkMulti:'Povoliť viacnásobný výber',opText:'Text',opValue:'Hodnota',btnAdd:'Pridať',btnModify:'Zmeniť',btnUp:'Hore',btnDown:'Dole',btnSetValue:'Nastaviť ako vybranú hodnotu',btnDelete:'Zmazať'},textarea:{title:'Vlastnosti textovej oblasti',cols:'Stĺpce',rows:'Riadky'},textfield:{title:'Vlastnosti textového poľa',name:'Názov',value:'Hodnota',charWidth:'Šírka pola (znakov)',maxChars:'Maximálny počet znakov',type:'Typ',typeText:'Text',typePass:'Heslo'},hidden:{title:'Vlastnosti skrytého poľa',name:'Názov',value:'Hodnota'},image:{title:'Vlastnosti obrázku',titleButton:'Vlastnosti obrázkového tlačidla',menu:'Vlastnosti obrázku',infoTab:'Informácie o obrázku',btnUpload:'Odoslať na server',upload:'Odoslať',alt:'Alternatívny text',lockRatio:'Zámok',unlockRatio:'Unlock Ratio',resetSize:'Pôvodná veľkosť',border:'Okraje',hSpace:'H-medzera',vSpace:'V-medzera',alertUrl:'Zadajte prosím URL obrázku',linkTab:'Odkaz',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Vlastnosti Flashu',propertiesTab:'Properties',title:'Vlastnosti Flashu',chkPlay:'Automatické prehrávanie',chkLoop:'Opakovanie',chkMenu:'Povoliť Flash Menu',chkFull:'Allow Fullscreen',scale:'Mierka',scaleAll:'Zobraziť mierku',scaleNoBorder:'Bez okrajov',scaleFit:'Roztiahnuť na celé',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Úplne dole',alignAbsMiddle:'Do stredu',alignBaseline:'Na základňu',alignTextTop:'Na horný okraj textu',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Farba pozadia',hSpace:'H-medzera',vSpace:'V-medzera',validateSrc:'Zadajte prosím URL odkazu',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Kontrola pravopisu',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nie je v slovníku',changeTo:'Zmeniť na',btnIgnore:'Ignorovať',btnIgnoreAll:'Ignorovať všetko',btnReplace:'Prepísat',btnReplaceAll:'Prepísat všetko',btnUndo:'Späť',noSuggestions:'- Žiadny návrh -',progress:'Prebieha kontrola pravopisu...',noMispell:'Kontrola pravopisu dokončená: bez chýb',noChanges:'Kontrola pravopisu dokončená: žiadne slová nezmenené',oneChange:'Kontrola pravopisu dokončená: zmenené jedno slovo',manyChanges:'Kontrola pravopisu dokončená: zmenených %1 slov',ieSpellDownload:'Kontrola pravopisu nie je naištalovaná. Chcete ju hneď stiahnuť?'},smiley:{toolbar:'Smajlíky',title:'Vkladanie smajlíkov',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Číslovanie',bulletedlist:'Odrážky',indent:'Zväčšiť odsadenie',outdent:'Zmenšiť odsadenie',justify:{left:'Zarovnať vľavo',center:'Zarovnať na stred',right:'Zarovnať vpravo',block:'Zarovnať do bloku'},blockquote:'Citácia',clipboard:{title:'Vložiť',cutError:'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl/Cmd+X).',copyError:'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre kopírovanie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl/Cmd+C).',pasteMsg:'Prosím vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlačte <STRONG>OK</STRONG>.',securityMsg:'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru pristupovať priamo k datám v schránke. Musíte ich vložiť znovu do tohto okna.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Vložiť z Wordu',title:'Vložiť z Wordu',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Vložiť ako čistý text',title:'Vložiť ako čistý text'},templates:{button:'Šablóny',title:'Šablóny obsahu',options:'Template Options',insertOption:'Nahradiť aktuálny obsah',selectPromptMsg:'Prosím vyberte šablóny na otvorenie v editore<br>(súšasný obsah bude stratený):',emptyListMsg:'(žiadne šablóny nenájdené)'},showBlocks:'Ukázať bloky',stylesCombo:{label:'Štýl',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formát',panelTitle:'Formát',tag_p:'Normálny',tag_pre:'Formátovaný',tag_address:'Adresa',tag_h1:'Nadpis 1',tag_h2:'Nadpis 2',tag_h3:'Nadpis 3',tag_h4:'Nadpis 4',tag_h5:'Nadpis 5',tag_h6:'Nadpis 6',tag_div:'Odsek (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Písmo',voiceLabel:'Font',panelTitle:'Písmo'},fontSize:{label:'Veľkosť',voiceLabel:'Font Size',panelTitle:'Veľkosť'},colorButton:{textColorTitle:'Farba textu',bgColorTitle:'Farba pozadia',panelTitle:'Colors',auto:'Automaticky',more:'Viac farieb...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/sl.js b/modules_v2/ckeditor/lang/sl.js new file mode 100644 index 0000000000..c52def18cb --- /dev/null +++ b/modules_v2/ckeditor/lang/sl.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.sl={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Izvorna koda',newPage:'Nova stran',save:'Shrani',preview:'Predogled',cut:'Izreži',copy:'Kopiraj',paste:'Prilepi',print:'Natisni',underline:'Podčrtano',bold:'Krepko',italic:'Ležeče',selectAll:'Izberi vse',removeFormat:'Odstrani oblikovanje',strike:'Prečrtano',subscript:'Podpisano',superscript:'Nadpisano',horizontalrule:'Vstavi vodoravno črto',pagebreak:'Vstavi prelom strani',pagebreakAlt:'Page Break',unlink:'Odstrani povezavo',undo:'Razveljavi',redo:'Ponovi',common:{browseServer:'Prebrskaj na strežniku',url:'URL',protocol:'Protokol',upload:'Prenesi',uploadSubmit:'Pošlji na strežnik',image:'Slika',flash:'Flash',form:'Obrazec',checkbox:'Potrditveno polje',radio:'Izbirno polje',textField:'Vnosno polje',textarea:'Vnosno območje',hiddenField:'Skrito polje',button:'Gumb',select:'Spustni seznam',imageButton:'Gumb s sliko',notSet:'<ni postavljen>',id:'Id',name:'Ime',langDir:'Smer jezika',langDirLtr:'Od leve proti desni (LTR)',langDirRtl:'Od desne proti levi (RTL)',langCode:'Oznaka jezika',longDescr:'Dolg opis URL-ja',cssClass:'Razred stilne predloge',advisoryTitle:'Predlagani naslov',cssStyle:'Slog',ok:'V redu',cancel:'Prekliči',close:'Close',preview:'Preview',generalTab:'Splošno',advancedTab:'Napredno',validateNumberFailed:'Ta vrednost ni število.',confirmNewPage:'Vse neshranjene spremembe te vsebine bodo izgubljene. Ali gotovo želiš naložiti novo stran?',confirmCancel:'Nekaj možnosti je bilo spremenjenih. Ali gotovo želiš zapreti okno?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Širina',height:'Višina',align:'Poravnava',alignLeft:'Levo',alignRight:'Desno',alignCenter:'Sredinsko',alignTop:'Na vrh',alignMiddle:'V sredino',alignBottom:'Na dno',invalidHeight:'Višina mora biti število.',invalidWidth:'Širina mora biti število.',unavailable:'%1<span class="cke_accessibility">, nedosegljiv</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Vstavi posebni znak',title:'Izberi posebni znak',options:'Special Character Options'},link:{toolbar:'Vstavi/uredi povezavo',other:'<drug>',menu:'Uredi povezavo',title:'Povezava',info:'Podatki o povezavi',target:'Cilj',upload:'Prenesi',advanced:'Napredno',type:'Vrsta povezave',toUrl:'URL',toAnchor:'Zaznamek na tej strani',toEmail:'Elektronski naslov',targetFrame:'<okvir>',targetPopup:'<pojavno okno>',targetFrameName:'Ime ciljnega okvirja',targetPopupName:'Ime pojavnega okna',popupFeatures:'Značilnosti pojavnega okna',popupResizable:'Spremenljive velikosti',popupStatusBar:'Vrstica stanja',popupLocationBar:'Naslovna vrstica',popupToolbar:'Orodna vrstica',popupMenuBar:'Menijska vrstica',popupFullScreen:'Celozaslonska slika (IE)',popupScrollBars:'Drsniki',popupDependent:'Podokno (Netscape)',popupLeft:'Lega levo',popupTop:'Lega na vrhu',id:'Id',langDir:'Smer jezika',langDirLTR:'Od leve proti desni (LTR)',langDirRTL:'Od desne proti levi (RTL)',acccessKey:'Vstopno geslo',name:'Ime',langCode:'Smer jezika',tabIndex:'Številka tabulatorja',advisoryTitle:'Predlagani naslov',advisoryContentType:'Predlagani tip vsebine (content-type)',cssClasses:'Razred stilne predloge',charset:'Kodna tabela povezanega vira',styles:'Slog',selectAnchor:'Izberi zaznamek',anchorName:'Po imenu zaznamka',anchorId:'Po ID-ju elementa',emailAddress:'Elektronski naslov',emailSubject:'Predmet sporočila',emailBody:'Vsebina sporočila',noAnchors:'(V tem dokumentu ni zaznamkov)',noUrl:'Vnesite URL povezave',noEmail:'Vnesite elektronski naslov'},anchor:{toolbar:'Vstavi/uredi zaznamek',menu:'Lastnosti zaznamka',title:'Lastnosti zaznamka',name:'Ime zaznamka',errorName:'Prosim vnesite ime zaznamka'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Najdi in zamenjaj',find:'Najdi',replace:'Zamenjaj',findWhat:'Najdi:',replaceWith:'Zamenjaj z:',notFoundMsg:'Navedeno besedilo ni bilo najdeno.',matchCase:'Razlikuj velike in male črke',matchWord:'Samo cele besede',matchCyclic:'Primerjaj znake v cirilici',replaceAll:'Zamenjaj vse',replaceSuccessMsg:'%1 pojavitev je bilo zamenjano.'},table:{toolbar:'Tabela',title:'Lastnosti tabele',menu:'Lastnosti tabele',deleteTable:'Izbriši tabelo',rows:'Vrstice',columns:'Stolpci',border:'Velikost obrobe',widthPx:'pik',widthPc:'procentov',widthUnit:'width unit',cellSpace:'Razmik med celicami',cellPad:'Polnilo med celicami',caption:'Naslov',summary:'Povzetek',headers:'Glave',headersNone:'Brez',headersColumn:'Prvi stolpec',headersRow:'Prva vrstica',headersBoth:'Oboje',invalidRows:'Število vrstic mora biti večje od 0.',invalidCols:'Število stolpcev mora biti večje od 0.',invalidBorder:'Širina obrobe mora biti število.',invalidWidth:'Širina tabele mora biti število.',invalidHeight:'Višina tabele mora biti število.',invalidCellSpacing:'Razmik med celicami mora biti število.',invalidCellPadding:'Zamik celic mora biti število',cell:{menu:'Celica',insertBefore:'Vstavi celico pred',insertAfter:'Vstavi celico za',deleteCell:'Izbriši celice',merge:'Združi celice',mergeRight:'Združi desno',mergeDown:'Druži navzdol',splitHorizontal:'Razdeli celico vodoravno',splitVertical:'Razdeli celico navpično',title:'Lastnosti celice',cellType:'Vrsta celice',rowSpan:'Razpon vrstic',colSpan:'Razpon stolpcev',wordWrap:'Prelom besedila',hAlign:'Vodoravna poravnava',vAlign:'Navpična poravnava',alignBaseline:'Osnovnica',bgColor:'Barva ozadja',borderColor:'Barva obrobe',data:'Podatki',header:'Glava',yes:'Da',no:'Ne',invalidWidth:'Širina celice mora biti število.',invalidHeight:'Višina celice mora biti število.',invalidRowSpan:'Razpon vrstic mora biti celo število.',invalidColSpan:'Razpon stolpcev mora biti celo število.',chooseColor:'Izberi'},row:{menu:'Vrstica',insertBefore:'Vstavi vrstico pred',insertAfter:'Vstavi vrstico za',deleteRow:'Izbriši vrstice'},column:{menu:'Stolpec',insertBefore:'Vstavi stolpec pred',insertAfter:'Vstavi stolpec za',deleteColumn:'Izbriši stolpce'}},button:{title:'Lastnosti gumba',text:'Besedilo (Vrednost)',type:'Tip',typeBtn:'Gumb',typeSbm:'Potrdi',typeRst:'Ponastavi'},checkboxAndRadio:{checkboxTitle:'Lastnosti potrditvenega polja',radioTitle:'Lastnosti izbirnega polja',value:'Vrednost',selected:'Izbrano'},form:{title:'Lastnosti obrazca',menu:'Lastnosti obrazca',action:'Akcija',method:'Metoda',encoding:'Kodiranje znakov'},select:{title:'Lastnosti spustnega seznama',selectInfo:'Podatki',opAvail:'Razpoložljive izbire',value:'Vrednost',size:'Velikost',lines:'vrstic',chkMulti:'Dovoli izbor večih vrstic',opText:'Besedilo',opValue:'Vrednost',btnAdd:'Dodaj',btnModify:'Spremeni',btnUp:'Gor',btnDown:'Dol',btnSetValue:'Postavi kot privzeto izbiro',btnDelete:'Izbriši'},textarea:{title:'Lastnosti vnosnega območja',cols:'Stolpcev',rows:'Vrstic'},textfield:{title:'Lastnosti vnosnega polja',name:'Ime',value:'Vrednost',charWidth:'Dolžina',maxChars:'Največje število znakov',type:'Tip',typeText:'Besedilo',typePass:'Geslo'},hidden:{title:'Lastnosti skritega polja',name:'Ime',value:'Vrednost'},image:{title:'Lastnosti slike',titleButton:'Lastnosti gumba s sliko',menu:'Lastnosti slike',infoTab:'Podatki o sliki',btnUpload:'Pošlji na strežnik',upload:'Pošlji',alt:'Nadomestno besedilo',lockRatio:'Zakleni razmerje',unlockRatio:'Unlock Ratio',resetSize:'Ponastavi velikost',border:'Obroba',hSpace:'Vodoravni razmik',vSpace:'Navpični razmik',alertUrl:'Vnesite URL slike',linkTab:'Povezava',button2Img:'Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?',img2Button:'Želiš pretvoriti izbrano sliko v gumb s sliko?',urlMissing:'Manjka vir (URL) slike.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Lastnosti Flash',propertiesTab:'Lastnosti',title:'Lastnosti Flash',chkPlay:'Samodejno predvajaj',chkLoop:'Ponavljanje',chkMenu:'Omogoči Flash Meni',chkFull:'Dovoli celozaslonski način',scale:'Povečava',scaleAll:'Pokaži vse',scaleNoBorder:'Brez obrobe',scaleFit:'Natančno prileganje',access:'Dostop skript',accessAlways:'Vedno',accessSameDomain:'Samo ista domena',accessNever:'Nikoli',alignAbsBottom:'Popolnoma na dno',alignAbsMiddle:'Popolnoma v sredino',alignBaseline:'Na osnovno črto',alignTextTop:'Besedilo na vrh',quality:'Kakovost',qualityBest:'Najvišja',qualityHigh:'Visoka',qualityAutoHigh:'Samodejno visoka',qualityMedium:'Srednja',qualityAutoLow:'Samodejno nizka',qualityLow:'Nizka',windowModeWindow:'Okno',windowModeOpaque:'Motno',windowModeTransparent:'Prosojno',windowMode:'Vrsta okna',flashvars:'Spremenljivke za Flash',bgcolor:'Barva ozadja',hSpace:'Vodoravni razmik',vSpace:'Navpični razmik',validateSrc:'Vnesite URL povezave',validateHSpace:'Vodoravni razmik mora biti število.',validateVSpace:'Navpični razmik mora biti število.'},spellCheck:{toolbar:'Preveri črkovanje',title:'Črkovalnik',notAvailable:'Oprostite, storitev trenutno ni dosegljiva.',errorLoading:'Napaka pri nalaganju storitve programa na naslovu %s.',notInDic:'Ni v slovarju',changeTo:'Spremeni v',btnIgnore:'Prezri',btnIgnoreAll:'Prezri vse',btnReplace:'Zamenjaj',btnReplaceAll:'Zamenjaj vse',btnUndo:'Razveljavi',noSuggestions:'- Ni predlogov -',progress:'Preverjanje črkovanja se izvaja...',noMispell:'Črkovanje je končano: Brez napak',noChanges:'Črkovanje je končano: Nobena beseda ni bila spremenjena',oneChange:'Črkovanje je končano: Spremenjena je bila ena beseda',manyChanges:'Črkovanje je končano: Spremenjenih je bilo %1 besed',ieSpellDownload:'Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?'},smiley:{toolbar:'Smeško',title:'Vstavi smeška',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Oštevilčen seznam',bulletedlist:'Označen seznam',indent:'Povečaj zamik',outdent:'Zmanjšaj zamik',justify:{left:'Leva poravnava',center:'Sredinska poravnava',right:'Desna poravnava',block:'Obojestranska poravnava'},blockquote:'Citat',clipboard:{title:'Prilepi',cutError:'Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).',copyError:'Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).',pasteMsg:'Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.',securityMsg:'Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Prilepi iz Worda',title:'Prilepi iz Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Prilepi kot golo besedilo',title:'Prilepi kot golo besedilo'},templates:{button:'Predloge',title:'Vsebinske predloge',options:'Template Options',insertOption:'Zamenjaj trenutno vsebino',selectPromptMsg:'Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):',emptyListMsg:'(Ni pripravljenih predlog)'},showBlocks:'Prikaži ograde',stylesCombo:{label:'Slog',panelTitle:'Formatting Styles',panelTitle1:'Slogi odstavkov',panelTitle2:'Slogi besedila',panelTitle3:'Slogi objektov'},format:{label:'Oblika',panelTitle:'Oblika',tag_p:'Navaden',tag_pre:'Oblikovan',tag_address:'Napis',tag_h1:'Naslov 1',tag_h2:'Naslov 2',tag_h3:'Naslov 3',tag_h4:'Naslov 4',tag_h5:'Naslov 5',tag_h6:'Naslov 6',tag_div:'Navaden (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Pisava',voiceLabel:'Pisava',panelTitle:'Pisava'},fontSize:{label:'Velikost',voiceLabel:'Velikost',panelTitle:'Velikost'},colorButton:{textColorTitle:'Barva besedila',bgColorTitle:'Barva ozadja',panelTitle:'Colors',auto:'Samodejno',more:'Več barv...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Črkovanje med tipkanjem',opera_title:'Not supported by Opera',enable:'Omogoči SCAYT',disable:'Onemogoči SCAYT',about:'O storitvi SCAYT',toggle:'Preklopi SCAYT',options:'Možnosti',langs:'Jeziki',moreSuggestions:'Več predlogov',ignore:'Prezri',ignoreAll:'Prezri vse',addWord:'Dodaj besedo',emptyDic:'Ime slovarja ne more biti prazno.',optionsTab:'Možnosti',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Jeziki',dictionariesTab:'Slovarji',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'O storitvi'},about:{title:'O programu CKEditor',dlgTitle:'O programu CKEditor',moreInfo:'Za informacijo o licenci prostim obiščite našo spletno stran:',copy:'Copyright © $1. Vse pravice pridržane.'},maximize:'Maksimiraj',minimize:'Minimiraj',fakeobjects:{anchor:'Sidro',flash:'Flash animacija',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Neznan objekt'},resize:'Potegni za spremembo velikosti',colordialog:{title:'Izberi barvo',options:'Color Options',highlight:'Poudarjeno',selected:'Izbrano',clear:'Počisti'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/sr-latn.js b/modules_v2/ckeditor/lang/sr-latn.js new file mode 100644 index 0000000000..f510f3f146 --- /dev/null +++ b/modules_v2/ckeditor/lang/sr-latn.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang['sr-latn']={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Kôd',newPage:'Nova stranica',save:'Sačuvaj',preview:'Izgled stranice',cut:'Iseci',copy:'Kopiraj',paste:'Zalepi',print:'Štampa',underline:'Podvučeno',bold:'Podebljano',italic:'Kurziv',selectAll:'Označi sve',removeFormat:'Ukloni formatiranje',strike:'Precrtano',subscript:'Indeks',superscript:'Stepen',horizontalrule:'Unesi horizontalnu liniju',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Ukloni link',undo:'Poni�ti akciju',redo:'Ponovi akciju',common:{browseServer:'Pretraži server',url:'URL',protocol:'Protokol',upload:'Pošalji',uploadSubmit:'Pošalji na server',image:'Slika',flash:'Fleš',form:'Forma',checkbox:'Polje za potvrdu',radio:'Radio-dugme',textField:'Tekstualno polje',textarea:'Zona teksta',hiddenField:'Skriveno polje',button:'Dugme',select:'Izborno polje',imageButton:'Dugme sa slikom',notSet:'<nije postavljeno>',id:'Id',name:'Naziv',langDir:'Smer jezika',langDirLtr:'S leva na desno (LTR)',langDirRtl:'S desna na levo (RTL)',langCode:'Kôd jezika',longDescr:'Pun opis URL',cssClass:'Stylesheet klase',advisoryTitle:'Advisory naslov',cssStyle:'Stil',ok:'OK',cancel:'Otkaži',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Napredni tagovi',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Širina',height:'Visina',align:'Ravnanje',alignLeft:'Levo',alignRight:'Desno',alignCenter:'Sredina',alignTop:'Vrh',alignMiddle:'Sredina',alignBottom:'Dole',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Unesi specijalni karakter',title:'Odaberite specijalni karakter',options:'Special Character Options'},link:{toolbar:'Unesi/izmeni link',other:'<остало>',menu:'Izmeni link',title:'Link',info:'Link Info',target:'Meta',upload:'Pošalji',advanced:'Napredni tagovi',type:'Vrsta linka',toUrl:'URL',toAnchor:'Sidro na ovoj stranici',toEmail:'E-Mail',targetFrame:'<okvir>',targetPopup:'<popup prozor>',targetFrameName:'Naziv odredišnog frejma',targetPopupName:'Naziv popup prozora',popupFeatures:'Mogućnosti popup prozora',popupResizable:'Resizable',popupStatusBar:'Statusna linija',popupLocationBar:'Lokacija',popupToolbar:'Toolbar',popupMenuBar:'Kontekstni meni',popupFullScreen:'Prikaz preko celog ekrana (IE)',popupScrollBars:'Scroll bar',popupDependent:'Zavisno (Netscape)',popupLeft:'Od leve ivice ekrana (px)',popupTop:'Od vrha ekrana (px)',id:'Id',langDir:'Smer jezika',langDirLTR:'S leva na desno (LTR)',langDirRTL:'S desna na levo (RTL)',acccessKey:'Pristupni taster',name:'Naziv',langCode:'Smer jezika',tabIndex:'Tab indeks',advisoryTitle:'Advisory naslov',advisoryContentType:'Advisory vrsta sadržaja',cssClasses:'Stylesheet klase',charset:'Linked Resource Charset',styles:'Stil',selectAnchor:'Odaberi sidro',anchorName:'Po nazivu sidra',anchorId:'Po Id-ju elementa',emailAddress:'E-Mail adresa',emailSubject:'Naslov',emailBody:'Sadržaj poruke',noAnchors:'(Nema dostupnih sidra)',noUrl:'Unesite URL linka',noEmail:'Otkucajte adresu elektronske pote'},anchor:{toolbar:'Unesi/izmeni sidro',menu:'Osobine sidra',title:'Osobine sidra',name:'Ime sidra',errorName:'Unesite ime sidra'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Pretraga',replace:'Zamena',findWhat:'Pronadi:',replaceWith:'Zameni sa:',notFoundMsg:'Traženi tekst nije pronađen.',matchCase:'Razlikuj mala i velika slova',matchWord:'Uporedi cele reci',matchCyclic:'Match cyclic',replaceAll:'Zameni sve',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Osobine tabele',menu:'Osobine tabele',deleteTable:'Delete Table',rows:'Redova',columns:'Kolona',border:'Veličina okvira',widthPx:'piksela',widthPc:'procenata',widthUnit:'width unit',cellSpace:'Ćelijski prostor',cellPad:'Razmak ćelija',caption:'Naslov tabele',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Obriši ćelije',merge:'Spoj celije',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Obriši redove'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Obriši kolone'}},button:{title:'Osobine dugmeta',text:'Tekst (vrednost)',type:'Tip',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Osobine polja za potvrdu',radioTitle:'Osobine radio-dugmeta',value:'Vrednost',selected:'Označeno'},form:{title:'Osobine forme',menu:'Osobine forme',action:'Akcija',method:'Metoda',encoding:'Encoding'},select:{title:'Osobine izbornog polja',selectInfo:'Info',opAvail:'Dostupne opcije',value:'Vrednost',size:'Veličina',lines:'linija',chkMulti:'Dozvoli višestruku selekciju',opText:'Tekst',opValue:'Vrednost',btnAdd:'Dodaj',btnModify:'Izmeni',btnUp:'Gore',btnDown:'Dole',btnSetValue:'Podesi kao označenu vrednost',btnDelete:'Obriši'},textarea:{title:'Osobine zone teksta',cols:'Broj kolona',rows:'Broj redova'},textfield:{title:'Osobine tekstualnog polja',name:'Naziv',value:'Vrednost',charWidth:'Širina (karaktera)',maxChars:'Maksimalno karaktera',type:'Tip',typeText:'Tekst',typePass:'Lozinka'},hidden:{title:'Osobine skrivenog polja',name:'Naziv',value:'Vrednost'},image:{title:'Osobine slika',titleButton:'Osobine dugmeta sa slikom',menu:'Osobine slika',infoTab:'Info slike',btnUpload:'Pošalji na server',upload:'Pošalji',alt:'Alternativni tekst',lockRatio:'Zaključaj odnos',unlockRatio:'Unlock Ratio',resetSize:'Resetuj veličinu',border:'Okvir',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Unesite URL slike',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Osobine fleša',propertiesTab:'Properties',title:'Osobine fleša',chkPlay:'Automatski start',chkLoop:'Ponavljaj',chkMenu:'Uključi fleš meni',chkFull:'Allow Fullscreen',scale:'Skaliraj',scaleAll:'Prikaži sve',scaleNoBorder:'Bez ivice',scaleFit:'Popuni površinu',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs dole',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignTextTop:'Vrh teksta',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Boja pozadine',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Unesite URL linka',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Proveri spelovanje',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nije u rečniku',changeTo:'Izmeni',btnIgnore:'Ignoriši',btnIgnoreAll:'Ignoriši sve',btnReplace:'Zameni',btnReplaceAll:'Zameni sve',btnUndo:'Vrati akciju',noSuggestions:'- Bez sugestija -',progress:'Provera spelovanja u toku...',noMispell:'Provera spelovanja završena: greške nisu pronadene',noChanges:'Provera spelovanja završena: Nije izmenjena nijedna rec',oneChange:'Provera spelovanja završena: Izmenjena je jedna reč',manyChanges:'Provera spelovanja završena: %1 reč(i) je izmenjeno',ieSpellDownload:'Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?'},smiley:{toolbar:'Smajli',title:'Unesi smajlija',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Nabrojiva lista',bulletedlist:'Nenabrojiva lista',indent:'Uvećaj levu marginu',outdent:'Smanji levu marginu',justify:{left:'Levo ravnanje',center:'Centriran tekst',right:'Desno ravnanje',block:'Obostrano ravnanje'},blockquote:'Block Quote',clipboard:{title:'Zalepi',cutError:'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+X).',copyError:'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+C).',pasteMsg:'Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Zalepi iz Worda',title:'Zalepi iz Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Zalepi kao čist tekst',title:'Zalepi kao čist tekst'},templates:{button:'Obrasci',title:'Obrasci za sadržaj',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):',emptyListMsg:'(Nema definisanih obrazaca)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stil',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',panelTitle:'Format',tag_p:'Normal',tag_pre:'Formatirano',tag_address:'Adresa',tag_h1:'Naslov 1',tag_h2:'Naslov 2',tag_h3:'Naslov 3',tag_h4:'Naslov 4',tag_h5:'Naslov 5',tag_h6:'Naslov 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font'},fontSize:{label:'Veličina fonta',voiceLabel:'Font Size',panelTitle:'Veličina fonta'},colorButton:{textColorTitle:'Boja teksta',bgColorTitle:'Boja pozadine',panelTitle:'Colors',auto:'Automatski',more:'Više boja...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/sr.js b/modules_v2/ckeditor/lang/sr.js new file mode 100644 index 0000000000..3c3bef8fe7 --- /dev/null +++ b/modules_v2/ckeditor/lang/sr.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.sr={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Kôд',newPage:'Нова страница',save:'Сачувај',preview:'Изглед странице',cut:'Исеци',copy:'Копирај',paste:'Залепи',print:'Штампа',underline:'Подвучено',bold:'Подебљано',italic:'Курзив',selectAll:'Означи све',removeFormat:'Уклони форматирање',strike:'Прецртано',subscript:'Индекс',superscript:'Степен',horizontalrule:'Унеси хоризонталну линију',pagebreak:'Insert Page Break for Printing',pagebreakAlt:'Page Break',unlink:'Уклони линк',undo:'Поништи акцију',redo:'Понови акцију',common:{browseServer:'Претражи сервер',url:'УРЛ',protocol:'Протокол',upload:'Пошаљи',uploadSubmit:'Пошаљи на сервер',image:'Слика',flash:'Флеш елемент',form:'Форма',checkbox:'Поље за потврду',radio:'Радио-дугме',textField:'Текстуално поље',textarea:'Зона текста',hiddenField:'Скривено поље',button:'Дугме',select:'Изборно поље',imageButton:'Дугме са сликом',notSet:'<није постављено>',id:'Ид',name:'Назив',langDir:'Смер језика',langDirLtr:'С лева на десно (LTR)',langDirRtl:'С десна на лево (RTL)',langCode:'Kôд језика',longDescr:'Пун опис УРЛ',cssClass:'Stylesheet класе',advisoryTitle:'Advisory наслов',cssStyle:'Стил',ok:'OK',cancel:'Oткажи',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Напредни тагови',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Ширина',height:'Висина',align:'Равнање',alignLeft:'Лево',alignRight:'Десно',alignCenter:'Средина',alignTop:'Врх',alignMiddle:'Средина',alignBottom:'Доле',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Унеси специјални карактер',title:'Одаберите специјални карактер',options:'Special Character Options'},link:{toolbar:'Унеси/измени линк',other:'<other>',menu:'Промени линк',title:'Линк',info:'Линк инфо',target:'Meтa',upload:'Пошаљи',advanced:'Напредни тагови',type:'Врста линка',toUrl:'URL',toAnchor:'Сидро на овој страници',toEmail:'Eлектронска пошта',targetFrame:'<оквир>',targetPopup:'<искачући прозор>',targetFrameName:'Назив одредишног фрејма',targetPopupName:'Назив искачућег прозора',popupFeatures:'Могућности искачућег прозора',popupResizable:'Resizable',popupStatusBar:'Статусна линија',popupLocationBar:'Локација',popupToolbar:'Toolbar',popupMenuBar:'Контекстни мени',popupFullScreen:'Приказ преко целог екрана (ИE)',popupScrollBars:'Скрол бар',popupDependent:'Зависно (Netscape)',popupLeft:'Од леве ивице екрана (пиксела)',popupTop:'Од врха екрана (пиксела)',id:'Id',langDir:'Смер језика',langDirLTR:'С лева на десно (LTR)',langDirRTL:'С десна на лево (RTL)',acccessKey:'Приступни тастер',name:'Назив',langCode:'Смер језика',tabIndex:'Таб индекс',advisoryTitle:'Advisory наслов',advisoryContentType:'Advisory врста садржаја',cssClasses:'Stylesheet класе',charset:'Linked Resource Charset',styles:'Стил',selectAnchor:'Одабери сидро',anchorName:'По називу сидра',anchorId:'Пo Ид-jу елемента',emailAddress:'Адреса електронске поште',emailSubject:'Наслов',emailBody:'Садржај поруке',noAnchors:'(Нема доступних сидра)',noUrl:'Унесите УРЛ линка',noEmail:'Откуцајте адресу електронске поште'},anchor:{toolbar:'Унеси/измени сидро',menu:'Особине сидра',title:'Особине сидра',name:'Име сидра',errorName:'Молимо Вас да унесете име сидра'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'Претрага',replace:'Замена',findWhat:'Пронађи:',replaceWith:'Замени са:',notFoundMsg:'Тражени текст није пронађен.',matchCase:'Разликуј велика и мала слова',matchWord:'Упореди целе речи',matchCyclic:'Match cyclic',replaceAll:'Замени све',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Табела',title:'Особине табеле',menu:'Особине табеле',deleteTable:'Delete Table',rows:'Редова',columns:'Kолона',border:'Величина оквира',widthPx:'пиксела',widthPc:'процената',widthUnit:'width unit',cellSpace:'Ћелијски простор',cellPad:'Размак ћелија',caption:'Наслов табеле',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Обриши ћелије',merge:'Спој ћелије',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Обриши редове'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Обриши колоне'}},button:{title:'Особине дугмета',text:'Текст (вредност)',type:'Tип',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Особине поља за потврду',radioTitle:'Особине радио-дугмета',value:'Вредност',selected:'Означено'},form:{title:'Особине форме',menu:'Особине форме',action:'Aкција',method:'Mетода',encoding:'Encoding'},select:{title:'Особине изборног поља',selectInfo:'Инфо',opAvail:'Доступне опције',value:'Вредност',size:'Величина',lines:'линија',chkMulti:'Дозволи вишеструку селекцију',opText:'Текст',opValue:'Вредност',btnAdd:'Додај',btnModify:'Измени',btnUp:'Горе',btnDown:'Доле',btnSetValue:'Подеси као означену вредност',btnDelete:'Обриши'},textarea:{title:'Особине зоне текста',cols:'Број колона',rows:'Број редова'},textfield:{title:'Особине текстуалног поља',name:'Назив',value:'Вредност',charWidth:'Ширина (карактера)',maxChars:'Максимално карактера',type:'Тип',typeText:'Текст',typePass:'Лозинка'},hidden:{title:'Особине скривеног поља',name:'Назив',value:'Вредност'},image:{title:'Особине слика',titleButton:'Особине дугмета са сликом',menu:'Особине слика',infoTab:'Инфо слике',btnUpload:'Пошаљи на сервер',upload:'Пошаљи',alt:'Алтернативни текст',lockRatio:'Закључај однос',unlockRatio:'Unlock Ratio',resetSize:'Ресетуј величину',border:'Оквир',hSpace:'HSpace',vSpace:'VSpace',alertUrl:'Унесите УРЛ слике',linkTab:'Линк',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Особине Флеша',propertiesTab:'Properties',title:'Особине флеша',chkPlay:'Аутоматски старт',chkLoop:'Понављај',chkMenu:'Укључи флеш мени',chkFull:'Allow Fullscreen',scale:'Скалирај',scaleAll:'Прикажи све',scaleNoBorder:'Без ивице',scaleFit:'Попуни површину',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Abs доле',alignAbsMiddle:'Abs средина',alignBaseline:'Базно',alignTextTop:'Врх текста',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Боја позадине',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Унесите УРЛ линка',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Провери спеловање',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Није у речнику',changeTo:'Измени',btnIgnore:'Игнориши',btnIgnoreAll:'Игнориши све',btnReplace:'Замени',btnReplaceAll:'Замени све',btnUndo:'Врати акцију',noSuggestions:'- Без сугестија -',progress:'Провера спеловања у току...',noMispell:'Провера спеловања завршена: грешке нису пронађене',noChanges:'Провера спеловања завршена: Није измењена ниједна реч',oneChange:'Провера спеловања завршена: Измењена је једна реч',manyChanges:'Провера спеловања завршена: %1 реч(и) је измењено',ieSpellDownload:'Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?'},smiley:{toolbar:'Смајли',title:'Унеси смајлија',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Набројиву листу',bulletedlist:'Ненабројива листа',indent:'Увећај леву маргину',outdent:'Смањи леву маргину',justify:{left:'Лево равнање',center:'Центриран текст',right:'Десно равнање',block:'Обострано равнање'},blockquote:'Block Quote',clipboard:{title:'Залепи',cutError:'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).',copyError:'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).',pasteMsg:'Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl/Cmd+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Залепи из Worda',title:'Залепи из Worda',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Залепи као чист текст',title:'Залепи као чист текст'},templates:{button:'Обрасци',title:'Обрасци за садржај',options:'Template Options',insertOption:'Replace actual contents',selectPromptMsg:'Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):',emptyListMsg:'(Нема дефинисаних образаца)'},showBlocks:'Show Blocks',stylesCombo:{label:'Стил',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Формат',panelTitle:'Формат',tag_p:'Normal',tag_pre:'Formatirano',tag_address:'Adresa',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Фонт',voiceLabel:'Font',panelTitle:'Фонт'},fontSize:{label:'Величина фонта',voiceLabel:'Font Size',panelTitle:'Величина фонта'},colorButton:{textColorTitle:'Боја текста',bgColorTitle:'Боја позадине',panelTitle:'Colors',auto:'Аутоматски',more:'Више боја...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/sv.js b/modules_v2/ckeditor/lang/sv.js new file mode 100644 index 0000000000..e18103fe37 --- /dev/null +++ b/modules_v2/ckeditor/lang/sv.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.sv={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'Källa',newPage:'Ny sida',save:'Spara',preview:'Förhandsgranska',cut:'Klipp ut',copy:'Kopiera',paste:'Klistra in',print:'Skriv ut',underline:'Understruken',bold:'Fet',italic:'Kursiv',selectAll:'Markera allt',removeFormat:'Radera formatering',strike:'Genomstruken',subscript:'Nedsänkta tecken',superscript:'Upphöjda tecken',horizontalrule:'Infoga horisontal linje',pagebreak:'Infoga sidbrytning',pagebreakAlt:'Page Break',unlink:'Radera länk',undo:'Ångra',redo:'Gör om',common:{browseServer:'Bläddra på server',url:'URL',protocol:'Protokoll',upload:'Ladda upp',uploadSubmit:'Skicka till server',image:'Bild',flash:'Flash',form:'Formulär',checkbox:'Kryssruta',radio:'Alternativknapp',textField:'Textfält',textarea:'Textruta',hiddenField:'Dolt fält',button:'Knapp',select:'Flervalslista',imageButton:'Bildknapp',notSet:'<ej angivet>',id:'Id',name:'Namn',langDir:'Språkriktning',langDirLtr:'Vänster till Höger (VTH)',langDirRtl:'Höger till Vänster (HTV)',langCode:'Språkkod',longDescr:'URL-beskrivning',cssClass:'Stylesheet class',advisoryTitle:'Titel',cssStyle:'Style',ok:'OK',cancel:'Avbryt',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'Avancerad',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Bredd',height:'Höjd',align:'Justering',alignLeft:'Vänster',alignRight:'Höger',alignCenter:'Centrerad',alignTop:'Överkant',alignMiddle:'Mitten',alignBottom:'Nederkant',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'Klistra in utökat tecken',title:'Välj utökat tecken',options:'Special Character Options'},link:{toolbar:'Infoga/Redigera länk',other:'<annan>',menu:'Redigera länk',title:'Länk',info:'Länkinformation',target:'Mål',upload:'Ladda upp',advanced:'Avancerad',type:'Länktyp',toUrl:'URL',toAnchor:'Ankare i sidan',toEmail:'E-post',targetFrame:'<ram>',targetPopup:'<popup-fönster>',targetFrameName:'Målets ramnamn',targetPopupName:'Popup-fönstrets namn',popupFeatures:'Popup-fönstrets egenskaper',popupResizable:'Resizable',popupStatusBar:'Statusfält',popupLocationBar:'Adressfält',popupToolbar:'Verktygsfält',popupMenuBar:'Menyfält',popupFullScreen:'Helskärm (endast IE)',popupScrollBars:'Scrolllista',popupDependent:'Beroende (endest Netscape)',popupLeft:'Position från vänster',popupTop:'Position från sidans topp',id:'Id',langDir:'Språkriktning',langDirLTR:'Vänster till Höger (VTH)',langDirRTL:'Höger till Vänster (HTV)',acccessKey:'Behörighetsnyckel',name:'Namn',langCode:'Språkriktning',tabIndex:'Tabindex',advisoryTitle:'Titel',advisoryContentType:'Innehållstyp',cssClasses:'Stylesheet class',charset:'Teckenuppställning',styles:'Style',selectAnchor:'Välj ett ankare',anchorName:'efter ankarnamn',anchorId:'efter objektid',emailAddress:'E-postadress',emailSubject:'Ämne',emailBody:'Innehåll',noAnchors:'(Inga ankare kunde hittas)',noUrl:'Var god ange länkens URL',noEmail:'Var god ange E-postadress'},anchor:{toolbar:'Infoga/Redigera ankarlänk',menu:'Egenskaper för ankarlänk',title:'Egenskaper för ankarlänk',name:'Ankarnamn',errorName:'Var god ange ett ankarnamn'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Sök och ersätt',find:'Sök',replace:'Ersätt',findWhat:'Sök efter:',replaceWith:'Ersätt med:',notFoundMsg:'Angiven text kunde ej hittas.',matchCase:'Skiftläge',matchWord:'Inkludera hela ord',matchCyclic:'Match cyclic',replaceAll:'Ersätt alla',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabell',title:'Tabellegenskaper',menu:'Tabellegenskaper',deleteTable:'Radera tabell',rows:'Rader',columns:'Kolumner',border:'Kantstorlek',widthPx:'pixlar',widthPc:'procent',widthUnit:'width unit',cellSpace:'Cellavstånd',cellPad:'Cellutfyllnad',caption:'Rubrik',summary:'Sammanfattning',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Lägg till Cell Före',insertAfter:'Lägg till Cell Efter',deleteCell:'Radera celler',merge:'Sammanfoga celler',mergeRight:'Sammanfoga Höger',mergeDown:'Sammanfoga Ner',splitHorizontal:'Dela Cell Horisontellt',splitVertical:'Dela Cell Vertikalt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'Rad',insertBefore:'Lägg till Rad Före',insertAfter:'Lägg till Rad Efter',deleteRow:'Radera rad'},column:{menu:'Kolumn',insertBefore:'Lägg till Kolumn Före',insertAfter:'Lägg till Kolumn Efter',deleteColumn:'Radera kolumn'}},button:{title:'Egenskaper för knapp',text:'Text (Värde)',type:'Typ',typeBtn:'Knapp',typeSbm:'Skicka',typeRst:'Återställ'},checkboxAndRadio:{checkboxTitle:'Egenskaper för kryssruta',radioTitle:'Egenskaper för alternativknapp',value:'Värde',selected:'Vald'},form:{title:'Egenskaper för formulär',menu:'Egenskaper för formulär',action:'Funktion',method:'Metod',encoding:'Encoding'},select:{title:'Egenskaper för flervalslista',selectInfo:'Information',opAvail:'Befintliga val',value:'Värde',size:'Storlek',lines:'Linjer',chkMulti:'Tillåt flerval',opText:'Text',opValue:'Värde',btnAdd:'Lägg till',btnModify:'Redigera',btnUp:'Upp',btnDown:'Ner',btnSetValue:'Markera som valt värde',btnDelete:'Radera'},textarea:{title:'Egenskaper för textruta',cols:'Kolumner',rows:'Rader'},textfield:{title:'Egenskaper för textfält',name:'Namn',value:'Värde',charWidth:'Teckenbredd',maxChars:'Max antal tecken',type:'Typ',typeText:'Text',typePass:'Lösenord'},hidden:{title:'Egenskaper för dolt fält',name:'Namn',value:'Värde'},image:{title:'Bildegenskaper',titleButton:'Egenskaper för bildknapp',menu:'Bildegenskaper',infoTab:'Bildinformation',btnUpload:'Skicka till server',upload:'Ladda upp',alt:'Alternativ text',lockRatio:'Lås höjd/bredd förhållanden',unlockRatio:'Unlock Ratio',resetSize:'Återställ storlek',border:'Kant',hSpace:'Horis. marginal',vSpace:'Vert. marginal',alertUrl:'Var god och ange bildens URL',linkTab:'Länk',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flashegenskaper',propertiesTab:'Properties',title:'Flashegenskaper',chkPlay:'Automatisk uppspelning',chkLoop:'Upprepa/Loopa',chkMenu:'Aktivera Flashmeny',chkFull:'Allow Fullscreen',scale:'Skala',scaleAll:'Visa allt',scaleNoBorder:'Ingen ram',scaleFit:'Exakt passning',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'Absolut nederkant',alignAbsMiddle:'Absolut centrering',alignBaseline:'Baslinje',alignTextTop:'Text överkant',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Bakgrundsfärg',hSpace:'Horis. marginal',vSpace:'Vert. marginal',validateSrc:'Var god ange länkens URL',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Stavningskontroll',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Saknas i ordlistan',changeTo:'Ändra till',btnIgnore:'Ignorera',btnIgnoreAll:'Ignorera alla',btnReplace:'Ersätt',btnReplaceAll:'Ersätt alla',btnUndo:'Ångra',noSuggestions:'- Förslag saknas -',progress:'Stavningskontroll pågår...',noMispell:'Stavningskontroll slutförd: Inga stavfel påträffades.',noChanges:'Stavningskontroll slutförd: Inga ord rättades.',oneChange:'Stavningskontroll slutförd: Ett ord rättades.',manyChanges:'Stavningskontroll slutförd: %1 ord rättades.',ieSpellDownload:'Stavningskontrollen är ej installerad. Vill du göra det nu?'},smiley:{toolbar:'Smiley',title:'Infoga smiley',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'Numrerad lista',bulletedlist:'Punktlista',indent:'Öka indrag',outdent:'Minska indrag',justify:{left:'Vänsterjustera',center:'Centrera',right:'Högerjustera',block:'Justera till marginaler'},blockquote:'Block Quote',clipboard:{title:'Klistra in',cutError:'Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl/Cmd+X) istället.',copyError:'Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl/Cmd+C) istället',pasteMsg:'Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl/Cmd+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.',securityMsg:'På grund av din webläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'Klistra in från Word',title:'Klistra in från Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Klistra in som vanlig text',title:'Klistra in som vanlig text'},templates:{button:'Sidmallar',title:'Sidmallar',options:'Template Options',insertOption:'Ersätt aktuellt innehåll',selectPromptMsg:'Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):',emptyListMsg:'(Ingen mall är vald)'},showBlocks:'Show Blocks',stylesCombo:{label:'Anpassad stil',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Teckenformat',panelTitle:'Teckenformat',tag_p:'Normal',tag_pre:'Formaterad',tag_address:'Adress',tag_h1:'Rubrik 1',tag_h2:'Rubrik 2',tag_h3:'Rubrik 3',tag_h4:'Rubrik 4',tag_h5:'Rubrik 5',tag_h6:'Rubrik 6',tag_div:'Normal (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Typsnitt',voiceLabel:'Font',panelTitle:'Typsnitt'},fontSize:{label:'Storlek',voiceLabel:'Font Size',panelTitle:'Storlek'},colorButton:{textColorTitle:'Textfärg',bgColorTitle:'Bakgrundsfärg',panelTitle:'Colors',auto:'Automatisk',more:'Fler färger...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/th.js b/modules_v2/ckeditor/lang/th.js new file mode 100644 index 0000000000..de0569024d --- /dev/null +++ b/modules_v2/ckeditor/lang/th.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.th={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'ดูรหัส HTML',newPage:'สร้างหน้าเอกสารใหม่',save:'บันทึก',preview:'ดูหน้าเอกสารตัวอย่าง',cut:'ตัด',copy:'สำเนา',paste:'วาง',print:'สั่งพิมพ์',underline:'ตัวขีดเส้นใต้',bold:'ตัวหนา',italic:'ตัวเอียง',selectAll:'เลือกทั้งหมด',removeFormat:'ล้างรูปแบบ',strike:'ตัวขีดเส้นทับ',subscript:'ตัวห้อย',superscript:'ตัวยก',horizontalrule:'แทรกเส้นคั่นบรรทัด',pagebreak:'แทรกตัวแบ่งหน้า Page Break',pagebreakAlt:'Page Break',unlink:'ลบ ลิงค์',undo:'ยกเลิกคำสั่ง',redo:'ทำซ้ำคำสั่ง',common:{browseServer:'เปิดหน้าต่างจัดการไฟล์อัพโหลด',url:'ที่อยู่อ้างอิง URL',protocol:'โปรโตคอล',upload:'อัพโหลดไฟล์',uploadSubmit:'อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)',image:'รูปภาพ',flash:'ไฟล์ Flash',form:'แบบฟอร์ม',checkbox:'เช็คบ๊อก',radio:'เรดิโอบัตตอน',textField:'เท็กซ์ฟิลด์',textarea:'เท็กซ์แอเรีย',hiddenField:'ฮิดเดนฟิลด์',button:'ปุ่ม',select:'แถบตัวเลือก',imageButton:'ปุ่มแบบรูปภาพ',notSet:'<ไม่ระบุ>',id:'ไอดี',name:'ชื่อ',langDir:'การเขียน-อ่านภาษา',langDirLtr:'จากซ้ายไปขวา (LTR)',langDirRtl:'จากขวามาซ้าย (RTL)',langCode:'รหัสภาษา',longDescr:'คำอธิบายประกอบ URL',cssClass:'คลาสของไฟล์กำหนดลักษณะการแสดงผล',advisoryTitle:'คำเกริ่นนำ',cssStyle:'ลักษณะการแสดงผล',ok:'ตกลง',cancel:'ยกเลิก',close:'Close',preview:'Preview',generalTab:'General',advancedTab:'ขั้นสูง',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'ความกว้าง',height:'ความสูง',align:'การจัดวาง',alignLeft:'ชิดซ้าย',alignRight:'ชิดขวา',alignCenter:'กึ่งกลาง',alignTop:'บนสุด',alignMiddle:'กึ่งกลางแนวตั้ง',alignBottom:'ชิดด้านล่าง',invalidHeight:'Height must be a number.',invalidWidth:'Width must be a number.',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'แทรกตัวอักษรพิเศษ',title:'แทรกตัวอักษรพิเศษ',options:'Special Character Options'},link:{toolbar:'แทรก/แก้ไข ลิงค์',other:'<อื่น ๆ>',menu:'แก้ไข ลิงค์',title:'ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ',info:'รายละเอียด',target:'การเปิดหน้าลิงค์',upload:'อัพโหลดไฟล์',advanced:'ขั้นสูง',type:'ประเภทของลิงค์',toUrl:'URL',toAnchor:'จุดเชื่อมโยง (Anchor)',toEmail:'ส่งอีเมล์ (E-Mail)',targetFrame:'<เปิดในเฟรม>',targetPopup:'<เปิดหน้าจอเล็ก (Pop-up)>',targetFrameName:'ชื่อทาร์เก็ตเฟรม',targetPopupName:'ระบุชื่อหน้าจอเล็ก (Pop-up)',popupFeatures:'คุณสมบัติของหน้าจอเล็ก (Pop-up)',popupResizable:'Resizable',popupStatusBar:'แสดงแถบสถานะ',popupLocationBar:'แสดงที่อยู่ของไฟล์',popupToolbar:'แสดงแถบเครื่องมือ',popupMenuBar:'แสดงแถบเมนู',popupFullScreen:'แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)',popupScrollBars:'แสดงแถบเลื่อน',popupDependent:'แสดงเต็มหน้าจอ (Netscape)',popupLeft:'พิกัดซ้าย (Left Position)',popupTop:'พิกัดบน (Top Position)',id:'Id',langDir:'การเขียน-อ่านภาษา',langDirLTR:'จากซ้ายไปขวา (LTR)',langDirRTL:'จากขวามาซ้าย (RTL)',acccessKey:'แอคเซส คีย์',name:'ชื่อ',langCode:'การเขียน-อ่านภาษา',tabIndex:'ลำดับของ แท็บ',advisoryTitle:'คำเกริ่นนำ',advisoryContentType:'ชนิดของคำเกริ่นนำ',cssClasses:'คลาสของไฟล์กำหนดลักษณะการแสดงผล',charset:'ลิงค์เชื่อมโยงไปยังชุดตัวอักษร',styles:'ลักษณะการแสดงผล',selectAnchor:'ระบุข้อมูลของจุดเชื่อมโยง (Anchor)',anchorName:'ชื่อ',anchorId:'ไอดี',emailAddress:'อีเมล์ (E-Mail)',emailSubject:'หัวเรื่อง',emailBody:'ข้อความ',noAnchors:'(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)',noUrl:'กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)',noEmail:'กรุณาระบุอีเมล์ (E-mail)'},anchor:{toolbar:'แทรก/แก้ไข Anchor',menu:'รายละเอียด Anchor',title:'รายละเอียด Anchor',name:'ชื่อ Anchor',errorName:'กรุณาระบุชื่อของ Anchor'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'Find and Replace',find:'ค้นหา',replace:'ค้นหาและแทนที่',findWhat:'ค้นหาคำว่า:',replaceWith:'แทนที่ด้วย:',notFoundMsg:'ไม่พบคำที่ค้นหา.',matchCase:'ตัวโหญ่-เล็ก ต้องตรงกัน',matchWord:'ต้องตรงกันทุกคำ',matchCyclic:'Match cyclic',replaceAll:'แทนที่ทั้งหมดที่พบ',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'ตาราง',title:'คุณสมบัติของ ตาราง',menu:'คุณสมบัติของ ตาราง',deleteTable:'ลบตาราง',rows:'แถว',columns:'สดมน์',border:'ขนาดเส้นขอบ',widthPx:'จุดสี',widthPc:'เปอร์เซ็น',widthUnit:'width unit',cellSpace:'ระยะแนวนอนน',cellPad:'ระยะแนวตั้ง',caption:'หัวเรื่องของตาราง',summary:'สรุปความ',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'ช่องตาราง',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'ลบช่อง',merge:'ผสานช่อง',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.',chooseColor:'Choose'},row:{menu:'แถว',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'ลบแถว'},column:{menu:'คอลัมน์',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'ลบสดมน์'}},button:{title:'รายละเอียดของ ปุ่ม',text:'ข้อความ (ค่าตัวแปร)',type:'ข้อความ',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'คุณสมบัติของ เช็คบ๊อก',radioTitle:'คุณสมบัติของ เรดิโอบัตตอน',value:'ค่าตัวแปร',selected:'เลือกเป็นค่าเริ่มต้น'},form:{title:'คุณสมบัติของ แบบฟอร์ม',menu:'คุณสมบัติของ แบบฟอร์ม',action:'แอคชั่น',method:'เมธอด',encoding:'Encoding'},select:{title:'คุณสมบัติของ แถบตัวเลือก',selectInfo:'อินโฟ',opAvail:'รายการตัวเลือก',value:'ค่าตัวแปร',size:'ขนาด',lines:'บรรทัด',chkMulti:'เลือกหลายค่าได้',opText:'ข้อความ',opValue:'ค่าตัวแปร',btnAdd:'เพิ่ม',btnModify:'แก้ไข',btnUp:'บน',btnDown:'ล่าง',btnSetValue:'เลือกเป็นค่าเริ่มต้น',btnDelete:'ลบ'},textarea:{title:'คุณสมบัติของ เท็กแอเรีย',cols:'สดมภ์',rows:'แถว'},textfield:{title:'คุณสมบัติของ เท็กซ์ฟิลด์',name:'ชื่อ',value:'ค่าตัวแปร',charWidth:'ความกว้าง',maxChars:'จำนวนตัวอักษรสูงสุด',type:'ชนิด',typeText:'ข้อความ',typePass:'รหัสผ่าน'},hidden:{title:'คุณสมบัติของ ฮิดเดนฟิลด์',name:'ชื่อ',value:'ค่าตัวแปร'},image:{title:'คุณสมบัติของ รูปภาพ',titleButton:'คุณสมบัติของ ปุ่มแบบรูปภาพ',menu:'คุณสมบัติของ รูปภาพ',infoTab:'ข้อมูลของรูปภาพ',btnUpload:'อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)',upload:'อัพโหลดไฟล์',alt:'คำประกอบรูปภาพ',lockRatio:'กำหนดอัตราส่วน กว้าง-สูง แบบคงที่',unlockRatio:'Unlock Ratio',resetSize:'กำหนดรูปเท่าขนาดจริง',border:'ขนาดขอบรูป',hSpace:'ระยะแนวนอน',vSpace:'ระยะแนวตั้ง',alertUrl:'กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)',linkTab:'ลิ้งค์',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'คุณสมบัติของไฟล์ Flash',propertiesTab:'Properties',title:'คุณสมบัติของไฟล์ Flash',chkPlay:'เล่นอัตโนมัติ Auto Play',chkLoop:'เล่นวนรอบ Loop',chkMenu:'ให้ใช้งานเมนูของ Flash',chkFull:'Allow Fullscreen',scale:'อัตราส่วน Scale',scaleAll:'แสดงให้เห็นทั้งหมด Show all',scaleNoBorder:'ไม่แสดงเส้นขอบ No Border',scaleFit:'แสดงให้พอดีกับพื้นที่ Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',alignAbsBottom:'ชิดด้านล่างสุด',alignAbsMiddle:'กึ่งกลาง',alignBaseline:'ชิดบรรทัด',alignTextTop:'ใต้ตัวอักษร',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'สีพื้นหลัง',hSpace:'ระยะแนวนอน',vSpace:'ระยะแนวตั้ง',validateSrc:'กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'ตรวจการสะกดคำ',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'ไม่พบในดิกชันนารี',changeTo:'แก้ไขเป็น',btnIgnore:'ยกเว้น',btnIgnoreAll:'ยกเว้นทั้งหมด',btnReplace:'แทนที่',btnReplaceAll:'แทนที่ทั้งหมด',btnUndo:'ยกเลิก',noSuggestions:'- ไม่มีคำแนะนำใดๆ -',progress:'กำลังตรวจสอบคำสะกด...',noMispell:'ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด',noChanges:'ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ',oneChange:'ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ',manyChanges:'ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ',ieSpellDownload:'ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?'},smiley:{toolbar:'รูปสื่ออารมณ์',title:'แทรกสัญลักษณ์สื่ออารมณ์',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 element'},numberedlist:'ลำดับรายการแบบตัวเลข',bulletedlist:'ลำดับรายการแบบสัญลักษณ์',indent:'เพิ่มระยะย่อหน้า',outdent:'ลดระยะย่อหน้า',justify:{left:'จัดชิดซ้าย',center:'จัดกึ่งกลาง',right:'จัดชิดขวา',block:'จัดพอดีหน้ากระดาษ'},blockquote:'Block Quote',clipboard:{title:'วาง',cutError:'ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).',copyError:'ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).',pasteMsg:'กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl/Cmd และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',toolbar:'วางสำเนาจากตัวอักษรเวิร์ด',title:'วางสำเนาจากตัวอักษรเวิร์ด',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'วางแบบตัวอักษรธรรมดา',title:'วางแบบตัวอักษรธรรมดา'},templates:{button:'เทมเพลต',title:'เทมเพลตของส่วนเนื้อหาเว็บไซต์',options:'Template Options',insertOption:'แทนที่เนื้อหาเว็บไซต์ที่เลือก',selectPromptMsg:'กรุณาเลือก เทมเพลต เพื่อนำไปแก้ไขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):',emptyListMsg:'(ยังไม่มีการกำหนดเทมเพลต)'},showBlocks:'Show Blocks',stylesCombo:{label:'ลักษณะ',panelTitle:'Formatting Styles',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'รูปแบบ',panelTitle:'รูปแบบ',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Paragraph (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'แบบอักษร',voiceLabel:'Font',panelTitle:'แบบอักษร'},fontSize:{label:'ขนาด',voiceLabel:'Font Size',panelTitle:'ขนาด'},colorButton:{textColorTitle:'สีตัวอักษร',bgColorTitle:'สีพื้นหลัง',panelTitle:'Colors',auto:'สีอัตโนมัติ',more:'เลือกสีอื่นๆ...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',opera_title:'Not supported by Opera',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'Languages',dictionariesTab:'Dictionaries',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright © $1. All rights reserved.'},maximize:'Maximize',minimize:'Minimize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Unknown Object'},resize:'Drag to resize',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/tr.js b/modules_v2/ckeditor/lang/tr.js new file mode 100644 index 0000000000..ad3bde17c7 --- /dev/null +++ b/modules_v2/ckeditor/lang/tr.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.tr={dir:'ltr',editorTitle:'Zengin metin editörü, %1, yardım için ALT 0 tuşuna basın.',toolbar:'Toolbar',editor:'Zengin Metin Editörü',source:'Kaynak',newPage:'Yeni Sayfa',save:'Kaydet',preview:'Ön İzleme',cut:'Kes',copy:'Kopyala',paste:'Yapıştır',print:'Yazdır',underline:'Altı Çizgili',bold:'Kalın',italic:'İtalik',selectAll:'Tümünü Seç',removeFormat:'Biçimi Kaldır',strike:'Üstü Çizgili',subscript:'Alt Simge',superscript:'Üst Simge',horizontalrule:'Yatay Satır Ekle',pagebreak:'Sayfa Sonu Ekle',pagebreakAlt:'Page Break',unlink:'Köprü Kaldır',undo:'Geri Al',redo:'Tekrarla',common:{browseServer:'Sunucuyu Gez',url:'URL',protocol:'Protokol',upload:'Karşıya Yükle',uploadSubmit:'Sunucuya Yolla',image:'Resim',flash:'Flash',form:'Form',checkbox:'Onay Kutusu',radio:'Seçenek Düğmesi',textField:'Metin Girişi',textarea:'Çok Satırlı Metin',hiddenField:'Gizli Veri',button:'Düğme',select:'Seçim Menüsü',imageButton:'Resimli Düğme',notSet:'<tanımlanmamış>',id:'Kimlik',name:'Ad',langDir:'Dil Yönü',langDirLtr:'Soldan Sağa (LTR)',langDirRtl:'Sağdan Sola (RTL)',langCode:'Dil Kodlaması',longDescr:'Uzun Tanımlı URL',cssClass:'Biçem Sayfası Sınıfları',advisoryTitle:'Danışma Başlığı',cssStyle:'Biçem',ok:'Tamam',cancel:'İptal',close:'Kapat',preview:'Ön gösterim',generalTab:'Genel',advancedTab:'Gelişmiş',validateNumberFailed:'Bu değer sayı değildir.',confirmNewPage:'İceriğiniz kayıt edilmediğinden dolayı kaybolacaktır. Yeni bir sayfa yüklemek istediğinize eminsiniz?',confirmCancel:'Bazı seçenekler değişmiştir. Dialog penceresini kapatmak istediğinize eminmisiniz?',options:'Seçenekler',target:'Hedef',targetNew:'Yeni Pencere (_blank)',targetTop:'Enüst Pencere (_top)',targetSelf:'Aynı Pencere (_self)',targetParent:'Ana Pencere (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Genişlik',height:'Yükseklik',align:'Hizalama',alignLeft:'Sol',alignRight:'Sağ',alignCenter:'Merkez',alignTop:'Tepe',alignMiddle:'Orta',alignBottom:'Alt',invalidHeight:'Yükseklik sayı olmalıdır.',invalidWidth:'Genişlik bir sayı olmalıdır.',unavailable:'%1<span class="cke_accessibility">, hazır değildir</span>'},contextmenu:{options:'İçerik Menüsü Seçenekleri'},specialChar:{toolbar:'Özel Karakter Ekle',title:'Özel Karakter Seç',options:'Özel Karakter Seçenekleri'},link:{toolbar:'Link Ekle/Düzenle',other:'<diğer>',menu:'Link Düzenle',title:'Link',info:'Link Bilgisi',target:'Hedef',upload:'Karşıya Yükle',advanced:'Gelişmiş',type:'Link Türü',toUrl:'URL',toAnchor:'Bu sayfada çapa',toEmail:'E-Posta',targetFrame:'<çerçeve>',targetPopup:'<yeni açılan pencere>',targetFrameName:'Hedef Çerçeve Adı',targetPopupName:'Yeni Açılan Pencere Adı',popupFeatures:'Yeni Açılan Pencere Özellikleri',popupResizable:'Resizable',popupStatusBar:'Durum Çubuğu',popupLocationBar:'Yer Çubuğu',popupToolbar:'Araç Çubuğu',popupMenuBar:'Menü Çubuğu',popupFullScreen:'Tam Ekran (IE)',popupScrollBars:'Kaydırma Çubukları',popupDependent:'Bağımlı (Netscape)',popupLeft:'Sola Göre Konum',popupTop:'Yukarıya Göre Konum',id:'Id',langDir:'Dil Yönü',langDirLTR:'Soldan Sağa (LTR)',langDirRTL:'Sağdan Sola (RTL)',acccessKey:'Erişim Tuşu',name:'Ad',langCode:'Dil Yönü',tabIndex:'Sekme İndeksi',advisoryTitle:'Danışma Başlığı',advisoryContentType:'Danışma İçerik Türü',cssClasses:'Biçem Sayfası Sınıfları',charset:'Bağlı Kaynak Karakter Gurubu',styles:'Biçem',selectAnchor:'Bağlantı Seç',anchorName:'Bağlantı Adı ile',anchorId:'Eleman Kimlik Numarası ile',emailAddress:'E-Posta Adresi',emailSubject:'İleti Konusu',emailBody:'İleti Gövdesi',noAnchors:'(Bu belgede hiç çapa yok)',noUrl:"Lütfen Link URL'sini yazın",noEmail:'Lütfen E-posta adresini yazın'},anchor:{toolbar:'Bağlantı Ekle/Düzenle',menu:'Bağlantı Özellikleri',title:'Bağlantı Özellikleri',name:'Bağlantı Adı',errorName:'Lütfen bağlantı için ad giriniz'},list:{numberedTitle:'Sayılandırılmış Liste Özellikleri',bulletedTitle:'Simgeli Liste Özellikleri',type:'Tipi',start:'Başla',validateStartNumber:'List start number must be a whole number.',circle:'Daire',disc:'Disk',square:'Kare',none:'Yok',notset:'<ayarlanmamış>',armenian:'Ermenice sayılandırma',georgian:'Gürcüce numaralandırma (an, ban, gan, vs.)',lowerRoman:'Küçük Roman (i, ii, iii, iv, v, vs.)',upperRoman:'Büyük Roman (I, II, III, IV, V, vs.)',lowerAlpha:'Küçük Alpha (a, b, c, d, e, vs.)',upperAlpha:'Büyük Alpha (A, B, C, D, E, vs.)',lowerGreek:'Küçük Greek (alpha, beta, gamma, vs.)',decimal:'Ondalık (1, 2, 3, vs.)',decimalLeadingZero:'Başı sıfırlı ondalık (01, 02, 03, vs.)'},findAndReplace:{title:'Bul ve Değiştir',find:'Bul',replace:'Değiştir',findWhat:'Aranan:',replaceWith:'Bununla değiştir:',notFoundMsg:'Belirtilen yazı bulunamadı.',matchCase:'Büyük/küçük harf duyarlı',matchWord:'Kelimenin tamamı uysun',matchCyclic:'Eşleşen döngü',replaceAll:'Tümünü Değiştir',replaceSuccessMsg:'%1 bulunanlardan değiştirildi.'},table:{toolbar:'Tablo',title:'Tablo Özellikleri',menu:'Tablo Özellikleri',deleteTable:'Tabloyu Sil',rows:'Satırlar',columns:'Sütunlar',border:'Kenar Kalınlığı',widthPx:'piksel',widthPc:'yüzde',widthUnit:'genişlik birimi',cellSpace:'Izgara kalınlığı',cellPad:'Izgara yazı arası',caption:'Başlık',summary:'Özet',headers:'Başlıklar',headersNone:'Yok',headersColumn:'İlk Sütun',headersRow:'İlk Satır',headersBoth:'Her İkisi',invalidRows:'Satır sayısı 0 sayısından büyük olmalıdır.',invalidCols:'Sütün sayısı 0 sayısından büyük olmalıdır.',invalidBorder:'Çerceve büyüklüklüğü sayı olmalıdır.',invalidWidth:'Tablo genişliği sayı olmalıdır.',invalidHeight:'Tablo yüksekliği sayı olmalıdır.',invalidCellSpacing:'Hücre boşluğu (spacing) sayı olmalıdır.',invalidCellPadding:'Hücre aralığı (padding) sayı olmalıdır.',cell:{menu:'Hücre',insertBefore:'Hücre Ekle - Önce',insertAfter:'Hücre Ekle - Sonra',deleteCell:'Hücre Sil',merge:'Hücreleri Birleştir',mergeRight:'Birleştir - Sağdaki İle ',mergeDown:'Birleştir - Aşağıdaki İle ',splitHorizontal:'Hücreyi Yatay Böl',splitVertical:'Hücreyi Dikey Böl',title:'Hücre Özellikleri',cellType:'Hücre Tipi',rowSpan:'Satırlar Mesafesi (Span)',colSpan:'Sütünlar Mesafesi (Span)',wordWrap:'Kelime Kaydırma',hAlign:'Düşey Hizalama',vAlign:'Yataş Hizalama',alignBaseline:'Tabana',bgColor:'Arkaplan Rengi',borderColor:'Çerçeve Rengi',data:'Veri',header:'Başlık',yes:'Evet',no:'Hayır',invalidWidth:'Hücre genişliği sayı olmalıdır.',invalidHeight:'Hücre yüksekliği sayı olmalıdır.',invalidRowSpan:'Satırların mesafesi tam sayı olmalıdır.',invalidColSpan:'Sütünların mesafesi tam sayı olmalıdır.',chooseColor:'Seçiniz'},row:{menu:'Satır',insertBefore:'Satır Ekle - Önce',insertAfter:'Satır Ekle - Sonra',deleteRow:'Satır Sil'},column:{menu:'Sütun',insertBefore:'Kolon Ekle - Önce',insertAfter:'Kolon Ekle - Sonra',deleteColumn:'Sütun Sil'}},button:{title:'Düğme Özellikleri',text:'Metin (Değer)',type:'Tip',typeBtn:'Düğme',typeSbm:'Gönder',typeRst:'Sıfırla'},checkboxAndRadio:{checkboxTitle:'Onay Kutusu Özellikleri',radioTitle:'Seçenek Düğmesi Özellikleri',value:'Değer',selected:'Seçili'},form:{title:'Form Özellikleri',menu:'Form Özellikleri',action:'İşlem',method:'Yöntem',encoding:'Kodlama'},select:{title:'Seçim Menüsü Özellikleri',selectInfo:'Bilgi',opAvail:'Mevcut Seçenekler',value:'Değer',size:'Boyut',lines:'satır',chkMulti:'Çoklu seçime izin ver',opText:'Metin',opValue:'Değer',btnAdd:'Ekle',btnModify:'Düzenle',btnUp:'Yukarı',btnDown:'Aşağı',btnSetValue:'Seçili değer olarak ata',btnDelete:'Sil'},textarea:{title:'Çok Satırlı Metin Özellikleri',cols:'Sütunlar',rows:'Satırlar'},textfield:{title:'Metin Girişi Özellikleri',name:'Ad',value:'Değer',charWidth:'Karakter Genişliği',maxChars:'En Fazla Karakter',type:'Tür',typeText:'Metin',typePass:'Şifre'},hidden:{title:'Gizli Veri Özellikleri',name:'Ad',value:'Değer'},image:{title:'Resim Özellikleri',titleButton:'Resimli Düğme Özellikleri',menu:'Resim Özellikleri',infoTab:'Resim Bilgisi',btnUpload:'Sunucuya Yolla',upload:'Karşıya Yükle',alt:'Alternatif Yazı',lockRatio:'Oranı Kilitle',unlockRatio:'Kilitli Oran',resetSize:'Boyutu Başa Döndür',border:'Kenar',hSpace:'Yatay Boşluk',vSpace:'Dikey Boşluk',alertUrl:"Lütfen resmin URL'sini yazınız",linkTab:'Köprü',button2Img:'Seçili resim butonunu basit resime çevirmek istermisiniz?',img2Button:'Seçili olan resimi, resimli butona çevirmek istermisiniz?',urlMissing:'Resmin URL kaynağı eksiktir.',validateBorder:'Çerçeve tam sayı olmalıdır.',validateHSpace:'HSpace tam sayı olmalıdır.',validateVSpace:'VSpace tam sayı olmalıdır.'},flash:{properties:'Flash Özellikleri',propertiesTab:'Özellikler',title:'Flash Özellikleri',chkPlay:'Otomatik Oynat',chkLoop:'Döngü',chkMenu:'Flash Menüsünü Kullan',chkFull:'Tam ekrana İzinver',scale:'Boyutlandır',scaleAll:'Hepsini Göster',scaleNoBorder:'Kenar Yok',scaleFit:'Tam Sığdır',access:'Kod İzni',accessAlways:'Herzaman',accessSameDomain:'Aynı domain',accessNever:'Asla',alignAbsBottom:'Tam Altı',alignAbsMiddle:'Tam Ortası',alignBaseline:'Taban Çizgisi',alignTextTop:'Yazı Tepeye',quality:'Kalite',qualityBest:'En iyi',qualityHigh:'Yüksek',qualityAutoHigh:'Otomatik Yükseklik',qualityMedium:'Orta',qualityAutoLow:'Otomatik Düşüklük',qualityLow:'Düşük',windowModeWindow:'Pencere',windowModeOpaque:'Opak',windowModeTransparent:'Şeffaf',windowMode:'Pencere modu',flashvars:'Flash Değerleri',bgcolor:'Arka Renk',hSpace:'Yatay Boşluk',vSpace:'Dikey Boşluk',validateSrc:"Lütfen köprü URL'sini yazın",validateHSpace:'HSpace sayı olmalıdır.',validateVSpace:'VSpace sayı olmalıdır.'},spellCheck:{toolbar:'Yazım Denetimi',title:'Yazımı Denetle',notAvailable:'Üzügünüz, bu servis şuanda hizmet dışıdır.',errorLoading:'Uygulamada yüklerken hata oluştu: %s.',notInDic:'Sözlükte Yok',changeTo:'Şuna değiştir:',btnIgnore:'Yoksay',btnIgnoreAll:'Tümünü Yoksay',btnReplace:'Değiştir',btnReplaceAll:'Tümünü Değiştir',btnUndo:'Geri Al',noSuggestions:'- Öneri Yok -',progress:'Yazım denetimi işlemde...',noMispell:'Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı',noChanges:'Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi',oneChange:'Yazım denetimi tamamlandı: Bir kelime değiştirildi',manyChanges:'Yazım denetimi tamamlandı: %1 kelime değiştirildi',ieSpellDownload:'Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?'},smiley:{toolbar:'İfade',title:'İfade Ekle',options:'İfade Seçenekleri'},elementsPath:{eleLabel:'Elementlerin yolu',eleTitle:'%1 element'},numberedlist:'Numaralı Liste',bulletedlist:'Simgeli Liste',indent:'Sekme Arttır',outdent:'Sekme Azalt',justify:{left:'Sola Dayalı',center:'Ortalanmış',right:'Sağa Dayalı',block:'İki Kenara Yaslanmış'},blockquote:'Blok Oluştur',clipboard:{title:'Yapıştır',cutError:'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.',copyError:'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.',pasteMsg:'Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.',securityMsg:'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:"Yapıştırmaya çalıştığınız metin Word'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?",toolbar:"Word'den Yapıştır",title:"Word'den Yapıştır",error:'Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir'},pasteText:{button:'Düz Metin Olarak Yapıştır',title:'Düz Metin Olarak Yapıştır'},templates:{button:'Şablonlar',title:'İçerik Şablonları',options:'Şablon Seçenekleri',insertOption:'Mevcut içerik ile değiştir',selectPromptMsg:'Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):',emptyListMsg:'(Belirli bir şablon seçilmedi)'},showBlocks:'Blokları Göster',stylesCombo:{label:'Biçem',panelTitle:'Stilleri Düzenliyor',panelTitle1:'Blok Stilleri',panelTitle2:'Inline Stilleri',panelTitle3:'Nesne Stilleri'},format:{label:'Biçim',panelTitle:'Biçim',tag_p:'Normal',tag_pre:'Biçimli',tag_address:'Adres',tag_h1:'Başlık 1',tag_h2:'Başlık 2',tag_h3:'Başlık 3',tag_h4:'Başlık 4',tag_h5:'Başlık 5',tag_h6:'Başlık 6',tag_div:'Paragraf (DIV)'},div:{title:'Div İçeriği Oluştur',toolbar:'Div İçeriği Oluştur',cssClassInputLabel:'Stilltipi Sınıfı',styleSelectLabel:'Stil',IdInputLabel:'Id',languageCodeInputLabel:' Dil Kodu',inlineStyleInputLabel:'Inline Stili',advisoryTitleInputLabel:'Tavsiye Başlığı',langDirLabel:'Dil Yönü',langDirLTRLabel:'Soldan sağa (LTR)',langDirRTLLabel:'Sağdan sola (RTL)',edit:'Div Düzenle',remove:'Div Kaldır'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Yazı Türü',voiceLabel:'Font',panelTitle:'Yazı Türü'},fontSize:{label:'Boyut',voiceLabel:'Font Size',panelTitle:'Boyut'},colorButton:{textColorTitle:'Yazı Rengi',bgColorTitle:'Arka Renk',panelTitle:'Renkler',auto:'Otomatik',more:'Diğer renkler...'},colors:{'000':'Siyah',800000:'Kestane','8B4513':'Koyu Kahverengi','2F4F4F':'Koyu Kurşuni Gri','008080':'Teal','000080':'Mavi','4B0082':'Çivit Mavisi',696969:'Silik Gri',B22222:'Ateş Tuğlası',A52A2A:'Kahverengi',DAA520:'Altun Sırık','006400':'Koyu Yeşil','40E0D0':'Turkuaz','0000CD':'Orta Mavi',800080:'Pembe',808080:'Gri',F00:'Kırmızı',FF8C00:'Koyu Portakal',FFD700:'Altın','008000':'Yeşil','0FF':'Ciyan','00F':'Mavi',EE82EE:'Menekşe',A9A9A9:'Koyu Gri',FFA07A:'Açık Sarımsı',FFA500:'Portakal',FFFF00:'Sarı','00FF00':'Açık Yeşil',AFEEEE:'Sönük Turkuaz',ADD8E6:'Açık Mavi',DDA0DD:'Mor',D3D3D3:'Açık Gri',FFF0F5:'Eflatun Pembe',FAEBD7:'Antik Beyaz',FFFFE0:'Açık Sarı',F0FFF0:'Balsarısı',F0FFFF:'Gök Mavisi',F0F8FF:'Reha Mavi',E6E6FA:'Eflatun',FFF:'Beyaz'},scayt:{title:'Girmiş olduğunuz kelime denetimi',opera_title:'Opera tarafından desteklenmemektedir',enable:'SCAYT etkinleştir',disable:'SCAYT pasifleştir',about:'SCAYT hakkında',toggle:'SCAYT değiştir',options:'Seçenekler',langs:'Diller',moreSuggestions:'Daha fazla öneri',ignore:'Yoksay',ignoreAll:'Tümünü Yoksay',addWord:'Kelime Ekle',emptyDic:'Sözlük adı boş olamaz.',optionsTab:'Seçenekler',allCaps:'Tüm büyük küçük kelimeleri yoksay',ignoreDomainNames:'Domain adlarını yoksay',mixedCase:'Karışık büyüklük ile Sözcükler yoksay',mixedWithDigits:'Sayılarla Kelimeler yoksay',languagesTab:'Diller',dictionariesTab:'Sözlükler',dic_field_name:'Sözlük adı',dic_create:'Oluştur',dic_restore:'Geri al',dic_delete:'Sil',dic_rename:'Yeniden adlandır',dic_info:"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it's name and click the Restore button.",aboutTab:'Hakkında'},about:{title:'CKEditor Hakkında',dlgTitle:'CKEditor Hakkında',moreInfo:'Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:',copy:'Copyright © $1. Tüm hakları saklıdır.'},maximize:'Büyült',minimize:'Küçült',fakeobjects:{anchor:'Bağlantı',flash:'Flash Animasyonu',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Bilinmeyen Nesne'},resize:'Boyutlandırmak için sürükle',colordialog:{title:'Renk seç',options:'Renk Seçenekleri',highlight:'İşaretle',selected:'Seçilmiş',clear:'Temizle'},toolbarCollapse:"Toolbar'ı topla",toolbarExpand:"Toolbar'ı aç",bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/uk.js b/modules_v2/ckeditor/lang/uk.js new file mode 100644 index 0000000000..839ab28c03 --- /dev/null +++ b/modules_v2/ckeditor/lang/uk.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.uk={dir:'ltr',editorTitle:'Текстовий редактор, %1, натисніть ALT 0 для довідки.',toolbar:'Панель інструментів',editor:'Текстовий редактор',source:'Джерело',newPage:'Нова сторінка',save:'Зберегти',preview:'Попередній перегляд',cut:'Вирізати',copy:'Копіювати',paste:'Вставити',print:'Друк',underline:'Підкреслений',bold:'Жирний',italic:'Курсив',selectAll:'Виділити все',removeFormat:'Очистити форматування',strike:'Закреслений',subscript:'Нижній індекс',superscript:'Верхній індекс',horizontalrule:'Горизонтальна лінія',pagebreak:'Вставити розрив сторінки',pagebreakAlt:'Page Break',unlink:'Видалити посилання',undo:'Повернути',redo:'Повторити',common:{browseServer:'Огляд',url:'URL',protocol:'Протокол',upload:'Надіслати',uploadSubmit:'Надіслати на сервер',image:'Зображення',flash:'Flash',form:'Форма',checkbox:'Галочка',radio:'Кнопка вибору',textField:'Текстове поле',textarea:'Текстова область',hiddenField:'Приховане поле',button:'Кнопка',select:'Список',imageButton:'Кнопка із зображенням',notSet:'<не визначено>',id:'Ідентифікатор',name:"Ім'я",langDir:'Напрямок мови',langDirLtr:'Зліва направо (LTR)',langDirRtl:'Справа наліво (RTL)',langCode:'Код мови',longDescr:'Довгий опис URL',cssClass:'Клас CSS',advisoryTitle:'Заголовок',cssStyle:'Стиль CSS',ok:'ОК',cancel:'Скасувати',close:'Закрити',preview:'Попередній перегляд',generalTab:'Основне',advancedTab:'Додаткове',validateNumberFailed:'Значення не є цілим числом.',confirmNewPage:'Всі незбережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?',confirmCancel:'Деякі опції змінено. Закрити вікно без збереження змін?',options:'Опції',target:'Ціль',targetNew:'Нове вікно (_blank)',targetTop:'Поточне вікно (_top)',targetSelf:'Поточний фрейм/вікно (_self)',targetParent:'Батьківський фрейм/вікно (_parent)',langDirLTR:'Зліва направо (LTR)',langDirRTL:'Справа наліво (RTL)',styles:'Стиль CSS',cssClasses:'Клас CSS',width:'Ширина',height:'Висота',align:'Вирівнювання',alignLeft:'По лівому краю',alignRight:'По правому краю',alignCenter:'По центру',alignTop:'По верхньому краю',alignMiddle:'По середині',alignBottom:'По нижньому краю',invalidHeight:'Висота повинна бути цілим числом.',invalidWidth:'Ширина повинна бути цілим числом.',unavailable:'%1<span class="cke_accessibility">, не доступне</span>'},contextmenu:{options:'Опції контекстного меню'},specialChar:{toolbar:'Спеціальний символ',title:'Оберіть спеціальний символ',options:'Опції'},link:{toolbar:'Вставити/Редагувати посилання',other:'<інший>',menu:'Вставити посилання',title:'Посилання',info:'Інформація посилання',target:'Ціль',upload:'Надіслати',advanced:'Додаткове',type:'Тип посилання',toUrl:'URL',toAnchor:'Якір на цю сторінку',toEmail:'Ел. пошта',targetFrame:'<фрейм>',targetPopup:'<випливаюче вікно>',targetFrameName:"Ім'я цільового фрейму",targetPopupName:"Ім'я випливаючого вікна",popupFeatures:'Властивості випливаючого вікна',popupResizable:'Масштабоване',popupStatusBar:'Рядок статусу',popupLocationBar:'Панель локації',popupToolbar:'Панель інструментів',popupMenuBar:'Панель меню',popupFullScreen:'Повний екран (IE)',popupScrollBars:'Стрічки прокрутки',popupDependent:'Залежний (Netscape)',popupLeft:'Позиція зліва',popupTop:'Позиція зверху',id:'Ідентифікатор',langDir:'Напрямок мови',langDirLTR:'Зліва направо (LTR)',langDirRTL:'Справа наліво (RTL)',acccessKey:'Гаряча клавіша',name:"Ім'я",langCode:'Код мови',tabIndex:'Послідовність переходу',advisoryTitle:'Заголовок',advisoryContentType:'Тип вмісту',cssClasses:'Клас CSS',charset:'Кодування',styles:'Стиль CSS',selectAnchor:'Оберіть якір',anchorName:"За ім'ям елементу",anchorId:'За ідентифікатором елементу',emailAddress:'Адреса ел. пошти',emailSubject:'Тема листа',emailBody:'Тіло повідомлення',noAnchors:'(В цьому документі немає якорів)',noUrl:'Будь ласка, вкажіть URL посилання',noEmail:'Будь ласка, вкажіть адрес ел. пошти'},anchor:{toolbar:'Вставити/Редагувати якір',menu:'Властивості якоря',title:'Властивості якоря',name:"Ім'я якоря",errorName:"Будь ласка, вкажіть ім'я якоря"},list:{numberedTitle:'Опції нумерованого списку',bulletedTitle:'Опції маркірованого списку',type:'Тип',start:'Почати з...',validateStartNumber:'Початковий номер списку повинен бути цілим числом.',circle:'Кільце',disc:'Кружечок',square:'Квадратик',none:'Нема',notset:'<не вказано>',armenian:'Вірменська нумерація',georgian:'Грузинська нумерація (an, ban, gan і т.д.)',lowerRoman:'Малі римські (i, ii, iii, iv, v і т.д.)',upperRoman:'Великі римські (I, II, III, IV, V і т.д.)',lowerAlpha:'Малі лат. букви (a, b, c, d, e і т.д.)',upperAlpha:'Великі лат. букви (A, B, C, D, E і т.д.)',lowerGreek:'Малі гр. букви (альфа, бета, гамма і т.д.)',decimal:'Десяткові (1, 2, 3 і т.д.)',decimalLeadingZero:'Десяткові з нулем (01, 02, 03 і т.д.)'},findAndReplace:{title:'Знайти і замінити',find:'Пошук',replace:'Заміна',findWhat:'Шукати:',replaceWith:'Замінити на:',notFoundMsg:'Вказаний текст не знайдено.',matchCase:'Враховувати регістр',matchWord:'Збіг цілих слів',matchCyclic:'Циклічна заміна',replaceAll:'Замінити все',replaceSuccessMsg:'%1 співпадінь(ня) замінено.'},table:{toolbar:'Таблиця',title:'Властивості таблиці',menu:'Властивості таблиці',deleteTable:'Видалити таблицю',rows:'Рядки',columns:'Стовбці',border:'Розмір рамки',widthPx:'пікселів',widthPc:'відсотків',widthUnit:'Одиниці вимір.',cellSpace:'Проміжок',cellPad:'Внутр. відступ',caption:'Заголовок таблиці',summary:'Детальний опис заголовку таблиці',headers:'Заголовки стовбців/рядків',headersNone:'Без заголовків',headersColumn:'Стовбці',headersRow:'Рядки',headersBoth:'Стовбці і рядки',invalidRows:'Кількість рядків повинна бути більшою 0.',invalidCols:'Кількість стовбців повинна бути більшою 0.',invalidBorder:'Розмір рамки повинен бути цілим числом.',invalidWidth:'Ширина таблиці повинна бути цілим числом.',invalidHeight:'Висота таблиці повинна бути цілим числом.',invalidCellSpacing:'Проміжок між комірками повинен бути цілим числом.',invalidCellPadding:'Внутр. відступ комірки повинен бути цілим числом.',cell:{menu:'Комірки',insertBefore:'Вставити комірку перед',insertAfter:'Вставити комірку після',deleteCell:'Видалити комірки',merge:"Об'єднати комірки",mergeRight:"Об'єднати справа",mergeDown:"Об'єднати донизу",splitHorizontal:'Розділити комірку по горизонталі',splitVertical:'Розділити комірку по вертикалі',title:'Властивості комірки',cellType:'Тип комірки',rowSpan:"Об'єднання рядків",colSpan:"Об'єднання стовпців",wordWrap:'Автоперенесення тексту',hAlign:'Гориз. вирівнювання',vAlign:'Верт. вирівнювання',alignBaseline:'По базовій лінії',bgColor:'Колір фону',borderColor:'Колір рамки',data:'Дані',header:'Заголовок',yes:'Так',no:'Ні',invalidWidth:'Ширина комірки повинна бути цілим числом.',invalidHeight:'Висота комірки повинна бути цілим числом.',invalidRowSpan:"Кількість об'єднуваних рядків повинна бути цілим числом.",invalidColSpan:"Кількість об'єднуваних стовбців повинна бути цілим числом.",chooseColor:'Обрати'},row:{menu:'Рядки',insertBefore:'Вставити рядок перед',insertAfter:'Вставити рядок після',deleteRow:'Видалити рядки'},column:{menu:'Стовбці',insertBefore:'Вставити стовбець перед',insertAfter:'Вставити стовбець після',deleteColumn:'Видалити стовбці'}},button:{title:'Властивості кнопки',text:'Значення',type:'Тип',typeBtn:'Кнопка (button)',typeSbm:'Надіслати (submit)',typeRst:'Очистити (reset)'},checkboxAndRadio:{checkboxTitle:'Властивості галочки',radioTitle:'Властивості кнопки вибору',value:'Значення',selected:'Обрана'},form:{title:'Властивості форми',menu:'Властивості форми',action:'Дія',method:'Метод',encoding:'Кодування'},select:{title:'Властивості списку',selectInfo:'Інфо',opAvail:'Доступні варіанти',value:'Значення',size:'Кількість',lines:'видимих позицій у списку',chkMulti:'Список з мультивибором',opText:'Текст',opValue:'Значення',btnAdd:'Добавити',btnModify:'Змінити',btnUp:'Вгору',btnDown:'Вниз',btnSetValue:'Встановити як обране значення',btnDelete:'Видалити'},textarea:{title:'Властивості текстової області',cols:'Стовбці',rows:'Рядки'},textfield:{title:'Властивості текстового поля',name:"Ім'я",value:'Значення',charWidth:'Ширина',maxChars:'Макс. к-ть символів',type:'Тип',typeText:'Текст',typePass:'Пароль'},hidden:{title:'Властивості прихованого поля',name:"Ім'я",value:'Значення'},image:{title:'Властивості зображення',titleButton:'Властивості кнопки із зображенням',menu:'Властивості зображення',infoTab:'Інформація про зображення',btnUpload:'Надіслати на сервер',upload:'Надіслати',alt:'Альтернативний текст',lockRatio:'Зберегти пропорції',unlockRatio:'Не зберігати пропорції',resetSize:'Очистити поля розмірів',border:'Рамка',hSpace:'Гориз. відступ',vSpace:'Верт. відступ',alertUrl:'Будь ласка, вкажіть URL зображення',linkTab:'Посилання',button2Img:'Бажаєте перетворити обрану кнопку-зображення на просте зображення?',img2Button:'Бажаєте перетворити обране зображення на кнопку-зображення?',urlMissing:'Вкажіть URL зображення.',validateBorder:'Ширина рамки повинна бути цілим числом.',validateHSpace:'Гориз. відступ повинен бути цілим числом.',validateVSpace:'Верт. відступ повинен бути цілим числом.'},flash:{properties:'Властивості Flash',propertiesTab:'Властивості',title:'Властивості Flash',chkPlay:'Автопрогравання',chkLoop:'Циклічно',chkMenu:'Дозволити меню Flash',chkFull:'Дозволити повноекранний перегляд',scale:'Масштаб',scaleAll:'Показати все',scaleNoBorder:'Без рамки',scaleFit:'Поч. розмір',access:'Доступ до скрипта',accessAlways:'Завжди',accessSameDomain:'З того ж домена',accessNever:'Ніколи',alignAbsBottom:'По нижньому краю (abs)',alignAbsMiddle:'По середині (abs)',alignBaseline:'По базовій лінії',alignTextTop:'Текст по верхньому краю',quality:'Якість',qualityBest:'Відмінна',qualityHigh:'Висока',qualityAutoHigh:'Автом. відмінна',qualityMedium:'Середня',qualityAutoLow:'Автом. низька',qualityLow:'Низька',windowModeWindow:'Вікно',windowModeOpaque:'Непрозорість',windowModeTransparent:'Прозорість',windowMode:'Віконний режим',flashvars:'Змінні Flash',bgcolor:'Колір фону',hSpace:'Гориз. відступ',vSpace:'Верт. відступ',validateSrc:'Будь ласка, вкажіть URL посилання',validateHSpace:'Гориз. відступ повинен бути цілим числом.',validateVSpace:'Верт. відступ повинен бути цілим числом.'},spellCheck:{toolbar:'Перевірити орфографію',title:'Перевірка орфографії',notAvailable:'Вибачте, але сервіс наразі недоступний.',errorLoading:'Помилка завантаження : %s.',notInDic:'Немає в словнику',changeTo:'Замінити на',btnIgnore:'Пропустити',btnIgnoreAll:'Пропустити все',btnReplace:'Замінити',btnReplaceAll:'Замінити все',btnUndo:'Назад',noSuggestions:'- немає варіантів -',progress:'Виконується перевірка орфографії...',noMispell:'Перевірку орфографії завершено: помилок не знайдено',noChanges:'Перевірку орфографії завершено: жодне слово не змінено',oneChange:'Перевірку орфографії завершено: змінено одне слово',manyChanges:'Перевірку орфографії завершено: 1% слів(ова) змінено',ieSpellDownload:'Модуль перевірки орфографії не встановлено. Бажаєте завантажити його зараз?'},smiley:{toolbar:'Смайлик',title:'Вставити смайлик',options:'Опції смайликів'},elementsPath:{eleLabel:'Шлях',eleTitle:'%1 елемент'},numberedlist:'Нумерований список',bulletedlist:'Маркірований список',indent:'Збільшити відступ',outdent:'Зменшити відступ',justify:{left:'По лівому краю',center:'По центру',right:'По правому краю',block:'По ширині'},blockquote:'Цитата',clipboard:{title:'Вставити',cutError:'Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)',copyError:'Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).',pasteMsg:'Будь ласка, вставте інформацію з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl/Cmd+V</STRONG>), та натисніть <STRONG>OK</STRONG>.',securityMsg:"Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями Вашого браузера. Вам потрібно вставити інформацію в це вікно.",pasteArea:'Область вставки'},pastefromword:{confirmCleanup:'Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?',toolbar:'Вставити з Word',title:'Вставити з Word',error:'Неможливо очистити форматування через внутрішню помилку.'},pasteText:{button:'Вставити тільки текст',title:'Вставити тільки текст'},templates:{button:'Шаблони',title:'Шаблони змісту',options:'Опції шаблону',insertOption:'Замінити поточний вміст',selectPromptMsg:'Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):',emptyListMsg:'(Не знайдено жодного шаблону)'},showBlocks:'Показувати блоки',stylesCombo:{label:'Стиль',panelTitle:'Стилі форматування',panelTitle1:'Блочні стилі',panelTitle2:'Рядкові стилі',panelTitle3:"Об'єктні стилі"},format:{label:'Форматування',panelTitle:'Форматування',tag_p:'Нормальний',tag_pre:'Форматований',tag_address:'Адреса',tag_h1:'Заголовок 1',tag_h2:'Заголовок 2',tag_h3:'Заголовок 3',tag_h4:'Заголовок 4',tag_h5:'Заголовок 5',tag_h6:'Заголовок 6',tag_div:'Нормальний (div)'},div:{title:'Створити блок-контейнер',toolbar:'Створити блок-контейнер',cssClassInputLabel:'Клас CSS',styleSelectLabel:'Стиль CSS',IdInputLabel:'Ідентифікатор',languageCodeInputLabel:'Код мови',inlineStyleInputLabel:'Вписаний стиль',advisoryTitleInputLabel:'Зміст випливаючої підказки',langDirLabel:'Напрямок мови',langDirLTRLabel:'Зліва направо (LTR)',langDirRTLLabel:'Справа наліво (RTL)',edit:'Редагувати блок',remove:'Видалити блок'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Шрифт',voiceLabel:'Шрифт',panelTitle:'Шрифт'},fontSize:{label:'Розмір',voiceLabel:'Розмір шрифту',panelTitle:'Розмір'},colorButton:{textColorTitle:'Колір тексту',bgColorTitle:'Колір фону',panelTitle:'Кольори',auto:'Авто',more:'Кольори...'},colors:{'000':'Чорний',800000:'Бордовий','8B4513':'Коричневий','2F4F4F':'Темний сіро-зелений','008080':'Морської хвилі','000080':'Сливовий','4B0082':'Індиго',696969:'Темносірий',B22222:'Темночервоний',A52A2A:'Каштановий',DAA520:'Бежевий','006400':'Темнозелений','40E0D0':'Бірюзовий','0000CD':'Темносиній',800080:'Пурпурний',808080:'Сірий',F00:'Червоний',FF8C00:'Темнооранжевий',FFD700:'Жовтий','008000':'Зелений','0FF':'Синьо-зелений','00F':'Синій',EE82EE:'Фіолетовий',A9A9A9:'Світлосірий',FFA07A:'Рожевий',FFA500:'Оранжевий',FFFF00:'Яскравожовтий','00FF00':'Салатовий',AFEEEE:'Світлобірюзовий',ADD8E6:'Блакитний',DDA0DD:'Світлофіолетовий',D3D3D3:'Сріблястий',FFF0F5:'Світлорожевий',FAEBD7:'Світлооранжевий',FFFFE0:'Світложовтий',F0FFF0:'Світлозелений',F0FFFF:'Світлий синьо-зелений',F0F8FF:'Світлоблакитний',E6E6FA:'Лавандовий',FFF:'Білий'},scayt:{title:'Перефірка орфографії по мірі набору',opera_title:'Не підтримується в Opera',enable:'Ввімкнути SCAYT',disable:'Вимкнути SCAYT',about:'Про SCAYT',toggle:'Перемкнути SCAYT',options:'Опції',langs:'Мови',moreSuggestions:'Більше варіантів',ignore:'Пропустити',ignoreAll:'Пропустити всі',addWord:'Додати слово',emptyDic:'Назва словника повинна бути вказана.',optionsTab:'Опції',allCaps:'Пропустити прописні слова',ignoreDomainNames:'Пропустити доменні назви',mixedCase:'Пропустити слова зі змішаним регістром',mixedWithDigits:'Пропустити слова, що містять цифри',languagesTab:'Мови',dictionariesTab:'Словники',dic_field_name:'Назва словника',dic_create:'Створити',dic_restore:'Відновити',dic_delete:'Видалити',dic_rename:'Перейменувати',dic_info:'Як правило, користувацькі словники зберігаються у cookie-файлах. Однак, cookie-файли мають обмеження на розмір. Якщо користувацький словник зростає в обсязі настільки, що вже не може бути збережений у cookie-файлі, тоді його можна зберегти на нашому сервері. Щоб зберегти Ваш персональний словник на нашому сервері необхідно вказати назву словника. Якщо Ви вже зберігали словник на сервері, будь ласка, вкажіть назву збереженого словника і натисніть кнопку Відновити.',aboutTab:'Про SCAYT'},about:{title:'Про CKEditor',dlgTitle:'Про CKEditor',moreInfo:'Щодо інформації з ліцензування завітайте на наш сайт:',copy:'Copyright © $1. Всі права застережено.'},maximize:'Максимізувати',minimize:'Мінімізувати',fakeobjects:{anchor:'Якір',flash:'Flash-анімація',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:"Невідомий об'єкт"},resize:'Потягніть для зміни розмірів',colordialog:{title:'Обрати колір',options:'Опції кольорів',highlight:'Колір, на який вказує курсор',selected:'Обраний колір',clear:'Очистити'},toolbarCollapse:'Згорнути панель інструментів',toolbarExpand:'Розгорнути панель інструментів',bidi:{ltr:'Напрямок тексту зліва направо',rtl:'Напрямок тексту справа наліво'}};
diff --git a/modules_v2/ckeditor/lang/vi.js b/modules_v2/ckeditor/lang/vi.js new file mode 100644 index 0000000000..4ba6ddec6f --- /dev/null +++ b/modules_v2/ckeditor/lang/vi.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.vi={dir:'ltr',editorTitle:'Bộ soạn thảo, %1, nhấn ALT + 0 để xem hướng dẫn.',toolbar:'Thanh công cụ',editor:'Bộ soạn thảo',source:'Mã HTML',newPage:'Trang mới',save:'Lưu',preview:'Xem trước',cut:'Cắt',copy:'Sao chép',paste:'Dán',print:'In',underline:'Gạch chân',bold:'Đậm',italic:'Nghiêng',selectAll:'Chọn tất cả',removeFormat:'Xoá định dạng',strike:'Gạch xuyên ngang',subscript:'Chỉ số dưới',superscript:'Chỉ số trên',horizontalrule:'Chèn đường phân cách ngang',pagebreak:'Chèn ngắt trang',pagebreakAlt:'Page Break',unlink:'Xoá liên kết',undo:'Khôi phục thao tác',redo:'Làm lại thao tác',common:{browseServer:'Duyệt trên máy chủ',url:'URL',protocol:'Giao thức',upload:'Tải lên',uploadSubmit:'Tải lên máy chủ',image:'Hình ảnh',flash:'Flash',form:'Biểu mẫu',checkbox:'Nút kiểm',radio:'Nút chọn',textField:'Trường văn bản',textarea:'Vùng văn bản',hiddenField:'Trường ẩn',button:'Nút',select:'Ô chọn',imageButton:'Nút hình ảnh',notSet:'<không thiết lập>',id:'Định danh',name:'Tên',langDir:'Hướng ngôn ngữ',langDirLtr:'Trái sang phải (LTR)',langDirRtl:'Phải sang trái (RTL)',langCode:'Mã ngôn ngữ',longDescr:'Mô tả URL',cssClass:'Lớp Stylesheet',advisoryTitle:'Nhan đề hướng dẫn',cssStyle:'Kiểu (style)',ok:'Đồng ý',cancel:'Bỏ qua',close:'Đóng',preview:'Xem trước',generalTab:'Tab chung',advancedTab:'Tab mở rộng',validateNumberFailed:'Giá trị này không phải là số.',confirmNewPage:'Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?',confirmCancel:'Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?',options:'Tùy chọn',target:'Đích đến',targetNew:'Cửa sổ mới (_blank)',targetTop:'Cửa sổ trên cùng (_top)',targetSelf:'Tại trang (_self)',targetParent:'Cửa sổ cha (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'Chiều rộng',height:'chiều cao',align:'Vị trí',alignLeft:'Trái',alignRight:'Phải',alignCenter:'Giữa',alignTop:'Trên',alignMiddle:'Giữa',alignBottom:'Dưới',invalidHeight:'Chiều cao phải là số nguyên.',invalidWidth:'Chiều rộng phải là số nguyên.',unavailable:'%1<span class="cke_accessibility">, không có</span>'},contextmenu:{options:'Tùy chọn menu bổ xung'},specialChar:{toolbar:'Chèn ký tự đặc biệt',title:'Hãy chọn ký tự đặc biệt',options:'Tùy chọn các ký tự đặc biệt'},link:{toolbar:'Chèn/Sửa liên kết',other:'<khác>',menu:'Sửa liên kết',title:'Liên kết',info:'Thông tin liên kết',target:'Đích',upload:'Tải lên',advanced:'Mở rộng',type:'Kiểu liên kết',toUrl:'URL',toAnchor:'Neo trong trang này',toEmail:'Thư điện tử',targetFrame:'<khung>',targetPopup:'<cửa sổ popup>',targetFrameName:'Tên khung đích',targetPopupName:'Tên cửa sổ Popup',popupFeatures:'Đặc điểm của cửa sổ Popup',popupResizable:'Có thể thay đổi kích cỡ',popupStatusBar:'Thanh trạng thái',popupLocationBar:'Thanh vị trí',popupToolbar:'Thanh công cụ',popupMenuBar:'Thanh Menu',popupFullScreen:'Toàn màn hình (IE)',popupScrollBars:'Thanh cuộn',popupDependent:'Phụ thuộc (Netscape)',popupLeft:'Vị trí bên trái',popupTop:'Vị trí phía trên',id:'Định danh',langDir:'Hướng ngôn ngữ',langDirLTR:'Trái sang phải (LTR)',langDirRTL:'Phải sang trái (RTL)',acccessKey:'Phím hỗ trợ truy cập',name:'Tên',langCode:'Mã ngôn ngữ',tabIndex:'Chỉ số của Tab',advisoryTitle:'Nhan đề hướng dẫn',advisoryContentType:'Nội dung hướng dẫn',cssClasses:'Lớp Stylesheet',charset:'Bảng mã của tài nguyên được liên kết đến',styles:'Kiểu (style)',selectAnchor:'Chọn một điểm neo',anchorName:'Theo tên điểm neo',anchorId:'Theo định danh thành phần',emailAddress:'Thư điện tử',emailSubject:'Tiêu đề thông điệp',emailBody:'Nội dung thông điệp',noAnchors:'(Không có điểm neo nào trong tài liệu)',noUrl:'Hãy đưa vào đường dẫn liên kết (URL)',noEmail:'Hãy đưa vào địa chỉ thư điện tử'},anchor:{toolbar:'Chèn/Sửa điểm neo',menu:'Thuộc tính điểm neo',title:'Thuộc tính điểm neo',name:'Tên của điểm neo',errorName:'Hãy nhập vào tên của điểm neo'},list:{numberedTitle:'Thuộc tính danh sách có thứ tự',bulletedTitle:'Thuộc tính danh sách không thứ tự',type:'Kiểu loại',start:'Bắt đầu',validateStartNumber:'List start number must be a whole number.',circle:'Khuyên tròn',disc:'Hình đĩa',square:'Hình vuông',none:'Không gì cả',notset:'<không thiết lập>',armenian:'Số theo kiểu Armenian',georgian:'Số theo kiểu Georgian (an, ban, gan...)',lowerRoman:'Số La Mã kiểu thường (i, ii, iii, iv, v...)',upperRoman:'Số La Mã kiểu HOA (I, II, III, IV, V...)',lowerAlpha:'Kiểu abc thường (a, b, c, d, e...)',upperAlpha:'Kiểu ABC HOA (A, B, C, D, E...)',lowerGreek:'Kiểu Hy Lạp (alpha, beta, gamma...)',decimal:'Kiểu số (1, 2, 3 ...)',decimalLeadingZero:'Kiểu số (01, 02, 03...)'},findAndReplace:{title:'Tìm kiếm và thay thế',find:'Tìm kiếm',replace:'Thay thế',findWhat:'Tìm chuỗi:',replaceWith:'Thay bằng:',notFoundMsg:'Không tìm thấy chuỗi cần tìm.',matchCase:'Phân biệt chữ hoa/thường',matchWord:'Giống toàn bộ từ',matchCyclic:'Giống một phần',replaceAll:'Thay thế tất cả',replaceSuccessMsg:'%1 vị trí đã được thay thế.'},table:{toolbar:'Bảng',title:'Thuộc tính bảng',menu:'Thuộc tính bảng',deleteTable:'Xóa bảng',rows:'Số hàng',columns:'Số cột',border:'Kích thước đường viền',widthPx:'Điểm ảnh (px)',widthPc:'Phần trăm (%)',widthUnit:'Đơn vị',cellSpace:'Khoảng cách giữa các ô',cellPad:'Khoảng đệm giữ ô và nội dung',caption:'Đầu đề',summary:'Tóm lược',headers:'Đầu đề',headersNone:'Không có',headersColumn:'Cột đầu tiên',headersRow:'Hàng đầu tiên',headersBoth:'Cả hai',invalidRows:'Số lượng hàng phải là một số lớn hơn 0.',invalidCols:'Số lượng cột phải là một số lớn hơn 0.',invalidBorder:'Kích cỡ của đường biên phải là một số nguyên.',invalidWidth:'Chiều rộng của bảng phải là một số nguyên.',invalidHeight:'Chiều cao của bảng phải là một số nguyên.',invalidCellSpacing:'Khoảng cách giữa các ô phải là một số nguyên.',invalidCellPadding:'Khoảng đệm giữa ô và nội dung phải là một số nguyên.',cell:{menu:'Ô',insertBefore:'Chèn ô Phía trước',insertAfter:'Chèn ô Phía sau',deleteCell:'Xoá ô',merge:'Kết hợp ô',mergeRight:'Kết hợp sang phải',mergeDown:'Kết hợp xuống dưới',splitHorizontal:'Phân tách ô theo chiều ngang',splitVertical:'Phân tách ô theo chiều dọc',title:'Thuộc tính của ô',cellType:'Kiểu của ô',rowSpan:'Kết hợp hàng',colSpan:'Kết hợp cột',wordWrap:'Chữ liền hàng',hAlign:'Canh lề ngang',vAlign:'Canh lề dọc',alignBaseline:'Đường cơ sở',bgColor:'Màu nền',borderColor:'Màu viền',data:'Dữ liệu',header:'Đầu đề',yes:'Có',no:'Không',invalidWidth:'Chiều rộng của ô phải là một số nguyên.',invalidHeight:'Chiều cao của ô phải là một số nguyên.',invalidRowSpan:'Số hàng kết hợp phải là một số nguyên.',invalidColSpan:'Số cột kết hợp phải là một số nguyên.',chooseColor:'Chọn màu'},row:{menu:'Hàng',insertBefore:'Chèn hàng phía trước',insertAfter:'Chèn hàng phía sau',deleteRow:'Xoá hàng'},column:{menu:'Cột',insertBefore:'Chèn cột phía trước',insertAfter:'Chèn cột phía sau',deleteColumn:'Xoá cột'}},button:{title:'Thuộc tính của nút',text:'Chuỗi hiển thị (giá trị)',type:'Kiểu',typeBtn:'Nút bấm',typeSbm:'Nút gửi',typeRst:'Nút nhập lại'},checkboxAndRadio:{checkboxTitle:'Thuộc tính nút kiểm',radioTitle:'Thuộc tính nút chọn',value:'Giá trị',selected:'Được chọn'},form:{title:'Thuộc tính biểu mẫu',menu:'Thuộc tính biểu mẫu',action:'Hành động',method:'Phương thức',encoding:'Bảng mã'},select:{title:'Thuộc tính ô chọn',selectInfo:'Thông tin',opAvail:'Các tùy chọn có thể sử dụng',value:'Giá trị',size:'Kích cỡ',lines:'dòng',chkMulti:'Cho phép chọn nhiều',opText:'Văn bản',opValue:'Giá trị',btnAdd:'Thêm',btnModify:'Thay đổi',btnUp:'Lên',btnDown:'Xuống',btnSetValue:'Giá trị được chọn',btnDelete:'Nút xoá'},textarea:{title:'Thuộc tính vùng văn bản',cols:'Số cột',rows:'Số hàng'},textfield:{title:'Thuộc tính trường văn bản',name:'Tên',value:'Giá trị',charWidth:'Độ rộng của ký tự',maxChars:'Số ký tự tối đa',type:'Kiểu',typeText:'Ký tự',typePass:'Mật khẩu'},hidden:{title:'Thuộc tính trường ẩn',name:'Tên',value:'Giá trị'},image:{title:'Thuộc tính của ảnh',titleButton:'Thuộc tính nút của ảnh',menu:'Thuộc tính của ảnh',infoTab:'Thông tin của ảnh',btnUpload:'Tải lên máy chủ',upload:'Tải lên',alt:'Chú thích ảnh',lockRatio:'Giữ nguyên tỷ lệ',unlockRatio:'Phá bỏ tỷ lệ',resetSize:'Kích thước gốc',border:'Đường viền',hSpace:'Khoảng đệm ngang',vSpace:'Khoảng đệm dọc',alertUrl:'Hãy đưa vào đường dẫn của ảnh',linkTab:'Tab liên kết',button2Img:'Bạn có muốn chuyển nút bấm bằng ảnh được chọn thành ảnh?',img2Button:'Bạn có muốn chuyển đổi ảnh được chọn thành nút bấm bằng ảnh?',urlMissing:'Thiếu đường dẫn hình ảnh',validateBorder:'Chiều rộng của đường viền phải là một số nguyên dương',validateHSpace:'Khoảng đệm ngang phải là một số nguyên dương',validateVSpace:'Khoảng đệm dọc phải là một số nguyên dương'},flash:{properties:'Thuộc tính Flash',propertiesTab:'Thuộc tính',title:'Thuộc tính Flash',chkPlay:'Tự động chạy',chkLoop:'Lặp',chkMenu:'Cho phép bật menu của Flash',chkFull:'Cho phép toàn màn hình',scale:'Tỷ lệ',scaleAll:'Hiển thị tất cả',scaleNoBorder:'Không đường viền',scaleFit:'Vừa vặn',access:'Truy cập mã',accessAlways:'Luôn luôn',accessSameDomain:'Cùng tên miền',accessNever:'Không bao giờ',alignAbsBottom:'Dưới tuyệt đối',alignAbsMiddle:'Giữa tuyệt đối',alignBaseline:'Đường cơ sở',alignTextTop:'Phía trên chữ',quality:'Chất lượng',qualityBest:'Tốt nhất',qualityHigh:'Cao',qualityAutoHigh:'Cao tự động',qualityMedium:'Trung bình',qualityAutoLow:'Thấp tự động',qualityLow:'Thấp',windowModeWindow:'Cửa sổ',windowModeOpaque:'Mờ đục',windowModeTransparent:'Trong suốt',windowMode:'Chế độ cửa sổ',flashvars:'Các biến số dành cho Flash',bgcolor:'Màu nền',hSpace:'Khoảng đệm ngang',vSpace:'Khoảng đệm dọc',validateSrc:'Hãy đưa vào đường dẫn liên kết',validateHSpace:'Khoảng đệm ngang phải là số nguyên.',validateVSpace:'Khoảng đệm dọc phải là số nguyên.'},spellCheck:{toolbar:'Kiểm tra chính tả',title:'Kiểm tra chính tả',notAvailable:'Xin lỗi, dịch vụ này hiện tại không có.',errorLoading:'Lỗi khi đang nạp dịch vụ ứng dụng: %s.',notInDic:'Không có trong từ điển',changeTo:'Chuyển thành',btnIgnore:'Bỏ qua',btnIgnoreAll:'Bỏ qua tất cả',btnReplace:'Thay thế',btnReplaceAll:'Thay thế tất cả',btnUndo:'Phục hồi lại',noSuggestions:'- Không đưa ra gợi ý về từ -',progress:'Đang tiến hành kiểm tra chính tả...',noMispell:'Hoàn tất kiểm tra chính tả: Không có lỗi chính tả',noChanges:'Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi',oneChange:'Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi',manyChanges:'Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi',ieSpellDownload:'Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?'},smiley:{toolbar:'Hình biểu lộ cảm xúc (mặt cười)',title:'Chèn hình biểu lộ cảm xúc (mặt cười)',options:'Tùy chọn hình biểu lộ cảm xúc'},elementsPath:{eleLabel:'Nhãn thành phần',eleTitle:'%1 thành phần'},numberedlist:'Danh sách có thứ tự',bulletedlist:'Danh sách không thứ tự',indent:'Dịch vào trong',outdent:'Dịch ra ngoài',justify:{left:'Canh trái',center:'Canh giữa',right:'Canh phải',block:'Canh đều'},blockquote:'Khối trích dẫn',clipboard:{title:'Dán',cutError:'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).',copyError:'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).',pasteMsg:'Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.',securityMsg:'Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.',pasteArea:'Khu vực dán'},pastefromword:{confirmCleanup:'Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?',toolbar:'Dán với định dạng Word',title:'Dán với định dạng Word',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'Dán theo định dạng văn bản thuần',title:'Dán theo định dạng văn bản thuần'},templates:{button:'Mẫu dựng sẵn',title:'Nội dung Mẫu dựng sẵn',options:'Tùy chọn mẫu dựng sẵn',insertOption:'Thay thế nội dung hiện tại',selectPromptMsg:'Hãy chọn mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):',emptyListMsg:'(Không có mẫu dựng sẵn nào được định nghĩa)'},showBlocks:'Hiển thị các khối',stylesCombo:{label:'Kiểu',panelTitle:'Phong cách định dạng',panelTitle1:'Kiểu khối',panelTitle2:'Kiểu trực tiếp',panelTitle3:'Kiểu đối tượng'},format:{label:'Định dạng',panelTitle:'Định dạng',tag_p:'Bình thường (P)',tag_pre:'Đã thiết lập',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Bình thường (DIV)'},div:{title:'Tạo khối các thành phần',toolbar:'Tạo khối các thành phần',cssClassInputLabel:'Các lớp CSS',styleSelectLabel:'Kiểu (style)',IdInputLabel:'Định danh (id)',languageCodeInputLabel:'Mã ngôn ngữ',inlineStyleInputLabel:'Kiểu nội dòng',advisoryTitleInputLabel:'Nhan đề hướng dẫn',langDirLabel:'Hướng ngôn ngữ',langDirLTRLabel:'Trái sang phải (LTR)',langDirRTLLabel:'Phải qua trái (RTL)',edit:'Chỉnh sửa',remove:'Xóa bỏ'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'Phông',voiceLabel:'Phông',panelTitle:'Phông'},fontSize:{label:'Cỡ chữ',voiceLabel:'Kích cỡ phông',panelTitle:'Cỡ chữ'},colorButton:{textColorTitle:'Màu chữ',bgColorTitle:'Màu nền',panelTitle:'Màu sắc',auto:'Tự động',more:'Màu khác...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Kiểm tra chính tả ngay khi gõ chữ (SCAYT)',opera_title:'Không hỗ trợ trên trình duyệt Opera',enable:'Bật SCAYT',disable:'Tắt SCAYT',about:'Thông tin về SCAYT',toggle:'Bật tắt SCAYT',options:'Tùy chọn',langs:'Ngôn ngữ',moreSuggestions:'Đề xuất thêm',ignore:'Bỏ qua',ignoreAll:'Bỏ qua tất cả',addWord:'Thêm từ',emptyDic:'Tên của từ điển không được để trống.',optionsTab:'Tùy chọn',allCaps:'Không phân biệt chữ HOA chữ thường',ignoreDomainNames:'Bỏ qua tên miền',mixedCase:'Không phân biệt loại chữ',mixedWithDigits:'Không phân biệt chữ và số',languagesTab:'Tab ngôn ngữ',dictionariesTab:'Từ điển',dic_field_name:'Tên từ điển',dic_create:'Tạo',dic_restore:'Phục hồi',dic_delete:'Xóa',dic_rename:'Thay tên',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'Thông tin'},about:{title:'Thông tin về CKEditor',dlgTitle:'Thông tin về CKEditor',moreInfo:'Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:',copy:'Bản quyền © $1. Giữ toàn quyền.'},maximize:'Phóng to tối đa',minimize:'Thu nhỏ',fakeobjects:{anchor:'Điểm neo',flash:'Flash',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'Đối tượng không rõ ràng'},resize:'Kéo rê để thay đổi kích cỡ',colordialog:{title:'Chọn màu',options:'Color Options',highlight:'Màu chọn',selected:'Màu đã chọn',clear:'Xóa bỏ'},toolbarCollapse:'Thu gọn thanh công cụ',toolbarExpand:'Mở rộng thnah công cụ',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/lang/zh-cn.js b/modules_v2/ckeditor/lang/zh-cn.js new file mode 100644 index 0000000000..bb5040dc0b --- /dev/null +++ b/modules_v2/ckeditor/lang/zh-cn.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang['zh-cn']={dir:'ltr',editorTitle:'所见即所得编辑器, %1, 按 ALT+0 查看帮助。',toolbar:'工具栏',editor:'所见即所得编辑器',source:'源码',newPage:'新建',save:'保存',preview:'预览',cut:'剪切',copy:'复制',paste:'粘贴',print:'打印',underline:'下划线',bold:'加粗',italic:'倾斜',selectAll:'全选',removeFormat:'清除格式',strike:'删除线',subscript:'下标',superscript:'上标',horizontalrule:'插入水平线',pagebreak:'插入分页符',pagebreakAlt:'Page Break',unlink:'取消超链接',undo:'撤消',redo:'重做',common:{browseServer:'浏览服务器',url:'源文件',protocol:'协议',upload:'上传',uploadSubmit:'上传到服务器上',image:'图象',flash:'Flash',form:'表单',checkbox:'复选框',radio:'单选按钮',textField:'单行文本',textarea:'多行文本',hiddenField:'隐藏域',button:'按钮',select:'列表/菜单',imageButton:'图像域',notSet:'<没有设置>',id:'ID',name:'名称',langDir:'语言方向',langDirLtr:'从左到右 (LTR)',langDirRtl:'从右到左 (RTL)',langCode:'语言代码',longDescr:'详细说明地址',cssClass:'样式类名称',advisoryTitle:'标题',cssStyle:'行内样式',ok:'确定',cancel:'取消',close:'关闭',preview:'预览',generalTab:'常规',advancedTab:'高级',validateNumberFailed:'需要输入数字格式',confirmNewPage:'当前文档内容未保存,是否确认新建文档?',confirmCancel:'部分修改尚未保存,是否确认关闭对话框?',options:'选项',target:'目标窗口',targetNew:'新窗口 (_blank)',targetTop:'整页 (_top)',targetSelf:'本窗口 (_self)',targetParent:'父窗口 (_parent)',langDirLTR:'从左到右 (LTR)',langDirRTL:'从右到左 (RTL)',styles:'样式',cssClasses:'样式类',width:'宽度',height:'高度',align:'对齐方式',alignLeft:'左对齐',alignRight:'右对齐',alignCenter:'居中',alignTop:'顶端',alignMiddle:'居中',alignBottom:'底部',invalidHeight:'高度必须为数字格式',invalidWidth:'宽度必须为数字格式',unavailable:'%1<span class="cke_accessibility">, 不可用</span>'},contextmenu:{options:'快捷菜单选项'},specialChar:{toolbar:'插入特殊符号',title:'选择特殊符号',options:'特殊符号选项'},link:{toolbar:'插入/编辑超链接',other:'<其他>',menu:'编辑超链接',title:'超链接',info:'超链接信息',target:'目标',upload:'上传',advanced:'高级',type:'超链接类型',toUrl:'地址',toAnchor:'页内锚点链接',toEmail:'电子邮件',targetFrame:'<框架>',targetPopup:'<弹出窗口>',targetFrameName:'目标框架名称',targetPopupName:'弹出窗口名称',popupFeatures:'弹出窗口属性',popupResizable:'可缩放',popupStatusBar:'状态栏',popupLocationBar:'地址栏',popupToolbar:'工具栏',popupMenuBar:'菜单栏',popupFullScreen:'全屏 (IE)',popupScrollBars:'滚动条',popupDependent:'依附 (NS)',popupLeft:'左',popupTop:'右',id:'ID',langDir:'语言方向',langDirLTR:'从左到右 (LTR)',langDirRTL:'从右到左 (RTL)',acccessKey:'访问键',name:'名称',langCode:'语言代码',tabIndex:'Tab 键次序',advisoryTitle:'标题',advisoryContentType:'内容类型',cssClasses:'样式类名称',charset:'字符编码',styles:'行内样式',selectAnchor:'选择一个锚点',anchorName:'按锚点名称',anchorId:'按锚点 ID',emailAddress:'地址',emailSubject:'主题',emailBody:'内容',noAnchors:'(此文档没有可用的锚点)',noUrl:'请输入超链接地址',noEmail:'请输入电子邮件地址'},anchor:{toolbar:'插入/编辑锚点链接',menu:'锚点链接属性',title:'锚点链接属性',name:'锚点名称',errorName:'请输入锚点名称'},list:{numberedTitle:'编号列表属性',bulletedTitle:'项目列表属性',type:'标记类型',start:'开始序号',validateStartNumber:'列表开始序号必须为整数格式',circle:'空心圆',disc:'实心圆',square:'实心方块',none:'无标记',notset:'<没有设置>',armenian:'传统的亚美尼亚编号方式',georgian:'传统的乔治亚编号方式(an, ban, gan, 等)',lowerRoman:'小写罗马数字(i, ii, iii, iv, v, 等)',upperRoman:'大写罗马数字(I, II, III, IV, V, 等)',lowerAlpha:'小写英文字母(a, b, c, d, e, 等)',upperAlpha:'大写英文字母(A, B, C, D, E, 等)',lowerGreek:'小写希腊字母(alpha, beta, gamma, 等)',decimal:'数字 (1, 2, 3, 等)',decimalLeadingZero:'0开头的数字标记(01, 02, 03, 等)'},findAndReplace:{title:'查找和替换',find:'查找',replace:'替换',findWhat:'查找:',replaceWith:'替换:',notFoundMsg:'指定文本没有找到',matchCase:'区分大小写',matchWord:'全字匹配',matchCyclic:'循环匹配',replaceAll:'全部替换',replaceSuccessMsg:'共完成 %1 处替换.'},table:{toolbar:'表格',title:'表格属性',menu:'表格属性',deleteTable:'删除表格',rows:'行数',columns:'列数',border:'边框',widthPx:'像素',widthPc:'百分比',widthUnit:'宽度单位',cellSpace:'间距',cellPad:'边距',caption:'标题',summary:'摘要',headers:'标题单元格',headersNone:'无',headersColumn:'第一列',headersRow:'第一行',headersBoth:'第一列和第一行',invalidRows:'指定的列数必须大于零',invalidCols:'指定的行数必须大于零',invalidBorder:'边框粗细必须为数字格式',invalidWidth:'表格宽度必须为数字格式',invalidHeight:'表格高度必须为数字格式',invalidCellSpacing:'单元格间距必须为数字格式',invalidCellPadding:'单元格填充必须为数字格式',cell:{menu:'单元格',insertBefore:'在左侧插入单元格',insertAfter:'在右侧插入单元格',deleteCell:'删除单元格',merge:'合并单元格',mergeRight:'向右合并单元格',mergeDown:'向下合并单元格',splitHorizontal:'水平拆分单元格',splitVertical:'垂直拆分单元格',title:'单元格属性',cellType:'单元格类型',rowSpan:'纵跨行数',colSpan:'横跨列数',wordWrap:'自动换行',hAlign:'水平对齐',vAlign:'垂直对齐',alignBaseline:'基线',bgColor:'背景颜色',borderColor:'边框颜色',data:'数据',header:'表头',yes:'是',no:'否',invalidWidth:'单元格宽度必须为数字格式',invalidHeight:'单元格高度必须为数字格式',invalidRowSpan:'行跨度必须为整数格式',invalidColSpan:'列跨度必须为整数格式',chooseColor:'选择'},row:{menu:'行',insertBefore:'在上方插入行',insertAfter:'在下方插入行',deleteRow:'删除行'},column:{menu:'列',insertBefore:'在左侧插入列',insertAfter:'在右侧插入列',deleteColumn:'删除列'}},button:{title:'按钮属性',text:'标签(值)',type:'类型',typeBtn:'按钮',typeSbm:'提交',typeRst:'重设'},checkboxAndRadio:{checkboxTitle:'复选框属性',radioTitle:'单选按钮属性',value:'选定值',selected:'已勾选'},form:{title:'表单属性',menu:'表单属性',action:'动作',method:'方法',encoding:'表单编码'},select:{title:'菜单/列表属性',selectInfo:'选择信息',opAvail:'可选项',value:'值',size:'高度',lines:'行',chkMulti:'允许多选',opText:'选项文本',opValue:'选项值',btnAdd:'添加',btnModify:'修改',btnUp:'上移',btnDown:'下移',btnSetValue:'设为初始选定',btnDelete:'删除'},textarea:{title:'多行文本属性',cols:'字符宽度',rows:'行数'},textfield:{title:'单行文本属性',name:'名称',value:'初始值',charWidth:'字符宽度',maxChars:'最多字符数',type:'类型',typeText:'文本',typePass:'密码'},hidden:{title:'隐藏域属性',name:'名称',value:'初始值'},image:{title:'图象属性',titleButton:'图像域属性',menu:'图象属性',infoTab:'图象',btnUpload:'上传到服务器上',upload:'上传',alt:'替换文本',lockRatio:'锁定比例',unlockRatio:'不锁定比例',resetSize:'原始尺寸',border:'边框大小',hSpace:'水平间距',vSpace:'垂直间距',alertUrl:'请输入图象地址',linkTab:'链接',button2Img:'确定要把当前按钮改变为图像吗?',img2Button:'确定要把当前图像改变为按钮吗?',urlMissing:'缺少图像源文件地址',validateBorder:'边框大小必须为整数格式',validateHSpace:'水平间距必须为整数格式',validateVSpace:'垂直间距必须为整数格式'},flash:{properties:'Flash 属性',propertiesTab:'属性',title:'标题',chkPlay:'自动播放',chkLoop:'循环',chkMenu:'启用 Flash 菜单',chkFull:'启用全屏',scale:'缩放',scaleAll:'全部显示',scaleNoBorder:'无边框',scaleFit:'严格匹配',access:'允许脚本访问',accessAlways:'总是',accessSameDomain:'同域',accessNever:'从不',alignAbsBottom:'绝对底部',alignAbsMiddle:'绝对居中',alignBaseline:'基线',alignTextTop:'文本上方',quality:'质量',qualityBest:'最好',qualityHigh:'高',qualityAutoHigh:'高(自动)',qualityMedium:'中(自动)',qualityAutoLow:'低(自动)',qualityLow:'低',windowModeWindow:'窗体',windowModeOpaque:'不透明',windowModeTransparent:'透明',windowMode:'窗体模式',flashvars:'Flash 变量',bgcolor:'背景颜色',hSpace:'水平间距',vSpace:'垂直间距',validateSrc:'请输入源文件地址',validateHSpace:'水平间距必须为数字格式',validateVSpace:'垂直间距必须为数字格式'},spellCheck:{toolbar:'拼写检查',title:'拼写检查',notAvailable:'抱歉, 服务目前暂不可用',errorLoading:'加载应该服务主机时出错: %s.',notInDic:'没有在字典里',changeTo:'更改为',btnIgnore:'忽略',btnIgnoreAll:'全部忽略',btnReplace:'替换',btnReplaceAll:'全部替换',btnUndo:'撤消',noSuggestions:'- 没有建议 -',progress:'正在进行拼写检查...',noMispell:'拼写检查完成: 没有发现拼写错误',noChanges:'拼写检查完成: 没有更改任何单词',oneChange:'拼写检查完成: 更改了一个单词',manyChanges:'拼写检查完成: 更改了 %1 个单词',ieSpellDownload:'拼写检查插件还没安装, 你是否想现在就下载?'},smiley:{toolbar:'表情符',title:'插入表情图标',options:'表情图标选项'},elementsPath:{eleLabel:'元素路径',eleTitle:'%1 元素'},numberedlist:'编号列表',bulletedlist:'项目列表',indent:'增加缩进量',outdent:'减少缩进量',justify:{left:'左对齐',center:'居中',right:'右对齐',block:'两端对齐'},blockquote:'块引用',clipboard:{title:'粘贴',cutError:'您的浏览器安全设置不允许编辑器自动执行剪切操作, 请使用键盘快捷键(Ctrl/Cmd+X)来完成',copyError:'您的浏览器安全设置不允许编辑器自动执行复制操作, 请使用键盘快捷键(Ctrl/Cmd+C)来完成',pasteMsg:'请使用键盘快捷键(<STRONG>Ctrl/Cmd+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>',securityMsg:'因为你的浏览器的安全设置原因, 本编辑器不能直接访问你的剪贴板内容, 你需要在本窗口重新粘贴一次',pasteArea:'粘贴区域'},pastefromword:{confirmCleanup:'您要粘贴的内容好像是来自 MS Word, 是否要清除 MS Word 格式后再粘贴?',toolbar:'从 MS Word 粘贴',title:'从 MS Word 粘贴',error:'由于内部错误无法清理要粘贴的数据'},pasteText:{button:'粘贴为无格式文本',title:'粘贴为无格式文本'},templates:{button:'模板',title:'内容模板',options:'模板选项',insertOption:'替换当前内容',selectPromptMsg:'请选择编辑器内容模板:',emptyListMsg:'(没有模板)'},showBlocks:'显示区块',stylesCombo:{label:'样式',panelTitle:'样式',panelTitle1:'块级元素样式',panelTitle2:'内联元素样式',panelTitle3:'对象元素样式'},format:{label:'格式',panelTitle:'格式',tag_p:'普通',tag_pre:'已编排格式',tag_address:'地址',tag_h1:'标题 1',tag_h2:'标题 2',tag_h3:'标题 3',tag_h4:'标题 4',tag_h5:'标题 5',tag_h6:'标题 6',tag_div:'段落(DIV)'},div:{title:'创建 DIV 容器',toolbar:'创建 DIV 容器',cssClassInputLabel:'样式类名称',styleSelectLabel:'样式',IdInputLabel:'ID',languageCodeInputLabel:'语言代码',inlineStyleInputLabel:'行内样式',advisoryTitleInputLabel:'标题',langDirLabel:'语言方向',langDirLTRLabel:'从左到右 (LTR)',langDirRTLLabel:'从右到左 (RTL)',edit:'编辑 DIV',remove:'移除 DIV'},iframe:{title:'iFrame属性',toolbar:'iFrame',noUrl:'请输入框架的 URL',scrolling:'允许滚动条',border:'显示框架边框'},font:{label:'字体',voiceLabel:'字体',panelTitle:'字体'},fontSize:{label:'大小',voiceLabel:'文字大小',panelTitle:'大小'},colorButton:{textColorTitle:'文本颜色',bgColorTitle:'背景颜色',panelTitle:'颜色',auto:'自动',more:'其它颜色...'},colors:{'000':'黑',800000:'褐红','8B4513':'深褐','2F4F4F':'墨绿','008080':'绿松石','000080':'海军蓝','4B0082':'靛蓝',696969:'暗灰',B22222:'砖红',A52A2A:'褐',DAA520:'金黄','006400':'深绿','40E0D0':'蓝绿','0000CD':'中蓝',800080:'紫',808080:'灰',F00:'红',FF8C00:'深橙',FFD700:'金','008000':'绿','0FF':'青','00F':'蓝',EE82EE:'紫罗兰',A9A9A9:'深灰',FFA07A:'亮橙',FFA500:'橙',FFFF00:'黄','00FF00':'水绿',AFEEEE:'粉蓝',ADD8E6:'亮蓝',DDA0DD:'梅红',D3D3D3:'淡灰',FFF0F5:'淡紫红',FAEBD7:'古董白',FFFFE0:'淡黄',F0FFF0:'蜜白',F0FFFF:'天蓝',F0F8FF:'淡蓝',E6E6FA:'淡紫',FFF:'白'},scayt:{title:'即时拼写检查',opera_title:'不支持 Opera 浏览器',enable:'启用即时拼写检查',disable:'禁用即时拼写检查',about:'关于即时拼写检查',toggle:'暂停/启用即时拼写检查',options:'选项',langs:'语言',moreSuggestions:'更多拼写建议',ignore:'忽略',ignoreAll:'全部忽略',addWord:'添加单词',emptyDic:'字典名不应为空.',optionsTab:'选项',allCaps:'忽略所有大写单词',ignoreDomainNames:'忽略域名',mixedCase:'忽略大小写混合的单词',mixedWithDigits:'忽略带数字的单词',languagesTab:'语言',dictionariesTab:'字典',dic_field_name:'字典名称',dic_create:'创建',dic_restore:'还原',dic_delete:'删除',dic_rename:'重命名',dic_info:'一开始用户词典储存在 Cookie 中, 但是 Cookies 的容量是有限的, 当用户词典增长到超出 Cookie 限制时就无法再储存了, 这时您可以将词典储存到我们的服务器上. 要把您的个人词典到储存到我们的服务器上的话, 需要为您的词典指定一个名称, 如果您在我们的服务器上已经有储存有一个词典, 请输入词典名称并按还原按钮.',aboutTab:'关于'},about:{title:'关于CKEditor',dlgTitle:'关于CKEditor',moreInfo:'访问我们的网站以获取更多关于协议的信息',copy:'Copyright © $1. All rights reserved.'},maximize:'全屏',minimize:'最小化',fakeobjects:{anchor:'锚点',flash:'Flash 动画',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'未知对象'},resize:'拖拽以改变尺寸',colordialog:{title:'选择颜色',options:'颜色选项',highlight:'高亮',selected:'选择颜色',clear:'清除'},toolbarCollapse:'折叠工具栏',toolbarExpand:'展开工具栏',bidi:{ltr:'文字方向为从左至右',rtl:'文字方向为从右至左'}};
diff --git a/modules_v2/ckeditor/lang/zh.js b/modules_v2/ckeditor/lang/zh.js new file mode 100644 index 0000000000..2db905dd5f --- /dev/null +++ b/modules_v2/ckeditor/lang/zh.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.lang.zh={dir:'ltr',editorTitle:'Rich text editor, %1, press ALT 0 for help.',toolbar:'Toolbar',editor:'Rich Text Editor',source:'原始碼',newPage:'開新檔案',save:'儲存',preview:'預覽',cut:'剪下',copy:'複製',paste:'貼上',print:'列印',underline:'底線',bold:'粗體',italic:'斜體',selectAll:'全選',removeFormat:'清除格式',strike:'刪除線',subscript:'下標',superscript:'上標',horizontalrule:'插入水平線',pagebreak:'插入分頁符號',pagebreakAlt:'Page Break',unlink:'移除超連結',undo:'復原',redo:'重複',common:{browseServer:'瀏覽伺服器端',url:'URL',protocol:'通訊協定',upload:'上傳',uploadSubmit:'上傳至伺服器',image:'影像',flash:'Flash',form:'表單',checkbox:'核取方塊',radio:'選項按鈕',textField:'文字方塊',textarea:'文字區域',hiddenField:'隱藏欄位',button:'按鈕',select:'清單/選單',imageButton:'影像按鈕',notSet:'<尚未設定>',id:'ID',name:'名稱',langDir:'語言方向',langDirLtr:'由左而右 (LTR)',langDirRtl:'由右而左 (RTL)',langCode:'語言代碼',longDescr:'詳細 URL',cssClass:'樣式表類別',advisoryTitle:'標題',cssStyle:'樣式',ok:'確定',cancel:'取消',close:'Close',preview:'Preview',generalTab:'一般',advancedTab:'進階',validateNumberFailed:'需要輸入數字格式',confirmNewPage:'現存的修改尚未儲存,要開新檔案?',confirmCancel:'部份選項尚未儲存,要關閉對話盒?',options:'Options',target:'Target',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',styles:'Style',cssClasses:'Stylesheet Classes',width:'寬度',height:'高度',align:'對齊',alignLeft:'靠左對齊',alignRight:'靠右對齊',alignCenter:'置中',alignTop:'靠上對齊',alignMiddle:'置中對齊',alignBottom:'靠下對齊',invalidHeight:'高度必須為數字格式',invalidWidth:'寬度必須為數字格式',unavailable:'%1<span class="cke_accessibility">, 已關閉</span>'},contextmenu:{options:'Context Menu Options'},specialChar:{toolbar:'插入特殊符號',title:'請選擇特殊符號',options:'Special Character Options'},link:{toolbar:'插入/編輯超連結',other:'<其他>',menu:'編輯超連結',title:'超連結',info:'超連結資訊',target:'目標',upload:'上傳',advanced:'進階',type:'超連接類型',toUrl:'URL',toAnchor:'本頁錨點',toEmail:'電子郵件',targetFrame:'<框架>',targetPopup:'<快顯視窗>',targetFrameName:'目標框架名稱',targetPopupName:'快顯視窗名稱',popupFeatures:'快顯視窗屬性',popupResizable:'可縮放',popupStatusBar:'狀態列',popupLocationBar:'網址列',popupToolbar:'工具列',popupMenuBar:'選單列',popupFullScreen:'全螢幕 (IE)',popupScrollBars:'捲軸',popupDependent:'從屬 (NS)',popupLeft:'左',popupTop:'右',id:'ID',langDir:'語言方向',langDirLTR:'由左而右 (LTR)',langDirRTL:'由右而左 (RTL)',acccessKey:'存取鍵',name:'名稱',langCode:'語言方向',tabIndex:'定位順序',advisoryTitle:'標題',advisoryContentType:'內容類型',cssClasses:'樣式表類別',charset:'連結資源之編碼',styles:'樣式',selectAnchor:'請選擇錨點',anchorName:'依錨點名稱',anchorId:'依元件 ID',emailAddress:'電子郵件',emailSubject:'郵件主旨',emailBody:'郵件內容',noAnchors:'(本文件尚無可用之錨點)',noUrl:'請輸入欲連結的 URL',noEmail:'請輸入電子郵件位址'},anchor:{toolbar:'插入/編輯錨點',menu:'錨點屬性',title:'錨點屬性',name:'錨點名稱',errorName:'請輸入錨點名稱'},list:{numberedTitle:'Numbered List Properties',bulletedTitle:'Bulleted List Properties',type:'Type',start:'Start',validateStartNumber:'List start number must be a whole number.',circle:'Circle',disc:'Disc',square:'Square',none:'None',notset:'<not set>',armenian:'Armenian numbering',georgian:'Georgian numbering (an, ban, gan, etc.)',lowerRoman:'Lower Roman (i, ii, iii, iv, v, etc.)',upperRoman:'Upper Roman (I, II, III, IV, V, etc.)',lowerAlpha:'Lower Alpha (a, b, c, d, e, etc.)',upperAlpha:'Upper Alpha (A, B, C, D, E, etc.)',lowerGreek:'Lower Greek (alpha, beta, gamma, etc.)',decimal:'Decimal (1, 2, 3, etc.)',decimalLeadingZero:'Decimal leading zero (01, 02, 03, etc.)'},findAndReplace:{title:'尋找與取代',find:'尋找',replace:'取代',findWhat:'尋找:',replaceWith:'取代:',notFoundMsg:'未找到指定的文字。',matchCase:'大小寫須相符',matchWord:'全字相符',matchCyclic:'循環搜索',replaceAll:'全部取代',replaceSuccessMsg:'共完成 %1 次取代'},table:{toolbar:'表格',title:'表格屬性',menu:'表格屬性',deleteTable:'刪除表格',rows:'列數',columns:'欄數',border:'邊框',widthPx:'像素',widthPc:'百分比',widthUnit:'width unit',cellSpace:'間距',cellPad:'內距',caption:'標題',summary:'摘要',headers:'標題',headersNone:'無標題',headersColumn:'第一欄',headersRow:'第一列',headersBoth:'第一欄和第一列',invalidRows:'必須有一或更多的列',invalidCols:'必須有一或更多的欄',invalidBorder:'邊框大小必須為數字格式',invalidWidth:'表格寬度必須為數字格式',invalidHeight:'表格高度必須為數字格式',invalidCellSpacing:'儲存格間距必須為數字格式',invalidCellPadding:'儲存格內距必須為數字格式',cell:{menu:'儲存格',insertBefore:'向左插入儲存格',insertAfter:'向右插入儲存格',deleteCell:'刪除儲存格',merge:'合併儲存格',mergeRight:'向右合併儲存格',mergeDown:'向下合併儲存格',splitHorizontal:'橫向分割儲存格',splitVertical:'縱向分割儲存格',title:'儲存格屬性',cellType:'儲存格類別',rowSpan:'儲存格列數',colSpan:'儲存格欄數',wordWrap:'自動換行',hAlign:'水平對齊',vAlign:'垂直對齊',alignBaseline:'基線對齊',bgColor:'背景顏色',borderColor:'邊框顏色',data:'數據',header:'標題',yes:'是',no:'否',invalidWidth:'儲存格寬度必須為數字格式',invalidHeight:'儲存格高度必須為數字格式',invalidRowSpan:'儲存格列數必須為整數格式',invalidColSpan:'儲存格欄數度必須為整數格式',chooseColor:'Choose'},row:{menu:'列',insertBefore:'向上插入列',insertAfter:'向下插入列',deleteRow:'刪除列'},column:{menu:'欄',insertBefore:'向左插入欄',insertAfter:'向右插入欄',deleteColumn:'刪除欄'}},button:{title:'按鈕屬性',text:'顯示文字 (值)',type:'類型',typeBtn:'按鈕 (Button)',typeSbm:'送出 (Submit)',typeRst:'重設 (Reset)'},checkboxAndRadio:{checkboxTitle:'核取方塊屬性',radioTitle:'選項按鈕屬性',value:'選取值',selected:'已選取'},form:{title:'表單屬性',menu:'表單屬性',action:'動作',method:'方法',encoding:'表單編碼'},select:{title:'清單/選單屬性',selectInfo:'資訊',opAvail:'可用選項',value:'值',size:'大小',lines:'行',chkMulti:'可多選',opText:'顯示文字',opValue:'選取值',btnAdd:'新增',btnModify:'修改',btnUp:'上移',btnDown:'下移',btnSetValue:'設為預設值',btnDelete:'刪除'},textarea:{title:'文字區域屬性',cols:'字元寬度',rows:'列數'},textfield:{title:'文字方塊屬性',name:'名稱',value:'值',charWidth:'字元寬度',maxChars:'最多字元數',type:'類型',typeText:'文字',typePass:'密碼'},hidden:{title:'隱藏欄位屬性',name:'名稱',value:'值'},image:{title:'影像屬性',titleButton:'影像按鈕屬性',menu:'影像屬性',infoTab:'影像資訊',btnUpload:'上傳至伺服器',upload:'上傳',alt:'替代文字',lockRatio:'等比例',unlockRatio:'Unlock Ratio',resetSize:'重設為原大小',border:'邊框',hSpace:'水平距離',vSpace:'垂直距離',alertUrl:'請輸入影像 URL',linkTab:'超連結',button2Img:'要把影像按鈕改成影像嗎?',img2Button:'要把影像改成影像按鈕嗎?',urlMissing:'Image source URL is missing.',validateBorder:'Border must be a whole number.',validateHSpace:'HSpace must be a whole number.',validateVSpace:'VSpace must be a whole number.'},flash:{properties:'Flash 屬性',propertiesTab:'屬性',title:'Flash 屬性',chkPlay:'自動播放',chkLoop:'重複',chkMenu:'開啟選單',chkFull:'啟動全螢幕顯示',scale:'縮放',scaleAll:'全部顯示',scaleNoBorder:'無邊框',scaleFit:'精確符合',access:'允許腳本訪問',accessAlways:'永遠',accessSameDomain:'相同域名',accessNever:'永不',alignAbsBottom:'絕對下方',alignAbsMiddle:'絕對中間',alignBaseline:'基準線',alignTextTop:'文字上方',quality:'質素',qualityBest:'最好',qualityHigh:'高',qualityAutoHigh:'高(自動)',qualityMedium:'中(自動)',qualityAutoLow:'低(自動)',qualityLow:'低',windowModeWindow:'視窗',windowModeOpaque:'不透明',windowModeTransparent:'透明',windowMode:'視窗模式',flashvars:'Flash 變數',bgcolor:'背景顏色',hSpace:'水平距離',vSpace:'垂直距離',validateSrc:'請輸入欲連結的 URL',validateHSpace:'水平間距必須為數字格式',validateVSpace:'垂直間距必須為數字格式'},spellCheck:{toolbar:'拼字檢查',title:'拼字檢查',notAvailable:'抱歉,服務目前暫不可用',errorLoading:'無法聯系侍服器: %s.',notInDic:'不在字典中',changeTo:'更改為',btnIgnore:'忽略',btnIgnoreAll:'全部忽略',btnReplace:'取代',btnReplaceAll:'全部取代',btnUndo:'復原',noSuggestions:'- 無建議值 -',progress:'進行拼字檢查中…',noMispell:'拼字檢查完成:未發現拼字錯誤',noChanges:'拼字檢查完成:未更改任何單字',oneChange:'拼字檢查完成:更改了 1 個單字',manyChanges:'拼字檢查完成:更改了 %1 個單字',ieSpellDownload:'尚未安裝拼字檢查元件。您是否想要現在下載?'},smiley:{toolbar:'表情符號',title:'插入表情符號',options:'Smiley Options'},elementsPath:{eleLabel:'Elements path',eleTitle:'%1 元素'},numberedlist:'編號清單',bulletedlist:'項目清單',indent:'增加縮排',outdent:'減少縮排',justify:{left:'靠左對齊',center:'置中',right:'靠右對齊',block:'左右對齊'},blockquote:'引用文字',clipboard:{title:'貼上',cutError:'瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用快捷鍵 (Ctrl/Cmd+X) 剪下。',copyError:'瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用快捷鍵 (Ctrl/Cmd+C) 複製。',pasteMsg:'請使用快捷鍵 (<strong>Ctrl/Cmd+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>',securityMsg:'因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。',pasteArea:'Paste Area'},pastefromword:{confirmCleanup:'您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?',toolbar:'自 Word 貼上',title:'自 Word 貼上',error:'It was not possible to clean up the pasted data due to an internal error'},pasteText:{button:'貼為純文字格式',title:'貼為純文字格式'},templates:{button:'樣版',title:'內容樣版',options:'Template Options',insertOption:'取代原有內容',selectPromptMsg:'請選擇欲開啟的樣版<br> (原有的內容將會被清除):',emptyListMsg:'(無樣版)'},showBlocks:'顯示區塊',stylesCombo:{label:'樣式',panelTitle:'Formatting Styles',panelTitle1:'塊級元素樣式',panelTitle2:'內聯元素樣式',panelTitle3:'物件元素樣式'},format:{label:'格式',panelTitle:'格式',tag_p:'一般',tag_pre:'已格式化',tag_address:'位址',tag_h1:'標題 1',tag_h2:'標題 2',tag_h3:'標題 3',tag_h4:'標題 4',tag_h5:'標題 5',tag_h6:'標題 6',tag_div:'一般 (DIV)'},div:{title:'Create Div Container',toolbar:'Create Div Container',cssClassInputLabel:'Stylesheet Classes',styleSelectLabel:'Style',IdInputLabel:'Id',languageCodeInputLabel:' Language Code',inlineStyleInputLabel:'Inline Style',advisoryTitleInputLabel:'Advisory Title',langDirLabel:'Language Direction',langDirLTRLabel:'Left to Right (LTR)',langDirRTLLabel:'Right to Left (RTL)',edit:'Edit Div',remove:'Remove Div'},iframe:{title:'iFrame Properties',toolbar:'iFrame',noUrl:'Please type the iFrame URL',scrolling:'Enable scrollbars',border:'Show frame border'},font:{label:'字體',voiceLabel:'字體',panelTitle:'字體'},fontSize:{label:'大小',voiceLabel:'文字大小',panelTitle:'大小'},colorButton:{textColorTitle:'文字顏色',bgColorTitle:'背景顏色',panelTitle:'Colors',auto:'自動',more:'更多顏色…'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dark Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dim Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'即時拼寫檢查',opera_title:'Not supported by Opera',enable:'啟用即時拼寫檢查',disable:'關閉即時拼寫檢查',about:'關於即時拼寫檢查',toggle:'啟用/關閉即時拼寫檢查',options:'選項',langs:'語言',moreSuggestions:'更多拼寫建議',ignore:'忽略',ignoreAll:'全部忽略',addWord:'添加單詞',emptyDic:'字典名不應為空.',optionsTab:'選項',allCaps:'Ignore All-Caps Words',ignoreDomainNames:'Ignore Domain Names',mixedCase:'Ignore Words with Mixed Case',mixedWithDigits:'Ignore Words with Numbers',languagesTab:'語言',dictionariesTab:'字典',dic_field_name:'Dictionary name',dic_create:'Create',dic_restore:'Restore',dic_delete:'Delete',dic_rename:'Rename',dic_info:'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',aboutTab:'關於'},about:{title:'關於 CKEditor',dlgTitle:'關於 CKEditor',moreInfo:'訪問我們的網站以獲取更多關於協議的信息',copy:'Copyright © $1. All rights reserved.'},maximize:'最大化',minimize:'Minimize',fakeobjects:{anchor:'錨點',flash:'Flash 動畫',iframe:'iFrame',hiddenfield:'Hidden Field',unknown:'不明物件'},resize:'拖拽改變大小',colordialog:{title:'Select color',options:'Color Options',highlight:'Highlight',selected:'Selected Color',clear:'Clear'},toolbarCollapse:'Collapse Toolbar',toolbarExpand:'Expand Toolbar',bidi:{ltr:'Text direction from left to right',rtl:'Text direction from right to left'}};
diff --git a/modules_v2/ckeditor/module.php b/modules_v2/ckeditor/module.php new file mode 100644 index 0000000000..ef8532b45f --- /dev/null +++ b/modules_v2/ckeditor/module.php @@ -0,0 +1,41 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class ckeditor_WT_Module extends WT_Module { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('CKEditor'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds CKEditor for text editing in FAQ, News, HTML, and Stories modules.'); + } +} diff --git a/modules_v2/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js b/modules_v2/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js new file mode 100644 index 0000000000..de7b3ed1c9 --- /dev/null +++ b/modules_v2/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('a11yHelp',function(a){var b=a.lang.accessibilityHelp,c=CKEDITOR.tools.getNextId(),d={8:'BACKSPACE',9:'TAB',13:'ENTER',16:'SHIFT',17:'CTRL',18:'ALT',19:'PAUSE',20:'CAPSLOCK',27:'ESCAPE',33:'PAGE UP',34:'PAGE DOWN',35:'END',36:'HOME',37:'LEFT ARROW',38:'UP ARROW',39:'RIGHT ARROW',40:'DOWN ARROW',45:'INSERT',46:'DELETE',91:'LEFT WINDOW KEY',92:'RIGHT WINDOW KEY',93:'SELECT KEY',96:'NUMPAD 0',97:'NUMPAD 1',98:'NUMPAD 2',99:'NUMPAD 3',100:'NUMPAD 4',101:'NUMPAD 5',102:'NUMPAD 6',103:'NUMPAD 7',104:'NUMPAD 8',105:'NUMPAD 9',106:'MULTIPLY',107:'ADD',109:'SUBTRACT',110:'DECIMAL POINT',111:'DIVIDE',112:'F1',113:'F2',114:'F3',115:'F4',116:'F5',117:'F6',118:'F7',119:'F8',120:'F9',121:'F10',122:'F11',123:'F12',144:'NUM LOCK',145:'SCROLL LOCK',186:'SEMI-COLON',187:'EQUAL SIGN',188:'COMMA',189:'DASH',190:'PERIOD',191:'FORWARD SLASH',192:'GRAVE ACCENT',219:'OPEN BRACKET',220:'BACK SLASH',221:'CLOSE BRAKET',222:'SINGLE QUOTE'};d[CKEDITOR.ALT]='ALT';d[CKEDITOR.SHIFT]='SHIFT';d[CKEDITOR.CTRL]='CTRL';var e=[CKEDITOR.ALT,CKEDITOR.SHIFT,CKEDITOR.CTRL];function f(j){var k,l,m=[];for(var n=0;n<e.length;n++){l=e[n];k=j/e[n];if(k>1&&k<=2){j-=l;m.push(d[l]);}}m.push(d[j]||String.fromCharCode(j));return m.join('+');};var g=/\$\{(.*?)\}/g;function h(j,k){var l=a.config.keystrokes,m,n=l.length;for(var o=0;o<n;o++){m=l[o];if(m[1]==k)break;}return f(m[0]);};function i(){var j='<div class="cke_accessibility_legend" role="document" aria-labelledby="'+c+'_arialbl" tabIndex="-1">%1</div>'+'<span id="'+c+'_arialbl" class="cke_voice_label">'+b.contents+' </span>',k='<h1>%1</h1><dl>%2</dl>',l='<dt>%1</dt><dd>%2</dd>',m=[],n=b.legend,o=n.length;for(var p=0;p<o;p++){var q=n[p],r=[],s=q.items,t=s.length;for(var u=0;u<t;u++){var v=s[u],w;w=l.replace('%1',v.name).replace('%2',v.legend.replace(g,h));r.push(w);}m.push(k.replace('%1',q.name).replace('%2',r.join('')));}return j.replace('%1',m.join(''));};return{title:b.title,minWidth:600,minHeight:400,contents:[{id:'info',label:a.lang.common.generalTab,expand:true,elements:[{type:'html',id:'legends',focus:function(){},html:i()+'<style type="text/css">'+'.cke_accessibility_legend'+'{'+'width:600px;'+'height:400px;'+'padding-right:5px;'+'overflow-y:auto;'+'overflow-x:hidden;'+'}'+'.cke_accessibility_legend h1'+'{'+'font-size: 20px;'+'border-bottom: 1px solid #AAA;'+'margin: 5px 0px 15px;'+'}'+'.cke_accessibility_legend dl'+'{'+'margin-left: 5px;'+'}'+'.cke_accessibility_legend dt'+'{'+'font-size: 13px;'+'font-weight: bold;'+'}'+'.cke_accessibility_legend dd'+'{'+'white-space:normal;'+'margin:10px'+'}'+'</style>'}]}],buttons:[CKEDITOR.dialog.cancelButton]};
+});
diff --git a/modules_v2/ckeditor/plugins/a11yhelp/lang/en.js b/modules_v2/ckeditor/plugins/a11yhelp/lang/en.js new file mode 100644 index 0000000000..50b21a4011 --- /dev/null +++ b/modules_v2/ckeditor/plugins/a11yhelp/lang/en.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang('a11yhelp','en',{accessibilityHelp:{title:'Accessibility Instructions',contents:'Help Contents. To close this dialog press ESC.',legend:[{name:'General',items:[{name:'Editor Toolbar',legend:'Press ${toolbarFocus} to navigate to the toolbar. Move to next toolbar button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.'},{name:'Editor Dialog',legend:'Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page.'},{name:'Editor Context Menu',legend:'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option wtih SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.'},{name:'Editor List Box',legend:'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.'},{name:'Editor Element Path Bar',legend:'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.'}]},{name:'Commands',items:[{name:' Undo command',legend:'Press ${undo}'},{name:' Redo command',legend:'Press ${redo}'},{name:' Bold command',legend:'Press ${bold}'},{name:' Italic command',legend:'Press ${italic}'},{name:' Underline command',legend:'Press ${underline}'},{name:' Link command',legend:'Press ${link}'},{name:' Toolbar Collapse command',legend:'Press ${toolbarCollapse}'},{name:' Accessibility Help',legend:'Press ${a11yHelp}'}]}]}});
diff --git a/modules_v2/ckeditor/plugins/a11yhelp/lang/he.js b/modules_v2/ckeditor/plugins/a11yhelp/lang/he.js new file mode 100644 index 0000000000..047640b34a --- /dev/null +++ b/modules_v2/ckeditor/plugins/a11yhelp/lang/he.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang('a11yhelp','he',{accessibilityHelp:{title:'הוראות נגישות',contents:'הוראות נגישות. לסגירה לחץ אסקייפ (ESC).',legend:[{name:'כללי',items:[{name:'סרגל הכלים',legend:'לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר.'},{name:'דיאלוגים (חלונות תשאול)',legend:'בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב.'},{name:'תפריט ההקשר (Context Menu)',legend:'לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC).'},{name:'תפריטים צפים (List boxes)',legend:'בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.'},{name:'עץ אלמנטים (Elements Path)',legend:'לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך.'}]},{name:'פקודות',items:[{name:' ביטול צעד אחרון',legend:'לחץ ${undo}'},{name:' חזרה על צעד אחרון',legend:'לחץ ${redo}'},{name:' הדגשה',legend:'לחץ ${bold}'},{name:' הטייה',legend:'לחץ ${italic}'},{name:' הוספת קו תחתון',legend:'לחץ ${underline}'},{name:' הוספת לינק',legend:'לחץ ${link}'},{name:' כיווץ סרגל הכלים',legend:'לחץ ${toolbarCollapse}'},{name:' הוראות נגישות',legend:'לחץ ${a11yHelp}'}]}]}});CKEDITOR.plugins.setLang('a11yhelp','he',{accessibilityHelp:{title:'הוראות נגישות',contents:'הוראות נגישות. לסגירה לחץ אסקייפ (ESC).',legend:[{name:'כללי',items:[{name:'סרגל הכלים',legend:'לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר.'},{name:'דיאלוגים (חלונות תשאול)',legend:'בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב.'},{name:'תפריט ההקשר (Context Menu)',legend:'לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC).'},{name:'תפריטים צפים (List boxes)',legend:'בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.'},{name:'עץ אלמנטים (Elements Path)',legend:'לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך.'}]},{name:'פקודות',items:[{name:' ביטול צעד אחרון',legend:'לחץ ${undo}'},{name:' חזרה על צעד אחרון',legend:'לחץ ${redo}'},{name:' הדגשה',legend:'לחץ ${bold}'},{name:' הטייה',legend:'לחץ ${italic}'},{name:' הוספת קו תחתון',legend:'לחץ ${underline}'},{name:' הוספת לינק',legend:'לחץ ${link}'},{name:' כיווץ סרגל הכלים',legend:'לחץ ${toolbarCollapse}'},{name:' הוראות נגישות',legend:'לחץ ${a11yHelp}'}]}]}});
diff --git a/modules_v2/ckeditor/plugins/about/dialogs/about.js b/modules_v2/ckeditor/plugins/about/dialogs/about.js new file mode 100644 index 0000000000..1dd2177ae2 --- /dev/null +++ b/modules_v2/ckeditor/plugins/about/dialogs/about.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('about',function(a){var b=a.lang.about;return{title:CKEDITOR.env.ie?b.dlgTitle:b.title,minWidth:390,minHeight:230,contents:[{id:'tab1',label:'',title:'',expand:true,padding:0,elements:[{type:'html',html:'<style type="text/css">.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+CKEDITOR.plugins.get('about').path+'dialogs/logo_ckeditor.png);'+'background-position:center; '+'background-repeat:no-repeat;'+'margin-bottom:10px;'+'}'+'.cke_about_container a'+'{'+'cursor:pointer !important;'+'color:blue !important;'+'text-decoration:underline !important;'+'}'+'</style>'+'<div class="cke_about_container">'+'<div class="cke_about_logo"></div>'+'<p>'+'CKEditor '+CKEDITOR.version+' (revision '+CKEDITOR.revision+')<br>'+'<a href="http://ckeditor.com/">http://ckeditor.com</a>'+'</p>'+'<p>'+b.moreInfo+'<br>'+'<a href="http://ckeditor.com/license">http://ckeditor.com/license</a>'+'</p>'+'<p>'+b.copy.replace('$1','<a href="http://cksource.com/">CKSource</a> - Frederico Knabben')+'</p>'+'</div>'}]}],buttons:[CKEDITOR.dialog.cancelButton]};});
diff --git a/modules_v2/ckeditor/plugins/about/dialogs/logo_ckeditor.png b/modules_v2/ckeditor/plugins/about/dialogs/logo_ckeditor.png Binary files differnew file mode 100644 index 0000000000..ad0190218c --- /dev/null +++ b/modules_v2/ckeditor/plugins/about/dialogs/logo_ckeditor.png diff --git a/modules_v2/ckeditor/plugins/adobeair/plugin.js b/modules_v2/ckeditor/plugins/adobeair/plugin.js new file mode 100644 index 0000000000..59816f5e8b --- /dev/null +++ b/modules_v2/ckeditor/plugins/adobeair/plugin.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a=['click','keydown','mousedown','keypress','mouseover','mouseout'];function b(c){var d=c.getElementsByTag('*'),e=d.count(),f;for(var g=0;g<e;g++){f=d.getItem(g);(function(h){for(var i=0;i<a.length;i++)(function(j){var k=h.getAttribute('on'+j);if(h.hasAttribute('on'+j)){h.removeAttribute('on'+j);h.on(j,function(l){var m=/(return\s*)?CKEDITOR\.tools\.callFunction\(([^)]+)\)/.exec(k),n=m&&m[1],o=m&&m[2].split(','),p=/return false;/.test(k);if(o){var q=o.length,r;for(var s=0;s<q;s++){o[s]=r=CKEDITOR.tools.trim(o[s]);var t=r.match(/^(["'])([^"']*?)\1$/);if(t){o[s]=t[2];continue;}if(r.match(/\d+/)){o[s]=parseInt(r,10);continue;}switch(r){case 'this':o[s]=h.$;break;case 'event':o[s]=l.data.$;break;case 'null':o[s]=null;break;}}var u=CKEDITOR.tools.callFunction.apply(window,o);if(n&&u===false)p=1;}if(p)l.data.preventDefault();});}})(a[i]);})(f);}};CKEDITOR.plugins.add('adobeair',{init:function(c){if(!CKEDITOR.env.air)return;c.addCss('body { padding: 8px }');c.on('uiReady',function(){b(c.container);if(c.sharedSpaces)for(var d in c.sharedSpaces)b(c.sharedSpaces[d]);c.on('elementsPathUpdate',function(e){b(e.data.space);});});c.on('contentDom',function(){c.document.on('click',function(d){d.data.preventDefault(true);});});}});CKEDITOR.ui.on('ready',function(c){var d=c.data;if(d._.panel){var e=d._.panel._.panel,f;(function(){if(!e.isLoaded){setTimeout(arguments.callee,30);return;}f=e._.holder;b(f);})();}else if(d instanceof CKEDITOR.dialog)b(d._.element);});})();CKEDITOR.dom.document.prototype.write=CKEDITOR.tools.override(CKEDITOR.dom.document.prototype.write,function(a){function b(c,d,e,f){var g=c.append(d),h=CKEDITOR.htmlParser.fragment.fromHtml(e).children[0].attributes;h&&g.setAttributes(h);f&&g.append(c.getDocument().createText(f));};return function(c,d){if(this.getBody()){var e=this,f=this.getHead();c=c.replace(/(<style[^>]*>)([\s\S]*?)<\/style>/gi,function(g,h,i){b(f,'style',h,i);return '';});c=c.replace(/<base\b[^>]*\/>/i,function(g){b(f,'base',g);return '';});c=c.replace(/<title>([\s\S]*)<\/title>/i,function(g,h){e.$.title=h;return '';});c=c.replace(/<head>([\s\S]*)<\/head>/i,function(g){var h=new CKEDITOR.dom.element('div',e);h.setHtml(g);h.moveChildren(f);return '';});c.replace(/(<body[^>]*>)([\s\S]*)(?=$|<\/body>)/i,function(g,h,i){e.getBody().setHtml(i);var j=CKEDITOR.htmlParser.fragment.fromHtml(h).children[0].attributes;j&&e.getBody().setAttributes(j);});}else a.apply(this,arguments);};});
diff --git a/modules_v2/ckeditor/plugins/autogrow/plugin.js b/modules_v2/ckeditor/plugins/autogrow/plugin.js new file mode 100644 index 0000000000..ddcf152164 --- /dev/null +++ b/modules_v2/ckeditor/plugins/autogrow/plugin.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a=function(b){var c=b.document,d=b.window.getViewPaneSize().height,e;if(CKEDITOR.env.ie||CKEDITOR.env.gecko)e=c.getBody().$.scrollHeight+(CKEDITOR.env.ie&&CKEDITOR.env.quirks?0:24);else e=c.getDocumentElement().$.offsetHeight;var f=b.config.autoGrow_minHeight,g=b.config.autoGrow_maxHeight;f==undefined&&(b.config.autoGrow_minHeight=f=200);if(f)e=Math.max(e,f);if(g)e=Math.min(e,g);if(e!=d){e=b.fire('autoGrow',{currentHeight:d,newHeight:e}).newHeight;b.resize(b.container.getStyle('width'),e,true);}};CKEDITOR.plugins.add('autogrow',{init:function(b){for(var c in {contentDom:1,key:1,selectionChange:1,insertElement:1})b.on(c,function(d){var e=b.getCommand('maximize');if(d.editor.mode=='wysiwyg'&&(!e||e.state!=CKEDITOR.TRISTATE_ON))setTimeout(function(){a(d.editor);},100);});}});})();
diff --git a/modules_v2/ckeditor/plugins/clipboard/dialogs/paste.js b/modules_v2/ckeditor/plugins/clipboard/dialogs/paste.js new file mode 100644 index 0000000000..93a8d77503 --- /dev/null +++ b/modules_v2/ckeditor/plugins/clipboard/dialogs/paste.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('paste',function(a){var b=a.lang.clipboard,c=CKEDITOR.env.isCustomDomain();function d(e){var f=new CKEDITOR.dom.document(e.document),g=f.$,h=f.getById('cke_actscrpt');h&&h.remove();CKEDITOR.env.ie?g.body.contentEditable='true':g.designMode='on';if(CKEDITOR.env.ie&&CKEDITOR.env.version<8)f.getWindow().on('blur',function(){g.selection.empty();});f.on('keydown',function(i){var j=i.data,k=j.getKeystroke(),l;switch(k){case 27:this.hide();l=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(true);l=1;}l&&j.preventDefault();},this);a.fire('ariaWidget',new CKEDITOR.dom.element(e.frameElement));};return{title:b.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;var e='<html dir="'+a.config.contentsLangDirection+'"'+' lang="'+(a.config.contentsLanguage||a.langCode)+'">'+'<head><style>body { margin: 3px; height: 95%; } </style></head><body>'+'<script id="cke_actscrpt" type="text/javascript">'+'window.parent.CKEDITOR.tools.callFunction( '+CKEDITOR.tools.addFunction(d,this)+', this );'+'</script></body>'+'</html>',f=CKEDITOR.env.air?'javascript:void(0)':c?"javascript:void((function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})())"':'',g=CKEDITOR.dom.element.createFromHtml('<iframe class="cke_pasteframe" frameborder="0" allowTransparency="true" src="'+f+'"'+' role="region"'+' aria-label="'+b.pasteArea+'"'+' aria-describedby="'+this.getContentElement('general','pasteMsg').domId+'"'+' aria-multiple="true"'+'></iframe>');g.on('load',function(k){k.removeListener();var l=g.getFrameDocument();l.write(e);if(CKEDITOR.env.air)d.call(this,l.getWindow().$);},this);g.setCustomData('dialog',this);var h=this.getContentElement('general','editing_area'),i=h.getElement();i.setHtml('');i.append(g);if(CKEDITOR.env.ie){var j=CKEDITOR.dom.element.createFromHtml('<span tabindex="-1" style="position:absolute;" role="presentation"></span>');j.on('focus',function(){g.$.contentWindow.focus();});i.append(j);h.focus=function(){j.focus();this.fire('focus');};}h.getInputElement=function(){return g;};if(CKEDITOR.env.ie){i.setStyle('display','block');i.setStyle('height',g.$.offsetHeight+2+'px');}},onHide:function(){if(CKEDITOR.env.ie)this.getParentEditor().document.getBody().$.contentEditable='true';},onLoad:function(){if((CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&a.lang.dir=='rtl')this.parts.contents.setStyle('overflow','hidden');},onOk:function(){var e=this.getContentElement('general','editing_area').getElement(),f=e.getElementsByTag('iframe').getItem(0),g=this.getParentEditor(),h=f.$.contentWindow.document.body.innerHTML;
+setTimeout(function(){g.fire('paste',{html:h});},0);},contents:[{id:'general',label:a.lang.common.generalTab,elements:[{type:'html',id:'securityMsg',html:'<div style="white-space:normal;width:340px;">'+b.securityMsg+'</div>'},{type:'html',id:'pasteMsg',html:'<div style="white-space:normal;width:340px;">'+b.pasteMsg+'</div>'},{type:'html',id:'editing_area',style:'width: 100%; height: 100%;',html:'',focus:function(){var e=this.getInputElement().$.contentWindow;setTimeout(function(){e.focus();},500);}}]}]};});
diff --git a/modules_v2/ckeditor/plugins/colordialog/dialogs/colordialog.js b/modules_v2/ckeditor/plugins/colordialog/dialogs/colordialog.js new file mode 100644 index 0000000000..e5e04e590a --- /dev/null +++ b/modules_v2/ckeditor/plugins/colordialog/dialogs/colordialog.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('colordialog',function(a){var b=CKEDITOR.dom.element,c=CKEDITOR.document,d=CKEDITOR.tools,e=a.lang.colordialog,f,g={type:'html',html:' '};function h(){c.getById(x).removeStyle('background-color');f.getContentElement('picker','selectedColor').setValue('');};function i(z){if(!(z instanceof CKEDITOR.dom.event))z=new CKEDITOR.dom.event(z);var A=z.getTarget(),B;if(A.getName()=='a'&&(B=A.getChild(0).getHtml()))f.getContentElement('picker','selectedColor').setValue(B);};function j(z){if(!(z instanceof CKEDITOR.dom.event))z=z.data;var A=z.getTarget(),B;if(A.getName()=='a'&&(B=A.getChild(0).getHtml())){c.getById(v).setStyle('background-color',B);c.getById(w).setHtml(B);}};function k(){c.getById(v).removeStyle('background-color');c.getById(w).setHtml(' ');};var l=d.addFunction(k),m=i,n=CKEDITOR.tools.addFunction(m),o=j,p=k,q=CKEDITOR.tools.addFunction(function(z){z=new CKEDITOR.dom.event(z);var A=z.getTarget(),B,C,D=z.getKeystroke(),E=a.lang.dir=='rtl';switch(D){case 38:if(B=A.getParent().getParent().getPrevious()){C=B.getChild([A.getParent().getIndex(),0]);C.focus();p(z,A);o(z,C);}z.preventDefault();break;case 40:if(B=A.getParent().getParent().getNext()){C=B.getChild([A.getParent().getIndex(),0]);if(C&&C.type==1){C.focus();p(z,A);o(z,C);}}z.preventDefault();break;case 32:m(z);z.preventDefault();break;case E?37:39:if(B=A.getParent().getNext()){C=B.getChild(0);if(C.type==1){C.focus();p(z,A);o(z,C);z.preventDefault(true);}else p(null,A);}else if(B=A.getParent().getParent().getNext()){C=B.getChild([0,0]);if(C&&C.type==1){C.focus();p(z,A);o(z,C);z.preventDefault(true);}else p(null,A);}break;case E?39:37:if(B=A.getParent().getPrevious()){C=B.getChild(0);C.focus();p(z,A);o(z,C);z.preventDefault(true);}else if(B=A.getParent().getParent().getPrevious()){C=B.getLast().getChild(0);C.focus();p(z,A);o(z,C);z.preventDefault(true);}else p(null,A);break;default:return;}});function r(){var z=['00','33','66','99','cc','ff'];function A(F,G){for(var H=F;H<F+3;H++){var I=s.$.insertRow(-1);for(var J=G;J<G+3;J++)for(var K=0;K<6;K++)B(I,'#'+z[J]+z[K]+z[H]);}};function B(F,G){var H=new b(F.insertCell(-1));H.setAttribute('class','ColorCell');H.setStyle('background-color',G);H.setStyle('width','15px');H.setStyle('height','15px');var I=H.$.cellIndex+1+18*F.rowIndex;H.append(CKEDITOR.dom.element.createFromHtml('<a href="javascript: void(0);" role="option" aria-posinset="'+I+'"'+' aria-setsize="'+234+'"'+' style="cursor: pointer;display:block;width:100%;height:100% " title="'+CKEDITOR.tools.htmlEncode(G)+'"'+' onkeydown="CKEDITOR.tools.callFunction( '+q+', event, this )"'+' onclick="CKEDITOR.tools.callFunction('+n+', event, this ); return false;"'+' tabindex="-1"><span class="cke_voice_label">'+G+'</span> </a>',CKEDITOR.document));
+};A(0,0);A(3,0);A(0,3);A(3,3);var C=s.$.insertRow(-1);for(var D=0;D<6;D++)B(C,'#'+z[D]+z[D]+z[D]);for(var E=0;E<12;E++)B(C,'#000000');};var s=new b('table');r();var t=s.getHtml(),u=function(z){return CKEDITOR.tools.getNextId()+'_'+z;},v=u('hicolor'),w=u('hicolortext'),x=u('selhicolor'),y=u('color_table_label');return{title:e.title,minWidth:360,minHeight:220,onLoad:function(){f=this;},contents:[{id:'picker',label:e.title,accessKey:'I',elements:[{type:'hbox',padding:0,widths:['70%','10%','30%'],children:[{type:'html',html:'<table role="listbox" aria-labelledby="'+y+'" onmouseout="CKEDITOR.tools.callFunction( '+l+' );">'+(!CKEDITOR.env.webkit?t:'')+'</table><span id="'+y+'" class="cke_voice_label">'+e.options+'</span>',onLoad:function(){var z=CKEDITOR.document.getById(this.domId);z.on('mouseover',j);CKEDITOR.env.webkit&&z.setHtml(t);},focus:function(){var z=this.getElement().getElementsByTag('a').getItem(0);z.focus();}},g,{type:'vbox',padding:0,widths:['70%','5%','25%'],children:[{type:'html',html:'<span>'+e.highlight+'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+v+'" style="border: 1px solid; height: 74px; width: 74px;"></div>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+w+'"> </div><span>'+e.selected+'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+x+'" style="border: 1px solid; height: 20px; width: 74px;"></div>'},{type:'text',label:e.selected,labelStyle:'display:none',id:'selectedColor',style:'width: 74px',onChange:function(){try{c.getById(x).setStyle('background-color',this.getValue());}catch(z){h();}}},g,{type:'button',id:'clear',style:'margin-top: 5px',label:e.clear,onClick:h}]}]}]}]};});
diff --git a/modules_v2/ckeditor/plugins/dialog/dialogDefinition.js b/modules_v2/ckeditor/plugins/dialog/dialogDefinition.js new file mode 100644 index 0000000000..9e75e1acb6 --- /dev/null +++ b/modules_v2/ckeditor/plugins/dialog/dialogDefinition.js @@ -0,0 +1,4 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
diff --git a/modules_v2/ckeditor/plugins/div/dialogs/div.js b/modules_v2/ckeditor/plugins/div/dialogs/div.js new file mode 100644 index 0000000000..fabb64119f --- /dev/null +++ b/modules_v2/ckeditor/plugins/div/dialogs/div.js @@ -0,0 +1,8 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){function a(d,e,f){if(!e.is||!e.getCustomData('block_processed')){e.is&&CKEDITOR.dom.element.setMarker(f,e,'block_processed',true);d.push(e);}};function b(d){var e=[],f=d.getChildren();for(var g=0;g<f.count();g++){var h=f.getItem(g);if(!(h.type===CKEDITOR.NODE_TEXT&&/^[ \t\n\r]+$/.test(h.getText())))e.push(h);}return e;};function c(d,e){var f=(function(){var p=CKEDITOR.tools.extend({},CKEDITOR.dtd.$blockLimit);delete p.div;if(d.config.div_wrapTable){delete p.td;delete p.th;}return p;})(),g=CKEDITOR.dtd.div;function h(p){var q=new CKEDITOR.dom.elementPath(p).elements,r;for(var s=0;s<q.length;s++){if(q[s].getName() in f){r=q[s];break;}}return r;};function i(){this.foreach(function(p){if(/^(?!vbox|hbox)/.test(p.type)){if(!p.setup)p.setup=function(q){p.setValue(q.getAttribute(p.id)||'');};if(!p.commit)p.commit=function(q){var r=this.getValue();if('dir'==p.id&&q.getComputedStyle('direction')==r)return;if(r)q.setAttribute(p.id,r);else q.removeAttribute(p.id);};}});};function j(p){var q=[],r={},s=[],t,u=p.document.getSelection(),v=u.getRanges(),w=u.createBookmarks(),x,y,z=p.config.enterMode==CKEDITOR.ENTER_DIV?'div':'p';for(x=0;x<v.length;x++){y=v[x].createIterator();while(t=y.getNextParagraph()){if(t.getName() in f){var A,B=t.getChildren();for(A=0;A<B.count();A++)a(s,B.getItem(A),r);}else{while(!g[t.getName()]&&t.getName()!='body')t=t.getParent();a(s,t,r);}}}CKEDITOR.dom.element.clearAllMarkers(r);var C=l(s),D,E,F;for(x=0;x<C.length;x++){var G=C[x][0];D=G.getParent();for(A=1;A<C[x].length;A++)D=D.getCommonAncestor(C[x][A]);F=new CKEDITOR.dom.element('div',p.document);for(A=0;A<C[x].length;A++){G=C[x][A];while(!G.getParent().equals(D))G=G.getParent();C[x][A]=G;}var H=null;for(A=0;A<C[x].length;A++){G=C[x][A];if(!(G.getCustomData&&G.getCustomData('block_processed'))){G.is&&CKEDITOR.dom.element.setMarker(r,G,'block_processed',true);if(!A)F.insertBefore(G);F.append(G);}}CKEDITOR.dom.element.clearAllMarkers(r);q.push(F);}u.selectBookmarks(w);return q;};function k(p){var q=new CKEDITOR.dom.elementPath(p.getSelection().getStartElement()),r=q.blockLimit,s=r&&r.getAscendant('div',true);return s;};function l(p){var q=[],r=null,s,t;for(var u=0;u<p.length;u++){t=p[u];var v=h(t);if(!v.equals(r)){r=v;q.push([]);}q[q.length-1].push(t);}return q;};function m(p){var q=this.getDialog(),r=q._element&&q._element.clone()||new CKEDITOR.dom.element('div',d.document);this.commit(r,true);p=[].concat(p);var s=p.length,t;for(var u=0;u<s;u++){t=q.getContentElement.apply(q,p[u].split(':'));
+t&&t.setup&&t.setup(r,true);}};var n={},o=[];return{title:d.lang.div.title,minWidth:400,minHeight:165,contents:[{id:'info',label:d.lang.common.generalTab,title:d.lang.common.generalTab,elements:[{type:'hbox',widths:['50%','50%'],children:[{id:'elementStyle',type:'select',style:'width: 100%;',label:d.lang.div.styleSelectLabel,'default':'',items:[[d.lang.common.notSet,'']],onChange:function(){m.call(this,['info:class','advanced:dir','advanced:style']);},setup:function(p){for(var q in n)n[q].checkElementRemovable(p,true)&&this.setValue(q);},commit:function(p){var q;if(q=this.getValue()){var r=n[q],s=p.getCustomData('elementStyle')||'';r.applyToObject(p);p.setCustomData('elementStyle',s+r._.definition.attributes.style);}}},{id:'class',type:'text',label:d.lang.common.cssClass,'default':''}]}]},{id:'advanced',label:d.lang.common.advancedTab,title:d.lang.common.advancedTab,elements:[{type:'vbox',padding:1,children:[{type:'hbox',widths:['50%','50%'],children:[{type:'text',id:'id',label:d.lang.common.id,'default':''},{type:'text',id:'lang',label:d.lang.link.langCode,'default':''}]},{type:'hbox',children:[{type:'text',id:'style',style:'width: 100%;',label:d.lang.common.cssStyle,'default':'',commit:function(p){var q=this.getValue()+(p.getCustomData('elementStyle')||'');p.setAttribute('style',q);}}]},{type:'hbox',children:[{type:'text',id:'title',style:'width: 100%;',label:d.lang.common.advisoryTitle,'default':''}]},{type:'select',id:'dir',style:'width: 100%;',label:d.lang.common.langDir,'default':'',items:[[d.lang.common.notSet,''],[d.lang.common.langDirLtr,'ltr'],[d.lang.common.langDirRtl,'rtl']]}]}]}],onLoad:function(){i.call(this);var p=this,q=this.getContentElement('info','elementStyle');d.getStylesSet(function(r){var s;if(r)for(var t=0;t<r.length;t++){var u=r[t];if(u.element&&u.element=='div'){s=u.name;n[s]=new CKEDITOR.style(u);q.items.push([s,s]);q.add(s,s);}}q[q.items.length>1?'enable':'disable']();setTimeout(function(){q.setup(p._element);},0);});},onShow:function(){if(e=='editdiv'){var p=k(d);p&&this.setupContent(this._element=p);}},onOk:function(){if(e=='editdiv')o=[this._element];else o=j(d,true);var p=o.length;for(var q=0;q<p;q++){this.commitContent(o[q]);!o[q].getAttribute('style')&&o[q].removeAttribute('style');}this.hide();},onHide:function(){if(e=='editdiv')this._element.removeCustomData('elementStyle');delete this._element;}};};CKEDITOR.dialog.add('creatediv',function(d){return c(d,'creatediv');});CKEDITOR.dialog.add('editdiv',function(d){return c(d,'editdiv');
+});})();
diff --git a/modules_v2/ckeditor/plugins/find/dialogs/find.js b/modules_v2/ckeditor/plugins/find/dialogs/find.js new file mode 100644 index 0000000000..39765c926b --- /dev/null +++ b/modules_v2/ckeditor/plugins/find/dialogs/find.js @@ -0,0 +1,9 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a;function b(i){return i.type==CKEDITOR.NODE_TEXT&&i.getLength()>0&&(!a||!i.isReadOnly());};function c(i){return!(i.type==CKEDITOR.NODE_ELEMENT&&i.isBlockBoundary(CKEDITOR.tools.extend({},CKEDITOR.dtd.$empty,CKEDITOR.dtd.$nonEditable)));};var d=function(){var i=this;return{textNode:i.textNode,offset:i.offset,character:i.textNode?i.textNode.getText().charAt(i.offset):null,hitMatchBoundary:i._.matchBoundary};},e=['find','replace'],f=[['txtFindFind','txtFindReplace'],['txtFindCaseChk','txtReplaceCaseChk'],['txtFindWordChk','txtReplaceWordChk'],['txtFindCyclic','txtReplaceCyclic']];function g(i){var j,k,l,m;j=i==='find'?1:0;k=1-j;var n,o=f.length;for(n=0;n<o;n++){l=this.getContentElement(e[j],f[n][j]);m=this.getContentElement(e[k],f[n][k]);m.setValue(l.getValue());}};var h=function(i,j){var k=new CKEDITOR.style(CKEDITOR.tools.extend({fullMatch:true,childRule:function(){return 0;}},i.config.find_highlight)),l=function(y,z){var A=this,B=new CKEDITOR.dom.walker(y);B.guard=z?c:function(C){!c(C)&&(A._.matchBoundary=true);};B.evaluator=b;B.breakOnFalse=1;if(y.startContainer.type==CKEDITOR.NODE_TEXT){this.textNode=y.startContainer;this.offset=y.startOffset-1;}this._={matchWord:z,walker:B,matchBoundary:false};};l.prototype={next:function(){return this.move();},back:function(){return this.move(true);},move:function(y){var A=this;var z=A.textNode;if(z===null)return d.call(A);A._.matchBoundary=false;if(z&&y&&A.offset>0){A.offset--;return d.call(A);}else if(z&&A.offset<z.getLength()-1){A.offset++;return d.call(A);}else{z=null;while(!z){z=A._.walker[y?'previous':'next'].call(A._.walker);if(A._.matchWord&&!z||A._.walker._.end)break;}A.textNode=z;if(z)A.offset=y?z.getLength()-1:0;else A.offset=0;}return d.call(A);}};var m=function(y,z){this._={walker:y,cursors:[],rangeLength:z,highlightRange:null,isMatched:0};};m.prototype={toDomRange:function(){var y=new CKEDITOR.dom.range(i.document),z=this._.cursors;if(z.length<1){var A=this._.walker.textNode;if(A)y.setStartAfter(A);else return null;}else{var B=z[0],C=z[z.length-1];y.setStart(B.textNode,B.offset);y.setEnd(C.textNode,C.offset+1);}return y;},updateFromDomRange:function(y){var B=this;var z,A=new l(y);B._.cursors=[];do{z=A.next();if(z.character)B._.cursors.push(z);}while(z.character)B._.rangeLength=B._.cursors.length;},setMatched:function(){this._.isMatched=true;},clearMatched:function(){this._.isMatched=false;},isMatched:function(){return this._.isMatched;},highlight:function(){var B=this;if(B._.cursors.length<1)return;
+if(B._.highlightRange)B.removeHighlight();var y=B.toDomRange(),z=y.createBookmark();k.applyToRange(y);y.moveToBookmark(z);B._.highlightRange=y;var A=y.startContainer;if(A.type!=CKEDITOR.NODE_ELEMENT)A=A.getParent();A.scrollIntoView();B.updateFromDomRange(y);},removeHighlight:function(){var z=this;if(!z._.highlightRange)return;var y=z._.highlightRange.createBookmark();k.removeFromRange(z._.highlightRange);z._.highlightRange.moveToBookmark(y);z.updateFromDomRange(z._.highlightRange);z._.highlightRange=null;},isReadOnly:function(){if(!this._.highlightRange)return 0;return this._.highlightRange.startContainer.isReadOnly();},moveBack:function(){var A=this;var y=A._.walker.back(),z=A._.cursors;if(y.hitMatchBoundary)A._.cursors=z=[];z.unshift(y);if(z.length>A._.rangeLength)z.pop();return y;},moveNext:function(){var A=this;var y=A._.walker.next(),z=A._.cursors;if(y.hitMatchBoundary)A._.cursors=z=[];z.push(y);if(z.length>A._.rangeLength)z.shift();return y;},getEndCharacter:function(){var y=this._.cursors;if(y.length<1)return null;return y[y.length-1].character;},getNextCharacterRange:function(y){var z,A,B=this._.cursors;if((z=B[B.length-1])&&z.textNode)A=new l(n(z));else A=this._.walker;return new m(A,y);},getCursors:function(){return this._.cursors;}};function n(y,z){var A=new CKEDITOR.dom.range();A.setStart(y.textNode,z?y.offset:y.offset+1);A.setEndAt(i.document.getBody(),CKEDITOR.POSITION_BEFORE_END);return A;};function o(y){var z=new CKEDITOR.dom.range();z.setStartAt(i.document.getBody(),CKEDITOR.POSITION_AFTER_START);z.setEnd(y.textNode,y.offset);return z;};var p=0,q=1,r=2,s=function(y,z){var A=[-1];if(z)y=y.toLowerCase();for(var B=0;B<y.length;B++){A.push(A[B]+1);while(A[B+1]>0&&y.charAt(B)!=y.charAt(A[B+1]-1))A[B+1]=A[A[B+1]-1]+1;}this._={overlap:A,state:0,ignoreCase:!!z,pattern:y};};s.prototype={feedCharacter:function(y){var z=this;if(z._.ignoreCase)y=y.toLowerCase();for(;;){if(y==z._.pattern.charAt(z._.state)){z._.state++;if(z._.state==z._.pattern.length){z._.state=0;return r;}return q;}else if(!z._.state)return p;else z._.state=z._.overlap[z._.state];}return null;},reset:function(){this._.state=0;}};var t=/[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/,u=function(y){if(!y)return true;var z=y.charCodeAt(0);return z>=9&&z<=13||z>=8192&&z<=8202||t.test(y);},v={searchRange:null,matchRange:null,find:function(y,z,A,B,C,D){var M=this;if(!M.matchRange)M.matchRange=new m(new l(M.searchRange),y.length);else{M.matchRange.removeHighlight();M.matchRange=M.matchRange.getNextCharacterRange(y.length);
+}var E=new s(y,!z),F=p,G='%';while(G!==null){M.matchRange.moveNext();while(G=M.matchRange.getEndCharacter()){F=E.feedCharacter(G);if(F==r)break;if(M.matchRange.moveNext().hitMatchBoundary)E.reset();}if(F==r){if(A){var H=M.matchRange.getCursors(),I=H[H.length-1],J=H[0],K=new l(o(J),true),L=new l(n(I),true);if(!(u(K.back().character)&&u(L.next().character)))continue;}M.matchRange.setMatched();if(C!==false)M.matchRange.highlight();return true;}}M.matchRange.clearMatched();M.matchRange.removeHighlight();if(B&&!D){M.searchRange=w(1);M.matchRange=null;return arguments.callee.apply(M,Array.prototype.slice.call(arguments).concat([true]));}return false;},replaceCounter:0,replace:function(y,z,A,B,C,D,E){var J=this;a=1;var F=0;if(J.matchRange&&J.matchRange.isMatched()&&!J.matchRange._.isReplaced&&!J.matchRange.isReadOnly()){J.matchRange.removeHighlight();var G=J.matchRange.toDomRange(),H=i.document.createText(A);if(!E){var I=i.getSelection();I.selectRanges([G]);i.fire('saveSnapshot');}G.deleteContents();G.insertNode(H);if(!E){I.selectRanges([G]);i.fire('saveSnapshot');}J.matchRange.updateFromDomRange(G);if(!E)J.matchRange.highlight();J.matchRange._.isReplaced=true;J.replaceCounter++;F=1;}else F=J.find(z,B,C,D,!E);a=0;return F;}};function w(y){var z,A=i.getSelection(),B=i.document.getBody();if(A&&!y){z=A.getRanges()[0].clone();z.collapse(true);}else{z=new CKEDITOR.dom.range();z.setStartAt(B,CKEDITOR.POSITION_AFTER_START);}z.setEndAt(B,CKEDITOR.POSITION_BEFORE_END);return z;};var x=i.lang.findAndReplace;return{title:x.title,resizable:CKEDITOR.DIALOG_RESIZE_NONE,minWidth:350,minHeight:165,buttons:[CKEDITOR.dialog.cancelButton],contents:[{id:'find',label:x.find,title:x.find,accessKey:'',elements:[{type:'hbox',widths:['230px','90px'],children:[{type:'text',id:'txtFindFind',label:x.findWhat,isChanged:false,labelLayout:'horizontal',accessKey:'F'},{type:'button',align:'left',style:'width:100%',label:x.find,onClick:function(){var y=this.getDialog();if(!v.find(y.getValueOf('find','txtFindFind'),y.getValueOf('find','txtFindCaseChk'),y.getValueOf('find','txtFindWordChk'),y.getValueOf('find','txtFindCyclic')))alert(x.notFoundMsg);}}]},{type:'vbox',padding:0,children:[{type:'checkbox',id:'txtFindCaseChk',isChanged:false,style:'margin-top:28px',label:x.matchCase},{type:'checkbox',id:'txtFindWordChk',isChanged:false,label:x.matchWord},{type:'checkbox',id:'txtFindCyclic',isChanged:false,'default':true,label:x.matchCyclic}]}]},{id:'replace',label:x.replace,accessKey:'M',elements:[{type:'hbox',widths:['230px','90px'],children:[{type:'text',id:'txtFindReplace',label:x.findWhat,isChanged:false,labelLayout:'horizontal',accessKey:'F'},{type:'button',align:'left',style:'width:100%',label:x.replace,onClick:function(){var y=this.getDialog();
+if(!v.replace(y,y.getValueOf('replace','txtFindReplace'),y.getValueOf('replace','txtReplace'),y.getValueOf('replace','txtReplaceCaseChk'),y.getValueOf('replace','txtReplaceWordChk'),y.getValueOf('replace','txtReplaceCyclic')))alert(x.notFoundMsg);}}]},{type:'hbox',widths:['230px','90px'],children:[{type:'text',id:'txtReplace',label:x.replaceWith,isChanged:false,labelLayout:'horizontal',accessKey:'R'},{type:'button',align:'left',style:'width:100%',label:x.replaceAll,isChanged:false,onClick:function(){var y=this.getDialog(),z;v.replaceCounter=0;v.searchRange=w(1);if(v.matchRange){v.matchRange.removeHighlight();v.matchRange=null;}i.fire('saveSnapshot');while(v.replace(y,y.getValueOf('replace','txtFindReplace'),y.getValueOf('replace','txtReplace'),y.getValueOf('replace','txtReplaceCaseChk'),y.getValueOf('replace','txtReplaceWordChk'),false,true)){}if(v.replaceCounter){alert(x.replaceSuccessMsg.replace(/%1/,v.replaceCounter));i.fire('saveSnapshot');}else alert(x.notFoundMsg);}}]},{type:'vbox',padding:0,children:[{type:'checkbox',id:'txtReplaceCaseChk',isChanged:false,label:x.matchCase},{type:'checkbox',id:'txtReplaceWordChk',isChanged:false,label:x.matchWord},{type:'checkbox',id:'txtReplaceCyclic',isChanged:false,'default':true,label:x.matchCyclic}]}]}],onLoad:function(){var y=this,z,A,B=0;this.on('hide',function(){B=0;});this.on('show',function(){B=1;});this.selectPage=CKEDITOR.tools.override(this.selectPage,function(C){return function(D){C.call(y,D);var E=y._.tabs[D],F,G,H;G=D==='find'?'txtFindFind':'txtFindReplace';H=D==='find'?'txtFindWordChk':'txtReplaceWordChk';z=y.getContentElement(D,G);A=y.getContentElement(D,H);if(!E.initialized){F=CKEDITOR.document.getById(z._.inputId);E.initialized=true;}if(B)g.call(this,D);};});},onShow:function(){v.searchRange=w();this.selectPage(j);},onHide:function(){var y;if(v.matchRange&&v.matchRange.isMatched()){v.matchRange.removeHighlight();i.focus();y=v.matchRange.toDomRange();if(y)i.getSelection().selectRanges([y]);}delete v.matchRange;},onFocus:function(){if(j=='replace')return this.getContentElement('replace','txtFindReplace');else return this.getContentElement('find','txtFindFind');}};};CKEDITOR.dialog.add('find',function(i){return h(i,'find');});CKEDITOR.dialog.add('replace',function(i){return h(i,'replace');});})();
diff --git a/modules_v2/ckeditor/plugins/flash/dialogs/flash.js b/modules_v2/ckeditor/plugins/flash/dialogs/flash.js new file mode 100644 index 0000000000..2308e131fb --- /dev/null +++ b/modules_v2/ckeditor/plugins/flash/dialogs/flash.js @@ -0,0 +1,9 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a=1,b=2,c=4,d={id:[{type:a,name:'id'}],classid:[{type:a,name:'classid'}],codebase:[{type:a,name:'codebase'}],pluginspage:[{type:c,name:'pluginspage'}],src:[{type:b,name:'movie'},{type:c,name:'src'}],name:[{type:c,name:'name'}],align:[{type:a,name:'align'}],title:[{type:a,name:'title'},{type:c,name:'title'}],'class':[{type:a,name:'class'},{type:c,name:'class'}],width:[{type:a,name:'width'},{type:c,name:'width'}],height:[{type:a,name:'height'},{type:c,name:'height'}],hSpace:[{type:a,name:'hSpace'},{type:c,name:'hSpace'}],vSpace:[{type:a,name:'vSpace'},{type:c,name:'vSpace'}],style:[{type:a,name:'style'},{type:c,name:'style'}],type:[{type:c,name:'type'}]},e=['play','loop','menu','quality','scale','salign','wmode','bgcolor','base','flashvars','allowScriptAccess','allowFullScreen'];for(var f=0;f<e.length;f++)d[e[f]]=[{type:c,name:e[f]},{type:b,name:e[f]}];e=['allowFullScreen','play','loop','menu'];for(f=0;f<e.length;f++)d[e[f]][0]['default']=d[e[f]][1]['default']=true;function g(i,j,k){var q=this;var l=d[q.id];if(!l)return;var m=q instanceof CKEDITOR.ui.dialog.checkbox;for(var n=0;n<l.length;n++){var o=l[n];switch(o.type){case a:if(!i)continue;if(i.getAttribute(o.name)!==null){var p=i.getAttribute(o.name);if(m)q.setValue(p.toLowerCase()=='true');else q.setValue(p);return;}else if(m)q.setValue(!!o['default']);break;case b:if(!i)continue;if(o.name in k){p=k[o.name];if(m)q.setValue(p.toLowerCase()=='true');else q.setValue(p);return;}else if(m)q.setValue(!!o['default']);break;case c:if(!j)continue;if(j.getAttribute(o.name)){p=j.getAttribute(o.name);if(m)q.setValue(p.toLowerCase()=='true');else q.setValue(p);return;}else if(m)q.setValue(!!o['default']);}}};function h(i,j,k){var s=this;var l=d[s.id];if(!l)return;var m=s.getValue()==='',n=s instanceof CKEDITOR.ui.dialog.checkbox;for(var o=0;o<l.length;o++){var p=l[o];switch(p.type){case a:if(!i)continue;var q=s.getValue();if(m||n&&q===p['default'])i.removeAttribute(p.name);else i.setAttribute(p.name,q);break;case b:if(!i)continue;q=s.getValue();if(m||n&&q===p['default']){if(p.name in k)k[p.name].remove();}else if(p.name in k)k[p.name].setAttribute('value',q);else{var r=CKEDITOR.dom.element.createFromHtml('<cke:param></cke:param>',i.getDocument());r.setAttributes({name:p.name,value:q});if(i.getChildCount()<1)r.appendTo(i);else r.insertBefore(i.getFirst());}break;case c:if(!j)continue;q=s.getValue();if(m||n&&q===p['default'])j.removeAttribute(p.name);else j.setAttribute(p.name,q);}}};CKEDITOR.dialog.add('flash',function(i){var j=!i.config.flashEmbedTagOnly,k=i.config.flashAddEmbedTag||i.config.flashEmbedTagOnly,l,m='<div>'+CKEDITOR.tools.htmlEncode(i.lang.common.preview)+'<br>'+'<div id="cke_FlashPreviewLoader'+CKEDITOR.tools.getNextNumber()+'" style="display:none"><div class="loading"> </div></div>'+'<div id="cke_FlashPreviewBox'+CKEDITOR.tools.getNextNumber()+'" class="FlashPreviewBox"></div></div>';
+return{title:i.lang.flash.title,minWidth:420,minHeight:310,onShow:function(){var z=this;z.fakeImage=z.objectNode=z.embedNode=null;l=new CKEDITOR.dom.element('embed',i.document);var n=z.getSelectedElement();if(n&&n.data('cke-real-element-type')&&n.data('cke-real-element-type')=='flash'){z.fakeImage=n;var o=i.restoreRealElement(n),p=null,q=null,r={};if(o.getName()=='cke:object'){p=o;var s=p.getElementsByTag('embed','cke');if(s.count()>0)q=s.getItem(0);var t=p.getElementsByTag('param','cke');for(var u=0,v=t.count();u<v;u++){var w=t.getItem(u),x=w.getAttribute('name'),y=w.getAttribute('value');r[x]=y;}}else if(o.getName()=='cke:embed')q=o;z.objectNode=p;z.embedNode=q;z.setupContent(p,q,r,n);}},onOk:function(){var x=this;var n=null,o=null,p=null;if(!x.fakeImage){if(j){n=CKEDITOR.dom.element.createFromHtml('<cke:object></cke:object>',i.document);var q={classid:'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',codebase:'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'};n.setAttributes(q);}if(k){o=CKEDITOR.dom.element.createFromHtml('<cke:embed></cke:embed>',i.document);o.setAttributes({type:'application/x-shockwave-flash',pluginspage:'http://www.macromedia.com/go/getflashplayer'});if(n)o.appendTo(n);}}else{n=x.objectNode;o=x.embedNode;}if(n){p={};var r=n.getElementsByTag('param','cke');for(var s=0,t=r.count();s<t;s++)p[r.getItem(s).getAttribute('name')]=r.getItem(s);}var u={},v={};x.commitContent(n,o,p,u,v);var w=i.createFakeElement(n||o,'cke_flash','flash',true);w.setAttributes(v);w.setStyles(u);if(x.fakeImage){w.replace(x.fakeImage);i.getSelection().selectElement(w);}else i.insertElement(w);},onHide:function(){if(this.preview)this.preview.setHtml('');},contents:[{id:'info',label:i.lang.common.generalTab,accessKey:'I',elements:[{type:'vbox',padding:0,children:[{type:'hbox',widths:['280px','110px'],align:'right',children:[{id:'src',type:'text',label:i.lang.common.url,required:true,validate:CKEDITOR.dialog.validate.notEmpty(i.lang.flash.validateSrc),setup:g,commit:h,onLoad:function(){var n=this.getDialog(),o=function(p){l.setAttribute('src',p);n.preview.setHtml('<embed height="100%" width="100%" src="'+CKEDITOR.tools.htmlEncode(l.getAttribute('src'))+'" type="application/x-shockwave-flash"></embed>');};n.preview=n.getContentElement('info','preview').getElement().getChild(3);this.on('change',function(p){if(p.data&&p.data.value)o(p.data.value);});this.getInputElement().on('change',function(p){o(this.getValue());},this);}},{type:'button',id:'browse',filebrowser:'info:src',hidden:true,style:'display:inline-block;margin-top:10px;',label:i.lang.common.browseServer}]}]},{type:'hbox',widths:['25%','25%','25%','25%','25%'],children:[{type:'text',id:'width',style:'width:95px',label:i.lang.common.width,validate:CKEDITOR.dialog.validate.integer(i.lang.common.invalidWidth),setup:function(n,o,p,q){g.apply(this,arguments);
+if(q){var r=parseInt(q.$.style.width,10);if(!isNaN(r))this.setValue(r);}},commit:function(n,o,p,q){h.apply(this,arguments);if(this.getValue())q.width=this.getValue()+'px';}},{type:'text',id:'height',style:'width:95px',label:i.lang.common.height,validate:CKEDITOR.dialog.validate.integer(i.lang.common.invalidHeight),setup:function(n,o,p,q){g.apply(this,arguments);if(q){var r=parseInt(q.$.style.height,10);if(!isNaN(r))this.setValue(r);}},commit:function(n,o,p,q){h.apply(this,arguments);if(this.getValue())q.height=this.getValue()+'px';}},{type:'text',id:'hSpace',style:'width:95px',label:i.lang.flash.hSpace,validate:CKEDITOR.dialog.validate.integer(i.lang.flash.validateHSpace),setup:g,commit:h},{type:'text',id:'vSpace',style:'width:95px',label:i.lang.flash.vSpace,validate:CKEDITOR.dialog.validate.integer(i.lang.flash.validateVSpace),setup:g,commit:h}]},{type:'vbox',children:[{type:'html',id:'preview',style:'width:95%;',html:m}]}]},{id:'Upload',hidden:true,filebrowser:'uploadButton',label:i.lang.common.upload,elements:[{type:'file',id:'upload',label:i.lang.common.upload,size:38},{type:'fileButton',id:'uploadButton',label:i.lang.common.uploadSubmit,filebrowser:'info:src','for':['Upload','upload']}]},{id:'properties',label:i.lang.flash.propertiesTab,elements:[{type:'hbox',widths:['50%','50%'],children:[{id:'scale',type:'select',label:i.lang.flash.scale,'default':'',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.flash.scaleAll,'showall'],[i.lang.flash.scaleNoBorder,'noborder'],[i.lang.flash.scaleFit,'exactfit']],setup:g,commit:h},{id:'allowScriptAccess',type:'select',label:i.lang.flash.access,'default':'',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.flash.accessAlways,'always'],[i.lang.flash.accessSameDomain,'samedomain'],[i.lang.flash.accessNever,'never']],setup:g,commit:h}]},{type:'hbox',widths:['50%','50%'],children:[{id:'wmode',type:'select',label:i.lang.flash.windowMode,'default':'',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.flash.windowModeWindow,'window'],[i.lang.flash.windowModeOpaque,'opaque'],[i.lang.flash.windowModeTransparent,'transparent']],setup:g,commit:h},{id:'quality',type:'select',label:i.lang.flash.quality,'default':'high',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.flash.qualityBest,'best'],[i.lang.flash.qualityHigh,'high'],[i.lang.flash.qualityAutoHigh,'autohigh'],[i.lang.flash.qualityMedium,'medium'],[i.lang.flash.qualityAutoLow,'autolow'],[i.lang.flash.qualityLow,'low']],setup:g,commit:h}]},{type:'hbox',widths:['50%','50%'],children:[{id:'align',type:'select',label:i.lang.common.align,'default':'',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.common.alignLeft,'left'],[i.lang.flash.alignAbsBottom,'absBottom'],[i.lang.flash.alignAbsMiddle,'absMiddle'],[i.lang.flash.alignBaseline,'baseline'],[i.lang.common.alignBottom,'bottom'],[i.lang.common.alignMiddle,'middle'],[i.lang.common.alignRight,'right'],[i.lang.flash.alignTextTop,'textTop'],[i.lang.common.alignTop,'top']],setup:g,commit:function(n,o,p,q,r){var s=this.getValue();
+h.apply(this,arguments);s&&(r.align=s);}},{type:'html',html:'<div></div>'}]},{type:'fieldset',label:CKEDITOR.tools.htmlEncode(i.lang.flash.flashvars),children:[{type:'vbox',padding:0,children:[{type:'checkbox',id:'menu',label:i.lang.flash.chkMenu,'default':true,setup:g,commit:h},{type:'checkbox',id:'play',label:i.lang.flash.chkPlay,'default':true,setup:g,commit:h},{type:'checkbox',id:'loop',label:i.lang.flash.chkLoop,'default':true,setup:g,commit:h},{type:'checkbox',id:'allowFullScreen',label:i.lang.flash.chkFull,'default':true,setup:g,commit:h}]}]}]},{id:'advanced',label:i.lang.common.advancedTab,elements:[{type:'hbox',widths:['45%','55%'],children:[{type:'text',id:'id',label:i.lang.common.id,setup:g,commit:h},{type:'text',id:'title',label:i.lang.common.advisoryTitle,setup:g,commit:h}]},{type:'hbox',widths:['45%','55%'],children:[{type:'text',id:'bgcolor',label:i.lang.flash.bgcolor,setup:g,commit:h},{type:'text',id:'class',label:i.lang.common.cssClass,setup:g,commit:h}]},{type:'text',id:'style',label:i.lang.common.cssStyle,setup:g,commit:h}]}]};});})();
diff --git a/modules_v2/ckeditor/plugins/flash/images/placeholder.png b/modules_v2/ckeditor/plugins/flash/images/placeholder.png Binary files differnew file mode 100644 index 0000000000..0bc6caa7a6 --- /dev/null +++ b/modules_v2/ckeditor/plugins/flash/images/placeholder.png diff --git a/modules_v2/ckeditor/plugins/forms/dialogs/button.js b/modules_v2/ckeditor/plugins/forms/dialogs/button.js new file mode 100644 index 0000000000..d120102056 --- /dev/null +++ b/modules_v2/ckeditor/plugins/forms/dialogs/button.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('button',function(a){return{title:a.lang.button.title,minWidth:350,minHeight:150,onShow:function(){var d=this;delete d.button;var b=d.getParentEditor().getSelection().getSelectedElement();if(b&&b.is('input')){var c=b.getAttribute('type');if(c in {button:1,reset:1,submit:1}){d.button=b;d.setupContent(b);}}},onOk:function(){var b,c=this.button,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('input');}if(d)b.insertElement(c);this.commitContent({element:c});},contents:[{id:'info',label:a.lang.button.title,title:a.lang.button.title,elements:[{id:'_cke_saved_name',type:'text',label:a.lang.common.name,'default':'',setup:function(b){this.setValue(b.data('cke-saved-name')||b.getAttribute('name')||'');},commit:function(b){var c=b.element;if(this.getValue())c.data('cke-saved-name',this.getValue());else{c.data('cke-saved-name',false);c.removeAttribute('name');}}},{id:'value',type:'text',label:a.lang.button.text,accessKey:'V','default':'',setup:function(b){this.setValue(b.getAttribute('value')||'');},commit:function(b){var c=b.element;if(this.getValue())c.setAttribute('value',this.getValue());else c.removeAttribute('value');}},{id:'type',type:'select',label:a.lang.button.type,'default':'button',accessKey:'T',items:[[a.lang.button.typeBtn,'button'],[a.lang.button.typeSbm,'submit'],[a.lang.button.typeRst,'reset']],setup:function(b){this.setValue(b.getAttribute('type')||'');},commit:function(b){var c=b.element;if(CKEDITOR.env.ie){var d=c.getAttribute('type'),e=this.getValue();if(e!=d){var f=CKEDITOR.dom.element.createFromHtml('<input type="'+e+'"></input>',a.document);c.copyAttributes(f,{type:1});f.replace(c);a.getSelection().selectElement(f);b.element=f;}}else c.setAttribute('type',this.getValue());}}]}]};});
diff --git a/modules_v2/ckeditor/plugins/forms/dialogs/checkbox.js b/modules_v2/ckeditor/plugins/forms/dialogs/checkbox.js new file mode 100644 index 0000000000..cbbd2a92fc --- /dev/null +++ b/modules_v2/ckeditor/plugins/forms/dialogs/checkbox.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('checkbox',function(a){return{title:a.lang.checkboxAndRadio.checkboxTitle,minWidth:350,minHeight:140,onShow:function(){var c=this;delete c.checkbox;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getAttribute('type')=='checkbox'){c.checkbox=b;c.setupContent(b);}},onOk:function(){var b,c=this.checkbox,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('input');c.setAttribute('type','checkbox');b.insertElement(c);}this.commitContent({element:c});},contents:[{id:'info',label:a.lang.checkboxAndRadio.checkboxTitle,title:a.lang.checkboxAndRadio.checkboxTitle,startupFocus:'txtName',elements:[{id:'txtName',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.data('cke-saved-name')||b.getAttribute('name')||'');},commit:function(b){var c=b.element;if(this.getValue())c.data('cke-saved-name',this.getValue());else{c.data('cke-saved-name',false);c.removeAttribute('name');}}},{id:'txtValue',type:'text',label:a.lang.checkboxAndRadio.value,'default':'',accessKey:'V',setup:function(b){var c=b.getAttribute('value');this.setValue(CKEDITOR.env.ie&&c=='on'?'':c);},commit:function(b){var c=b.element,d=this.getValue();if(d&&!(CKEDITOR.env.ie&&d=='on'))c.setAttribute('value',d);else if(CKEDITOR.env.ie){var e=new CKEDITOR.dom.element('input',c.getDocument());c.copyAttributes(e,{value:1});e.replace(c);a.getSelection().selectElement(e);b.element=e;}else c.removeAttribute('value');}},{id:'cmbSelected',type:'checkbox',label:a.lang.checkboxAndRadio.selected,'default':'',accessKey:'S',value:'checked',setup:function(b){this.setValue(b.getAttribute('checked'));},commit:function(b){var c=b.element;if(CKEDITOR.env.ie){var d=!!c.getAttribute('checked'),e=!!this.getValue();if(d!=e){var f=CKEDITOR.dom.element.createFromHtml('<input type="checkbox"'+(e?' checked="checked"':'')+'/>',a.document);c.copyAttributes(f,{type:1,checked:1});f.replace(c);a.getSelection().selectElement(f);b.element=f;}}else{var g=this.getValue();if(g)c.setAttribute('checked','checked');else c.removeAttribute('checked');}}}]}]};});
diff --git a/modules_v2/ckeditor/plugins/forms/dialogs/form.js b/modules_v2/ckeditor/plugins/forms/dialogs/form.js new file mode 100644 index 0000000000..91c2c50abd --- /dev/null +++ b/modules_v2/ckeditor/plugins/forms/dialogs/form.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('form',function(a){var b={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.form.title,minWidth:350,minHeight:200,onShow:function(){var e=this;delete e.form;var c=e.getParentEditor().getSelection().getStartElement(),d=c&&c.getAscendant('form',true);if(d){e.form=d;e.setupContent(d);}},onOk:function(){var c,d=this.form,e=!d;if(e){c=this.getParentEditor();d=c.document.createElement('form');d.append(c.document.createElement('br'));}if(e)c.insertElement(d);this.commitContent(d);},onLoad:function(){function c(e){this.setValue(e.getAttribute(this.id)||'');};function d(e){var f=this;if(f.getValue())e.setAttribute(f.id,f.getValue());else e.removeAttribute(f.id);};this.foreach(function(e){if(b[e.id]){e.setup=c;e.commit=d;}});},contents:[{id:'info',label:a.lang.form.title,title:a.lang.form.title,elements:[{id:'txtName',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(c){this.setValue(c.data('cke-saved-name')||c.getAttribute('name')||'');},commit:function(c){if(this.getValue())c.data('cke-saved-name',this.getValue());else{c.data('cke-saved-name',false);c.removeAttribute('name');}}},{id:'action',type:'text',label:a.lang.form.action,'default':'',accessKey:'T'},{type:'hbox',widths:['45%','55%'],children:[{id:'id',type:'text',label:a.lang.common.id,'default':'',accessKey:'I'},{id:'enctype',type:'select',label:a.lang.form.encoding,style:'width:100%',accessKey:'E','default':'',items:[[''],['text/plain'],['multipart/form-data'],['application/x-www-form-urlencoded']]}]},{type:'hbox',widths:['45%','55%'],children:[{id:'target',type:'select',label:a.lang.common.target,style:'width:100%',accessKey:'M','default':'',items:[[a.lang.common.notSet,''],[a.lang.common.targetNew,'_blank'],[a.lang.common.targetTop,'_top'],[a.lang.common.targetSelf,'_self'],[a.lang.common.targetParent,'_parent']]},{id:'method',type:'select',label:a.lang.form.method,accessKey:'M','default':'GET',items:[['GET','get'],['POST','post']]}]}]}]};});
diff --git a/modules_v2/ckeditor/plugins/forms/dialogs/hiddenfield.js b/modules_v2/ckeditor/plugins/forms/dialogs/hiddenfield.js new file mode 100644 index 0000000000..5313483fcc --- /dev/null +++ b/modules_v2/ckeditor/plugins/forms/dialogs/hiddenfield.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('hiddenfield',function(a){return{title:a.lang.hidden.title,hiddenField:null,minWidth:350,minHeight:110,onShow:function(){var e=this;delete e.hiddenField;var b=e.getParentEditor(),c=b.getSelection(),d=c.getSelectedElement();if(d&&d.data('cke-real-element-type')&&d.data('cke-real-element-type')=='hiddenfield'){e.hiddenField=d;d=b.restoreRealElement(e.hiddenField);e.setupContent(d);c.selectElement(e.hiddenField);}},onOk:function(){var g=this;var b=g.getValueOf('info','_cke_saved_name'),c=g.getValueOf('info','value'),d=g.getParentEditor(),e=CKEDITOR.env.ie?d.document.createElement('<input name="'+CKEDITOR.tools.htmlEncode(b)+'">'):d.document.createElement('input');e.setAttribute('type','hidden');g.commitContent(e);var f=d.createFakeElement(e,'cke_hidden','hiddenfield');if(!g.hiddenField)d.insertElement(f);else{f.replace(g.hiddenField);d.getSelection().selectElement(f);}return true;},contents:[{id:'info',label:a.lang.hidden.title,title:a.lang.hidden.title,elements:[{id:'_cke_saved_name',type:'text',label:a.lang.hidden.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.data('cke-saved-name')||b.getAttribute('name')||'');},commit:function(b){if(this.getValue())b.setAttribute('name',this.getValue());else b.removeAttribute('name');}},{id:'value',type:'text',label:a.lang.hidden.value,'default':'',accessKey:'V',setup:function(b){this.setValue(b.getAttribute('value')||'');},commit:function(b){if(this.getValue())b.setAttribute('value',this.getValue());else b.removeAttribute('value');}}]}]};});
diff --git a/modules_v2/ckeditor/plugins/forms/dialogs/radio.js b/modules_v2/ckeditor/plugins/forms/dialogs/radio.js new file mode 100644 index 0000000000..57441dce8d --- /dev/null +++ b/modules_v2/ckeditor/plugins/forms/dialogs/radio.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('radio',function(a){return{title:a.lang.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){var c=this;delete c.radioButton;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getName()=='input'&&b.getAttribute('type')=='radio'){c.radioButton=b;c.setupContent(b);}},onOk:function(){var b,c=this.radioButton,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('input');c.setAttribute('type','radio');}if(d)b.insertElement(c);this.commitContent({element:c});},contents:[{id:'info',label:a.lang.checkboxAndRadio.radioTitle,title:a.lang.checkboxAndRadio.radioTitle,elements:[{id:'name',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.data('cke-saved-name')||b.getAttribute('name')||'');},commit:function(b){var c=b.element;if(this.getValue())c.data('cke-saved-name',this.getValue());else{c.data('cke-saved-name',false);c.removeAttribute('name');}}},{id:'value',type:'text',label:a.lang.checkboxAndRadio.value,'default':'',accessKey:'V',setup:function(b){this.setValue(b.getAttribute('value')||'');},commit:function(b){var c=b.element;if(this.getValue())c.setAttribute('value',this.getValue());else c.removeAttribute('value');}},{id:'checked',type:'checkbox',label:a.lang.checkboxAndRadio.selected,'default':'',accessKey:'S',value:'checked',setup:function(b){this.setValue(b.getAttribute('checked'));},commit:function(b){var c=b.element;if(!CKEDITOR.env.ie){if(this.getValue())c.setAttribute('checked','checked');else c.removeAttribute('checked');}else{var d=c.getAttribute('checked'),e=!!this.getValue();if(d!=e){var f=CKEDITOR.dom.element.createFromHtml('<input type="radio"'+(e?' checked="checked"':'')+'></input>',a.document);c.copyAttributes(f,{type:1,checked:1});f.replace(c);a.getSelection().selectElement(f);b.element=f;}}}}]}]};});
diff --git a/modules_v2/ckeditor/plugins/forms/dialogs/select.js b/modules_v2/ckeditor/plugins/forms/dialogs/select.js new file mode 100644 index 0000000000..2be4158f6a --- /dev/null +++ b/modules_v2/ckeditor/plugins/forms/dialogs/select.js @@ -0,0 +1,9 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('select',function(a){function b(k,l,m,n,o){k=j(k);var p;if(n)p=n.createElement('OPTION');else p=document.createElement('OPTION');if(k&&p&&p.getName()=='option'){if(CKEDITOR.env.ie){if(!isNaN(parseInt(o,10)))k.$.options.add(p.$,o);else k.$.options.add(p.$);p.$.innerHTML=l.length>0?l:'';p.$.value=m;}else{if(o!==null&&o<k.getChildCount())k.getChild(o<0?0:o).insertBeforeMe(p);else k.append(p);p.setText(l.length>0?l:'');p.setValue(m);}}else return false;return p;};function c(k){k=j(k);var l=g(k);for(var m=k.getChildren().count()-1;m>=0;m--){if(k.getChild(m).$.selected)k.getChild(m).remove();}h(k,l);};function d(k,l,m,n){k=j(k);if(l<0)return false;var o=k.getChild(l);o.setText(m);o.setValue(n);return o;};function e(k){k=j(k);while(k.getChild(0)&&k.getChild(0).remove()){}};function f(k,l,m){k=j(k);var n=g(k);if(n<0)return false;var o=n+l;o=o<0?0:o;o=o>=k.getChildCount()?k.getChildCount()-1:o;if(n==o)return false;var p=k.getChild(n),q=p.getText(),r=p.getValue();p.remove();p=b(k,q,r,!m?null:m,o);h(k,o);return p;};function g(k){k=j(k);return k?k.$.selectedIndex:-1;};function h(k,l){k=j(k);if(l<0)return null;var m=k.getChildren().count();k.$.selectedIndex=l>=m?m-1:l;return k;};function i(k){k=j(k);return k?k.getChildren():false;};function j(k){if(k&&k.domId&&k.getInputElement().$)return k.getInputElement();else if(k&&k.$)return k;return false;};return{title:a.lang.select.title,minWidth:CKEDITOR.env.ie?460:395,minHeight:CKEDITOR.env.ie?320:300,onShow:function(){var n=this;delete n.selectBox;n.setupContent('clear');var k=n.getParentEditor().getSelection().getSelectedElement();if(k&&k.getName()=='select'){n.selectBox=k;n.setupContent(k.getName(),k);var l=i(k);for(var m=0;m<l.count();m++)n.setupContent('option',l.getItem(m));}},onOk:function(){var k=this.getParentEditor(),l=this.selectBox,m=!l;if(m)l=k.document.createElement('select');this.commitContent(l);if(m){k.insertElement(l);if(CKEDITOR.env.ie){var n=k.getSelection(),o=n.createBookmarks();setTimeout(function(){n.selectBookmarks(o);},0);}}},contents:[{id:'info',label:a.lang.select.selectInfo,title:a.lang.select.selectInfo,accessKey:'',elements:[{id:'txtName',type:'text',widths:['25%','75%'],labelLayout:'horizontal',label:a.lang.common.name,'default':'',accessKey:'N',align:'center',style:'width:350px',setup:function(k,l){if(k=='clear')this.setValue(this['default']||'');else if(k=='select')this.setValue(l.data('cke-saved-name')||l.getAttribute('name')||'');},commit:function(k){if(this.getValue())k.data('cke-saved-name',this.getValue());
+else{k.data('cke-saved-name',false);k.removeAttribute('name');}}},{id:'txtValue',type:'text',widths:['25%','75%'],labelLayout:'horizontal',label:a.lang.select.value,style:'width:350px','default':'',className:'cke_disabled',onLoad:function(){this.getInputElement().setAttribute('readOnly',true);},setup:function(k,l){if(k=='clear')this.setValue('');else if(k=='option'&&l.getAttribute('selected'))this.setValue(l.$.value);}},{type:'hbox',widths:['175px','170px'],align:'center',children:[{id:'txtSize',type:'text',align:'center',labelLayout:'horizontal',label:a.lang.select.size,'default':'',accessKey:'S',style:'width:175px',validate:function(){var k=CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed);return this.getValue()===''||k.apply(this);},setup:function(k,l){if(k=='select')this.setValue(l.getAttribute('size')||'');if(CKEDITOR.env.webkit)this.getInputElement().setStyle('width','86px');},commit:function(k){if(this.getValue())k.setAttribute('size',this.getValue());else k.removeAttribute('size');}},{type:'html',html:'<span>'+CKEDITOR.tools.htmlEncode(a.lang.select.lines)+'</span>'}]},{type:'html',html:'<span>'+CKEDITOR.tools.htmlEncode(a.lang.select.opAvail)+'</span>'},{type:'hbox',widths:['115px','115px','100px'],align:'top',children:[{type:'vbox',children:[{id:'txtOptName',type:'text',label:a.lang.select.opText,style:'width:115px',setup:function(k,l){if(k=='clear')this.setValue('');}},{type:'select',id:'cmbName',label:'',title:'',size:5,style:'width:115px;height:75px',items:[],onChange:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbValue'),m=k.getContentElement('info','txtOptName'),n=k.getContentElement('info','txtOptValue'),o=g(this);h(l,o);m.setValue(this.getValue());n.setValue(l.getValue());},setup:function(k,l){if(k=='clear')e(this);else if(k=='option')b(this,l.getText(),l.getText(),this.getDialog().getParentEditor().document);},commit:function(k){var l=this.getDialog(),m=i(this),n=i(l.getContentElement('info','cmbValue')),o=l.getContentElement('info','txtValue').getValue();e(k);for(var p=0;p<m.count();p++){var q=b(k,m.getItem(p).getValue(),n.getItem(p).getValue(),l.getParentEditor().document);if(n.getItem(p).getValue()==o){q.setAttribute('selected','selected');q.selected=true;}}}}]},{type:'vbox',children:[{id:'txtOptValue',type:'text',label:a.lang.select.opValue,style:'width:115px',setup:function(k,l){if(k=='clear')this.setValue('');}},{type:'select',id:'cmbValue',label:'',size:5,style:'width:115px;height:75px',items:[],onChange:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','txtOptName'),n=k.getContentElement('info','txtOptValue'),o=g(this);
+h(l,o);m.setValue(l.getValue());n.setValue(this.getValue());},setup:function(k,l){var n=this;if(k=='clear')e(n);else if(k=='option'){var m=l.getValue();b(n,m,m,n.getDialog().getParentEditor().document);if(l.getAttribute('selected')=='selected')n.getDialog().getContentElement('info','txtValue').setValue(m);}}}]},{type:'vbox',padding:5,children:[{type:'button',style:'',label:a.lang.select.btnAdd,title:a.lang.select.btnAdd,style:'width:100%;',onClick:function(){var k=this.getDialog(),l=k.getParentEditor(),m=k.getContentElement('info','txtOptName'),n=k.getContentElement('info','txtOptValue'),o=k.getContentElement('info','cmbName'),p=k.getContentElement('info','cmbValue');b(o,m.getValue(),m.getValue(),k.getParentEditor().document);b(p,n.getValue(),n.getValue(),k.getParentEditor().document);m.setValue('');n.setValue('');}},{type:'button',label:a.lang.select.btnModify,title:a.lang.select.btnModify,style:'width:100%;',onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','txtOptName'),m=k.getContentElement('info','txtOptValue'),n=k.getContentElement('info','cmbName'),o=k.getContentElement('info','cmbValue'),p=g(n);if(p>=0){d(n,p,l.getValue(),l.getValue());d(o,p,m.getValue(),m.getValue());}}},{type:'button',style:'width:100%;',label:a.lang.select.btnUp,title:a.lang.select.btnUp,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','cmbValue');f(l,-1,k.getParentEditor().document);f(m,-1,k.getParentEditor().document);}},{type:'button',style:'width:100%;',label:a.lang.select.btnDown,title:a.lang.select.btnDown,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','cmbValue');f(l,1,k.getParentEditor().document);f(m,1,k.getParentEditor().document);}}]}]},{type:'hbox',widths:['40%','20%','40%'],children:[{type:'button',label:a.lang.select.btnSetValue,title:a.lang.select.btnSetValue,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbValue'),m=k.getContentElement('info','txtValue');m.setValue(l.getValue());}},{type:'button',label:a.lang.select.btnDelete,title:a.lang.select.btnDelete,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','cmbValue'),n=k.getContentElement('info','txtOptName'),o=k.getContentElement('info','txtOptValue');c(l);c(m);n.setValue('');o.setValue('');}},{id:'chkMulti',type:'checkbox',label:a.lang.select.chkMulti,'default':'',accessKey:'M',value:'checked',setup:function(k,l){if(k=='select')this.setValue(l.getAttribute('multiple'));
+if(CKEDITOR.env.webkit)this.getElement().getParent().setStyle('vertical-align','middle');},commit:function(k){if(this.getValue())k.setAttribute('multiple',this.getValue());else k.removeAttribute('multiple');}}]}]}]};});
diff --git a/modules_v2/ckeditor/plugins/forms/dialogs/textarea.js b/modules_v2/ckeditor/plugins/forms/dialogs/textarea.js new file mode 100644 index 0000000000..f91ab83d68 --- /dev/null +++ b/modules_v2/ckeditor/plugins/forms/dialogs/textarea.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('textarea',function(a){return{title:a.lang.textarea.title,minWidth:350,minHeight:150,onShow:function(){var c=this;delete c.textarea;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getName()=='textarea'){c.textarea=b;c.setupContent(b);}},onOk:function(){var b,c=this.textarea,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('textarea');}this.commitContent(c);if(d)b.insertElement(c);},contents:[{id:'info',label:a.lang.textarea.title,title:a.lang.textarea.title,elements:[{id:'_cke_saved_name',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.data('cke-saved-name')||b.getAttribute('name')||'');},commit:function(b){if(this.getValue())b.data('cke-saved-name',this.getValue());else{b.data('cke-saved-name',false);b.removeAttribute('name');}}},{id:'cols',type:'text',label:a.lang.textarea.cols,'default':'',accessKey:'C',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed),setup:function(b){var c=b.hasAttribute('cols')&&b.getAttribute('cols');this.setValue(c||'');},commit:function(b){if(this.getValue())b.setAttribute('cols',this.getValue());else b.removeAttribute('cols');}},{id:'rows',type:'text',label:a.lang.textarea.rows,'default':'',accessKey:'R',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed),setup:function(b){var c=b.hasAttribute('rows')&&b.getAttribute('rows');this.setValue(c||'');},commit:function(b){if(this.getValue())b.setAttribute('rows',this.getValue());else b.removeAttribute('rows');}}]}]};});
diff --git a/modules_v2/ckeditor/plugins/forms/dialogs/textfield.js b/modules_v2/ckeditor/plugins/forms/dialogs/textfield.js new file mode 100644 index 0000000000..88254e9217 --- /dev/null +++ b/modules_v2/ckeditor/plugins/forms/dialogs/textfield.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('textfield',function(a){var b={value:1,size:1,maxLength:1},c={text:1,password:1};return{title:a.lang.textfield.title,minWidth:350,minHeight:150,onShow:function(){var e=this;delete e.textField;var d=e.getParentEditor().getSelection().getSelectedElement();if(d&&d.getName()=='input'&&(c[d.getAttribute('type')]||!d.getAttribute('type'))){e.textField=d;e.setupContent(d);}},onOk:function(){var d,e=this.textField,f=!e;if(f){d=this.getParentEditor();e=d.document.createElement('input');e.setAttribute('type','text');}if(f)d.insertElement(e);this.commitContent({element:e});},onLoad:function(){var d=function(f){var g=f.hasAttribute(this.id)&&f.getAttribute(this.id);this.setValue(g||'');},e=function(f){var g=f.element,h=this.getValue();if(h)g.setAttribute(this.id,h);else g.removeAttribute(this.id);};this.foreach(function(f){if(b[f.id]){f.setup=d;f.commit=e;}});},contents:[{id:'info',label:a.lang.textfield.title,title:a.lang.textfield.title,elements:[{type:'hbox',widths:['50%','50%'],children:[{id:'_cke_saved_name',type:'text',label:a.lang.textfield.name,'default':'',accessKey:'N',setup:function(d){this.setValue(d.data('cke-saved-name')||d.getAttribute('name')||'');},commit:function(d){var e=d.element;if(this.getValue())e.data('cke-saved-name',this.getValue());else{e.data('cke-saved-name',false);e.removeAttribute('name');}}},{id:'value',type:'text',label:a.lang.textfield.value,'default':'',accessKey:'V'}]},{type:'hbox',widths:['50%','50%'],children:[{id:'size',type:'text',label:a.lang.textfield.charWidth,'default':'',accessKey:'C',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed)},{id:'maxLength',type:'text',label:a.lang.textfield.maxChars,'default':'',accessKey:'M',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed)}],onLoad:function(){if(CKEDITOR.env.ie7Compat)this.getElement().setStyle('zoom','100%');}},{id:'type',type:'select',label:a.lang.textfield.type,'default':'text',accessKey:'M',items:[[a.lang.textfield.typeText,'text'],[a.lang.textfield.typePass,'password']],setup:function(d){this.setValue(d.getAttribute('type'));},commit:function(d){var e=d.element;if(CKEDITOR.env.ie){var f=e.getAttribute('type'),g=this.getValue();if(f!=g){var h=CKEDITOR.dom.element.createFromHtml('<input type="'+g+'"></input>',a.document);e.copyAttributes(h,{type:1});h.replace(e);a.getSelection().selectElement(h);d.element=h;}}else e.setAttribute('type',this.getValue());}}]}]};});
diff --git a/modules_v2/ckeditor/plugins/forms/images/hiddenfield.gif b/modules_v2/ckeditor/plugins/forms/images/hiddenfield.gif Binary files differnew file mode 100644 index 0000000000..953f643b60 --- /dev/null +++ b/modules_v2/ckeditor/plugins/forms/images/hiddenfield.gif diff --git a/modules_v2/ckeditor/plugins/iframe/dialogs/iframe.js b/modules_v2/ckeditor/plugins/iframe/dialogs/iframe.js new file mode 100644 index 0000000000..1783ae5245 --- /dev/null +++ b/modules_v2/ckeditor/plugins/iframe/dialogs/iframe.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a={scrolling:{'true':'yes','false':'no'},frameborder:{'true':'1','false':'0'}};function b(d){var g=this;var e=g instanceof CKEDITOR.ui.dialog.checkbox;if(d.hasAttribute(g.id)){var f=d.getAttribute(g.id);if(e)g.setValue(a[g.id]['true']==f.toLowerCase());else g.setValue(f);}};function c(d){var h=this;var e=h.getValue()==='',f=h instanceof CKEDITOR.ui.dialog.checkbox,g=h.getValue();if(e)d.removeAttribute(h.att||h.id);else if(f)d.setAttribute(h.id,a[h.id][g]);else d.setAttribute(h.att||h.id,g);};CKEDITOR.dialog.add('iframe',function(d){var e=d.lang.iframe,f=d.lang.common,g=d.plugins.dialogadvtab;return{title:e.title,minWidth:350,minHeight:260,onShow:function(){var j=this;j.fakeImage=j.iframeNode=null;var h=j.getSelectedElement();if(h&&h.data('cke-real-element-type')&&h.data('cke-real-element-type')=='iframe'){j.fakeImage=h;var i=d.restoreRealElement(h);j.iframeNode=i;j.setupContent(i,h);}},onOk:function(){var l=this;var h;if(!l.fakeImage)h=new CKEDITOR.dom.element('iframe');else h=l.iframeNode;var i={},j={};l.commitContent(h,i,j);var k=d.createFakeElement(h,'cke_iframe','iframe',true);k.setAttributes(j);k.setStyles(i);if(l.fakeImage){k.replace(l.fakeImage);d.getSelection().selectElement(k);}else d.insertElement(k);},contents:[{id:'info',label:f.generalTab,accessKey:'I',elements:[{type:'vbox',padding:0,children:[{id:'src',type:'text',label:f.url,required:true,validate:CKEDITOR.dialog.validate.notEmpty(e.noUrl),setup:b,commit:c}]},{type:'hbox',children:[{id:'width',type:'text',style:'width:100%',labelLayout:'vertical',label:f.width,validate:CKEDITOR.dialog.validate.integer(f.invalidWidth),setup:function(h,i){b.apply(this,arguments);if(i){var j=parseInt(i.$.style.width,10);if(!isNaN(j))this.setValue(j);}},commit:function(h,i){c.apply(this,arguments);if(this.getValue())i.width=this.getValue()+'px';}},{id:'height',type:'text',style:'width:100%',labelLayout:'vertical',label:f.height,validate:CKEDITOR.dialog.validate.integer(f.invalidHeight),setup:function(h,i){b.apply(this,arguments);if(i){var j=parseInt(i.$.style.height,10);if(!isNaN(j))this.setValue(j);}},commit:function(h,i){c.apply(this,arguments);if(this.getValue())i.height=this.getValue()+'px';}},{id:'align',type:'select','default':'',items:[[f.notSet,''],[f.alignLeft,'left'],[f.alignRight,'right'],[f.alignTop,'top'],[f.alignMiddle,'middle'],[f.alignBottom,'bottom']],style:'width:100%',labelLayout:'vertical',label:f.align,setup:function(h,i){b.apply(this,arguments);if(i){var j=i.getAttribute('align');
+this.setValue(j&&j.toLowerCase()||'');}},commit:function(h,i,j){c.apply(this,arguments);if(this.getValue())j.align=this.getValue();}}]},{type:'hbox',widths:['50%','50%'],children:[{id:'scrolling',type:'checkbox',label:e.scrolling,setup:b,commit:c},{id:'frameborder',type:'checkbox',label:e.border,setup:b,commit:c}]},{type:'hbox',widths:['50%','50%'],children:[{id:'name',type:'text',label:f.name,setup:b,commit:c},{id:'title',type:'text',label:f.advisoryTitle,setup:b,commit:c}]},{id:'longdesc',type:'text',label:f.longDescr,setup:b,commit:c}]},g&&g.createAdvancedTab(d,{id:1,classes:1,styles:1})]};});})();
diff --git a/modules_v2/ckeditor/plugins/iframe/images/placeholder.png b/modules_v2/ckeditor/plugins/iframe/images/placeholder.png Binary files differnew file mode 100644 index 0000000000..95be004dd0 --- /dev/null +++ b/modules_v2/ckeditor/plugins/iframe/images/placeholder.png diff --git a/modules_v2/ckeditor/plugins/iframedialog/plugin.js b/modules_v2/ckeditor/plugins/iframedialog/plugin.js new file mode 100644 index 0000000000..c54702ea2d --- /dev/null +++ b/modules_v2/ckeditor/plugins/iframedialog/plugin.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.add('iframedialog',{requires:['dialog'],onLoad:function(){CKEDITOR.dialog.addIframe=function(a,b,c,d,e,f){var g={type:'iframe',src:c,width:'100%',height:'100%'};if(typeof f=='function')g.onContentLoad=f;var h={title:b,minWidth:d,minHeight:e,contents:[{id:'iframe',label:b,expand:true,elements:[g]}]};return this.add(a,function(){return h;});};(function(){var a=function(b,c,d){if(arguments.length<3)return;var e=this._||(this._={}),f=c.onContentLoad&&CKEDITOR.tools.bind(c.onContentLoad,this),g=CKEDITOR.tools.cssLength(c.width),h=CKEDITOR.tools.cssLength(c.height);e.frameId=CKEDITOR.tools.getNextId()+'_iframe';b.on('load',function(){var k=CKEDITOR.document.getById(e.frameId),l=k.getParent();l.setStyles({width:g,height:h});});var i={src:'%2',id:e.frameId,frameborder:0,allowtransparency:true},j=[];if(typeof c.onContentLoad=='function')i.onload='CKEDITOR.tools.callFunction(%1);';CKEDITOR.ui.dialog.uiElement.call(this,b,c,j,'iframe',{width:g,height:h},i,'');d.push('<div style="width:'+g+';height:'+h+';" id="'+this.domId+'"></div>');j=j.join('');b.on('show',function(){var k=CKEDITOR.document.getById(e.frameId),l=k.getParent(),m=CKEDITOR.tools.addFunction(f),n=j.replace('%1',m).replace('%2',CKEDITOR.tools.htmlEncode(c.src));l.setHtml(n);});};a.prototype=new CKEDITOR.ui.dialog.uiElement();CKEDITOR.dialog.addUIElement('iframe',{build:function(b,c,d){return new a(b,c,d);}});})();}});
diff --git a/modules_v2/ckeditor/plugins/image/dialogs/image.js b/modules_v2/ckeditor/plugins/image/dialogs/image.js new file mode 100644 index 0000000000..27b87ebf84 --- /dev/null +++ b/modules_v2/ckeditor/plugins/image/dialogs/image.js @@ -0,0 +1,13 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a=function(b,c){var d=1,e=2,f=4,g=8,h=/^\s*(\d+)((px)|\%)?\s*$/i,i=/(^\s*(\d+)((px)|\%)?\s*$)|^$/i,j=/^\d+px$/,k=function(){var C=this.getValue(),D=this.getDialog(),E=C.match(h);if(E){if(E[2]=='%')p(D,false);C=E[1];}if(D.lockRatio){var F=D.originalElement;if(F.getCustomData('isReady')=='true')if(this.id=='txtHeight'){if(C&&C!='0')C=Math.round(F.$.width*(C/F.$.height));if(!isNaN(C))D.setValueOf('info','txtWidth',C);}else{if(C&&C!='0')C=Math.round(F.$.height*(C/F.$.width));if(!isNaN(C))D.setValueOf('info','txtHeight',C);}}l(D);},l=function(C){if(!C.originalElement||!C.preview)return 1;C.commitContent(f,C.preview);return 0;};function m(){var C=arguments,D=this.getContentElement('advanced','txtdlgGenStyle');D&&D.commit.apply(D,C);this.foreach(function(E){if(E.commit&&E.id!='txtdlgGenStyle')E.commit.apply(E,C);});};var n;function o(C){if(n)return;n=1;var D=this.getDialog(),E=D.imageElement;if(E){this.commit(d,E);C=[].concat(C);var F=C.length,G;for(var H=0;H<F;H++){G=D.getContentElement.apply(D,C[H].split(':'));G&&G.setup(d,E);}}n=0;};var p=function(C,D){var E=C.originalElement;if(!E)return null;var F=CKEDITOR.document.getById(w);if(E.getCustomData('isReady')=='true'){if(D=='check'){var G=C.getValueOf('info','txtWidth'),H=C.getValueOf('info','txtHeight'),I=E.$.width*1000/E.$.height,J=G*1000/H;C.lockRatio=false;if(!G&&!H)C.lockRatio=true;else if(!isNaN(I)&&!isNaN(J))if(Math.round(I)==Math.round(J))C.lockRatio=true;}else if(D!=undefined)C.lockRatio=D;else C.lockRatio=!C.lockRatio;}else if(D!='check')C.lockRatio=false;if(C.lockRatio)F.removeClass('cke_btn_unlocked');else F.addClass('cke_btn_unlocked');var K=C._.editor.lang.image,L=K[C.lockRatio?'unlockRatio':'lockRatio'];F.setAttribute('title',L);F.getFirst().setText(L);return C.lockRatio;},q=function(C){var D=C.originalElement;if(D.getCustomData('isReady')=='true'){C.setValueOf('info','txtWidth',D.$.width);C.setValueOf('info','txtHeight',D.$.height);}l(C);},r=function(C,D){if(C!=d)return;function E(J,K){var L=J.match(h);if(L){if(L[2]=='%'){L[1]+='%';p(F,false);}return L[1];}return K;};var F=this.getDialog(),G='',H=this.id=='txtWidth'?'width':'height',I=D.getAttribute(H);if(I)G=E(I,G);G=E(D.getStyle(H),G);this.setValue(G);},s,t=function(){var C=this.originalElement;C.setCustomData('isReady','true');C.removeListener('load',t);C.removeListener('error',u);C.removeListener('abort',u);CKEDITOR.document.getById(y).setStyle('display','none');if(!this.dontResetSize)q(this);if(this.firstLoad)CKEDITOR.tools.setTimeout(function(){p(this,'check');
+},0,this);this.firstLoad=false;this.dontResetSize=false;},u=function(){var E=this;var C=E.originalElement;C.removeListener('load',t);C.removeListener('error',u);C.removeListener('abort',u);var D=CKEDITOR.getUrl(b.skinPath+'images/noimage.png');if(E.preview)E.preview.setAttribute('src',D);CKEDITOR.document.getById(y).setStyle('display','none');p(E,false);},v=function(C){return CKEDITOR.tools.getNextId()+'_'+C;},w=v('btnLockSizes'),x=v('btnResetSize'),y=v('ImagePreviewLoader'),z=v('ImagePreviewBox'),A=v('previewLink'),B=v('previewImage');return{title:c=='image'?b.lang.image.title:b.lang.image.titleButton,minWidth:420,minHeight:CKEDITOR.env.ie&&CKEDITOR.env.quirks?360:310,onShow:function(){var I=this;I.imageElement=false;I.linkElement=false;I.imageEditMode=false;I.linkEditMode=false;I.lockRatio=true;I.dontResetSize=false;I.firstLoad=true;I.addLink=false;var C=I.getParentEditor(),D=I.getParentEditor().getSelection(),E=D.getSelectedElement(),F=E&&E.getAscendant('a');CKEDITOR.document.getById(y).setStyle('display','none');s=new CKEDITOR.dom.element('img',C.document);I.preview=CKEDITOR.document.getById(B);I.originalElement=C.document.createElement('img');I.originalElement.setAttribute('alt','');I.originalElement.setCustomData('isReady','false');if(F){I.linkElement=F;I.linkEditMode=true;var G=F.getChildren();if(G.count()==1){var H=G.getItem(0).getName();if(H=='img'||H=='input'){I.imageElement=G.getItem(0);if(I.imageElement.getName()=='img')I.imageEditMode='img';else if(I.imageElement.getName()=='input')I.imageEditMode='input';}}if(c=='image')I.setupContent(e,F);}if(E&&E.getName()=='img'&&!E.data('cke-realelement')||E&&E.getName()=='input'&&E.getAttribute('type')=='image'){I.imageEditMode=E.getName();I.imageElement=E;}if(I.imageEditMode){I.cleanImageElement=I.imageElement;I.imageElement=I.cleanImageElement.clone(true,true);I.setupContent(d,I.imageElement);p(I,true);}else I.imageElement=C.document.createElement('img');if(!CKEDITOR.tools.trim(I.getValueOf('info','txtUrl'))){I.preview.removeAttribute('src');I.preview.setStyle('display','none');}},onOk:function(){var D=this;if(D.imageEditMode){var C=D.imageEditMode;if(c=='image'&&C=='input'&&confirm(b.lang.image.button2Img)){C='img';D.imageElement=b.document.createElement('img');D.imageElement.setAttribute('alt','');b.insertElement(D.imageElement);}else if(c!='image'&&C=='img'&&confirm(b.lang.image.img2Button)){C='input';D.imageElement=b.document.createElement('input');D.imageElement.setAttributes({type:'image',alt:''});
+b.insertElement(D.imageElement);}else{D.imageElement=D.cleanImageElement;delete D.cleanImageElement;}}else{if(c=='image')D.imageElement=b.document.createElement('img');else{D.imageElement=b.document.createElement('input');D.imageElement.setAttribute('type','image');}D.imageElement.setAttribute('alt','');}if(!D.linkEditMode)D.linkElement=b.document.createElement('a');D.commitContent(d,D.imageElement);D.commitContent(e,D.linkElement);if(!D.imageElement.getAttribute('style'))D.imageElement.removeAttribute('style');if(!D.imageEditMode){if(D.addLink){if(!D.linkEditMode){b.insertElement(D.linkElement);D.linkElement.append(D.imageElement,false);}else b.insertElement(D.imageElement);}else b.insertElement(D.imageElement);}else if(!D.linkEditMode&&D.addLink){b.insertElement(D.linkElement);D.imageElement.appendTo(D.linkElement);}else if(D.linkEditMode&&!D.addLink){b.getSelection().selectElement(D.linkElement);b.insertElement(D.imageElement);}},onLoad:function(){var D=this;if(c!='image')D.hidePage('Link');var C=D._.element.getDocument();D.addFocusable(C.getById(x),5);D.addFocusable(C.getById(w),5);D.commitContent=m;},onHide:function(){var C=this;if(C.preview)C.commitContent(g,C.preview);if(C.originalElement){C.originalElement.removeListener('load',t);C.originalElement.removeListener('error',u);C.originalElement.removeListener('abort',u);C.originalElement.remove();C.originalElement=false;}delete C.imageElement;},contents:[{id:'info',label:b.lang.image.infoTab,accessKey:'I',elements:[{type:'vbox',padding:0,children:[{type:'hbox',widths:['280px','110px'],align:'right',children:[{id:'txtUrl',type:'text',label:b.lang.common.url,required:true,onChange:function(){var C=this.getDialog(),D=this.getValue();if(D.length>0){C=this.getDialog();var E=C.originalElement;C.preview.removeStyle('display');E.setCustomData('isReady','false');var F=CKEDITOR.document.getById(y);if(F)F.setStyle('display','');E.on('load',t,C);E.on('error',u,C);E.on('abort',u,C);E.setAttribute('src',D);s.setAttribute('src',D);C.preview.setAttribute('src',s.$.src);l(C);}else if(C.preview){C.preview.removeAttribute('src');C.preview.setStyle('display','none');}},setup:function(C,D){if(C==d){var E=D.data('cke-saved-src')||D.getAttribute('src'),F=this;this.getDialog().dontResetSize=true;F.setValue(E);F.setInitValue();}},commit:function(C,D){var E=this;if(C==d&&(E.getValue()||E.isChanged())){D.data('cke-saved-src',decodeURI(E.getValue()));D.setAttribute('src',decodeURI(E.getValue()));}else if(C==g){D.setAttribute('src','');
+D.removeAttribute('src');}},validate:CKEDITOR.dialog.validate.notEmpty(b.lang.image.urlMissing)},{type:'button',id:'browse',style:'display:inline-block;margin-top:10px;',align:'center',label:b.lang.common.browseServer,hidden:true,filebrowser:'info:txtUrl'}]}]},{id:'txtAlt',type:'text',label:b.lang.image.alt,accessKey:'T','default':'',onChange:function(){l(this.getDialog());},setup:function(C,D){if(C==d)this.setValue(D.getAttribute('alt'));},commit:function(C,D){var E=this;if(C==d){if(E.getValue()||E.isChanged())D.setAttribute('alt',E.getValue());}else if(C==f)D.setAttribute('alt',E.getValue());else if(C==g)D.removeAttribute('alt');}},{type:'hbox',children:[{type:'vbox',children:[{type:'hbox',widths:['50%','50%'],children:[{type:'vbox',padding:1,children:[{type:'text',width:'40px',id:'txtWidth',label:b.lang.common.width,onKeyUp:k,onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:function(){var C=this.getValue().match(i);if(!C)alert(b.lang.common.invalidWidth);return!!C;},setup:r,commit:function(C,D,E){var F=this.getValue();if(C==d){if(F)D.setStyle('width',CKEDITOR.tools.cssLength(F));else if(!F&&this.isChanged())D.removeStyle('width');!E&&D.removeAttribute('width');}else if(C==f){var G=F.match(h);if(!G){var H=this.getDialog().originalElement;if(H.getCustomData('isReady')=='true')D.setStyle('width',H.$.width+'px');}else D.setStyle('width',CKEDITOR.tools.cssLength(F));}else if(C==g){D.removeAttribute('width');D.removeStyle('width');}}},{type:'text',id:'txtHeight',width:'40px',label:b.lang.common.height,onKeyUp:k,onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:function(){var C=this.getValue().match(i);if(!C)alert(b.lang.common.invalidHeight);return!!C;},setup:r,commit:function(C,D,E){var F=this.getValue();if(C==d){if(F)D.setStyle('height',CKEDITOR.tools.cssLength(F));else if(!F&&this.isChanged())D.removeStyle('height');if(!E&&C==d)D.removeAttribute('height');}else if(C==f){var G=F.match(h);if(!G){var H=this.getDialog().originalElement;if(H.getCustomData('isReady')=='true')D.setStyle('height',H.$.height+'px');}else D.setStyle('height',CKEDITOR.tools.cssLength(F));}else if(C==g){D.removeAttribute('height');D.removeStyle('height');}}}]},{type:'html',style:'margin-top:30px;width:40px;height:40px;',onLoad:function(){var C=CKEDITOR.document.getById(x),D=CKEDITOR.document.getById(w);if(C){C.on('click',function(E){q(this);E.data.preventDefault();},this.getDialog());C.on('mouseover',function(){this.addClass('cke_btn_over');},C);
+C.on('mouseout',function(){this.removeClass('cke_btn_over');},C);}if(D){D.on('click',function(E){var J=this;var F=p(J),G=J.originalElement,H=J.getValueOf('info','txtWidth');if(G.getCustomData('isReady')=='true'&&H){var I=G.$.height/G.$.width*H;if(!isNaN(I)){J.setValueOf('info','txtHeight',Math.round(I));l(J);}}E.data.preventDefault();},this.getDialog());D.on('mouseover',function(){this.addClass('cke_btn_over');},D);D.on('mouseout',function(){this.removeClass('cke_btn_over');},D);}},html:'<div><a href="javascript:void(0)" tabindex="-1" title="'+b.lang.image.unlockRatio+'" class="cke_btn_locked" id="'+w+'" role="button"><span class="cke_label">'+b.lang.image.unlockRatio+'</span></a>'+'<a href="javascript:void(0)" tabindex="-1" title="'+b.lang.image.resetSize+'" class="cke_btn_reset" id="'+x+'" role="button"><span class="cke_label">'+b.lang.image.resetSize+'</span></a>'+'</div>'}]},{type:'vbox',padding:1,children:[{type:'text',id:'txtBorder',width:'60px',label:b.lang.image.border,'default':'',onKeyUp:function(){l(this.getDialog());},onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:CKEDITOR.dialog.validate.integer(b.lang.image.validateBorder),setup:function(C,D){if(C==d){var E,F=D.getStyle('border-width');F=F&&F.match(/^(\d+px)(?: \1 \1 \1)?$/);E=F&&parseInt(F[1],10);isNaN(parseInt(E,10))&&(E=D.getAttribute('border'));this.setValue(E);}},commit:function(C,D,E){var F=parseInt(this.getValue(),10);if(C==d||C==f){if(!isNaN(F)){D.setStyle('border-width',CKEDITOR.tools.cssLength(F));D.setStyle('border-style','solid');}else if(!F&&this.isChanged()){D.removeStyle('border-width');D.removeStyle('border-style');D.removeStyle('border-color');}if(!E&&C==d)D.removeAttribute('border');}else if(C==g){D.removeAttribute('border');D.removeStyle('border-width');D.removeStyle('border-style');D.removeStyle('border-color');}}},{type:'text',id:'txtHSpace',width:'60px',label:b.lang.image.hSpace,'default':'',onKeyUp:function(){l(this.getDialog());},onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:CKEDITOR.dialog.validate.integer(b.lang.image.validateHSpace),setup:function(C,D){if(C==d){var E,F,G,H=D.getStyle('margin-left'),I=D.getStyle('margin-right');H=H&&H.match(j);I=I&&I.match(j);F=parseInt(H,10);G=parseInt(I,10);E=F==G&&F;isNaN(parseInt(E,10))&&(E=D.getAttribute('hspace'));this.setValue(E);}},commit:function(C,D,E){var F=parseInt(this.getValue(),10);if(C==d||C==f){if(!isNaN(F)){D.setStyle('margin-left',CKEDITOR.tools.cssLength(F));D.setStyle('margin-right',CKEDITOR.tools.cssLength(F));
+}else if(!F&&this.isChanged()){D.removeStyle('margin-left');D.removeStyle('margin-right');}if(!E&&C==d)D.removeAttribute('hspace');}else if(C==g){D.removeAttribute('hspace');D.removeStyle('margin-left');D.removeStyle('margin-right');}}},{type:'text',id:'txtVSpace',width:'60px',label:b.lang.image.vSpace,'default':'',onKeyUp:function(){l(this.getDialog());},onChange:function(){o.call(this,'advanced:txtdlgGenStyle');},validate:CKEDITOR.dialog.validate.integer(b.lang.image.validateVSpace),setup:function(C,D){if(C==d){var E,F,G,H=D.getStyle('margin-top'),I=D.getStyle('margin-bottom');H=H&&H.match(j);I=I&&I.match(j);F=parseInt(H,10);G=parseInt(I,10);E=F==G&&F;isNaN(parseInt(E,10))&&(E=D.getAttribute('vspace'));this.setValue(E);}},commit:function(C,D,E){var F=parseInt(this.getValue(),10);if(C==d||C==f){if(!isNaN(F)){D.setStyle('margin-top',CKEDITOR.tools.cssLength(F));D.setStyle('margin-bottom',CKEDITOR.tools.cssLength(F));}else if(!F&&this.isChanged()){D.removeStyle('margin-top');D.removeStyle('margin-bottom');}if(!E&&C==d)D.removeAttribute('vspace');}else if(C==g){D.removeAttribute('vspace');D.removeStyle('margin-top');D.removeStyle('margin-bottom');}}},{id:'cmbAlign',type:'select',widths:['35%','65%'],style:'width:90px',label:b.lang.common.align,'default':'',items:[[b.lang.common.notSet,''],[b.lang.common.alignLeft,'left'],[b.lang.common.alignRight,'right']],onChange:function(){l(this.getDialog());o.call(this,'advanced:txtdlgGenStyle');},setup:function(C,D){if(C==d){var E=D.getStyle('float');switch(E){case 'inherit':case 'none':E='';}!E&&(E=(D.getAttribute('align')||'').toLowerCase());this.setValue(E);}},commit:function(C,D,E){var F=this.getValue();if(C==d||C==f){if(F)D.setStyle('float',F);else D.removeStyle('float');if(!E&&C==d){F=(D.getAttribute('align')||'').toLowerCase();switch(F){case 'left':case 'right':D.removeAttribute('align');}}}else if(C==g)D.removeStyle('float');}}]}]},{type:'vbox',height:'250px',children:[{type:'html',style:'width:95%;',html:'<div>'+CKEDITOR.tools.htmlEncode(b.lang.common.preview)+'<br>'+'<div id="'+y+'" class="ImagePreviewLoader" style="display:none"><div class="loading"> </div></div>'+'<div id="'+z+'" class="ImagePreviewBox"><table><tr><td>'+'<a href="javascript:void(0)" target="_blank" onclick="return false;" id="'+A+'">'+'<img id="'+B+'" alt="" /></a>'+(b.config.image_previewText||'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.')+'</td></tr></table></div></div>'}]}]}]},{id:'Link',label:b.lang.link.title,padding:0,elements:[{id:'txtUrl',type:'text',label:b.lang.common.url,style:'width: 100%','default':'',setup:function(C,D){if(C==e){var E=D.data('cke-saved-href');
+if(!E)E=D.getAttribute('href');this.setValue(E);}},commit:function(C,D){var E=this;if(C==e)if(E.getValue()||E.isChanged()){D.data('cke-saved-href',decodeURI(E.getValue()));D.setAttribute('href','javascript:void(0)/*'+CKEDITOR.tools.getNextNumber()+'*/');if(E.getValue()||!b.config.image_removeLinkByEmptyURL)E.getDialog().addLink=true;}}},{type:'button',id:'browse',filebrowser:{action:'Browse',target:'Link:txtUrl',url:b.config.filebrowserImageBrowseLinkUrl},style:'float:right',hidden:true,label:b.lang.common.browseServer},{id:'cmbTarget',type:'select',label:b.lang.common.target,'default':'',items:[[b.lang.common.notSet,''],[b.lang.common.targetNew,'_blank'],[b.lang.common.targetTop,'_top'],[b.lang.common.targetSelf,'_self'],[b.lang.common.targetParent,'_parent']],setup:function(C,D){if(C==e)this.setValue(D.getAttribute('target')||'');},commit:function(C,D){if(C==e)if(this.getValue()||this.isChanged())D.setAttribute('target',this.getValue());}}]},{id:'Upload',hidden:true,filebrowser:'uploadButton',label:b.lang.image.upload,elements:[{type:'file',id:'upload',label:b.lang.image.btnUpload,style:'height:40px',size:38},{type:'fileButton',id:'uploadButton',filebrowser:'info:txtUrl',label:b.lang.image.btnUpload,'for':['Upload','upload']}]},{id:'advanced',label:b.lang.common.advancedTab,elements:[{type:'hbox',widths:['50%','25%','25%'],children:[{type:'text',id:'linkId',label:b.lang.common.id,setup:function(C,D){if(C==d)this.setValue(D.getAttribute('id'));},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('id',this.getValue());}},{id:'cmbLangDir',type:'select',style:'width : 100px;',label:b.lang.common.langDir,'default':'',items:[[b.lang.common.notSet,''],[b.lang.common.langDirLtr,'ltr'],[b.lang.common.langDirRtl,'rtl']],setup:function(C,D){if(C==d)this.setValue(D.getAttribute('dir'));},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('dir',this.getValue());}},{type:'text',id:'txtLangCode',label:b.lang.common.langCode,'default':'',setup:function(C,D){if(C==d)this.setValue(D.getAttribute('lang'));},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('lang',this.getValue());}}]},{type:'text',id:'txtGenLongDescr',label:b.lang.common.longDescr,setup:function(C,D){if(C==d)this.setValue(D.getAttribute('longDesc'));},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('longDesc',this.getValue());}},{type:'hbox',widths:['50%','50%'],children:[{type:'text',id:'txtGenClass',label:b.lang.common.cssClass,'default':'',setup:function(C,D){if(C==d)this.setValue(D.getAttribute('class'));
+},commit:function(C,D){if(C==d)if(this.getValue()||this.isChanged())D.setAttribute('class',this.getValue());}},{type:'text',id:'txtGenTitle',label:b.lang.common.advisoryTitle,'default':'',onChange:function(){l(this.getDialog());},setup:function(C,D){if(C==d)this.setValue(D.getAttribute('title'));},commit:function(C,D){var E=this;if(C==d){if(E.getValue()||E.isChanged())D.setAttribute('title',E.getValue());}else if(C==f)D.setAttribute('title',E.getValue());else if(C==g)D.removeAttribute('title');}}]},{type:'text',id:'txtdlgGenStyle',label:b.lang.common.cssStyle,'default':'',setup:function(C,D){if(C==d){var E=D.getAttribute('style');if(!E&&D.$.style.cssText)E=D.$.style.cssText;this.setValue(E);var F=D.$.style.height,G=D.$.style.width,H=(F?F:'').match(h),I=(G?G:'').match(h);this.attributesInStyle={height:!!H,width:!!I};}},onChange:function(){o.call(this,['info:cmbFloat','info:cmbAlign','info:txtVSpace','info:txtHSpace','info:txtBorder','info:txtWidth','info:txtHeight']);l(this);},commit:function(C,D){if(C==d&&(this.getValue()||this.isChanged()))D.setAttribute('style',this.getValue());}}]}]};};CKEDITOR.dialog.add('image',function(b){return a(b,'image');});CKEDITOR.dialog.add('imagebutton',function(b){return a(b,'imagebutton');});})();
diff --git a/modules_v2/ckeditor/plugins/link/dialogs/anchor.js b/modules_v2/ckeditor/plugins/link/dialogs/anchor.js new file mode 100644 index 0000000000..cb268adb40 --- /dev/null +++ b/modules_v2/ckeditor/plugins/link/dialogs/anchor.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('anchor',function(a){var b=function(c,d,e){var g=this;g.editMode=true;g.editObj=e;var f=g.editObj.getAttribute('name');if(f)g.setValueOf('info','txtName',f);else g.setValueOf('info','txtName','');};return{title:a.lang.anchor.title,minWidth:300,minHeight:60,onOk:function(){var f=this;var c=f.getValueOf('info','txtName'),d=CKEDITOR.env.ie?a.document.createElement('<a name="'+CKEDITOR.tools.htmlEncode(c)+'">'):a.document.createElement('a');if(f.editMode){f.editObj.copyAttributes(d,{name:1});f.editObj.moveChildren(d);}d.data('cke-saved-name',false);d.setAttribute('name',c);var e=a.createFakeElement(d,'cke_anchor','anchor');if(!f.editMode)a.insertElement(e);else{e.replace(f.fakeObj);a.getSelection().selectElement(e);}return true;},onShow:function(){var e=this;e.editObj=false;e.fakeObj=false;e.editMode=false;var c=a.getSelection(),d=c.getSelectedElement();if(d&&d.data('cke-real-element-type')&&d.data('cke-real-element-type')=='anchor'){e.fakeObj=d;d=a.restoreRealElement(e.fakeObj);b.apply(e,[a,c,d]);c.selectElement(e.fakeObj);}e.getContentElement('info','txtName').focus();},contents:[{id:'info',label:a.lang.anchor.title,accessKey:'I',elements:[{type:'text',id:'txtName',label:a.lang.anchor.name,required:true,validate:function(){if(!this.getValue()){alert(a.lang.anchor.errorName);return false;}return true;}}]}]};});
diff --git a/modules_v2/ckeditor/plugins/link/dialogs/link.js b/modules_v2/ckeditor/plugins/link/dialogs/link.js new file mode 100644 index 0000000000..a474a64859 --- /dev/null +++ b/modules_v2/ckeditor/plugins/link/dialogs/link.js @@ -0,0 +1,11 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('link',function(a){var b=CKEDITOR.plugins.link,c=function(){var E=this.getDialog(),F=E.getContentElement('target','popupFeatures'),G=E.getContentElement('target','linkTargetName'),H=this.getValue();if(!F||!G)return;F=F.getElement();F.hide();G.setValue('');switch(H){case 'frame':G.setLabel(a.lang.link.targetFrameName);G.getElement().show();break;case 'popup':F.show();G.setLabel(a.lang.link.targetPopupName);G.getElement().show();break;default:G.setValue(H);G.getElement().hide();break;}},d=function(){var E=this.getDialog(),F=['urlOptions','anchorOptions','emailOptions'],G=this.getValue(),H=E.definition.getContents('upload'),I=H&&H.hidden;if(G=='url'){if(a.config.linkShowTargetTab)E.showPage('target');if(!I)E.showPage('upload');}else{E.hidePage('target');if(!I)E.hidePage('upload');}for(var J=0;J<F.length;J++){var K=E.getContentElement('info',F[J]);if(!K)continue;K=K.getElement().getParent().getParent();if(F[J]==G+'Options')K.show();else K.hide();}E.layout();},e=/^javascript:/,f=/^mailto:([^?]+)(?:\?(.+))?$/,g=/subject=([^;?:@&=$,\/]*)/,h=/body=([^;?:@&=$,\/]*)/,i=/^#(.*)$/,j=/^((?:http|https|ftp|news):\/\/)?(.*)$/,k=/^(_(?:self|top|parent|blank))$/,l=/^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,m=/^javascript:([^(]+)\(([^)]+)\)$/,n=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,o=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,p=function(E,F){var G=F&&(F.data('cke-saved-href')||F.getAttribute('href'))||'',H,I,J,K,L={};if(H=G.match(e))if(y=='encode')G=G.replace(l,function(ab,ac,ad){return 'mailto:'+String.fromCharCode.apply(String,ac.split(','))+(ad&&w(ad));});else if(y)G.replace(m,function(ab,ac,ad){if(ac==z.name){L.type='email';var ae=L.email={},af=/[^,\s]+/g,ag=/(^')|('$)/g,ah=ad.match(af),ai=ah.length,aj,ak;for(var al=0;al<ai;al++){ak=decodeURIComponent(w(ah[al].replace(ag,'')));aj=z.params[al].toLowerCase();ae[aj]=ak;}ae.address=[ae.name,ae.domain].join('@');}});if(!L.type)if(J=G.match(i)){L.type='anchor';L.anchor={};L.anchor.name=L.anchor.id=J[1];}else if(I=G.match(f)){var M=G.match(g),N=G.match(h);L.type='email';var O=L.email={};O.address=I[1];M&&(O.subject=decodeURIComponent(M[1]));N&&(O.body=decodeURIComponent(N[1]));}else if(G&&(K=G.match(j))){L.type='url';L.url={};L.url.protocol=K[1];L.url.url=K[2];}else L.type='url';if(F){var P=F.getAttribute('target');L.target={};L.adv={};if(!P){var Q=F.data('cke-pa-onclick')||F.getAttribute('onclick'),R=Q&&Q.match(n);
+if(R){L.target.type='popup';L.target.name=R[1];var S;while(S=o.exec(R[2])){if(S[2]=='yes'||S[2]=='1')L.target[S[1]]=true;else if(isFinite(S[2]))L.target[S[1]]=S[2];}}}else{var T=P.match(k);if(T)L.target.type=L.target.name=P;else{L.target.type='frame';L.target.name=P;}}var U=this,V=function(ab,ac){var ad=F.getAttribute(ac);if(ad!==null)L.adv[ab]=ad||'';};V('advId','id');V('advLangDir','dir');V('advAccessKey','accessKey');V('advName','name');V('advLangCode','lang');V('advTabIndex','tabindex');V('advTitle','title');V('advContentType','type');V('advCSSClasses','class');V('advCharset','charset');V('advStyles','style');}var W=E.document.getElementsByTag('img'),X=new CKEDITOR.dom.nodeList(E.document.$.anchors),Y=L.anchors=[];for(var Z=0;Z<W.count();Z++){var aa=W.getItem(Z);if(aa.data('cke-realelement')&&aa.data('cke-real-element-type')=='anchor')Y.push(E.restoreRealElement(aa));}for(Z=0;Z<X.count();Z++)Y.push(X.getItem(Z));for(Z=0;Z<Y.length;Z++){aa=Y[Z];Y[Z]={name:aa.getAttribute('name'),id:aa.getAttribute('id')};}this._.selectedElement=F;return L;},q=function(E,F){if(F[E])this.setValue(F[E][this.id]||'');},r=function(E){return q.call(this,'target',E);},s=function(E){return q.call(this,'adv',E);},t=function(E,F){if(!F[E])F[E]={};F[E][this.id]=this.getValue()||'';},u=function(E){return t.call(this,'target',E);},v=function(E){return t.call(this,'adv',E);};function w(E){return E.replace(/\\'/g,"'");};function x(E){return E.replace(/'/g,'\\$&');};var y=a.config.emailProtection||'';if(y&&y!='encode'){var z={};y.replace(/^([^(]+)\(([^)]+)\)$/,function(E,F,G){z.name=F;z.params=[];G.replace(/[^,\s]+/g,function(H){z.params.push(H);});});}function A(E){var F,G=z.name,H=z.params,I,J;F=[G,'('];for(var K=0;K<H.length;K++){I=H[K].toLowerCase();J=E[I];K>0&&F.push(',');F.push("'",J?x(encodeURIComponent(E[I])):'',"'");}F.push(')');return F.join('');};function B(E){var F,G=E.length,H=[];for(var I=0;I<G;I++){F=E.charCodeAt(I);H.push(F);}return 'String.fromCharCode('+H.join(',')+')';};var C=a.lang.common,D=a.lang.link;return{title:D.title,minWidth:350,minHeight:230,contents:[{id:'info',label:D.info,title:D.info,elements:[{id:'linkType',type:'select',label:D.type,'default':'url',items:[[D.toUrl,'url'],[D.toAnchor,'anchor'],[D.toEmail,'email']],onChange:d,setup:function(E){if(E.type)this.setValue(E.type);},commit:function(E){E.type=this.getValue();}},{type:'vbox',id:'urlOptions',children:[{type:'hbox',widths:['25%','75%'],children:[{id:'protocol',type:'select',label:C.protocol,'default':'http://',items:[['http://','http://'],['https://','https://'],['ftp://','ftp://'],['news://','news://'],[D.other,'']],setup:function(E){if(E.url)this.setValue(E.url.protocol||'');
+},commit:function(E){if(!E.url)E.url={};E.url.protocol=this.getValue();}},{type:'text',id:'url',label:C.url,required:true,onLoad:function(){this.allowOnChange=true;},onKeyUp:function(){var J=this;J.allowOnChange=false;var E=J.getDialog().getContentElement('info','protocol'),F=J.getValue(),G=/^(http|https|ftp|news):\/\/(?=.)/gi,H=/^((javascript:)|[#\/\.\?])/gi,I=G.exec(F);if(I){J.setValue(F.substr(I[0].length));E.setValue(I[0].toLowerCase());}else if(H.test(F))E.setValue('');J.allowOnChange=true;},onChange:function(){if(this.allowOnChange)this.onKeyUp();},validate:function(){var E=this.getDialog();if(E.getContentElement('info','linkType')&&E.getValueOf('info','linkType')!='url')return true;if(this.getDialog().fakeObj)return true;var F=CKEDITOR.dialog.validate.notEmpty(D.noUrl);return F.apply(this);},setup:function(E){this.allowOnChange=false;if(E.url)this.setValue(E.url.url);this.allowOnChange=true;},commit:function(E){this.onChange();if(!E.url)E.url={};E.url.url=this.getValue();this.allowOnChange=false;}}],setup:function(E){if(!this.getDialog().getContentElement('info','linkType'))this.getElement().show();}},{type:'button',id:'browse',hidden:'true',filebrowser:'info:url',label:C.browseServer}]},{type:'vbox',id:'anchorOptions',width:260,align:'center',padding:0,children:[{type:'fieldset',id:'selectAnchorText',label:D.selectAnchor,setup:function(E){if(E.anchors.length>0)this.getElement().show();else this.getElement().hide();},children:[{type:'hbox',id:'selectAnchor',children:[{type:'select',id:'anchorName','default':'',label:D.anchorName,style:'width: 100%;',items:[['']],setup:function(E){var H=this;H.clear();H.add('');for(var F=0;F<E.anchors.length;F++){if(E.anchors[F].name)H.add(E.anchors[F].name);}if(E.anchor)H.setValue(E.anchor.name);var G=H.getDialog().getContentElement('info','linkType');if(G&&G.getValue()=='email')H.focus();},commit:function(E){if(!E.anchor)E.anchor={};E.anchor.name=this.getValue();}},{type:'select',id:'anchorId','default':'',label:D.anchorId,style:'width: 100%;',items:[['']],setup:function(E){var G=this;G.clear();G.add('');for(var F=0;F<E.anchors.length;F++){if(E.anchors[F].id)G.add(E.anchors[F].id);}if(E.anchor)G.setValue(E.anchor.id);},commit:function(E){if(!E.anchor)E.anchor={};E.anchor.id=this.getValue();}}],setup:function(E){if(E.anchors.length>0)this.getElement().show();else this.getElement().hide();}}]},{type:'html',id:'noAnchors',style:'text-align: center;',html:'<div role="label" tabIndex="-1">'+CKEDITOR.tools.htmlEncode(D.noAnchors)+'</div>',focus:true,setup:function(E){if(E.anchors.length<1)this.getElement().show();
+else this.getElement().hide();}}],setup:function(E){if(!this.getDialog().getContentElement('info','linkType'))this.getElement().hide();}},{type:'vbox',id:'emailOptions',padding:1,children:[{type:'text',id:'emailAddress',label:D.emailAddress,required:true,validate:function(){var E=this.getDialog();if(!E.getContentElement('info','linkType')||E.getValueOf('info','linkType')!='email')return true;var F=CKEDITOR.dialog.validate.notEmpty(D.noEmail);return F.apply(this);},setup:function(E){if(E.email)this.setValue(E.email.address);var F=this.getDialog().getContentElement('info','linkType');if(F&&F.getValue()=='email')this.select();},commit:function(E){if(!E.email)E.email={};E.email.address=this.getValue();}},{type:'text',id:'emailSubject',label:D.emailSubject,setup:function(E){if(E.email)this.setValue(E.email.subject);},commit:function(E){if(!E.email)E.email={};E.email.subject=this.getValue();}},{type:'textarea',id:'emailBody',label:D.emailBody,rows:3,'default':'',setup:function(E){if(E.email)this.setValue(E.email.body);},commit:function(E){if(!E.email)E.email={};E.email.body=this.getValue();}}],setup:function(E){if(!this.getDialog().getContentElement('info','linkType'))this.getElement().hide();}}]},{id:'target',label:D.target,title:D.target,elements:[{type:'hbox',widths:['50%','50%'],children:[{type:'select',id:'linkTargetType',label:C.target,'default':'notSet',style:'width : 100%;',items:[[C.notSet,'notSet'],[D.targetFrame,'frame'],[D.targetPopup,'popup'],[C.targetNew,'_blank'],[C.targetTop,'_top'],[C.targetSelf,'_self'],[C.targetParent,'_parent']],onChange:c,setup:function(E){if(E.target)this.setValue(E.target.type);c.call(this);},commit:function(E){if(!E.target)E.target={};E.target.type=this.getValue();}},{type:'text',id:'linkTargetName',label:D.targetFrameName,'default':'',setup:function(E){if(E.target)this.setValue(E.target.name);},commit:function(E){if(!E.target)E.target={};E.target.name=this.getValue().replace(/\W/gi,'');}}]},{type:'vbox',width:'100%',align:'center',padding:2,id:'popupFeatures',children:[{type:'fieldset',label:D.popupFeatures,children:[{type:'hbox',children:[{type:'checkbox',id:'resizable',label:D.popupResizable,setup:r,commit:u},{type:'checkbox',id:'status',label:D.popupStatusBar,setup:r,commit:u}]},{type:'hbox',children:[{type:'checkbox',id:'location',label:D.popupLocationBar,setup:r,commit:u},{type:'checkbox',id:'toolbar',label:D.popupToolbar,setup:r,commit:u}]},{type:'hbox',children:[{type:'checkbox',id:'menubar',label:D.popupMenuBar,setup:r,commit:u},{type:'checkbox',id:'fullscreen',label:D.popupFullScreen,setup:r,commit:u}]},{type:'hbox',children:[{type:'checkbox',id:'scrollbars',label:D.popupScrollBars,setup:r,commit:u},{type:'checkbox',id:'dependent',label:D.popupDependent,setup:r,commit:u}]},{type:'hbox',children:[{type:'text',widths:['50%','50%'],labelLayout:'horizontal',label:C.width,id:'width',setup:r,commit:u},{type:'text',labelLayout:'horizontal',widths:['50%','50%'],label:D.popupLeft,id:'left',setup:r,commit:u}]},{type:'hbox',children:[{type:'text',labelLayout:'horizontal',widths:['50%','50%'],label:C.height,id:'height',setup:r,commit:u},{type:'text',labelLayout:'horizontal',label:D.popupTop,widths:['50%','50%'],id:'top',setup:r,commit:u}]}]}]}]},{id:'upload',label:D.upload,title:D.upload,hidden:true,filebrowser:'uploadButton',elements:[{type:'file',id:'upload',label:C.upload,style:'height:40px',size:29},{type:'fileButton',id:'uploadButton',label:C.uploadSubmit,filebrowser:'info:url','for':['upload','upload']}]},{id:'advanced',label:D.advanced,title:D.advanced,elements:[{type:'vbox',padding:1,children:[{type:'hbox',widths:['45%','35%','20%'],children:[{type:'text',id:'advId',label:D.id,setup:s,commit:v},{type:'select',id:'advLangDir',label:D.langDir,'default':'',style:'width:110px',items:[[C.notSet,''],[D.langDirLTR,'ltr'],[D.langDirRTL,'rtl']],setup:s,commit:v},{type:'text',id:'advAccessKey',width:'80px',label:D.acccessKey,maxLength:1,setup:s,commit:v}]},{type:'hbox',widths:['45%','35%','20%'],children:[{type:'text',label:D.name,id:'advName',setup:s,commit:v},{type:'text',label:D.langCode,id:'advLangCode',width:'110px','default':'',setup:s,commit:v},{type:'text',label:D.tabIndex,id:'advTabIndex',width:'80px',maxLength:5,setup:s,commit:v}]}]},{type:'vbox',padding:1,children:[{type:'hbox',widths:['45%','55%'],children:[{type:'text',label:D.advisoryTitle,'default':'',id:'advTitle',setup:s,commit:v},{type:'text',label:D.advisoryContentType,'default':'',id:'advContentType',setup:s,commit:v}]},{type:'hbox',widths:['45%','55%'],children:[{type:'text',label:D.cssClasses,'default':'',id:'advCSSClasses',setup:s,commit:v},{type:'text',label:D.charset,'default':'',id:'advCharset',setup:s,commit:v}]},{type:'hbox',children:[{type:'text',label:D.styles,'default':'',id:'advStyles',setup:s,commit:v}]}]}]}],onShow:function(){var H=this;
+H.fakeObj=false;var E=H.getParentEditor(),F=E.getSelection(),G=null;if((G=b.getSelectedLink(E))&&G.hasAttribute('href'))F.selectElement(G);else if((G=F.getSelectedElement())&&G.is('img')&&G.data('cke-real-element-type')&&G.data('cke-real-element-type')=='anchor'){H.fakeObj=G;G=E.restoreRealElement(H.fakeObj);F.selectElement(H.fakeObj);}else G=null;H.setupContent(p.apply(H,[E,G]));},onOk:function(){var E={href:'javascript:void(0)/*'+CKEDITOR.tools.getNextNumber()+'*/'},F=[],G={href:E.href},H=this,I=this.getParentEditor();this.commitContent(G);switch(G.type||'url'){case 'url':var J=G.url&&G.url.protocol!=undefined?G.url.protocol:'http://',K=G.url&&G.url.url||'';E['data-cke-saved-href']=K.indexOf('/')===0?K:J+K;break;case 'anchor':var L=G.anchor&&G.anchor.name,M=G.anchor&&G.anchor.id;E['data-cke-saved-href']='#'+(L||M||'');break;case 'email':var N,O=G.email,P=O.address;switch(y){case '':case 'encode':var Q=encodeURIComponent(O.subject||''),R=encodeURIComponent(O.body||''),S=[];Q&&S.push('subject='+Q);R&&S.push('body='+R);S=S.length?'?'+S.join('&'):'';if(y=='encode'){N=["javascript:void(location.href='mailto:'+",B(P)];S&&N.push("+'",x(S),"'");N.push(')');}else N=['mailto:',P,S];break;default:var T=P.split('@',2);O.name=T[0];O.domain=T[1];N=['javascript:',A(O)];}E['data-cke-saved-href']=N.join('');break;}if(G.target)if(G.target.type=='popup'){var U=["window.open(this.href, '",G.target.name||'',"', '"],V=['resizable','status','location','toolbar','menubar','fullscreen','scrollbars','dependent'],W=V.length,X=function(aj){if(G.target[aj])V.push(aj+'='+G.target[aj]);};for(var Y=0;Y<W;Y++)V[Y]=V[Y]+(G.target[V[Y]]?'=yes':'=no');X('width');X('left');X('height');X('top');U.push(V.join(','),"'); return false;");E['data-cke-pa-onclick']=U.join('');F.push('target');}else{if(G.target.type!='notSet'&&G.target.name)E.target=G.target.name;else F.push('target');F.push('data-cke-pa-onclick','onclick');}if(G.adv){var Z=function(aj,ak){var al=G.adv[aj];if(al)E[ak]=al;else F.push(ak);};if(this._.selectedElement)Z('advId','id');Z('advLangDir','dir');Z('advAccessKey','accessKey');Z('advName','name');Z('advLangCode','lang');Z('advTabIndex','tabindex');Z('advTitle','title');Z('advContentType','type');Z('advCSSClasses','class');Z('advCharset','charset');Z('advStyles','style');}if(!this._.selectedElement){var aa=I.getSelection(),ab=aa.getRanges(true);if(ab.length==1&&ab[0].collapsed){var ac=new CKEDITOR.dom.text(G.type=='email'?G.email.address:E['data-cke-saved-href'],I.document);ab[0].insertNode(ac);
+ab[0].selectNodeContents(ac);aa.selectRanges(ab);}var ad=new CKEDITOR.style({element:'a',attributes:E});ad.type=CKEDITOR.STYLE_INLINE;ad.apply(I.document);if(G.adv&&G.adv.advId){var ae=this.getParentEditor().document.$.getElementsByTagName('a');for(Y=0;Y<ae.length;Y++){if(ae[Y].href==E.href){ae[Y].id=G.adv.advId;break;}}}}else{var af=this._.selectedElement,ag=af.data('cke-saved-href'),ah=af.getHtml();if(CKEDITOR.env.ie&&E.name!=af.getAttribute('name')){var ai=new CKEDITOR.dom.element('<a name="'+CKEDITOR.tools.htmlEncode(E.name)+'">',I.document);aa=I.getSelection();af.moveChildren(ai);af.copyAttributes(ai,{name:1});ai.replace(af);af=ai;aa.selectElement(af);}af.setAttributes(E);af.removeAttributes(F);if(ag==ah||G.type=='email'&&ah.indexOf('@')!=-1)af.setHtml(G.type=='email'?G.email.address:E['data-cke-saved-href']);if(af.getAttribute('name'))af.addClass('cke_anchor');else af.removeClass('cke_anchor');if(this.fakeObj)I.createFakeElement(af,'cke_anchor','anchor').replace(this.fakeObj);delete this._.selectedElement;}},onLoad:function(){if(!a.config.linkShowAdvancedTab)this.hidePage('advanced');if(!a.config.linkShowTargetTab)this.hidePage('target');},onFocus:function(){var E=this.getContentElement('info','linkType'),F;if(E&&E.getValue()=='url'){F=this.getContentElement('info','url');F.select();}}};});
diff --git a/modules_v2/ckeditor/plugins/link/images/anchor.gif b/modules_v2/ckeditor/plugins/link/images/anchor.gif Binary files differnew file mode 100644 index 0000000000..5aa797b224 --- /dev/null +++ b/modules_v2/ckeditor/plugins/link/images/anchor.gif diff --git a/modules_v2/ckeditor/plugins/liststyle/dialogs/liststyle.js b/modules_v2/ckeditor/plugins/liststyle/dialogs/liststyle.js new file mode 100644 index 0000000000..4829b7ead5 --- /dev/null +++ b/modules_v2/ckeditor/plugins/liststyle/dialogs/liststyle.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){function a(d,e){var f;try{f=d.getSelection().getRanges()[0];}catch(g){return null;}f.shrink(CKEDITOR.SHRINK_TEXT);return f.getCommonAncestor().getAscendant(e,1);};var b={a:'lower-alpha',A:'upper-alpha',i:'lower-roman',I:'upper-roman',1:'decimal',disc:'disc',circle:'circle',square:'square'};function c(d,e){var f=d.lang.list;if(e=='bulletedListStyle')return{title:f.bulletedTitle,minWidth:300,minHeight:50,contents:[{id:'info',accessKey:'I',elements:[{type:'select',label:f.type,id:'type',style:'width: 150px; margin: auto;',items:[[f.notset,''],[f.circle,'circle'],[f.disc,'disc'],[f.square,'square']],setup:function(h){var i=h.getStyle('list-style-type')||b[h.getAttribute('type')]||h.getAttribute('type')||'';this.setValue(i);},commit:function(h){var i=this.getValue();if(i)h.setStyle('list-style-type',i);else h.removeStyle('list-style-type');}}]}],onShow:function(){var h=this.getParentEditor(),i=a(h,'ul');i&&this.setupContent(i);},onOk:function(){var h=this.getParentEditor(),i=a(h,'ul');i&&this.commitContent(i);}};else if(e=='numberedListStyle'){var g=[[f.notset,''],[f.lowerRoman,'lower-roman'],[f.upperRoman,'upper-roman'],[f.lowerAlpha,'lower-alpha'],[f.upperAlpha,'upper-alpha'],[f.decimal,'decimal']];if(!CKEDITOR.env.ie||CKEDITOR.env.version>7)g.concat([[f.armenian,'armenian'],[f.decimalLeadingZero,'decimal-leading-zero'],[f.georgian,'georgian'],[f.lowerGreek,'lower-greek']]);return{title:f.numberedTitle,minWidth:300,minHeight:50,contents:[{id:'info',accessKey:'I',elements:[{type:'hbox',widths:['25%','75%'],children:[{label:f.start,type:'text',id:'start',validate:CKEDITOR.dialog.validate.integer(f.validateStartNumber),setup:function(h){var i=h.getAttribute('start')||1;i&&this.setValue(i);},commit:function(h){h.setAttribute('start',this.getValue());}},{type:'select',label:f.type,id:'type',style:'width: 100%;',items:g,setup:function(h){var i=h.getStyle('list-style-type')||b[h.getAttribute('type')]||h.getAttribute('type')||'';this.setValue(i);},commit:function(h){var i=this.getValue();if(i)h.setStyle('list-style-type',i);else h.removeStyle('list-style-type');}}]}]}],onShow:function(){var h=this.getParentEditor(),i=a(h,'ol');i&&this.setupContent(i);},onOk:function(){var h=this.getParentEditor(),i=a(h,'ol');i&&this.commitContent(i);}};}};CKEDITOR.dialog.add('numberedListStyle',function(d){return c(d,'numberedListStyle');});CKEDITOR.dialog.add('bulletedListStyle',function(d){return c(d,'bulletedListStyle');});})();
diff --git a/modules_v2/ckeditor/plugins/liststyle/plugin.js b/modules_v2/ckeditor/plugins/liststyle/plugin.js new file mode 100644 index 0000000000..88f48ef38b --- /dev/null +++ b/modules_v2/ckeditor/plugins/liststyle/plugin.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){CKEDITOR.plugins.liststyle={init:function(a){a.addCommand('numberedListStyle',new CKEDITOR.dialogCommand('numberedListStyle'));CKEDITOR.dialog.add('numberedListStyle',this.path+'dialogs/liststyle.js');a.addCommand('bulletedListStyle',new CKEDITOR.dialogCommand('bulletedListStyle'));CKEDITOR.dialog.add('bulletedListStyle',this.path+'dialogs/liststyle.js');a.addMenuGroup('list',108);if(a.addMenuItems)a.addMenuItems({numberedlist:{label:a.lang.list.numberedTitle,group:'list',command:'numberedListStyle'},bulletedlist:{label:a.lang.list.bulletedTitle,group:'list',command:'bulletedListStyle'}});if(a.contextMenu)a.contextMenu.addListener(function(b,c){if(!b)return null;if(b.getAscendant('ol'))return{numberedlist:CKEDITOR.TRISTATE_OFF};if(b.getAscendant('ul'))return{bulletedlist:CKEDITOR.TRISTATE_OFF};});}};CKEDITOR.plugins.add('liststyle',CKEDITOR.plugins.liststyle);})();
diff --git a/modules_v2/ckeditor/plugins/pagebreak/images/pagebreak.gif b/modules_v2/ckeditor/plugins/pagebreak/images/pagebreak.gif Binary files differnew file mode 100644 index 0000000000..8d1cffd64a --- /dev/null +++ b/modules_v2/ckeditor/plugins/pagebreak/images/pagebreak.gif diff --git a/modules_v2/ckeditor/plugins/pastefromword/filter/default.js b/modules_v2/ckeditor/plugins/pastefromword/filter/default.js new file mode 100644 index 0000000000..d1cde273f1 --- /dev/null +++ b/modules_v2/ckeditor/plugins/pastefromword/filter/default.js @@ -0,0 +1,10 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a=CKEDITOR.htmlParser.fragment.prototype,b=CKEDITOR.htmlParser.element.prototype;a.onlyChild=b.onlyChild=function(){var k=this.children,l=k.length,m=l==1&&k[0];return m||null;};b.removeAnyChildWithName=function(k){var l=this.children,m=[],n;for(var o=0;o<l.length;o++){n=l[o];if(!n.name)continue;if(n.name==k){m.push(n);l.splice(o--,1);}m=m.concat(n.removeAnyChildWithName(k));}return m;};b.getAncestor=function(k){var l=this.parent;while(l&&!(l.name&&l.name.match(k)))l=l.parent;return l;};a.firstChild=b.firstChild=function(k){var l;for(var m=0;m<this.children.length;m++){l=this.children[m];if(k(l))return l;else if(l.name){l=l.firstChild(k);if(l)return l;}}return null;};b.addStyle=function(k,l,m){var q=this;var n,o='';if(typeof l=='string')o+=k+':'+l+';';else{if(typeof k=='object')for(var p in k){if(k.hasOwnProperty(p))o+=p+':'+k[p]+';';}else o+=k;m=l;}if(!q.attributes)q.attributes={};n=q.attributes.style||'';n=(m?[o,n]:[n,o]).join(';');q.attributes.style=n.replace(/^;|;(?=;)/,'');};CKEDITOR.dtd.parentOf=function(k){var l={};for(var m in this){if(m.indexOf('$')==-1&&this[m][k])l[m]=1;}return l;};var c=/^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i,d=/^(?:\b0[^\s]*\s*){1,4}$/,e='^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$',f=new RegExp(e),g=new RegExp(e.toUpperCase()),h=0,i;CKEDITOR.plugins.pastefromword={utils:{createListBulletMarker:function(k,l){var m=new CKEDITOR.htmlParser.element('cke:listbullet'),n;if(!k){k='decimal';n='ol';}else if(k[2]){if(!isNaN(k[1]))k='decimal';else if(f.test(k[1]))k='lower-roman';else if(g.test(k[1]))k='upper-roman';else if(/^[a-z]+$/.test(k[1]))k='lower-alpha';else if(/^[A-Z]+$/.test(k[1]))k='upper-alpha';else k='decimal';n='ol';}else{if(/[l\u00B7\u2002]/.test(k[1]))k='disc';else if(/[\u006F\u00D8]/.test(k[1]))k='circle';else if(/[\u006E\u25C6]/.test(k[1]))k='square';else k='disc';n='ul';}m.attributes={'cke:listtype':n,style:'list-style-type:'+k+';'};m.add(new CKEDITOR.htmlParser.text(l));return m;},isListBulletIndicator:function(k){var l=k.attributes&&k.attributes.style;if(/mso-list\s*:\s*Ignore/i.test(l))return true;},isContainingOnlySpaces:function(k){var l;return(l=k.onlyChild())&&/^(:?\s| )+$/.test(l.value);},resolveList:function(k){var l=k.attributes,m;if((m=k.removeAnyChildWithName('cke:listbullet'))&&m.length&&(m=m[0])){k.name='cke:li';if(l.style)l.style=CKEDITOR.plugins.pastefromword.filters.stylesFilter([['text-indent'],['line-height'],[/^margin(:?-left)?$/,null,function(p){var q=p.split(' ');
+p=CKEDITOR.plugins.pastefromword.utils.convertToPx(q[3]||q[1]||q[0]);p=parseInt(p,10);if(!h&&i&&p>i)h=p-i;l['cke:margin']=i=p;}]])(l.style,k)||'';var n=m.attributes,o=n.style;k.addStyle(o);CKEDITOR.tools.extend(l,n);return true;}return false;},convertToPx:(function(){var k=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(k);return function(l){if(c.test(l)){k.setStyle('width',l);return k.$.clientWidth+'px';}return l;};})(),getStyleComponents:(function(){var k=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(k);return function(l,m,n){k.setStyle(l,m);var o={},p=n.length;for(var q=0;q<p;q++)o[n[q]]=k.getStyle(n[q]);return o;};})(),listDtdParents:CKEDITOR.dtd.parentOf('ol')},filters:{flattenList:function(k){var l=k.attributes,m=k.parent,n,o=1;while(m){m.attributes&&m.attributes['cke:list']&&o++;m=m.parent;}switch(l.type){case 'a':n='lower-alpha';break;}var p=k.children,q;for(var r=0;r<p.length;r++){q=p[r];var s=q.attributes;if(q.name in CKEDITOR.dtd.$listItem){var t=q.children,u=t.length,v=t[u-1];if(v.name in CKEDITOR.dtd.$list){p.splice(r+1,0,v);v.parent=k;if(!--t.length)p.splice(r,1);}q.name='cke:li';s['cke:indent']=o;i=0;s['cke:listtype']=k.name;n&&q.addStyle('list-style-type',n,true);}}delete k.name;l['cke:list']=1;},assembleList:function(k){var l=k.children,m,n,o,p,q,r,s,t,u;for(var v=0;v<l.length;v++){m=l[v];if('cke:li'==m.name){m.name='li';n=m;o=n.attributes;p=n.attributes['cke:listtype'];q=parseInt(o['cke:indent'],10)||h&&Math.ceil(o['cke:margin']/h)||1;o.style&&(o.style=CKEDITOR.plugins.pastefromword.filters.stylesFilter([['list-style-type',p=='ol'?'decimal':'disc']])(o.style)||'');if(!s){s=new CKEDITOR.htmlParser.element(p);s.add(n);l[v]=s;}else{if(q>u){s=new CKEDITOR.htmlParser.element(p);s.add(n);r.add(s);}else if(q<u){var w=u-q,x;while(w--&&(x=s.parent))s=x.parent;s.add(n);}else s.add(n);l.splice(v--,1);}r=n;u=q;}else s=null;}h=0;},falsyFilter:function(k){return false;},stylesFilter:function(k,l){return function(m,n){var o=[];m.replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(q,r,s){r=r.toLowerCase();r=='font-family'&&(s=s.replace(/["']/g,''));var t,u,v,w;for(var x=0;x<k.length;x++){if(k[x]){t=k[x][0];u=k[x][1];v=k[x][2];w=k[x][3];if(r.match(t)&&(!u||s.match(u))){r=w||r;l&&(v=v||s);
+if(typeof v=='function')v=v(s,n,r);if(v&&v.push)r=v[0],v=v[1];if(typeof v=='string')o.push([r,v]);return;}}}!l&&o.push([r,s]);});for(var p=0;p<o.length;p++)o[p]=o[p].join(':');return o.length?o.join(';')+';':false;};},elementMigrateFilter:function(k,l){return function(m){var n=l?new CKEDITOR.style(k,l)._.definition:k;m.name=n.element;CKEDITOR.tools.extend(m.attributes,CKEDITOR.tools.clone(n.attributes));m.addStyle(CKEDITOR.style.getStyleText(n));};},styleMigrateFilter:function(k,l){var m=this.elementMigrateFilter;return function(n,o){var p=new CKEDITOR.htmlParser.element(null),q={};q[l]=n;m(k,q)(p);p.children=o.children;o.children=[p];};},bogusAttrFilter:function(k,l){if(l.name.indexOf('cke:')==-1)return false;},applyStyleFilter:null},getRules:function(k){var l=CKEDITOR.dtd,m=CKEDITOR.tools.extend({},l.$block,l.$listItem,l.$tableContent),n=k.config,o=this.filters,p=o.falsyFilter,q=o.stylesFilter,r=o.elementMigrateFilter,s=CKEDITOR.tools.bind(this.filters.styleMigrateFilter,this.filters),t=this.utils.createListBulletMarker,u=o.flattenList,v=o.assembleList,w=this.utils.isListBulletIndicator,x=this.utils.isContainingOnlySpaces,y=this.utils.resolveList,z=this.utils.convertToPx,A=this.utils.getStyleComponents,B=this.utils.listDtdParents,C=n.pasteFromWordRemoveFontStyles!==false,D=n.pasteFromWordRemoveStyles!==false;return{elementNames:[[/meta|link|script/,'']],root:function(E){E.filterChildren();v(E);},elements:{'^':function(E){var F;if(CKEDITOR.env.gecko&&(F=o.applyStyleFilter))F(E);},$:function(E){var F=E.name||'',G=E.attributes;if(F in m&&G.style)G.style=q([[/^(:?width|height)$/,null,z]])(G.style)||'';if(F.match(/h\d/)){E.filterChildren();if(y(E))return;r(n['format_'+F])(E);}else if(F in l.$inline){E.filterChildren();if(x(E))delete E.name;}else if(F.indexOf(':')!=-1&&F.indexOf('cke')==-1){E.filterChildren();if(F=='v:imagedata'){var H=E.attributes['o:href'];if(H)E.attributes.src=H;E.name='img';return;}delete E.name;}if(F in B){E.filterChildren();v(E);}},style:function(E){if(CKEDITOR.env.gecko){var F=E.onlyChild().value.match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/),G=F&&F[1],H={};if(G){G.replace(/[\n\r]/g,'').replace(/(.+?)\{(.+?)\}/g,function(I,J,K){J=J.split(',');var L=J.length,M;for(var N=0;N<L;N++)CKEDITOR.tools.trim(J[N]).replace(/^(\w+)(\.[\w-]+)?$/g,function(O,P,Q){P=P||'*';Q=Q.substring(1,Q.length);if(Q.match(/MsoNormal/))return;if(!H[P])H[P]={};if(Q)H[P][Q]=K;else H[P]=K;});});o.applyStyleFilter=function(I){var J=H['*']?'*':I.name,K=I.attributes&&I.attributes['class'],L;
+if(J in H){L=H[J];if(typeof L=='object')L=L[K];L&&I.addStyle(L,true);}};}}return false;},p:function(E){E.filterChildren();if(y(E))return;if(n.enterMode==CKEDITOR.ENTER_BR){delete E.name;E.add(new CKEDITOR.htmlParser.element('br'));}else r(n['format_'+(n.enterMode==CKEDITOR.ENTER_P?'p':'div')])(E);},div:function(E){var F=E.onlyChild();if(F&&F.name=='table'){var G=E.attributes;F.attributes=CKEDITOR.tools.extend(F.attributes,G);G.style&&F.addStyle(G.style);var H=new CKEDITOR.htmlParser.element('div');H.addStyle('clear','both');E.add(H);delete E.name;}},td:function(E){if(E.getAncestor('thead'))E.name='th';},ol:u,ul:u,dl:u,font:function(E){if(!CKEDITOR.env.gecko&&w(E.parent)){delete E.name;return;}E.filterChildren();var F=E.attributes,G=F.style,H=E.parent;if('font'==H.name){CKEDITOR.tools.extend(H.attributes,E.attributes);G&&H.addStyle(G);delete E.name;}else{G=G||'';if(F.color){F.color!='#000000'&&(G+='color:'+F.color+';');delete F.color;}if(F.face){G+='font-family:'+F.face+';';delete F.face;}if(F.size){G+='font-size:'+(F.size>3?'large':F.size<3?'small':'medium')+';';delete F.size;}E.name='span';E.addStyle(G);}},span:function(E){if(!CKEDITOR.env.gecko&&w(E.parent))return false;E.filterChildren();if(x(E)){delete E.name;return null;}if(!CKEDITOR.env.gecko&&w(E)){var F=E.firstChild(function(M){return M.value||M.name=='img';}),G=F&&(F.value||'l.'),H=G.match(/^([^\s]+?)([.)]?)$/);return t(H,G);}var I=E.children,J=E.attributes,K=J&&J.style,L=I&&I[0];if(K)J.style=q([['line-height'],[/^font-family$/,null,!C?s(n.font_style,'family'):null],[/^font-size$/,null,!C?s(n.fontSize_style,'size'):null],[/^color$/,null,!C?s(n.colorButton_foreStyle,'color'):null],[/^background-color$/,null,!C?s(n.colorButton_backStyle,'color'):null]])(K,E)||'';return null;},b:r(n.coreStyles_bold),i:r(n.coreStyles_italic),u:r(n.coreStyles_underline),s:r(n.coreStyles_strike),sup:r(n.coreStyles_superscript),sub:r(n.coreStyles_subscript),a:function(E){var F=E.attributes;if(F&&!F.href&&F.name)delete E.name;},'cke:listbullet':function(E){if(E.getAncestor(/h\d/)&&!n.pasteFromWordNumberedHeadingToList)delete E.name;}},attributeNames:[[/^onmouse(:?out|over)/,''],[/^onload$/,''],[/(?:v|o):\w+/,''],[/^lang/,'']],attributes:{style:q(D?[[/^margin$|^margin-(?!bottom|top)/,null,function(E,F,G){if(F.name in {p:1,div:1}){var H=n.contentsLangDirection=='ltr'?'margin-left':'margin-right';if(G=='margin')E=A(G,E,[H])[H];else if(G!=H)return null;if(E&&!d.test(E))return[H,E];}return null;}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(E,F){if(F.name=='img')return E;
+}],[/^width|height$/,null,function(E,F){if(F.name in {table:1,td:1,th:1,img:1})return E;}]]:[[/^mso-/],[/-color$/,null,function(E){if(E=='transparent')return false;if(CKEDITOR.env.gecko)return E.replace(/-moz-use-text-color/g,'transparent');}],[/^margin$/,d],['text-indent','0cm'],['page-break-before'],['tab-stops'],['display','none'],C?[/font-?/]:null],D),width:function(E,F){if(F.name in l.$tableContent)return false;},border:function(E,F){if(F.name in l.$tableContent)return false;},'class':p,bgcolor:p,valign:D?p:function(E,F){F.addStyle('vertical-align',E);return false;}},comment:!CKEDITOR.env.ie?function(E,F){var G=E.match(/<img.*?>/),H=E.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);if(H){var I=H[1]||G&&'l.',J=I&&I.match(/>([^\s]+?)([.)]?)</);return t(J,I);}if(CKEDITOR.env.gecko&&G){var K=CKEDITOR.htmlParser.fragment.fromHtml(G[0]).children[0],L=F.previous,M=L&&L.value.match(/<v:imagedata[^>]*o:href=['"](.*?)['"]/),N=M&&M[1];N&&(K.attributes.src=N);return K;}return false;}:p};}};var j=function(){this.dataFilter=new CKEDITOR.htmlParser.filter();};j.prototype={toHtml:function(k){var l=CKEDITOR.htmlParser.fragment.fromHtml(k,false),m=new CKEDITOR.htmlParser.basicWriter();l.writeHtml(m,this.dataFilter);return m.getHtml(true);}};CKEDITOR.cleanWord=function(k,l){if(CKEDITOR.env.gecko)k=k.replace(/(<!--\[if[^<]*?\])-->([\S\s]*?)<!--(\[endif\]-->)/gi,'$1$2$3');var m=new j(),n=m.dataFilter;n.addRules(CKEDITOR.plugins.pastefromword.getRules(l));l.fire('beforeCleanWord',{filter:n});try{k=m.toHtml(k,false);}catch(o){alert(l.lang.pastefromword.error);}k=k.replace(/cke:.*?".*?"/g,'');k=k.replace(/style=""/g,'');k=k.replace(/<span>/g,'');return k;};})();
diff --git a/modules_v2/ckeditor/plugins/pastetext/dialogs/pastetext.js b/modules_v2/ckeditor/plugins/pastetext/dialogs/pastetext.js new file mode 100644 index 0000000000..a269a14d9a --- /dev/null +++ b/modules_v2/ckeditor/plugins/pastetext/dialogs/pastetext.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){CKEDITOR.dialog.add('pastetext',function(a){return{title:a.lang.pasteText.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?368:350,minHeight:240,onShow:function(){this.getContentElement('general','content').getInputElement().setValue('');},onOk:function(){var b=this.getContentElement('general','content').getInputElement().getValue(),c=this.getParentEditor();setTimeout(function(){c.fire('paste',{text:b});},0);},contents:[{label:a.lang.common.generalTab,id:'general',elements:[{type:'html',id:'pasteMsg',html:'<div style="white-space:normal;width:340px;">'+a.lang.clipboard.pasteMsg+'</div>'},{type:'textarea',id:'content',className:'cke_pastetext',onLoad:function(){var b=this.getDialog().getContentElement('general','pasteMsg').getElement(),c=this.getElement().getElementsByTag('textarea').getItem(0);c.setAttribute('aria-labelledby',b.$.id);c.setStyle('direction',a.config.contentsLangDirection);},focus:function(){this.getElement().focus();}}]}]};});})();
diff --git a/modules_v2/ckeditor/plugins/placeholder/dialogs/placeholder.js b/modules_v2/ckeditor/plugins/placeholder/dialogs/placeholder.js new file mode 100644 index 0000000000..5b14135086 --- /dev/null +++ b/modules_v2/ckeditor/plugins/placeholder/dialogs/placeholder.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){function a(b,c){var d=b.lang.placeholder,e=b.lang.common.generalTab;return{title:d.title,minWidth:300,minHeight:80,contents:[{id:'info',label:e,title:e,elements:[{id:'text',type:'text',style:'width: 100%;',label:d.text,'default':'',required:true,validate:CKEDITOR.dialog.validate.notEmpty(d.textMissing),setup:function(f){if(c)this.setValue(f.getText().slice(2,-2));},commit:function(f){var g='[['+this.getValue()+']]';CKEDITOR.plugins.placeholder.createPlaceholder(b,f,g);}}]}],onShow:function(){if(c){var f=b.getSelection().getRanges()[0];f.shrink(CKEDITOR.SHRINK_TEXT);var g=f.startContainer;while(g&&!(g.type==CKEDITOR.NODE_ELEMENT&&g.data('cke-placeholder')))g=g.getParent();this._element=g;}this.setupContent(this._element);},onOk:function(){this.commitContent(this._element);delete this._element;}};};CKEDITOR.dialog.add('createplaceholder',function(b){return a(b);});CKEDITOR.dialog.add('editplaceholder',function(b){return a(b,1);});})();
diff --git a/modules_v2/ckeditor/plugins/placeholder/lang/en.js b/modules_v2/ckeditor/plugins/placeholder/lang/en.js new file mode 100644 index 0000000000..f7e85122e4 --- /dev/null +++ b/modules_v2/ckeditor/plugins/placeholder/lang/en.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang('placeholder','en',{placeholder:{title:'Placeholder Properties',toolbar:'Create Placeholder',text:'Placeholder Text',edit:'Edit Placeholder',textMissing:'The placeholder must contain text.'}});
diff --git a/modules_v2/ckeditor/plugins/placeholder/placeholder.gif b/modules_v2/ckeditor/plugins/placeholder/placeholder.gif Binary files differnew file mode 100644 index 0000000000..c07078c176 --- /dev/null +++ b/modules_v2/ckeditor/plugins/placeholder/placeholder.gif diff --git a/modules_v2/ckeditor/plugins/placeholder/plugin.js b/modules_v2/ckeditor/plugins/placeholder/plugin.js new file mode 100644 index 0000000000..15f04aad39 --- /dev/null +++ b/modules_v2/ckeditor/plugins/placeholder/plugin.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a=/\[\[[^\]]+\]\]/g;CKEDITOR.plugins.add('placeholder',{requires:['dialog'],lang:['en'],init:function(b){var c=b.lang.placeholder;b.addCommand('createplaceholder',new CKEDITOR.dialogCommand('createplaceholder'));b.addCommand('editplaceholder',new CKEDITOR.dialogCommand('editplaceholder'));b.ui.addButton('CreatePlaceholder',{label:c.toolbar,command:'createplaceholder',icon:this.path+'placeholder.gif'});if(b.addMenuItems){b.addMenuGroup('placeholder',20);b.addMenuItems({editplaceholder:{label:c.edit,command:'editplaceholder',group:'placeholder',order:1,icon:this.path+'placeholder.gif'}});if(b.contextMenu)b.contextMenu.addListener(function(d,e){if(!d||!d.data('cke-placeholder'))return null;return{editplaceholder:CKEDITOR.TRISTATE_OFF};});}b.on('doubleclick',function(d){var e=d.data.element;if(e.data('cke-placeholder'))d.data.dialog='editplaceholder';});b.addCss('.cke_placeholder{background-color: #ffff00;'+(CKEDITOR.env.gecko?'cursor: default;':'')+'}');b.on('contentDom',function(){b.document.getBody().on('resizestart',function(d){if(b.getSelection().getSelectedElement().data('cke-placeholder'))d.data.preventDefault();});});CKEDITOR.dialog.add('createplaceholder',this.path+'dialogs/placeholder.js');CKEDITOR.dialog.add('editplaceholder',this.path+'dialogs/placeholder.js');},afterInit:function(b){var c=b.dataProcessor,d=c&&c.dataFilter,e=c&&c.htmlFilter;if(d)d.addRules({text:function(f){return f.replace(a,function(g){return CKEDITOR.plugins.placeholder.createPlaceholder(b,null,g,1);});}});if(e)e.addRules({elements:{span:function(f){if(f.attributes&&f.attributes['data-cke-placeholder'])delete f.name;}}});}});})();CKEDITOR.plugins.placeholder={createPlaceholder:function(a,b,c,d){var e=new CKEDITOR.dom.element('span',a.document);e.setAttributes({contentEditable:'false','data-cke-placeholder':1,'class':'cke_placeholder'});c&&e.setText(c);if(d)return e.getOuterHtml();if(b){if(CKEDITOR.env.ie){e.insertAfter(b);setTimeout(function(){b.remove();e.focus();},10);}else e.replace(b);}else a.insertElement(e);}};
diff --git a/modules_v2/ckeditor/plugins/scayt/dialogs/options.js b/modules_v2/ckeditor/plugins/scayt/dialogs/options.js new file mode 100644 index 0000000000..350afd6bcd --- /dev/null +++ b/modules_v2/ckeditor/plugins/scayt/dialogs/options.js @@ -0,0 +1,8 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('scaytcheck',function(a){var b=true,c,d=CKEDITOR.document,e=[],f,g=[],h=0,i=['dic_create,dic_restore','dic_rename,dic_delete'],j=['mixedCase','mixedWithDigits','allCaps','ignoreDomainNames'];function k(){return document.forms.optionsbar.options;};function l(){return document.forms.languagesbar.scayt_lang;};function m(y,z){if(!y)return;var A=y.length;if(A==undefined){y.checked=y.value==z.toString();return;}for(var B=0;B<A;B++){y[B].checked=false;if(y[B].value==z.toString())y[B].checked=true;}};var n=a.lang.scayt,o=[{id:'options',label:n.optionsTab,elements:[{type:'html',id:'options',html:'<form name="optionsbar"><div class="inner_options">\t<div class="messagebox"></div>\t<div style="display:none;">\t\t<input type="checkbox" name="options" id="allCaps" />\t\t<label for="allCaps" id="label_allCaps"></label>\t</div>\t<div style="display:none;">\t\t<input name="options" type="checkbox" id="ignoreDomainNames" />\t\t<label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>\t</div>\t<div style="display:none;">\t<input name="options" type="checkbox" id="mixedCase" />\t\t<label for="mixedCase" id="label_mixedCase"></label>\t</div>\t<div style="display:none;">\t\t<input name="options" type="checkbox" id="mixedWithDigits" />\t\t<label for="mixedWithDigits" id="label_mixedWithDigits"></label>\t</div></div></form>'}]},{id:'langs',label:n.languagesTab,elements:[{type:'html',id:'langs',html:'<form name="languagesbar"><div class="inner_langs">\t<div class="messagebox"></div>\t <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol" ></div> <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol"></div></div></form>'}]},{id:'dictionaries',label:n.dictionariesTab,elements:[{type:'html',style:'',id:'dictionaries',html:'<form name="dictionarybar"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">\t<div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>\t<div style="margin:5px auto; width:80%;white-space:normal;"> <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>\t\t<span class="cke_dialog_ui_labeled_content" >\t\t\t<div class="cke_dialog_ui_input_text">\t\t\t\t<input id="dic_name" type="text" class="cke_dialog_ui_input_text"/>\t\t</div></span></div>\t\t<div style="margin:5px auto; width:80%;white-space:normal;">\t\t\t<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create">\t\t\t\t</a>\t\t\t<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete">\t\t\t\t</a>\t\t\t<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename">\t\t\t\t</a>\t\t\t<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore">\t\t\t\t</a>\t\t</div>\t<div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div></div></form>'}]},{id:'about',label:n.aboutTab,elements:[{type:'html',id:'about',style:'margin: 5px 5px;',html:'<div id="scayt_about"></div>'}]}],p={title:n.title,minWidth:360,minHeight:220,onShow:function(){var y=this;
+y.data=a.fire('scaytDialog',{});y.options=y.data.scayt_control.option();y.sLang=y.data.scayt_control.sLang;if(!y.data||!y.data.scayt||!y.data.scayt_control){alert('Error loading application service');y.hide();return;}var z=0;if(b)y.data.scayt.getCaption(a.langCode||'en',function(A){if(z++>0)return;c=A;r.apply(y);s.apply(y);b=false;});else s.apply(y);y.selectPage(y.data.tab);},onOk:function(){var y=this.data.scayt_control;y.option(this.options);var z=this.chosed_lang;y.setLang(z);y.refresh();},onCancel:function(){var y=k();for(var z in y)y[z].checked=false;m(l(),'');},contents:g},q=CKEDITOR.plugins.scayt.getScayt(a);e=CKEDITOR.plugins.scayt.uiTabs;for(f in e){if(e[f]==1)g[g.length]=o[f];}if(e[2]==1)h=1;var r=function(){var y=this,z=y.data.scayt.getLangList(),A=['dic_create','dic_delete','dic_rename','dic_restore'],B=j,C;if(h){for(C=0;C<A.length;C++){var D=A[C];d.getById(D).setHtml('<span class="cke_dialog_ui_button">'+c['button_'+D]+'</span>');}d.getById('dic_info').setHtml(c.dic_info);}if(e[0]==1)for(C in B){var E='label_'+B[C],F=d.getById(E);if('undefined'!=typeof F&&'undefined'!=typeof c[E]&&'undefined'!=typeof y.options[B[C]]){F.setHtml(c[E]);var G=F.getParent();G.$.style.display='block';}}var H='<p><img src="'+window.scayt.getAboutInfo().logoURL+'" /></p>'+'<p>'+c.version+window.scayt.getAboutInfo().version.toString()+'</p>'+'<p>'+c.about_throwt_copy+'</p>';d.getById('scayt_about').setHtml(H);var I=function(S,T){var U=d.createElement('label');U.setAttribute('for','cke_option'+S);U.setHtml(T[S]);if(y.sLang==S)y.chosed_lang=S;var V=d.createElement('div'),W=CKEDITOR.dom.element.createFromHtml('<input id="cke_option'+S+'" type="radio" '+(y.sLang==S?'checked="checked"':'')+' value="'+S+'" name="scayt_lang" />');W.on('click',function(){this.$.checked=true;y.chosed_lang=S;});V.append(W);V.append(U);return{lang:T[S],code:S,radio:V};},J=[];if(e[1]==1){for(C in z.rtl)J[J.length]=I(C,z.ltr);for(C in z.ltr)J[J.length]=I(C,z.ltr);J.sort(function(S,T){return T.lang>S.lang?-1:1;});var K=d.getById('scayt_lcol'),L=d.getById('scayt_rcol');for(C=0;C<J.length;C++){var M=C<J.length/2?K:L;M.append(J[C].radio);}}var N={};N.dic_create=function(S,T,U){var V=U[0]+','+U[1],W=c.err_dic_create,X=c.succ_dic_create;window.scayt.createUserDictionary(T,function(Y){w(V);v(U[1]);X=X.replace('%s',Y.dname);u(X);},function(Y){W=W.replace('%s',Y.dname);t(W+'( '+(Y.message||'')+')');});};N.dic_rename=function(S,T){var U=c.err_dic_rename||'',V=c.succ_dic_rename||'';window.scayt.renameUserDictionary(T,function(W){V=V.replace('%s',W.dname);
+x(T);u(V);},function(W){U=U.replace('%s',W.dname);x(T);t(U+'( '+(W.message||'')+' )');});};N.dic_delete=function(S,T,U){var V=U[0]+','+U[1],W=c.err_dic_delete,X=c.succ_dic_delete;window.scayt.deleteUserDictionary(function(Y){X=X.replace('%s',Y.dname);w(V);v(U[0]);x('');u(X);},function(Y){W=W.replace('%s',Y.dname);t(W);});};N.dic_restore=y.dic_restore||(function(S,T,U){var V=U[0]+','+U[1],W=c.err_dic_restore,X=c.succ_dic_restore;window.scayt.restoreUserDictionary(T,function(Y){X=X.replace('%s',Y.dname);w(V);v(U[1]);u(X);},function(Y){W=W.replace('%s',Y.dname);t(W);});});function O(S){var T=d.getById('dic_name').getValue();if(!T){t(' Dictionary name should not be empty. ');return false;}try{var U=id=S.data.getTarget().getParent(),V=U.getId();N[V].apply(null,[U,T,i]);}catch(W){t(' Dictionary error. ');}return true;};var P=(i[0]+','+i[1]).split(','),Q;for(C=0,Q=P.length;C<Q;C+=1){var R=d.getById(P[C]);if(R)R.on('click',O,this);}},s=function(){var y=this;if(e[0]==1){var z=k();for(var A=0,B=z.length;A<B;A++){var C=z[A].id,D=d.getById(C);if(D){z[A].checked=false;if(y.options[C]==1)z[A].checked=true;if(b)D.on('click',function(){y.options[this.getId()]=this.$.checked?1:0;});}}}if(e[1]==1){var E=d.getById('cke_option'+y.sLang);m(E.$,y.sLang);}if(h){window.scayt.getNameUserDictionary(function(F){var G=F.dname;w(i[0]+','+i[1]);if(G){d.getById('dic_name').setValue(G);v(i[1]);}else v(i[0]);},function(){d.getById('dic_name').setValue('');});u('');}};function t(y){d.getById('dic_message').setHtml('<span style="color:red;">'+y+'</span>');};function u(y){d.getById('dic_message').setHtml('<span style="color:blue;">'+y+'</span>');};function v(y){y=String(y);var z=y.split(',');for(var A=0,B=z.length;A<B;A+=1)d.getById(z[A]).$.style.display='inline';};function w(y){y=String(y);var z=y.split(',');for(var A=0,B=z.length;A<B;A+=1)d.getById(z[A]).$.style.display='none';};function x(y){d.getById('dic_name').$.value=y;};return p;});
diff --git a/modules_v2/ckeditor/plugins/scayt/dialogs/toolbar.css b/modules_v2/ckeditor/plugins/scayt/dialogs/toolbar.css new file mode 100644 index 0000000000..91d30483a4 --- /dev/null +++ b/modules_v2/ckeditor/plugins/scayt/dialogs/toolbar.css @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+a{text-decoration:none;padding:2px 4px 4px 6px;display:block;border-width:1px;border-style:solid;margin:0;}a.cke_scayt_toogle:hover,a.cke_scayt_toogle:focus,a.cke_scayt_toogle:active{border-color:#316ac5;background-color:#dff1ff;color:#000;cursor:pointer;margin:0;}a.cke_scayt_toogle{color:#316ac5;border-color:#fff;}.scayt_enabled a.cke_scayt_item{color:#316ac5;border-color:#fff;margin:0;}.scayt_disabled a.cke_scayt_item{color:gray;border-color:#fff;}.scayt_enabled a.cke_scayt_item:hover,.scayt_enabled a.cke_scayt_item:focus,.scayt_enabled a.cke_scayt_item:active{border-color:#316ac5;background-color:#dff1ff;color:#000;cursor:pointer;}.scayt_disabled a.cke_scayt_item:hover,.scayt_disabled a.cke_scayt_item:focus,.scayt_disabled a.cke_scayt_item:active{border-color:gray;background-color:#dff1ff;color:gray;cursor:no-drop;}.cke_scayt_set_on,.cke_scayt_set_off{display:none;}.scayt_enabled .cke_scayt_set_on{display:none;}.scayt_disabled .cke_scayt_set_on{display:inline;}.scayt_disabled .cke_scayt_set_off{display:none;}.scayt_enabled .cke_scayt_set_off{display:inline;}
diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_address.png b/modules_v2/ckeditor/plugins/showblocks/images/block_address.png Binary files differnew file mode 100644 index 0000000000..73df14e1b4 --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_address.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_blockquote.png b/modules_v2/ckeditor/plugins/showblocks/images/block_blockquote.png Binary files differnew file mode 100644 index 0000000000..d0aec735ad --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_blockquote.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_div.png b/modules_v2/ckeditor/plugins/showblocks/images/block_div.png Binary files differnew file mode 100644 index 0000000000..f065ba6223 --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_div.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_h1.png b/modules_v2/ckeditor/plugins/showblocks/images/block_h1.png Binary files differnew file mode 100644 index 0000000000..dc9d3ee0e6 --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_h1.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_h2.png b/modules_v2/ckeditor/plugins/showblocks/images/block_h2.png Binary files differnew file mode 100644 index 0000000000..8d0c119e2e --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_h2.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_h3.png b/modules_v2/ckeditor/plugins/showblocks/images/block_h3.png Binary files differnew file mode 100644 index 0000000000..52bf9e3215 --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_h3.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_h4.png b/modules_v2/ckeditor/plugins/showblocks/images/block_h4.png Binary files differnew file mode 100644 index 0000000000..9a79b08eb5 --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_h4.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_h5.png b/modules_v2/ckeditor/plugins/showblocks/images/block_h5.png Binary files differnew file mode 100644 index 0000000000..8001088f0a --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_h5.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_h6.png b/modules_v2/ckeditor/plugins/showblocks/images/block_h6.png Binary files differnew file mode 100644 index 0000000000..998fac021d --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_h6.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_p.png b/modules_v2/ckeditor/plugins/showblocks/images/block_p.png Binary files differnew file mode 100644 index 0000000000..9220a16e16 --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_p.png diff --git a/modules_v2/ckeditor/plugins/showblocks/images/block_pre.png b/modules_v2/ckeditor/plugins/showblocks/images/block_pre.png Binary files differnew file mode 100644 index 0000000000..b3e4ed79f1 --- /dev/null +++ b/modules_v2/ckeditor/plugins/showblocks/images/block_pre.png diff --git a/modules_v2/ckeditor/plugins/smiley/dialogs/smiley.js b/modules_v2/ckeditor/plugins/smiley/dialogs/smiley.js new file mode 100644 index 0000000000..761db90c81 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/dialogs/smiley.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('smiley',function(a){var b=a.config,c=a.lang.smiley,d=b.smiley_images,e=b.smiley_columns||8,f,g,h=function(o){var p=o.data.getTarget(),q=p.getName();if(q=='a')p=p.getChild(0);else if(q!='img')return;var r=p.getAttribute('cke_src'),s=p.getAttribute('title'),t=a.document.createElement('img',{attributes:{src:r,'data-cke-saved-src':r,title:s,alt:s,width:p.$.width,height:p.$.height}});a.insertElement(t);g.hide();o.data.preventDefault();},i=CKEDITOR.tools.addFunction(function(o,p){o=new CKEDITOR.dom.event(o);p=new CKEDITOR.dom.element(p);var q,r,s=o.getKeystroke(),t=a.lang.dir=='rtl';switch(s){case 38:if(q=p.getParent().getParent().getPrevious()){r=q.getChild([p.getParent().getIndex(),0]);r.focus();}o.preventDefault();break;case 40:if(q=p.getParent().getParent().getNext()){r=q.getChild([p.getParent().getIndex(),0]);if(r)r.focus();}o.preventDefault();break;case 32:h({data:o});o.preventDefault();break;case t?37:39:case 9:if(q=p.getParent().getNext()){r=q.getChild(0);r.focus();o.preventDefault(true);}else if(q=p.getParent().getParent().getNext()){r=q.getChild([0,0]);if(r)r.focus();o.preventDefault(true);}break;case t?39:37:case CKEDITOR.SHIFT+9:if(q=p.getParent().getPrevious()){r=q.getChild(0);r.focus();o.preventDefault(true);}else if(q=p.getParent().getParent().getPrevious()){r=q.getLast().getChild(0);r.focus();o.preventDefault(true);}break;default:return;}}),j=CKEDITOR.tools.getNextId()+'_smiley_emtions_label',k=['<div><span id="'+j+'" class="cke_voice_label">'+c.options+'</span>','<table role="listbox" aria-labelledby="'+j+'" style="width:100%;height:100%" cellspacing="2" cellpadding="2"',CKEDITOR.env.ie&&CKEDITOR.env.quirks?' style="position:absolute;"':'','><tbody>'],l=d.length;for(f=0;f<l;f++){if(f%e===0)k.push('<tr>');var m='cke_smile_label_'+f+'_'+CKEDITOR.tools.getNextNumber();k.push('<td class="cke_dark_background cke_centered" style="vertical-align: middle;"><a href="javascript:void(0)" role="option"',' aria-posinset="'+(f+1)+'"',' aria-setsize="'+l+'"',' aria-labelledby="'+m+'"',' class="cke_smile cke_hand" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ',i,', event, this );">','<img class="cke_hand" title="',b.smiley_descriptions[f],'" cke_src="',CKEDITOR.tools.htmlEncode(b.smiley_path+d[f]),'" alt="',b.smiley_descriptions[f],'"',' src="',CKEDITOR.tools.htmlEncode(b.smiley_path+d[f]),'"',CKEDITOR.env.ie?" onload=\"this.setAttribute('width', 2); this.removeAttribute('width');\" ":'','><span id="'+m+'" class="cke_voice_label">'+b.smiley_descriptions[f]+'</span>'+'</a>','</td>');
+if(f%e==e-1)k.push('</tr>');}if(f<e-1){for(;f<e-1;f++)k.push('<td></td>');k.push('</tr>');}k.push('</tbody></table></div>');var n={type:'html',html:k.join(''),onLoad:function(o){g=o.sender;},focus:function(){var o=this;setTimeout(function(){var p=o.getElement().getElementsByTag('a').getItem(0);p.focus();},0);},onClick:h,style:'width: 100%; border-collapse: separate;'};return{title:a.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:'tab1',label:'',title:'',expand:true,padding:0,elements:[n]}],buttons:[CKEDITOR.dialog.cancelButton]};});
diff --git a/modules_v2/ckeditor/plugins/smiley/images/angel_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/angel_smile.gif Binary files differnew file mode 100644 index 0000000000..2cf4894758 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/angel_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/angry_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/angry_smile.gif Binary files differnew file mode 100644 index 0000000000..40b52d3a77 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/angry_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/broken_heart.gif b/modules_v2/ckeditor/plugins/smiley/images/broken_heart.gif Binary files differnew file mode 100644 index 0000000000..b6d0166a47 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/broken_heart.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/confused_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/confused_smile.gif Binary files differnew file mode 100644 index 0000000000..a52db7a4e5 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/confused_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/cry_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/cry_smile.gif Binary files differnew file mode 100644 index 0000000000..1ef6ba4fb5 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/cry_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/devil_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/devil_smile.gif Binary files differnew file mode 100644 index 0000000000..bfb25077de --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/devil_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/embaressed_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/embaressed_smile.gif Binary files differnew file mode 100644 index 0000000000..d9cedc56bd --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/embaressed_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/envelope.gif b/modules_v2/ckeditor/plugins/smiley/images/envelope.gif Binary files differnew file mode 100644 index 0000000000..94e0b1fa59 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/envelope.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/heart.gif b/modules_v2/ckeditor/plugins/smiley/images/heart.gif Binary files differnew file mode 100644 index 0000000000..680ae2fc1c --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/heart.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/kiss.gif b/modules_v2/ckeditor/plugins/smiley/images/kiss.gif Binary files differnew file mode 100644 index 0000000000..70e5255141 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/kiss.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/lightbulb.gif b/modules_v2/ckeditor/plugins/smiley/images/lightbulb.gif Binary files differnew file mode 100644 index 0000000000..d44c2ffe6a --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/lightbulb.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/omg_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/omg_smile.gif Binary files differnew file mode 100644 index 0000000000..ab7ea69968 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/omg_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/regular_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/regular_smile.gif Binary files differnew file mode 100644 index 0000000000..e5bc34be36 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/regular_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/sad_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/sad_smile.gif Binary files differnew file mode 100644 index 0000000000..ae4cf1e35b --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/sad_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/shades_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/shades_smile.gif Binary files differnew file mode 100644 index 0000000000..b454017503 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/shades_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/teeth_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/teeth_smile.gif Binary files differnew file mode 100644 index 0000000000..7d734d1548 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/teeth_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/thumbs_down.gif b/modules_v2/ckeditor/plugins/smiley/images/thumbs_down.gif Binary files differnew file mode 100644 index 0000000000..90b9978c09 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/thumbs_down.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/thumbs_up.gif b/modules_v2/ckeditor/plugins/smiley/images/thumbs_up.gif Binary files differnew file mode 100644 index 0000000000..b6332848df --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/thumbs_up.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/tounge_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/tounge_smile.gif Binary files differnew file mode 100644 index 0000000000..b2e657fa32 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/tounge_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif Binary files differnew file mode 100644 index 0000000000..77098821c6 --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif diff --git a/modules_v2/ckeditor/plugins/smiley/images/wink_smile.gif b/modules_v2/ckeditor/plugins/smiley/images/wink_smile.gif Binary files differnew file mode 100644 index 0000000000..b21029548f --- /dev/null +++ b/modules_v2/ckeditor/plugins/smiley/images/wink_smile.gif diff --git a/modules_v2/ckeditor/plugins/specialchar/dialogs/specialchar.js b/modules_v2/ckeditor/plugins/specialchar/dialogs/specialchar.js new file mode 100644 index 0000000000..2e2ae87e51 --- /dev/null +++ b/modules_v2/ckeditor/plugins/specialchar/dialogs/specialchar.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('specialchar',function(a){var b,c=a.lang.specialChar,d=function(j){var k,l;if(j.data)k=j.data.getTarget();else k=new CKEDITOR.dom.element(j);if(k.getName()=='a'&&(l=k.getChild(0).getHtml())){k.removeClass('cke_light_background');b.hide();a.insertHtml(l);}},e=CKEDITOR.tools.addFunction(d),f,g=function(j,k){var l;k=k||j.data.getTarget();if(k.getName()=='span')k=k.getParent();if(k.getName()=='a'&&(l=k.getChild(0).getHtml())){if(f)h(null,f);var m=b.getContentElement('info','htmlPreview').getElement();b.getContentElement('info','charPreview').getElement().setHtml(l);m.setHtml(CKEDITOR.tools.htmlEncode(l));k.getParent().addClass('cke_light_background');f=k;}},h=function(j,k){k=k||j.data.getTarget();if(k.getName()=='span')k=k.getParent();if(k.getName()=='a'){b.getContentElement('info','charPreview').getElement().setHtml(' ');b.getContentElement('info','htmlPreview').getElement().setHtml(' ');k.getParent().removeClass('cke_light_background');f=undefined;}},i=CKEDITOR.tools.addFunction(function(j){j=new CKEDITOR.dom.event(j);var k=j.getTarget(),l,m,n=j.getKeystroke(),o=a.lang.dir=='rtl';switch(n){case 38:if(l=k.getParent().getParent().getPrevious()){m=l.getChild([k.getParent().getIndex(),0]);m.focus();h(null,k);g(null,m);}j.preventDefault();break;case 40:if(l=k.getParent().getParent().getNext()){m=l.getChild([k.getParent().getIndex(),0]);if(m&&m.type==1){m.focus();h(null,k);g(null,m);}}j.preventDefault();break;case 32:d({data:j});j.preventDefault();break;case o?37:39:case 9:if(l=k.getParent().getNext()){m=l.getChild(0);if(m.type==1){m.focus();h(null,k);g(null,m);j.preventDefault(true);}else h(null,k);}else if(l=k.getParent().getParent().getNext()){m=l.getChild([0,0]);if(m&&m.type==1){m.focus();h(null,k);g(null,m);j.preventDefault(true);}else h(null,k);}break;case o?39:37:case CKEDITOR.SHIFT+9:if(l=k.getParent().getPrevious()){m=l.getChild(0);m.focus();h(null,k);g(null,m);j.preventDefault(true);}else if(l=k.getParent().getParent().getPrevious()){m=l.getLast().getChild(0);m.focus();h(null,k);g(null,m);j.preventDefault(true);}else h(null,k);break;default:return;}});return{title:c.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){var j=this.definition.charColumns,k=a.config.extraSpecialChars,l=a.config.specialChars,m=CKEDITOR.tools.getNextId()+'_specialchar_table_label',n=['<table role="listbox" aria-labelledby="'+m+'"'+' style="width: 320px; height: 100%; border-collapse: separate;"'+' align="center" cellspacing="2" cellpadding="2" border="0">'],o=0,p=l.length,q,r;
+while(o<p){n.push('<tr>');for(var s=0;s<j;s++,o++){if(q=l[o]){r='';if(q instanceof Array){r=q[1];q=q[0];}else{var t=q.toLowerCase().replace('&','').replace(';','').replace('#','');r=c[t]||q;}var u='cke_specialchar_label_'+o+'_'+CKEDITOR.tools.getNextNumber();n.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+(o+1)+'"',' aria-setsize="'+p+'"',' aria-labelledby="'+u+'"',' style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="',CKEDITOR.tools.htmlEncode(r),'" onkeydown="CKEDITOR.tools.callFunction( '+i+', event, this )"'+' onclick="CKEDITOR.tools.callFunction('+e+', this); return false;"'+' tabindex="-1">'+'<span style="margin: 0 auto;cursor: inherit">'+q+'</span>'+'<span class="cke_voice_label" id="'+u+'">'+r+'</span></a>');}else n.push('<td class="cke_dark_background"> ');n.push('</td>');}n.push('</tr>');}n.push('</tbody></table>','<span id="'+m+'" class="cke_voice_label">'+c.options+'</span>');this.getContentElement('info','charContainer').getElement().setHtml(n.join(''));},contents:[{id:'info',label:a.lang.common.generalTab,title:a.lang.common.generalTab,padding:0,align:'top',elements:[{type:'hbox',align:'top',widths:['320px','90px'],children:[{type:'html',id:'charContainer',html:'',onMouseover:g,onMouseout:h,focus:function(){var j=this.getElement().getElementsByTag('a').getItem(0);setTimeout(function(){j.focus();g(null,j);},0);},onShow:function(){var j=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){j.focus();g(null,j);},0);},onLoad:function(j){b=j.sender;}},{type:'hbox',align:'top',widths:['100%'],children:[{type:'vbox',align:'top',children:[{type:'html',html:'<div></div>'},{type:'html',id:'charPreview',className:'cke_dark_background',style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:'<div> </div>'},{type:'html',id:'htmlPreview',className:'cke_dark_background',style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:'<div> </div>'}]}]}]}]}]};});
diff --git a/modules_v2/ckeditor/plugins/specialchar/lang/en.js b/modules_v2/ckeditor/plugins/specialchar/lang/en.js new file mode 100644 index 0000000000..0991bf0ab8 --- /dev/null +++ b/modules_v2/ckeditor/plugins/specialchar/lang/en.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang('specialchar','en',{euro:'EURO SIGN',lsquo:'LEFT SINGLE QUOTATION MARK',rsquo:'RIGHT SINGLE QUOTATION MARK',ldquo:'LEFT DOUBLE QUOTATION MARK',rdquo:'RIGHT DOUBLE QUOTATION MARK',ndash:'EN DASH',mdash:'EM DASH',iexcl:'INVERTED EXCLAMATION MARK',cent:'CENT SIGN',pound:'POUND SIGN',curren:'CURRENCY SIGN',yen:'YEN SIGN',brvbar:'BROKEN BAR',sect:'SECTION SIGN',uml:'DIAERESIS',copy:'COPYRIGHT SIGN',ordf:'FEMININE ORDINAL INDICATOR',laquo:'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK',not:'NOT SIGN',reg:'REGISTERED SIGN',macr:'MACRON',deg:'DEGREE SIGN',sup2:'SUPERSCRIPT TWO',sup3:'SUPERSCRIPT THREE',acute:'ACUTE ACCENT',micro:'MICRO SIGN',para:'PILCROW SIGN',middot:'MIDDLE DOT',cedil:'CEDILLA',sup1:'SUPERSCRIPT ONE',ordm:'MASCULINE ORDINAL INDICATOR',frac14:'VULGAR FRACTION ONE QUARTER',frac12:'VULGAR FRACTION ONE HALF',frac34:'VULGAR FRACTION THREE QUARTERS',iquest:'INVERTED QUESTION MARK',agrave:'LATIN SMALL LETTER A WITH GRAVE',aacute:'LATIN SMALL LETTER A WITH ACUTE',acirc:'LATIN SMALL LETTER A WITH CIRCUMFLEX',atilde:'LATIN SMALL LETTER A WITH TILDE',auml:'LATIN SMALL LETTER A WITH DIAERESIS',aring:'LATIN SMALL LETTER A WITH RING ABOVE',aelig:'LATIN SMALL LETTER AE',ccedil:'LATIN SMALL LETTER C WITH CEDILLA',egrave:'LATIN SMALL LETTER E WITH GRAVE',eacute:'LATIN SMALL LETTER E WITH ACUTE',ecirc:'LATIN SMALL LETTER E WITH CIRCUMFLEX',euml:'LATIN SMALL LETTER E WITH DIAERESIS',igrave:'LATIN SMALL LETTER I WITH GRAVE',iacute:'LATIN SMALL LETTER I WITH ACUTE',icirc:'LATIN SMALL LETTER I WITH CIRCUMFLEX',iuml:'LATIN SMALL LETTER I WITH DIAERESIS',eth:'LATIN SMALL LETTER ETH',ntilde:'LATIN SMALL LETTER N WITH TILDE',ograve:'LATIN SMALL LETTER O WITH GRAVE',oacute:'LATIN SMALL LETTER O WITH ACUTE',ocirc:'LATIN SMALL LETTER O WITH CIRCUMFLEX',otilde:'LATIN SMALL LETTER O WITH TILDE',ouml:'LATIN SMALL LETTER O WITH DIAERESIS',times:'MULTIPLICATION SIGN',oslash:'LATIN SMALL LETTER O WITH STROKE',ugrave:'LATIN SMALL LETTER U WITH GRAVE',uacute:'LATIN SMALL LETTER U WITH ACUTE',ucirc:'LATIN SMALL LETTER U WITH CIRCUMFLEX',uuml:'LATIN SMALL LETTER U WITH DIAERESIS',yacute:'LATIN SMALL LETTER Y WITH ACUTE',thorn:'LATIN SMALL LETTER THORN',szlig:'LATIN SMALL LETTER SHARP S',divide:'DIVISION SIGN',yuml:'LATIN SMALL LETTER Y WITH DIAERESIS',oelig:'LATIN SMALL LIGATURE OE',372:'LATIN CAPITAL LETTER W WITH CIRCUMFLEX',374:'LATIN CAPITAL LETTER Y WITH CIRCUMFLEX',373:'LATIN SMALL LETTER W WITH CIRCUMFLEX',375:'LATIN SMALL LETTER Y WITH CIRCUMFLEX',8219:'SINGLE HIGH-REVERSED-9 QUOTATION MARK',bdquo:'DOUBLE LOW-9 QUOTATION MARK',hellip:'HORIZONTAL ELLIPSIS',trade:'TRADE MARK SIGN',9658:'BLACK RIGHT-POINTING POINTER',bull:'BULLET',rarr:'RIGHTWARDS DOUBLE ARROW',harr:'LEFT RIGHT DOUBLE ARROW',diams:'BLACK DIAMOND SUIT',asymp:'ALMOST EQUAL TO',sbquo:'SINGLE LOW-9 QUOTATION MARK'});
diff --git a/modules_v2/ckeditor/plugins/styles/styles/default.js b/modules_v2/ckeditor/plugins/styles/styles/default.js new file mode 100644 index 0000000000..53397c226b --- /dev/null +++ b/modules_v2/ckeditor/plugins/styles/styles/default.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.stylesSet.add('default',[{name:'Blue Title',element:'h3',styles:{color:'Blue'}},{name:'Red Title',element:'h3',styles:{color:'Red'}},{name:'Marker: Yellow',element:'span',styles:{'background-color':'Yellow'}},{name:'Marker: Green',element:'span',styles:{'background-color':'Lime'}},{name:'Big',element:'big'},{name:'Small',element:'small'},{name:'Typewriter',element:'tt'},{name:'Computer Code',element:'code'},{name:'Keyboard Phrase',element:'kbd'},{name:'Sample Text',element:'samp'},{name:'Variable',element:'var'},{name:'Deleted Text',element:'del'},{name:'Inserted Text',element:'ins'},{name:'Cited Work',element:'cite'},{name:'Inline Quotation',element:'q'},{name:'Language: RTL',element:'span',attributes:{dir:'rtl'}},{name:'Language: LTR',element:'span',attributes:{dir:'ltr'}},{name:'Image on Left',element:'img',attributes:{style:'padding: 5px; margin-right: 5px',border:'2',align:'left'}},{name:'Image on Right',element:'img',attributes:{style:'padding: 5px; margin-left: 5px',border:'2',align:'right'}},{name:'Borderless Table',element:'table',styles:{'border-style':'hidden','background-color':'#E6E6FA'}},{name:'Square Bulleted List',element:'ul',styles:{'list-style-type':'square'}}]);
diff --git a/modules_v2/ckeditor/plugins/table/dialogs/table.js b/modules_v2/ckeditor/plugins/table/dialogs/table.js new file mode 100644 index 0000000000..34c9160642 --- /dev/null +++ b/modules_v2/ckeditor/plugins/table/dialogs/table.js @@ -0,0 +1,9 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a=/^(\d+(?:\.\d+)?)(px|%)$/,b=/^(\d+(?:\.\d+)?)px$/,c=function(e){var f=this.id;if(!e.info)e.info={};e.info[f]=this.getValue();};function d(e,f){var g=function(i){return new CKEDITOR.dom.element(i,e.document);},h=e.plugins.dialogadvtab;return{title:e.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie?310:280,onLoad:function(){var i=this,j=i.getContentElement('advanced','advStyles');if(j)j.on('change',function(k){var l=this.getStyle('width',''),m=i.getContentElement('info','txtWidth'),n=i.getContentElement('info','cmbWidthType'),o=1;if(l){o=l.length<3||l.substr(l.length-1)!='%';l=parseInt(l,10);}m&&m.setValue(l,true);n&&n.setValue(o?'pixels':'percents',true);var p=this.getStyle('height',''),q=i.getContentElement('info','txtHeight');p&&(p=parseInt(p,10));q&&q.setValue(p,true);});},onShow:function(){var q=this;var i=e.getSelection(),j=i.getRanges(),k=null,l=q.getContentElement('info','txtRows'),m=q.getContentElement('info','txtCols'),n=q.getContentElement('info','txtWidth'),o=q.getContentElement('info','txtHeight');if(f=='tableProperties'){if(k=i.getSelectedElement())k=k.getAscendant('table',true);else if(j.length>0){if(CKEDITOR.env.webkit)j[0].shrink(CKEDITOR.NODE_ELEMENT);var p=j[0].getCommonAncestor(true);k=p.getAscendant('table',true);}q._.selectedElement=k;}if(k){q.setupContent(k);l&&l.disable();m&&m.disable();}else{l&&l.enable();m&&m.enable();}n&&n.onChange();o&&o.onChange();},onOk:function(){var D=this;if(D._.selectedElement)var i=e.getSelection(),j=i.createBookmarks();var k=D._.selectedElement||g('table'),l=D,m={};D.commitContent(m,k);if(m.info){var n=m.info;if(!D._.selectedElement){var o=k.append(g('tbody')),p=parseInt(n.txtRows,10)||0,q=parseInt(n.txtCols,10)||0;for(var r=0;r<p;r++){var s=o.append(g('tr'));for(var t=0;t<q;t++){var u=s.append(g('td'));if(!CKEDITOR.env.ie)u.append(g('br'));}}}var v=n.selHeaders;if(!k.$.tHead&&(v=='row'||v=='both')){var w=new CKEDITOR.dom.element(k.$.createTHead());o=k.getElementsByTag('tbody').getItem(0);var x=o.getElementsByTag('tr').getItem(0);for(r=0;r<x.getChildCount();r++){var y=x.getChild(r);if(y.type==CKEDITOR.NODE_ELEMENT&&!y.data('cke-bookmark')){y.renameNode('th');y.setAttribute('scope','col');}}w.append(x.remove());}if(k.$.tHead!==null&&!(v=='row'||v=='both')){w=new CKEDITOR.dom.element(k.$.tHead);o=k.getElementsByTag('tbody').getItem(0);var z=o.getFirst();while(w.getChildCount()>0){x=w.getFirst();for(r=0;r<x.getChildCount();r++){var A=x.getChild(r);if(A.type==CKEDITOR.NODE_ELEMENT){A.renameNode('td');
+A.removeAttribute('scope');}}x.insertBefore(z);}w.remove();}if(!D.hasColumnHeaders&&(v=='col'||v=='both'))for(s=0;s<k.$.rows.length;s++){A=new CKEDITOR.dom.element(k.$.rows[s].cells[0]);A.renameNode('th');A.setAttribute('scope','row');}if(D.hasColumnHeaders&&!(v=='col'||v=='both'))for(r=0;r<k.$.rows.length;r++){s=new CKEDITOR.dom.element(k.$.rows[r]);if(s.getParent().getName()=='tbody'){A=new CKEDITOR.dom.element(s.$.cells[0]);A.renameNode('td');A.removeAttribute('scope');}}var B=[];if(n.txtHeight)k.setStyle('height',CKEDITOR.tools.cssLength(n.txtHeight));else k.removeStyle('height');if(n.txtWidth){var C=n.cmbWidthType||'pixels';k.setStyle('width',n.txtWidth+(C=='pixels'?'px':'%'));}else k.removeStyle('width');if(!k.getAttribute('style'))k.removeAttribute('style');}if(!D._.selectedElement)e.insertElement(k);else i.selectBookmarks(j);return true;},contents:[{id:'info',label:e.lang.table.title,elements:[{type:'hbox',widths:[null,null],styles:['vertical-align:top'],children:[{type:'vbox',padding:0,children:[{type:'text',id:'txtRows','default':3,label:e.lang.table.rows,required:true,style:'width:5em',validate:function(){var i=true,j=this.getValue();i=i&&CKEDITOR.dialog.validate.integer()(j)&&j>0;if(!i){alert(e.lang.table.invalidRows);this.select();}return i;},setup:function(i){this.setValue(i.$.rows.length);},commit:c},{type:'text',id:'txtCols','default':2,label:e.lang.table.columns,required:true,style:'width:5em',validate:function(){var i=true,j=this.getValue();i=i&&CKEDITOR.dialog.validate.integer()(j)&&j>0;if(!i){alert(e.lang.table.invalidCols);this.select();}return i;},setup:function(i){this.setValue(i.$.rows[0].cells.length);},commit:c},{type:'html',html:' '},{type:'select',id:'selHeaders','default':'',label:e.lang.table.headers,items:[[e.lang.table.headersNone,''],[e.lang.table.headersRow,'row'],[e.lang.table.headersColumn,'col'],[e.lang.table.headersBoth,'both']],setup:function(i){var j=this.getDialog();j.hasColumnHeaders=true;for(var k=0;k<i.$.rows.length;k++){if(i.$.rows[k].cells[0].nodeName.toLowerCase()!='th'){j.hasColumnHeaders=false;break;}}if(i.$.tHead!==null)this.setValue(j.hasColumnHeaders?'both':'row');else this.setValue(j.hasColumnHeaders?'col':'');},commit:c},{type:'text',id:'txtBorder','default':1,label:e.lang.table.border,style:'width:3em',validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidBorder),setup:function(i){this.setValue(i.getAttribute('border')||'');},commit:function(i,j){if(this.getValue())j.setAttribute('border',this.getValue());
+else j.removeAttribute('border');}},{id:'cmbAlign',type:'select','default':'',label:e.lang.common.align,items:[[e.lang.common.notSet,''],[e.lang.common.alignLeft,'left'],[e.lang.common.alignCenter,'center'],[e.lang.common.alignRight,'right']],setup:function(i){this.setValue(i.getAttribute('align')||'');},commit:function(i,j){if(this.getValue())j.setAttribute('align',this.getValue());else j.removeAttribute('align');}}]},{type:'vbox',padding:0,children:[{type:'hbox',widths:['5em'],children:[{type:'text',id:'txtWidth',style:'width:5em',label:e.lang.common.width,'default':500,validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidWidth),onLoad:function(){var i=this.getDialog().getContentElement('info','cmbWidthType'),j=i.getElement(),k=this.getInputElement(),l=k.getAttribute('aria-labelledby');k.setAttribute('aria-labelledby',[l,j.$.id].join(' '));},onChange:function(){var i=this.getDialog().getContentElement('advanced','advStyles');if(i){var j=this.getValue();if(j)j+=this.getDialog().getContentElement('info','cmbWidthType').getValue()=='percents'?'%':'px';i.updateStyle('width',j);}},setup:function(i){var j=a.exec(i.$.style.width);if(j)this.setValue(j[1]);else this.setValue('');},commit:c},{id:'cmbWidthType',type:'select',label:e.lang.table.widthUnit,labelStyle:'visibility:hidden','default':'pixels',items:[[e.lang.table.widthPx,'pixels'],[e.lang.table.widthPc,'percents']],setup:function(i){var j=a.exec(i.$.style.width);if(j)this.setValue(j[2]=='px'?'pixels':'percents');},onChange:function(){this.getDialog().getContentElement('info','txtWidth').onChange();},commit:c}]},{type:'hbox',widths:['5em'],children:[{type:'text',id:'txtHeight',style:'width:5em',label:e.lang.common.height,'default':'',validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidHeight),onLoad:function(){var i=this.getDialog().getContentElement('info','htmlHeightType'),j=i.getElement(),k=this.getInputElement(),l=k.getAttribute('aria-labelledby');k.setAttribute('aria-labelledby',[l,j.$.id].join(' '));},onChange:function(){var i=this.getDialog().getContentElement('advanced','advStyles');if(i){var j=this.getValue();i.updateStyle('height',j&&j+'px');}},setup:function(i){var j=b.exec(i.$.style.height);if(j)this.setValue(j[1]);},commit:c},{id:'htmlHeightType',type:'html',html:'<div><br />'+e.lang.table.widthPx+'</div>'}]},{type:'html',html:' '},{type:'text',id:'txtCellSpace',style:'width:3em',label:e.lang.table.cellSpace,'default':1,validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidCellSpacing),setup:function(i){this.setValue(i.getAttribute('cellSpacing')||'');
+},commit:function(i,j){if(this.getValue())j.setAttribute('cellSpacing',this.getValue());else j.removeAttribute('cellSpacing');}},{type:'text',id:'txtCellPad',style:'width:3em',label:e.lang.table.cellPad,'default':1,validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidCellPadding),setup:function(i){this.setValue(i.getAttribute('cellPadding')||'');},commit:function(i,j){if(this.getValue())j.setAttribute('cellPadding',this.getValue());else j.removeAttribute('cellPadding');}}]}]},{type:'html',align:'right',html:''},{type:'vbox',padding:0,children:[{type:'text',id:'txtCaption',label:e.lang.table.caption,setup:function(i){var j=i.getElementsByTag('caption');if(j.count()>0){var k=j.getItem(0);k=CKEDITOR.tools.trim(k.getText());this.setValue(k);}},commit:function(i,j){var k=this.getValue(),l=j.getElementsByTag('caption');if(k){if(l.count()>0){l=l.getItem(0);l.setHtml('');}else{l=new CKEDITOR.dom.element('caption',e.document);if(j.getChildCount())l.insertBefore(j.getFirst());else l.appendTo(j);}l.append(new CKEDITOR.dom.text(k,e.document));}else if(l.count()>0)for(var m=l.count()-1;m>=0;m--)l.getItem(m).remove();}},{type:'text',id:'txtSummary',label:e.lang.table.summary,setup:function(i){this.setValue(i.getAttribute('summary')||'');},commit:function(i,j){if(this.getValue())j.setAttribute('summary',this.getValue());else j.removeAttribute('summary');}}]}]},h&&h.createAdvancedTab(e)]};};CKEDITOR.dialog.add('table',function(e){return d(e,'table');});CKEDITOR.dialog.add('tableProperties',function(e){return d(e,'tableProperties');});})();
diff --git a/modules_v2/ckeditor/plugins/tableresize/plugin.js b/modules_v2/ckeditor/plugins/tableresize/plugin.js new file mode 100644 index 0000000000..eaf3f8b1dc --- /dev/null +++ b/modules_v2/ckeditor/plugins/tableresize/plugin.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a=CKEDITOR.tools.cssLength,b=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks||CKEDITOR.env.version<7);function c(k){return CKEDITOR.env.ie?k.$.clientWidth:parseInt(k.getComputedStyle('width'),10);};function d(k,l){var m=k.getComputedStyle('border-'+l+'-width'),n={thin:'0px',medium:'1px',thick:'2px'};if(m.indexOf('px')<0)if(m in n&&k.getComputedStyle('border-style')!='none')m=n[m];else m=0;return parseInt(m,10);};function e(k){var l=k.$.rows,m=0,n,o,p;for(var q=0,r=l.length;q<r;q++){p=l[q];n=p.cells.length;if(n>m){m=n;o=p;}}return o;};function f(k){var l=[],m=-1,n=k.getComputedStyle('direction')=='rtl',o=e(k),p=new CKEDITOR.dom.element(k.$.tBodies[0]),q=p.getDocumentPosition();for(var r=0,s=o.cells.length;r<s;r++){var t=new CKEDITOR.dom.element(o.cells[r]),u=o.cells[r+1]&&new CKEDITOR.dom.element(o.cells[r+1]);m+=t.$.colSpan||1;var v,w,x,y,z=t.getDocumentPosition().x;n?w=z+d(t,'left'):v=z+t.$.offsetWidth-d(t,'right');if(u){z=u.getDocumentPosition().x;n?v=z+u.$.offsetWidth-d(u,'right'):w=z+d(u,'left');}else{z=k.getDocumentPosition().x;n?v=z:w=z+k.$.offsetWidth;}x=Math.max(w-v,3);y=Math.max(Math.round(7-x/2),0);l.push({table:k,index:m,x:v,y:q.y,width:x,height:p.$.offsetHeight,padding:y,rtl:n});}return l;};function g(k,l){for(var m=0,n=k.length;m<n;m++){var o=k[m],p=o.padding;if(l>=o.x-p&&l<=o.x+o.width+p)return o;}return null;};function h(k){(k.data||k).preventDefault();};function i(k){var l,m,n,o,p,q,r,s,t,u;function v(){l=null;q=0;o=0;m.removeListener('mouseup',A);n.removeListener('mousedown',z);n.removeListener('mousemove',B);m.getBody().setStyle('cursor','auto');b?n.remove():n.hide();};function w(){var D=l.index,E=CKEDITOR.tools.buildTableMap(l.table),F=[],G=[],H=Number.MAX_VALUE,I=H,J=l.rtl;for(var K=0,L=E.length;K<L;K++){var M=E[K],N=M[D+(J?1:0)],O=M[D+(J?0:1)];N=N&&new CKEDITOR.dom.element(N);O=O&&new CKEDITOR.dom.element(O);if(!N||!O||!N.equals(O)){N&&(H=Math.min(H,c(N)));O&&(I=Math.min(I,c(O)));F.push(N);G.push(O);}}r=F;s=G;t=l.x-H;u=l.x+I;n.setOpacity(0.5);p=parseInt(n.getStyle('left'),10);q=0;o=1;n.on('mousemove',B);m.on('dragstart',h);};function x(){o=0;n.setOpacity(0);q&&y();var D=l.table;setTimeout(function(){D.removeCustomData('_cke_table_pillars');},0);m.removeListener('dragstart',h);};function y(){var D=l.rtl,E=D?s.length:r.length;for(var F=0;F<E;F++){var G=r[F],H=s[F],I=l.table;CKEDITOR.tools.setTimeout(function(J,K,L,M,N,O){J&&J.setStyle('width',a(Math.max(K+O,0)));L&&L.setStyle('width',a(Math.max(M-O,0)));if(N)I.setStyle('width',a(N+O*(D?-1:1)));
+},0,this,[G,G&&c(G),H,H&&c(H),(!G||!H)&&c(I)+d(I,'left')+d(I,'right'),q]);}};function z(D){h(D);w();m.on('mouseup',A,this);};function A(D){D.removeListener();x();};function B(D){C(D.data.$.clientX);};m=k.document;n=CKEDITOR.dom.element.createFromHtml('<div data-cke-temp=1 contenteditable=false unselectable=on style="position:absolute;cursor:col-resize;filter:alpha(opacity=0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"></div>',m);if(!b)m.getDocumentElement().append(n);this.attachTo=function(D){if(o)return;if(b){m.getBody().append(n);q=0;}l=D;n.setStyles({width:a(D.width),height:a(D.height),left:a(D.x),top:a(D.y)});b&&n.setOpacity(0.25);n.on('mousedown',z,this);m.getBody().setStyle('cursor','col-resize');n.show();};var C=this.move=function(D){if(!l)return 0;var E=l.padding;if(!o&&(D<l.x-E||D>l.x+l.width+E)){v();return 0;}var F=D-Math.round(n.$.offsetWidth/2);if(o){if(F==t||F==u)return 1;F=Math.max(F,t);F=Math.min(F,u);q=F-p;}n.setStyle('left',a(F));return 1;};};function j(k){var l=k.data.getTarget();if(k.name=='mouseout'){if(!l.is('table'))return;var m=new CKEDITOR.dom.element(k.data.$.relatedTarget||k.data.$.toElement);while(m&&m.$&&!m.equals(l)&&!m.is('body'))m=m.getParent();if(!m||m.equals(l))return;}l.getAscendant('table',1).removeCustomData('_cke_table_pillars');k.removeListener();};CKEDITOR.plugins.add('tableresize',{requires:['tabletools'],init:function(k){k.on('contentDom',function(){var l;k.document.getBody().on('mousemove',function(m){m=m.data;if(l&&l.move(m.$.clientX)){h(m);return;}var n=m.getTarget(),o,p;if(!n.is('table')&&!n.getAscendant('tbody',1))return;o=n.getAscendant('table',1);if(!(p=o.getCustomData('_cke_table_pillars'))){o.setCustomData('_cke_table_pillars',p=f(o));o.on('mouseout',j);o.on('mousedown',j);}var q=g(p,m.$.clientX);if(q){!l&&(l=new i(k));l.attachTo(q);}});});}});})();
diff --git a/modules_v2/ckeditor/plugins/tabletools/dialogs/tableCell.js b/modules_v2/ckeditor/plugins/tabletools/dialogs/tableCell.js new file mode 100644 index 0000000000..52fb467a15 --- /dev/null +++ b/modules_v2/ckeditor/plugins/tabletools/dialogs/tableCell.js @@ -0,0 +1,8 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('cellProperties',function(a){var b=a.lang.table,c=b.cell,d=a.lang.common,e=CKEDITOR.dialog.validate,f=/^(\d+(?:\.\d+)?)(px|%)$/,g=/^(\d+(?:\.\d+)?)px$/,h=CKEDITOR.tools.bind,i={type:'html',html:' '},j=a.lang.dir=='rtl';function k(l,m){var n=function(){var r=this;p(r);m(r,r._.parentDialog);r._.parentDialog.changeFocus(true);},o=function(){p(this);this._.parentDialog.changeFocus();},p=function(r){r.removeListener('ok',n);r.removeListener('cancel',o);},q=function(r){r.on('ok',n);r.on('cancel',o);};a.execCommand(l);if(a._.storedDialogs.colordialog)q(a._.storedDialogs.colordialog);else CKEDITOR.on('dialogDefinition',function(r){if(r.data.name!=l)return;var s=r.data.definition;r.removeListener();s.onLoad=CKEDITOR.tools.override(s.onLoad,function(t){return function(){q(this);s.onLoad=t;if(typeof t=='function')t.call(this);};});});};return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&CKEDITOR.env.quirks?230:200,contents:[{id:'info',label:c.title,accessKey:'I',elements:[{type:'hbox',widths:['40%','5%','40%'],children:[{type:'vbox',padding:0,children:[{type:'hbox',widths:['70%','30%'],children:[{type:'text',id:'width',width:'100px',label:d.width,validate:e.number(c.invalidWidth),onLoad:function(){var l=this.getDialog().getContentElement('info','widthType'),m=l.getElement(),n=this.getInputElement(),o=n.getAttribute('aria-labelledby');n.setAttribute('aria-labelledby',[o,m.$.id].join(' '));},setup:function(l){var m=parseInt(l.getAttribute('width'),10),n=parseInt(l.getStyle('width'),10);!isNaN(m)&&this.setValue(m);!isNaN(n)&&this.setValue(n);},commit:function(l){var m=parseInt(this.getValue(),10),n=this.getDialog().getValueOf('info','widthType');if(!isNaN(m))l.setStyle('width',m+n);else l.removeStyle('width');l.removeAttribute('width');},'default':''},{type:'select',id:'widthType',label:a.lang.table.widthUnit,labelStyle:'visibility:hidden','default':'px',items:[[b.widthPx,'px'],[b.widthPc,'%']],setup:function(l){var m=f.exec(l.getStyle('width')||l.getAttribute('width'));if(m)this.setValue(m[2]);}}]},{type:'hbox',widths:['70%','30%'],children:[{type:'text',id:'height',label:d.height,width:'100px','default':'',validate:e.number(c.invalidHeight),onLoad:function(){var l=this.getDialog().getContentElement('info','htmlHeightType'),m=l.getElement(),n=this.getInputElement(),o=n.getAttribute('aria-labelledby');n.setAttribute('aria-labelledby',[o,m.$.id].join(' '));},setup:function(l){var m=parseInt(l.getAttribute('height'),10),n=parseInt(l.getStyle('height'),10);
+!isNaN(m)&&this.setValue(m);!isNaN(n)&&this.setValue(n);},commit:function(l){var m=parseInt(this.getValue(),10);if(!isNaN(m))l.setStyle('height',CKEDITOR.tools.cssLength(m));else l.removeStyle('height');l.removeAttribute('height');}},{id:'htmlHeightType',type:'html',html:'<br />'+b.widthPx}]},i,{type:'select',id:'wordWrap',label:c.wordWrap,'default':'yes',items:[[c.yes,'yes'],[c.no,'no']],setup:function(l){var m=l.getAttribute('noWrap'),n=l.getStyle('white-space');if(n=='nowrap'||m)this.setValue('no');},commit:function(l){if(this.getValue()=='no')l.setStyle('white-space','nowrap');else l.removeStyle('white-space');l.removeAttribute('noWrap');}},i,{type:'select',id:'hAlign',label:c.hAlign,'default':'',items:[[d.notSet,''],[d.alignLeft,'left'],[d.alignCenter,'center'],[d.alignRight,'right']],setup:function(l){var m=l.getAttribute('align'),n=l.getStyle('text-align');this.setValue(n||m||'');},commit:function(l){var m=this.getValue();if(m)l.setStyle('text-align',m);else l.removeStyle('text-align');l.removeAttribute('align');}},{type:'select',id:'vAlign',label:c.vAlign,'default':'',items:[[d.notSet,''],[d.alignTop,'top'],[d.alignMiddle,'middle'],[d.alignBottom,'bottom'],[c.alignBaseline,'baseline']],setup:function(l){var m=l.getAttribute('vAlign'),n=l.getStyle('vertical-align');switch(n){case 'top':case 'middle':case 'bottom':case 'baseline':break;default:n='';}this.setValue(n||m||'');},commit:function(l){var m=this.getValue();if(m)l.setStyle('vertical-align',m);else l.removeStyle('vertical-align');l.removeAttribute('vAlign');}}]},i,{type:'vbox',padding:0,children:[{type:'select',id:'cellType',label:c.cellType,'default':'td',items:[[c.data,'td'],[c.header,'th']],setup:function(l){this.setValue(l.getName());},commit:function(l){l.renameNode(this.getValue());}},i,{type:'text',id:'rowSpan',label:c.rowSpan,'default':'',validate:e.integer(c.invalidRowSpan),setup:function(l){var m=parseInt(l.getAttribute('rowSpan'),10);if(m&&m!=1)this.setValue(m);},commit:function(l){var m=parseInt(this.getValue(),10);if(m&&m!=1)l.setAttribute('rowSpan',this.getValue());else l.removeAttribute('rowSpan');}},{type:'text',id:'colSpan',label:c.colSpan,'default':'',validate:e.integer(c.invalidColSpan),setup:function(l){var m=parseInt(l.getAttribute('colSpan'),10);if(m&&m!=1)this.setValue(m);},commit:function(l){var m=parseInt(this.getValue(),10);if(m&&m!=1)l.setAttribute('colSpan',this.getValue());else l.removeAttribute('colSpan');}},i,{type:'hbox',padding:0,widths:['60%','40%'],children:[{type:'text',id:'bgColor',label:c.bgColor,'default':'',setup:function(l){var m=l.getAttribute('bgColor'),n=l.getStyle('background-color');
+this.setValue(n||m);},commit:function(l){var m=this.getValue();if(m)l.setStyle('background-color',this.getValue());else l.removeStyle('background-color');l.removeAttribute('bgColor');}},{type:'button',id:'bgColorChoose','class':'colorChooser',label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle('vertical-align','bottom');},onClick:function(){var l=this;k('colordialog',function(m){l.getDialog().getContentElement('info','bgColor').setValue(m.getContentElement('picker','selectedColor').getValue());});}}]},i,{type:'hbox',padding:0,widths:['60%','40%'],children:[{type:'text',id:'borderColor',label:c.borderColor,'default':'',setup:function(l){var m=l.getAttribute('borderColor'),n=l.getStyle('border-color');this.setValue(n||m);},commit:function(l){var m=this.getValue();if(m)l.setStyle('border-color',this.getValue());else l.removeStyle('border-color');l.removeAttribute('borderColor');}},{type:'button',id:'borderColorChoose','class':'colorChooser',label:c.chooseColor,style:(j?'margin-right':'margin-left')+': 10px',onLoad:function(){this.getElement().getParent().setStyle('vertical-align','bottom');},onClick:function(){var l=this;k('colordialog',function(m){l.getDialog().getContentElement('info','borderColor').setValue(m.getContentElement('picker','selectedColor').getValue());});}}]}]}]}]}],onShow:function(){var l=this;l.cells=CKEDITOR.plugins.tabletools.getSelectedCells(l._.editor.getSelection());l.setupContent(l.cells[0]);},onOk:function(){var r=this;var l=r._.editor.getSelection(),m=l.createBookmarks(),n=r.cells;for(var o=0;o<n.length;o++)r.commitContent(n[o]);l.selectBookmarks(m);var p=l.getStartElement(),q=new CKEDITOR.dom.elementPath(p);r._.editor._.selectionPreviousPath=q;r._.editor.fire('selectionChange',{selection:l,path:q,element:p});}};});
diff --git a/modules_v2/ckeditor/plugins/templates/dialogs/templates.js b/modules_v2/ckeditor/plugins/templates/dialogs/templates.js new file mode 100644 index 0000000000..61f09cf8bc --- /dev/null +++ b/modules_v2/ckeditor/plugins/templates/dialogs/templates.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function(){var a=CKEDITOR.document;CKEDITOR.dialog.add('templates',function(b){function c(k,l){k.setHtml('');for(var m=0,n=l.length;m<n;m++){var o=CKEDITOR.getTemplates(l[m]),p=o.imagesPath,q=o.templates,r=q.length;for(var s=0;s<r;s++){var t=q[s],u=d(t,p);u.setAttribute('aria-posinset',s+1);u.setAttribute('aria-setsize',r);k.append(u);}}};function d(k,l){var m=CKEDITOR.dom.element.createFromHtml('<a href="javascript:void(0)" tabIndex="-1" role="option" ><div class="cke_tpl_item"></div></a>'),n='<table style="width:350px;" class="cke_tpl_preview" role="presentation"><tr>';if(k.image&&l)n+='<td class="cke_tpl_preview_img"><img src="'+CKEDITOR.getUrl(l+k.image)+'"'+(CKEDITOR.env.ie6Compat?' onload="this.width=this.width"':'')+' alt="" title=""></td>';n+='<td style="white-space:normal;"><span class="cke_tpl_title">'+k.title+'</span><br/>';if(k.description)n+='<span>'+k.description+'</span>';n+='</td></tr></table>';m.getFirst().setHtml(n);m.on('click',function(){e(k.html);});return m;};function e(k){var l=CKEDITOR.dialog.getCurrent(),m=l.getValueOf('selectTpl','chkInsertOpt');if(m){b.on('contentDom',function(n){n.removeListener();l.hide();var o=new CKEDITOR.dom.range(b.document);o.moveToElementEditStart(b.document.getBody());o.select(1);setTimeout(function(){b.fire('saveSnapshot');},0);});b.fire('saveSnapshot');b.setData(k);}else{b.insertHtml(k);l.hide();}};function f(k){var l=k.data.getTarget(),m=g.equals(l);if(m||g.contains(l)){var n=k.data.getKeystroke(),o=g.getElementsByTag('a'),p;if(o){if(m)p=o.getItem(0);else switch(n){case 40:p=l.getNext();break;case 38:p=l.getPrevious();break;case 13:case 32:l.fire('click');}if(p){p.focus();k.data.preventDefault();}}}};CKEDITOR.skins.load(b,'templates');var g,h='cke_tpl_list_label_'+CKEDITOR.tools.getNextNumber(),i=b.lang.templates,j=b.config;return{title:b.lang.templates.title,minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:'selectTpl',label:i.title,elements:[{type:'vbox',padding:5,children:[{type:'html',html:'<span>'+i.selectPromptMsg+'</span>'},{id:'templatesList',type:'html',focus:true,html:'<div class="cke_tpl_list" tabIndex="-1" role="listbox" aria-labelledby="'+h+'">'+'<div class="cke_tpl_loading"><span></span></div>'+'</div>'+'<span class="cke_voice_label" id="'+h+'">'+i.options+'</span>'},{id:'chkInsertOpt',type:'checkbox',label:i.insertOption,'default':j.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var k=this.getContentElement('selectTpl','templatesList');
+g=k.getElement();CKEDITOR.loadTemplates(j.templates_files,function(){var l=(j.templates||'default').split(',');if(l.length){c(g,l);k.focus();}else g.setHtml('<div class="cke_tpl_empty"><span>'+i.emptyListMsg+'</span>'+'</div>');});this._.element.on('keydown',f);},onHide:function(){this._.element.removeListener('keydown',f);}};});})();
diff --git a/modules_v2/ckeditor/plugins/templates/templates/default.js b/modules_v2/ckeditor/plugins/templates/templates/default.js new file mode 100644 index 0000000000..56ae381a48 --- /dev/null +++ b/modules_v2/ckeditor/plugins/templates/templates/default.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.addTemplates('default',{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath('templates')+'templates/images/'),templates:[{title:'Image and Title',image:'template1.gif',description:'One main image with a title and text that surround the image.',html:'<h3><img style="margin-right: 10px" height="100" width="100" align="left"/>Type the title here</h3><p>Type the text here</p>'},{title:'Strange Template',image:'template2.gif',description:'A template that defines two colums, each one with a title, and some text.',html:'<table cellspacing="0" cellpadding="0" style="width:100%" border="0"><tr><td style="width:50%"><h3>Title 1</h3></td><td></td><td style="width:50%"><h3>Title 2</h3></td></tr><tr><td>Text 1</td><td></td><td>Text 2</td></tr></table><p>More text goes here.</p>'},{title:'Text and Table',image:'template3.gif',description:'A title with some text and a table.',html:'<div style="width: 80%"><h3>Title goes here</h3><table style="width:150px;float: right" cellspacing="0" cellpadding="0" border="1"><caption style="border:solid 1px black"><strong>Table title</strong></caption></tr><tr><td> </td><td> </td><td> </td></tr><tr><td> </td><td> </td><td> </td></tr><tr><td> </td><td> </td><td> </td></tr></table><p>Type the text here</p></div>'}]});
diff --git a/modules_v2/ckeditor/plugins/templates/templates/images/template1.gif b/modules_v2/ckeditor/plugins/templates/templates/images/template1.gif Binary files differnew file mode 100644 index 0000000000..efdabbebd4 --- /dev/null +++ b/modules_v2/ckeditor/plugins/templates/templates/images/template1.gif diff --git a/modules_v2/ckeditor/plugins/templates/templates/images/template2.gif b/modules_v2/ckeditor/plugins/templates/templates/images/template2.gif Binary files differnew file mode 100644 index 0000000000..d1cebb3aed --- /dev/null +++ b/modules_v2/ckeditor/plugins/templates/templates/images/template2.gif diff --git a/modules_v2/ckeditor/plugins/templates/templates/images/template3.gif b/modules_v2/ckeditor/plugins/templates/templates/images/template3.gif Binary files differnew file mode 100644 index 0000000000..db41cb4fb8 --- /dev/null +++ b/modules_v2/ckeditor/plugins/templates/templates/images/template3.gif diff --git a/modules_v2/ckeditor/plugins/uicolor/dialogs/uicolor.js b/modules_v2/ckeditor/plugins/uicolor/dialogs/uicolor.js new file mode 100644 index 0000000000..ed167b9bf2 --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/dialogs/uicolor.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('uicolor',function(a){var b,c,d,e=a.getUiColor(),f='cke_uicolor_picker'+CKEDITOR.tools.getNextNumber();function g(j){if(/^#/.test(j))j=window.YAHOO.util.Color.hex2rgb(j.substr(1));c.setValue(j,true);c.refresh(f);};function h(j,k){if(k||b._.contents.tab1.livePeview.getValue())a.setUiColor(j);b._.contents.tab1.configBox.setValue('config.uiColor = "#'+c.get('hex')+'"');};d={id:'yuiColorPicker',type:'html',html:"<div id='"+f+"' class='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>",onLoad:function(j){var k=CKEDITOR.getUrl('plugins/uicolor/yui/');c=new window.YAHOO.widget.ColorPicker(f,{showhsvcontrols:true,showhexcontrols:true,images:{PICKER_THUMB:k+'assets/picker_thumb.png',HUE_THUMB:k+'assets/hue_thumb.png'}});if(e)g(e);c.on('rgbChange',function(){b._.contents.tab1.predefined.setValue('');h('#'+c.get('hex'));});var l=new CKEDITOR.dom.nodeList(c.getElementsByTagName('input'));for(var m=0;m<l.count();m++)l.getItem(m).addClass('cke_dialog_ui_input_text');}};var i=true;return{title:a.lang.uicolor.title,minWidth:360,minHeight:320,onLoad:function(){b=this;this.setupContent();if(CKEDITOR.env.ie7Compat)b.parts.contents.setStyle('overflow','hidden');},contents:[{id:'tab1',label:'',title:'',expand:true,padding:0,elements:[d,{id:'tab1',type:'vbox',children:[{id:'livePeview',type:'checkbox',label:a.lang.uicolor.preview,'default':1,onLoad:function(){i=true;},onChange:function(){if(i)return;var j=this.getValue(),k=j?'#'+c.get('hex'):e;h(k,true);}},{type:'hbox',children:[{id:'predefined',type:'select','default':'',label:a.lang.uicolor.predefined,items:[[''],['Light blue','#9AB8F3'],['Sand','#D2B48C'],['Metallic','#949AAA'],['Purple','#C2A3C7'],['Olive','#A2C980'],['Happy green','#9BD446'],['Jezebel Blue','#14B8C4'],['Burn','#FF893A'],['Easy red','#FF6969'],['Pisces 3','#48B4F2'],['Aquarius 5','#487ED4'],['Absinthe','#A8CF76'],['Scrambled Egg','#C7A622'],['Hello monday','#8E8D80'],['Lovely sunshine','#F1E8B1'],['Recycled air','#B3C593'],['Down','#BCBCA4'],['Mark Twain','#CFE91D'],['Specks of dust','#D1B596'],['Lollipop','#F6CE23']],onChange:function(){var j=this.getValue();if(j){g(j);h(j);CKEDITOR.document.getById('predefinedPreview').setStyle('background',j);}else CKEDITOR.document.getById('predefinedPreview').setStyle('background','');},onShow:function(){var j=a.getUiColor();if(j)this.setValue(j);}},{id:'predefinedPreview',type:'html',html:'<div id="cke_uicolor_preview" style="border: 1px solid black; padding: 3px; width: 30px;"><div id="predefinedPreview" style="width: 30px; height: 30px;"> </div></div>'}]},{id:'configBox',type:'text',label:a.lang.uicolor.config,onShow:function(){var j=a.getUiColor();
+if(j)this.setValue('config.uiColor = "'+j+'"');}}]}]}],buttons:[CKEDITOR.dialog.okButton]};});
diff --git a/modules_v2/ckeditor/plugins/uicolor/lang/en.js b/modules_v2/ckeditor/plugins/uicolor/lang/en.js new file mode 100644 index 0000000000..19dc94288e --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/lang/en.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang('uicolor','en',{uicolor:{title:'UI Color Picker',preview:'Live preview',config:'Paste this string into your config.js file',predefined:'Predefined color sets'}});
diff --git a/modules_v2/ckeditor/plugins/uicolor/lang/he.js b/modules_v2/ckeditor/plugins/uicolor/lang/he.js new file mode 100644 index 0000000000..7d65d8c42f --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/lang/he.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang('uicolor','he',{uicolor:{title:'בחירת צבע ממשק משתמש',preview:'תצוגה מקדימה',config:'הדבק את הטקסט הבא לתוך הקובץ config.js',predefined:'קבוצות צבעים מוגדרות מראש'}});
diff --git a/modules_v2/ckeditor/plugins/uicolor/plugin.js b/modules_v2/ckeditor/plugins/uicolor/plugin.js new file mode 100644 index 0000000000..3258b0c883 --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/plugin.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.add('uicolor',{requires:['dialog'],lang:['en','he'],init:function(a){if(CKEDITOR.env.ie6Compat)return;a.addCommand('uicolor',new CKEDITOR.dialogCommand('uicolor'));a.ui.addButton('UIColor',{label:a.lang.uicolor.title,command:'uicolor',icon:this.path+'uicolor.gif'});CKEDITOR.dialog.add('uicolor',this.path+'dialogs/uicolor.js');CKEDITOR.scriptLoader.load(CKEDITOR.getUrl('plugins/uicolor/yui/yui.js'));a.element.getDocument().appendStyleSheet(CKEDITOR.getUrl('plugins/uicolor/yui/assets/yui.css'));}});
diff --git a/modules_v2/ckeditor/plugins/uicolor/uicolor.gif b/modules_v2/ckeditor/plugins/uicolor/uicolor.gif Binary files differnew file mode 100644 index 0000000000..ec33de6e5b --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/uicolor.gif diff --git a/modules_v2/ckeditor/plugins/uicolor/yui/assets/hue_bg.png b/modules_v2/ckeditor/plugins/uicolor/yui/assets/hue_bg.png Binary files differnew file mode 100644 index 0000000000..bec9e5dc86 --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/yui/assets/hue_bg.png diff --git a/modules_v2/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png b/modules_v2/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png Binary files differnew file mode 100644 index 0000000000..4794017079 --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png diff --git a/modules_v2/ckeditor/plugins/uicolor/yui/assets/picker_mask.png b/modules_v2/ckeditor/plugins/uicolor/yui/assets/picker_mask.png Binary files differnew file mode 100644 index 0000000000..9f9f487137 --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/yui/assets/picker_mask.png diff --git a/modules_v2/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png b/modules_v2/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png Binary files differnew file mode 100644 index 0000000000..9d9a70284f --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png diff --git a/modules_v2/ckeditor/plugins/uicolor/yui/assets/yui.css b/modules_v2/ckeditor/plugins/uicolor/yui/assets/yui.css new file mode 100644 index 0000000000..70e3ef4fde --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/yui/assets/yui.css @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}.cke_uicolor_picker .yui-picker-panel{background:#e3e3e3;border-color:#888;}.cke_uicolor_picker .yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.cke_uicolor_picker .yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.cke_uicolor_picker .yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.cke_uicolor_picker .yui-picker{position:relative;}.cke_uicolor_picker .yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.cke_uicolor_picker .yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.cke_uicolor_picker .yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .cke_uicolor_picker .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale');}.cke_uicolor_picker .yui-picker-mask{position:absolute;z-index:1;top:0;left:0;}.cke_uicolor_picker .yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.cke_uicolor_picker .yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.cke_uicolor_picker .yui-picker-controls .hd{background:transparent;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls .bd{height:100px;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.cke_uicolor_picker .yui-picker-controls li{padding:2px;list-style:none;margin:0;}.cke_uicolor_picker .yui-picker-controls input{font-size:.85em;width:2.4em;}.cke_uicolor_picker .yui-picker-hex-controls{clear:both;padding:2px;}.cke_uicolor_picker .yui-picker-hex-controls input{width:4.6em;}.cke_uicolor_picker .yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;}
diff --git a/modules_v2/ckeditor/plugins/uicolor/yui/yui.js b/modules_v2/ckeditor/plugins/uicolor/yui/yui.js new file mode 100644 index 0000000000..41364029eb --- /dev/null +++ b/modules_v2/ckeditor/plugins/uicolor/yui/yui.js @@ -0,0 +1,76 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/*jsl:ignoreall*/
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueOf"],D={isArray:function(G){return A.toString.apply(G)===F;},isBoolean:function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error("Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.length>1){N.pop();}N.push("}");}return N.join("");},substitute:function(V,H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if(!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1796"});(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},get:function(y){var AA,Y,z,x,G;if(y){if(y[l]||y.item){return y;}if(typeof y==="string"){AA=y;y=K.getElementById(y);if(y&&y.id===AA){return y;}else{if(y&&K.all){y=null;Y=K.all[AA];for(x=0,G=Y.length;x<G;++x){if(Y[x].id===AA){return Y[x];}}}}return y;}if(y.DOM_EVENTS){y=y.get("element");}if("length" in y){z=[];for(x=0,G=y.length;x<G;++x){z[z.length]=E.Dom.get(y[x]);}return z;}return y;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){switch(x){case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];G=S(AF[v],q);x=S(AF[v],R);if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC==c)){if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return function(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AB=L.trim(AB);AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom.getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom.getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom.getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});
+},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom.getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}return G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,Y=K[t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibling){return G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;Y.setAttribute(G,x);},getAttribute:function(Y,G){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;return Y.getAttribute(G);},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);
+}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomWidth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=null,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;return a+I;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1796"});YAHOO.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new YAHOO.util.Subscriber(A,B,C));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){var M=(YAHOO.lang.isString(S))?[S]:S;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:Q,overrideContext:R,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(P,M,N,O){this.onAvailable(P,M,N,O,true);},onDOMReady:function(M,N,O){if(this.DOMReady){setTimeout(function(){var P=window;if(O){if(O===true){P=N;}else{P=O;}}M.call(P,"DOMReady",[],N);},0);}else{this.DOMReadyEvent.subscribe(M,N,O);}},_addListener:function(O,M,Y,S,W,b){if(!Y||!Y.call){return false;}if(this._isValidCollection(O)){var Z=true;for(var T=0,V=O.length;T<V;++T){Z=this.on(O[T],M,Y,S,W)&&Z;}return Z;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event.on(O,M,Y,S,W);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,Y,S,W];return true;}var N=O;if(W){if(W===true){N=S;}else{N=W;}}var P=function(c){return Y.call(N,YAHOO.util.Event.getEvent(c,O),S);};var a=[O,M,Y,P,N,S,W];var U=I.length;I[U]=a;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(a);}else{try{this._simpleAdd(O,M,P,b);}catch(X){this.lastError=X;this.removeListener(O,M,Y);return false;}}return true;},addListener:function(N,Q,M,O,P){return this._addListener(N,Q,M,O,P,false);},addFocusListener:function(N,M,O,P){return this._addListener(N,K,M,O,P,true);},removeFocusListener:function(N,M){return this.removeListener(N,K,M);},addBlurListener:function(N,M,O,P){return this._addListener(N,L,M,O,P,true);},removeBlurListener:function(N,M){return this.removeListener(N,L,M);},fireLegacyEvent:function(R,P){var T=true,M,V,U,N,S;V=E[P].slice();for(var O=0,Q=V.length;O<Q;++O){U=V[O];if(U&&U[this.WFN]){N=U[this.ADJ_SCOPE];S=U[this.WFN].call(N,R);T=(T&&S);}}M=G[P];if(M&&M[2]){M[2](R);}return T;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},removeListener:function(N,M,V){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],false);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
+I.splice(S,1);return true;},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefault:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready();M._tryPreloadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!M.DOMReady){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;if(this._interval){clearInterval(this._interval);this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],index:S});}}}}return(R.length)?R:null;},_unload:function(T){var N=YAHOO.util.Event,Q,P,O,S,R,U=J.slice(),M;for(Q=0,S=J.length;Q<S;++Q){O=U[Q];if(O){M=window;if(O[N.ADJ_SCOPE]){if(O[N.ADJ_SCOPE]===true){M=O[N.UNLOAD_OBJ];}else{M=O[N.ADJ_SCOPE];}}O[N.FN].call(M,N.getEvent(T,O[N.EL]),O[N.UNLOAD_OBJ]);U[Q]=null;}}O=null;M=null;J=null;if(I){for(P=I.length-1;P>-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O[N.TYPE],O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
+/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */
+if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);
+}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);if(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){G.fire(L,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1796"});YAHOO.register("yahoo-dom-event", YAHOO, {version: "2.7.0", build: "1796"});
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zIndex="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){return(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:function(C){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!this.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocked()||a.dragOnly){return;}var N=YAHOO.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue;
+}if(!this.isOverTarget(P,d,this.mode,U)){c.outEvts.push(d);}I[S]=true;delete this.dragOvers[S];}for(var R in a.groups){if("string"!=typeof R){continue;}for(S in this.ids[R]){var G=this.ids[R][S];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=a){if(this.isOverTarget(P,G,this.mode,U)){D[R]=true;if(L){c.dropEvts.push(G);}else{if(!I[G.id]){c.enterEvts.push(G);}else{c.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:c.outEvts,enter:c.enterEvts,over:c.overEvts,drop:c.dropEvts,point:P,draggedRegion:U,sourceRegion:this.locationCache[a.id],validDrop:L};for(var C in D){Q.push(C);}if(L&&!c.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(V);a.fireEvent("invalidDropEvent",{e:V});}}for(S=0;S<E.length;S++){var Y=null;if(c[E[S]+"Evts"]){Y=c[E[S]+"Evts"];}if(Y&&Y.length){var H=E[S].charAt(0).toUpperCase()+E[S].substr(1),X="onDrag"+H,J="b4Drag"+H,O="drag"+H+"Event",W="drag"+H;if(this.mode){if(a.events[J]){a[J](V,Y,Q);a.fireEvent(J+"Event",{event:V,info:Y,group:Q});}if(a.events[W]){a[X](V,Y,Q);a.fireEvent(O,{event:V,info:Y,group:Q});}}else{for(var Z=0,T=Y.length;Z<T;++Z){if(a.events[J]){a[J](V,Y[Z].id,Q[0]);a.fireEvent(J+"Event",{event:V,info:Y[Z].id,group:Q[0]});}if(a.events[W]){a[X](V,Y[Z].id,Q[0]);a.fireEvent(O,{event:V,info:Y[Z].id,group:Q[0]});}}}}}},getBestMatch:function(E){var G=null;var D=E.length;if(D==1){G=E[0];}else{for(var F=0;F<D;++F){var C=E[F];if(this.mode==this.INTERSECT&&C.cursorIsOver){G=C;break;}else{if(!G||!G.overlap||(C.overlap&&G.overlap.getArea()<C.overlap.getArea())){G=C;}}}}return G;},refreshCache:function(D){var F=D||this.ids;for(var C in F){if("string"!=typeof C){continue;}for(var E in this.ids[C]){var G=this.ids[C][E];if(this.isTypeOfDD(G)){var H=this.getLocation(G);if(H){this.locationCache[G.id]=H;}else{delete this.locationCache[G.id];}}}}},verifyEl:function(D){try{if(D){var C=D.offsetParent;if(C){return true;}}}catch(E){}return false;},getLocation:function(H){if(!this.isTypeOfDD(H)){return null;}var F=H.getEl(),K,E,D,M,L,N,C,J,G;try{K=YAHOO.util.Dom.getXY(F);}catch(I){}if(!K){return null;}E=K[0];D=E+F.offsetWidth;M=K[1];L=M+F.offsetHeight;N=M-H.padding[0];C=D+H.padding[1];J=L+H.padding[2];G=E-H.padding[3];return new YAHOO.util.Region(N,C,J,G);},isOverTarget:function(K,C,E,F){var G=this.locationCache[C.id];if(!G||!this.useCache){G=this.getLocation(C);this.locationCache[C.id]=G;}if(!G){return false;}C.cursorIsOver=G.contains(K);var J=this.dragCurrent;if(!J||(!E&&!J.constrainX&&!J.constrainY)){return C.cursorIsOver;}C.overlap=null;if(!F){var H=J.getTargetCoord(K.x,K.y);var D=J.getDragEl();F=new YAHOO.util.Region(H.y,H.x+D.offsetWidth,H.y+D.offsetHeight,H.x);}var I=F.intersect(G);if(I){C.overlap=I;return(E)?true:C.cursorIsOver;}else{return false;}},_onUnload:function(D,C){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(D){var C=this.elementCache[D];if(!C||!C.el){C=this.elementCache[D]=new this.ElementWrapper(YAHOO.util.Dom.get(D));}return C;},getElement:function(C){return YAHOO.util.Dom.get(C);},getCss:function(D){var C=YAHOO.util.Dom.get(D);return(C)?C.style:null;},ElementWrapper:function(C){this.el=C||null;this.id=this.el&&C.id;this.css=this.el&&C.style;},getPosX:function(C){return YAHOO.util.Dom.getX(C);},getPosY:function(C){return YAHOO.util.Dom.getY(C);},swapNode:function(E,C){if(E.swapNode){E.swapNode(C);}else{var F=C.parentNode;var D=C.nextSibling;if(D==E){F.insertBefore(E,C);}else{if(C==E.nextSibling){F.insertBefore(C,E);}else{E.parentNode.replaceChild(C,E);F.insertBefore(E,D);}}}},getScroll:function(){var E,C,F=document.documentElement,D=document.body;if(F&&(F.scrollTop||F.scrollLeft)){E=F.scrollTop;C=F.scrollLeft;}else{if(D){E=D.scrollTop;C=D.scrollLeft;}else{}}return{top:E,left:C};},getStyle:function(D,C){return YAHOO.util.Dom.getStyle(D,C);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(C,E){var D=YAHOO.util.Dom.getXY(E);YAHOO.util.Dom.setXY(C,D);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(D,C){return(D-C);},_timeoutCount:0,_addListeners:function(){var C=YAHOO.util.DDM;if(YAHOO.util.Event&&document){C._onLoad();}else{if(C._timeoutCount>2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id);
+}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this.config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||(E===false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);
+}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.7.0",build:"1796"});/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+(function(){var B=YAHOO.util.Dom.getXY,A=YAHOO.util.Event,D=Array.prototype.slice;function C(G,E,F,H){C.ANIM_AVAIL=(!YAHOO.lang.isUndefined(YAHOO.util.Anim));if(G){this.init(G,E,true);this.initSlider(H);this.initThumb(F);}}YAHOO.lang.augmentObject(C,{getHorizSlider:function(F,G,I,H,E){return new C(F,F,new YAHOO.widget.SliderThumb(G,F,I,H,0,0,E),"horiz");},getVertSlider:function(G,H,E,I,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,0,0,E,I,F),"vert");},getSliderRegion:function(G,H,J,I,E,K,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,J,I,E,K,F),"region");},SOURCE_UI_EVENT:1,SOURCE_SET_VALUE:2,SOURCE_KEY_EVENT:3,ANIM_AVAIL:false},true);YAHOO.extend(C,YAHOO.util.DragDrop,{_mouseDown:false,dragOnly:true,initSlider:function(E){this.type=E;this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);this.isTarget=false;this.animate=C.ANIM_AVAIL;this.backgroundEnabled=true;this.tickPause=40;this.enableKeys=true;this.keyIncrement=20;this.moveComplete=true;this.animationDuration=0.2;this.SOURCE_UI_EVENT=1;this.SOURCE_SET_VALUE=2;this.valueChangeSource=0;this._silent=false;this.lastOffset=[0,0];},initThumb:function(F){var E=this;this.thumb=F;F.cacheBetweenDrags=true;if(F._isHoriz&&F.xTicks&&F.xTicks.length){this.tickPause=Math.round(360/F.xTicks.length);}else{if(F.yTicks&&F.yTicks.length){this.tickPause=Math.round(360/F.yTicks.length);}}F.onAvailable=function(){return E.setStartSliderState();};F.onMouseDown=function(){E._mouseDown=true;return E.focus();};F.startDrag=function(){E._slideStart();};F.onDrag=function(){E.fireEvents(true);};F.onMouseUp=function(){E.thumbMouseUp();};},onAvailable:function(){this._bindKeyEvents();},_bindKeyEvents:function(){A.on(this.id,"keydown",this.handleKeyDown,this,true);A.on(this.id,"keypress",this.handleKeyPress,this,true);},handleKeyPress:function(F){if(this.enableKeys){var E=A.getCharCode(F);switch(E){case 37:case 38:case 39:case 40:case 36:case 35:A.preventDefault(F);break;default:}}},handleKeyDown:function(J){if(this.enableKeys){var G=A.getCharCode(J),F=this.thumb,H=this.getXValue(),E=this.getYValue(),I=true;switch(G){case 37:H-=this.keyIncrement;break;case 38:E-=this.keyIncrement;break;case 39:H+=this.keyIncrement;break;case 40:E+=this.keyIncrement;break;case 36:H=F.leftConstraint;E=F.topConstraint;break;case 35:H=F.rightConstraint;E=F.bottomConstraint;break;default:I=false;}if(I){if(F._isRegion){this._setRegionValue(C.SOURCE_KEY_EVENT,H,E,true);}else{this._setValue(C.SOURCE_KEY_EVENT,(F._isHoriz?H:E),true);}A.stopEvent(J);}}},setStartSliderState:function(){this.setThumbCenterPoint();this.baselinePos=B(this.getEl());this.thumb.startOffset=this.thumb.getOffsetFromParent(this.baselinePos);if(this.thumb._isRegion){if(this.deferredSetRegionValue){this._setRegionValue.apply(this,this.deferredSetRegionValue);this.deferredSetRegionValue=null;}else{this.setRegionValue(0,0,true,true,true);}}else{if(this.deferredSetValue){this._setValue.apply(this,this.deferredSetValue);this.deferredSetValue=null;}else{this.setValue(0,true,true,true);}}},setThumbCenterPoint:function(){var E=this.thumb.getEl();if(E){this.thumbCenterPoint={x:parseInt(E.offsetWidth/2,10),y:parseInt(E.offsetHeight/2,10)};}},lock:function(){this.thumb.lock();this.locked=true;},unlock:function(){this.thumb.unlock();this.locked=false;},thumbMouseUp:function(){this._mouseDown=false;if(!this.isLocked()&&!this.moveComplete){this.endMove();}},onMouseUp:function(){this._mouseDown=false;if(this.backgroundEnabled&&!this.isLocked()&&!this.moveComplete){this.endMove();}},getThumb:function(){return this.thumb;},focus:function(){this.valueChangeSource=C.SOURCE_UI_EVENT;var E=this.getEl();if(E.focus){try{E.focus();}catch(F){}}this.verifyOffset();return !this.isLocked();},onChange:function(E,F){},onSlideStart:function(){},onSlideEnd:function(){},getValue:function(){return this.thumb.getValue();},getXValue:function(){return this.thumb.getXValue();},getYValue:function(){return this.thumb.getYValue();},setValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setValue.apply(this,E);},_setValue:function(I,L,G,H,E){var F=this.thumb,K,J;if(!F.available){this.deferredSetValue=arguments;return false;}if(this.isLocked()&&!H){return false;}if(isNaN(L)){return false;}if(F._isRegion){return false;}this._silent=E;this.valueChangeSource=I||C.SOURCE_SET_VALUE;F.lastOffset=[L,L];this.verifyOffset(true);this._slideStart();if(F._isHoriz){K=F.initPageX+L+this.thumbCenterPoint.x;this.moveThumb(K,F.initPageY,G);}else{J=F.initPageY+L+this.thumbCenterPoint.y;this.moveThumb(F.initPageX,J,G);}return true;},setRegionValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setRegionValue.apply(this,E);},_setRegionValue:function(F,J,H,I,G,K){var L=this.thumb,E,M;if(!L.available){this.deferredSetRegionValue=arguments;return false;}if(this.isLocked()&&!G){return false;}if(isNaN(J)){return false;}if(!L._isRegion){return false;}this._silent=K;this.valueChangeSource=F||C.SOURCE_SET_VALUE;L.lastOffset=[J,H];this.verifyOffset(true);this._slideStart();E=L.initPageX+J+this.thumbCenterPoint.x;M=L.initPageY+H+this.thumbCenterPoint.y;this.moveThumb(E,M,I);return true;},verifyOffset:function(F){var G=B(this.getEl()),E=this.thumb;if(!this.thumbCenterPoint||!this.thumbCenterPoint.x){this.setThumbCenterPoint();}if(G){if(G[0]!=this.baselinePos[0]||G[1]!=this.baselinePos[1]){this.setInitPosition();this.baselinePos=G;E.initPageX=this.initPageX+E.startOffset[0];E.initPageY=this.initPageY+E.startOffset[1];E.deltaSetXY=null;this.resetThumbConstraints();return false;}}return true;},moveThumb:function(K,J,I,G){var L=this.thumb,M=this,F,E,H;if(!L.available){return;}L.setDelta(this.thumbCenterPoint.x,this.thumbCenterPoint.y);E=L.getTargetCoord(K,J);F=[Math.round(E.x),Math.round(E.y)];if(this.animate&&L._graduated&&!I){this.lock();this.curCoord=B(this.thumb.getEl());this.curCoord=[Math.round(this.curCoord[0]),Math.round(this.curCoord[1])];setTimeout(function(){M.moveOneTick(F);
+},this.tickPause);}else{if(this.animate&&C.ANIM_AVAIL&&!I){this.lock();H=new YAHOO.util.Motion(L.id,{points:{to:F}},this.animationDuration,YAHOO.util.Easing.easeOut);H.onComplete.subscribe(function(){M.unlock();if(!M._mouseDown){M.endMove();}});H.animate();}else{L.setDragElPos(K,J);if(!G&&!this._mouseDown){this.endMove();}}}},_slideStart:function(){if(!this._sliding){if(!this._silent){this.onSlideStart();this.fireEvent("slideStart");}this._sliding=true;}},_slideEnd:function(){if(this._sliding&&this.moveComplete){var E=this._silent;this._sliding=false;this._silent=false;this.moveComplete=false;if(!E){this.onSlideEnd();this.fireEvent("slideEnd");}}},moveOneTick:function(F){var H=this.thumb,G=this,I=null,E,J;if(H._isRegion){I=this._getNextX(this.curCoord,F);E=(I!==null)?I[0]:this.curCoord[0];I=this._getNextY(this.curCoord,F);J=(I!==null)?I[1]:this.curCoord[1];I=E!==this.curCoord[0]||J!==this.curCoord[1]?[E,J]:null;}else{if(H._isHoriz){I=this._getNextX(this.curCoord,F);}else{I=this._getNextY(this.curCoord,F);}}if(I){this.curCoord=I;this.thumb.alignElWithMouse(H.getEl(),I[0]+this.thumbCenterPoint.x,I[1]+this.thumbCenterPoint.y);if(!(I[0]==F[0]&&I[1]==F[1])){setTimeout(function(){G.moveOneTick(F);},this.tickPause);}else{this.unlock();if(!this._mouseDown){this.endMove();}}}else{this.unlock();if(!this._mouseDown){this.endMove();}}},_getNextX:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[0]>F[0]){J=H.tickSize-this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]-J,E[1]);I=[G.x,G.y];}else{if(E[0]<F[0]){J=H.tickSize+this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]+J,E[1]);I=[G.x,G.y];}else{}}return I;},_getNextY:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[1]>F[1]){J=H.tickSize-this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]-J);I=[G.x,G.y];}else{if(E[1]<F[1]){J=H.tickSize+this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]+J);I=[G.x,G.y];}else{}}return I;},b4MouseDown:function(E){if(!this.backgroundEnabled){return false;}this.thumb.autoOffset();this.resetThumbConstraints();},onMouseDown:function(F){if(!this.backgroundEnabled||this.isLocked()){return false;}this._mouseDown=true;var E=A.getPageX(F),G=A.getPageY(F);this.focus();this._slideStart();this.moveThumb(E,G);},onDrag:function(F){if(this.backgroundEnabled&&!this.isLocked()){var E=A.getPageX(F),G=A.getPageY(F);this.moveThumb(E,G,true,true);this.fireEvents();}},endMove:function(){this.unlock();this.fireEvents();this.moveComplete=true;this._slideEnd();},resetThumbConstraints:function(){var E=this.thumb;E.setXConstraint(E.leftConstraint,E.rightConstraint,E.xTickSize);E.setYConstraint(E.topConstraint,E.bottomConstraint,E.xTickSize);},fireEvents:function(G){var F=this.thumb,I,H,E;if(!G){F.cachePosition();}if(!this.isLocked()){if(F._isRegion){I=F.getXValue();H=F.getYValue();if(I!=this.previousX||H!=this.previousY){if(!this._silent){this.onChange(I,H);this.fireEvent("change",{x:I,y:H});}}this.previousX=I;this.previousY=H;}else{E=F.getValue();if(E!=this.previousVal){if(!this._silent){this.onChange(E);this.fireEvent("change",E);}}this.previousVal=E;}}},toString:function(){return("Slider ("+this.type+") "+this.id);}});YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);YAHOO.widget.Slider=C;})();YAHOO.widget.SliderThumb=function(G,B,E,D,A,F,C){if(G){YAHOO.widget.SliderThumb.superclass.constructor.call(this,G,B);this.parentElId=B;}this.isTarget=false;this.tickSize=C;this.maintainOffset=true;this.initSlider(E,D,A,F,C);this.scroll=false;};YAHOO.extend(YAHOO.widget.SliderThumb,YAHOO.util.DD,{startOffset:null,dragOnly:true,_isHoriz:false,_prevVal:0,_graduated:false,getOffsetFromParent0:function(C){var A=YAHOO.util.Dom.getXY(this.getEl()),B=C||YAHOO.util.Dom.getXY(this.parentElId);return[(A[0]-B[0]),(A[1]-B[1])];},getOffsetFromParent:function(H){var A=this.getEl(),E,I,F,B,K,D,C,J,G;if(!this.deltaOffset){I=YAHOO.util.Dom.getXY(A);F=H||YAHOO.util.Dom.getXY(this.parentElId);E=[(I[0]-F[0]),(I[1]-F[1])];B=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);K=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);D=B-E[0];C=K-E[1];if(isNaN(D)||isNaN(C)){}else{this.deltaOffset=[D,C];}}else{J=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);G=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);E=[J+this.deltaOffset[0],G+this.deltaOffset[1]];}return E;},initSlider:function(D,C,A,E,B){this.initLeft=D;this.initRight=C;this.initUp=A;this.initDown=E;this.setXConstraint(D,C,B);this.setYConstraint(A,E,B);if(B&&B>1){this._graduated=true;}this._isHoriz=(D||C);this._isVert=(A||E);this._isRegion=(this._isHoriz&&this._isVert);},clearTicks:function(){YAHOO.widget.SliderThumb.superclass.clearTicks.call(this);this.tickSize=0;this._graduated=false;},getValue:function(){return(this._isHoriz)?this.getXValue():this.getYValue();},getXValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[0])){this.lastOffset=A;return(A[0]-this.startOffset[0]);}else{return(this.lastOffset[0]-this.startOffset[0]);}},getYValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[1])){this.lastOffset=A;return(A[1]-this.startOffset[1]);}else{return(this.lastOffset[1]-this.startOffset[1]);}},toString:function(){return"SliderThumb "+this.id;},onChange:function(A,B){}});(function(){var A=YAHOO.util.Event,B=YAHOO.widget;function C(I,F,H,D){var G=this,J={min:false,max:false},E,K;this.minSlider=I;this.maxSlider=F;this.activeSlider=I;this.isHoriz=I.thumb._isHoriz;E=this.minSlider.thumb.onMouseDown;K=this.maxSlider.thumb.onMouseDown;this.minSlider.thumb.onMouseDown=function(){G.activeSlider=G.minSlider;E.apply(this,arguments);};this.maxSlider.thumb.onMouseDown=function(){G.activeSlider=G.maxSlider;K.apply(this,arguments);};this.minSlider.thumb.onAvailable=function(){I.setStartSliderState();J.min=true;if(J.max){G.fireEvent("ready",G);}};this.maxSlider.thumb.onAvailable=function(){F.setStartSliderState();J.max=true;if(J.min){G.fireEvent("ready",G);}};I.onMouseDown=F.onMouseDown=function(L){return this.backgroundEnabled&&G._handleMouseDown(L);
+};I.onDrag=F.onDrag=function(L){G._handleDrag(L);};I.onMouseUp=F.onMouseUp=function(L){G._handleMouseUp(L);};I._bindKeyEvents=function(){G._bindKeyEvents(this);};F._bindKeyEvents=function(){};I.subscribe("change",this._handleMinChange,I,this);I.subscribe("slideStart",this._handleSlideStart,I,this);I.subscribe("slideEnd",this._handleSlideEnd,I,this);F.subscribe("change",this._handleMaxChange,F,this);F.subscribe("slideStart",this._handleSlideStart,F,this);F.subscribe("slideEnd",this._handleSlideEnd,F,this);this.createEvent("ready",this);this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);D=YAHOO.lang.isArray(D)?D:[0,H];D[0]=Math.min(Math.max(parseInt(D[0],10)|0,0),H);D[1]=Math.max(Math.min(parseInt(D[1],10)|0,H),0);if(D[0]>D[1]){D.splice(0,2,D[1],D[0]);}this.minVal=D[0];this.maxVal=D[1];this.minSlider.setValue(this.minVal,true,true,true);this.maxSlider.setValue(this.maxVal,true,true,true);}C.prototype={minVal:-1,maxVal:-1,minRange:0,_handleSlideStart:function(E,D){this.fireEvent("slideStart",D);},_handleSlideEnd:function(E,D){this.fireEvent("slideEnd",D);},_handleDrag:function(D){B.Slider.prototype.onDrag.call(this.activeSlider,D);},_handleMinChange:function(){this.activeSlider=this.minSlider;this.updateValue();},_handleMaxChange:function(){this.activeSlider=this.maxSlider;this.updateValue();},_bindKeyEvents:function(D){A.on(D.id,"keydown",this._handleKeyDown,this,true);A.on(D.id,"keypress",this._handleKeyPress,this,true);},_handleKeyDown:function(D){this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments);},_handleKeyPress:function(D){this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments);},setValues:function(H,K,I,E,J){var F=this.minSlider,M=this.maxSlider,D=F.thumb,L=M.thumb,N=this,G={min:false,max:false};if(D._isHoriz){D.setXConstraint(D.leftConstraint,L.rightConstraint,D.tickSize);L.setXConstraint(D.leftConstraint,L.rightConstraint,L.tickSize);}else{D.setYConstraint(D.topConstraint,L.bottomConstraint,D.tickSize);L.setYConstraint(D.topConstraint,L.bottomConstraint,L.tickSize);}this._oneTimeCallback(F,"slideEnd",function(){G.min=true;if(G.max){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});this._oneTimeCallback(M,"slideEnd",function(){G.max=true;if(G.min){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});F.setValue(H,I,E,false);M.setValue(K,I,E,false);},setMinValue:function(F,H,I,E){var G=this.minSlider,D=this;this.activeSlider=G;D=this;this._oneTimeCallback(G,"slideEnd",function(){D.updateValue(E);setTimeout(function(){D._cleanEvent(G,"slideEnd");},0);});G.setValue(F,H,I);},setMaxValue:function(D,H,I,F){var G=this.maxSlider,E=this;this.activeSlider=G;this._oneTimeCallback(G,"slideEnd",function(){E.updateValue(F);setTimeout(function(){E._cleanEvent(G,"slideEnd");},0);});G.setValue(D,H,I);},updateValue:function(J){var E=this.minSlider.getValue(),K=this.maxSlider.getValue(),F=false,D,M,H,I,L,G;if(E!=this.minVal||K!=this.maxVal){F=true;D=this.minSlider.thumb;M=this.maxSlider.thumb;H=this.isHoriz?"x":"y";G=this.minSlider.thumbCenterPoint[H]+this.maxSlider.thumbCenterPoint[H];I=Math.max(K-G-this.minRange,0);L=Math.min(-E-G-this.minRange,0);if(this.isHoriz){I=Math.min(I,M.rightConstraint);D.setXConstraint(D.leftConstraint,I,D.tickSize);M.setXConstraint(L,M.rightConstraint,M.tickSize);}else{I=Math.min(I,M.bottomConstraint);D.setYConstraint(D.leftConstraint,I,D.tickSize);M.setYConstraint(L,M.bottomConstraint,M.tickSize);}}this.minVal=E;this.maxVal=K;if(F&&!J){this.fireEvent("change",this);}},selectActiveSlider:function(H){var E=this.minSlider,D=this.maxSlider,J=E.isLocked()||!E.backgroundEnabled,G=D.isLocked()||!E.backgroundEnabled,F=YAHOO.util.Event,I;if(J||G){this.activeSlider=J?D:E;}else{if(this.isHoriz){I=F.getPageX(H)-E.thumb.initPageX-E.thumbCenterPoint.x;}else{I=F.getPageY(H)-E.thumb.initPageY-E.thumbCenterPoint.y;}this.activeSlider=I*2>D.getValue()+E.getValue()?D:E;}},_handleMouseDown:function(D){if(!D._handled){D._handled=true;this.selectActiveSlider(D);return B.Slider.prototype.onMouseDown.call(this.activeSlider,D);}else{return false;}},_handleMouseUp:function(D){B.Slider.prototype.onMouseUp.apply(this.activeSlider,arguments);},_oneTimeCallback:function(F,D,E){F.subscribe(D,function(){F.unsubscribe(D,arguments.callee);E.apply({},[].slice.apply(arguments));});},_cleanEvent:function(K,E){var J,I,D,G,H,F;if(K.__yui_events&&K.events[E]){for(I=K.__yui_events.length;I>=0;--I){if(K.__yui_events[I].type===E){J=K.__yui_events[I];break;}}if(J){H=J.subscribers;F=[];G=0;for(I=0,D=H.length;I<D;++I){if(H[I]){F[G++]=H[I];}}J.subscribers=F;}}}};YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);B.Slider.getHorizDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,G,0,0,F),E=new B.SliderThumb(K,H,0,G,0,0,F);return new C(new B.Slider(H,H,I,"horiz"),new B.Slider(H,H,E,"horiz"),G,D);};B.Slider.getVertDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,0,0,G,F),E=new B.SliderThumb(K,H,0,0,0,G,F);return new B.DualSlider(new B.Slider(H,H,I,"vert"),new B.Slider(H,H,E,"vert"),G,D);};YAHOO.widget.DualSlider=C;})();YAHOO.register("slider",YAHOO.widget.Slider,{version:"2.7.0",build:"1796"});/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,setter:null,getter:null,validator:null,getValue:function(){var A=this.value;if(this.getter){A=this.getter.call(this.owner,this.name);}return A;},setValue:function(F,B){var E,A=this.owner,C=this.name;var D={type:C,prevValue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.setter){F=this.setter.call(A,F,this.name);if(F===undefined){}}if(this.method){this.method.call(A,F,this.name);}this.value=F;this._written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};if(C){this._written=false;}this._initialConfig=this._initialConfig||{};for(var A in B){if(B.hasOwnProperty(A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig,true);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B||!this._configs.hasOwnProperty(C)){return null;}return B.getValue();},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var C=[],B;for(B in this._configs){if(A.hasOwnProperty(this._configs,B)&&!A.isUndefined(this._configs[B])){C[C.length]=B;}}return C;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._configs=this._configs||{};if(this._configs[C]){this.set(C,this._configs[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs=this._configs||{};var F=this._configs;E=((A.isString(E))?[E]:E)||this.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(F.hasOwnProperty(E[D])){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnProperty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B,C,D){this._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig(B,C,D);},resetAttributeConfig:function(B){this._configs=this._configs||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var B=YAHOO.util.Dom,C=YAHOO.util.AttributeProvider;var A=function(D,E){this.init.apply(this,arguments);};A.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"focus":true,"blur":true,"submit":true,"change":true};A.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(F,D){var E=this.get("element");if(E){E[D]=F;}},DEFAULT_HTML_GETTER:function(D){var E=this.get("element"),F;if(E){F=E[D];}return F;},appendChild:function(D){D=D.get?D.get("element"):D;return this.get("element").appendChild(D);},getElementsByTagName:function(D){return this.get("element").getElementsByTagName(D);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(D,E){D=D.get?D.get("element"):D;E=(E&&E.get)?E.get("element"):E;return this.get("element").insertBefore(D,E);},removeChild:function(D){D=D.get?D.get("element"):D;return this.get("element").removeChild(D);},replaceChild:function(D,E){D=D.get?D.get("element"):D;E=E.get?E.get("element"):E;return this.get("element").replaceChild(D,E);},initAttributes:function(D){},addListener:function(H,G,I,F){var E=this.get("element")||this.get("id");F=F||this;var D=this;if(!this._events[H]){if(E&&this.DOM_EVENTS[H]){YAHOO.util.Event.addListener(E,H,function(J){if(J.srcElement&&!J.target){J.target=J.srcElement;}D.fireEvent(H,J);},I,F);}this.createEvent(H,this);}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(E,D){return this.unsubscribe.apply(this,arguments);},addClass:function(D){B.addClass(this.get("element"),D);},getElementsByClassName:function(E,D){return B.getElementsByClassName(E,D,this.get("element"));},hasClass:function(D){return B.hasClass(this.get("element"),D);},removeClass:function(D){return B.removeClass(this.get("element"),D);},replaceClass:function(E,D){return B.replaceClass(this.get("element"),E,D);},setStyle:function(E,D){return B.setStyle(this.get("element"),E,D);},getStyle:function(D){return B.getStyle(this.get("element"),D);},fireQueue:function(){var E=this._queue;for(var F=0,D=E.length;F<D;++F){this[E[F][0]].apply(this,E[F][1]);}},appendTo:function(E,F){E=(E.get)?E.get("element"):B.get(E);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:E});
+F=(F&&F.get)?F.get("element"):B.get(F);var D=this.get("element");if(!D){return false;}if(!E){return false;}if(D.parent!=E){if(F){E.insertBefore(D,F);}else{E.appendChild(D);}}this.fireEvent("appendTo",{type:"appendTo",target:E});return D;},get:function(D){var F=this._configs||{},E=F.element;if(E&&!F[D]&&!YAHOO.lang.isUndefined(E.value[D])){this._setHTMLAttrConfig(D);}return C.prototype.get.call(this,D);},setAttributes:function(J,G){var E={},H=this._configOrder;for(var I=0,D=H.length;I<D;++I){if(J[H[I]]!==undefined){E[H[I]]=true;this.set(H[I],J[H[I]],G);}}for(var F in J){if(J.hasOwnProperty(F)&&!E[F]){this.set(F,J[F],G);}}},set:function(E,G,D){var F=this.get("element");if(!F){this._queue[this._queue.length]=["set",arguments];if(this._configs[E]){this._configs[E].value=G;}return;}if(!this._configs[E]&&!YAHOO.lang.isUndefined(F[E])){this._setHTMLAttrConfig(E);}return C.prototype.set.apply(this,arguments);},setAttributeConfig:function(D,E,F){this._configOrder.push(D);C.prototype.setAttributeConfig.apply(this,arguments);},createEvent:function(E,D){this._events[E]=true;return C.prototype.createEvent.apply(this,arguments);},init:function(E,D){this._initElement(E,D);},destroy:function(){var D=this.get("element");YAHOO.util.Event.purgeElement(D,true);this.unsubscribeAll();if(D&&D.parentNode){D.parentNode.removeChild(D);}this._queue=[];this._events={};this._configs={};this._configOrder=[];},_initElement:function(F,E){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];E=E||{};E.element=E.element||F||null;var H=false;var D=A.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var G in D){if(D.hasOwnProperty(G)){this.DOM_EVENTS[G]=D[G];}}if(typeof E.element==="string"){this._setHTMLAttrConfig("id",{value:E.element});}if(B.get(E.element)){H=true;this._initHTMLElement(E);this._initContent(E);}YAHOO.util.Event.onAvailable(E.element,function(){if(!H){this._initHTMLElement(E);}this.fireEvent("available",{type:"available",target:B.get(E.element)});},this,true);YAHOO.util.Event.onContentReady(E.element,function(){if(!H){this._initContent(E);}this.fireEvent("contentReady",{type:"contentReady",target:B.get(E.element)});},this,true);},_initHTMLElement:function(D){this.setAttributeConfig("element",{value:B.get(D.element),readOnly:true});},_initContent:function(D){this.initAttributes(D);this.setAttributes(D,true);this.fireQueue();},_setHTMLAttrConfig:function(D,F){var E=this.get("element");F=F||{};F.name=D;F.setter=F.setter||this.DEFAULT_HTML_SETTER;F.getter=F.getter||this.DEFAULT_HTML_GETTER;F.value=F.value||E[D];this._configs[D]=new YAHOO.util.Attribute(F,this);}};YAHOO.augment(A,C);YAHOO.util.Element=A;})();YAHOO.register("element",YAHOO.util.Element,{version:"2.7.0",build:"1796"});/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+YAHOO.util.Color=function(){var A="0",B=YAHOO.lang.isArray,C=YAHOO.lang.isNumber;return{real2dec:function(D){return Math.min(255,Math.round(D*256));},hsv2rgb:function(H,O,M){if(B(H)){return this.hsv2rgb.call(this,H[0],H[1],H[2]);}var D,I,L,G=Math.floor((H/60)%6),J=(H/60)-G,F=M*(1-O),E=M*(1-J*O),N=M*(1-(1-J)*O),K;switch(G){case 0:D=M;I=N;L=F;break;case 1:D=E;I=M;L=F;break;case 2:D=F;I=M;L=N;break;case 3:D=F;I=E;L=M;break;case 4:D=N;I=F;L=M;break;case 5:D=M;I=F;L=E;break;}K=this.real2dec;return[K(D),K(I),K(L)];},rgb2hsv:function(D,H,I){if(B(D)){return this.rgb2hsv.apply(this,D);}D/=255;H/=255;I/=255;var G,L,E=Math.min(Math.min(D,H),I),J=Math.max(Math.max(D,H),I),K=J-E,F;switch(J){case E:G=0;break;case D:G=60*(H-I)/K;if(H<I){G+=360;}break;case H:G=(60*(I-D)/K)+120;break;case I:G=(60*(D-H)/K)+240;break;}L=(J===0)?0:1-(E/J);F=[Math.round(G),L,J];return F;},rgb2hex:function(F,E,D){if(B(F)){return this.rgb2hex.apply(this,F);}var G=this.dec2hex;return G(F)+G(E)+G(D);},dec2hex:function(D){D=parseInt(D,10)|0;D=(D>255||D<0)?0:D;return(A+D.toString(16)).slice(-2).toUpperCase();},hex2dec:function(D){return parseInt(D,16);},hex2rgb:function(D){var E=this.hex2dec;return[E(D.slice(0,2)),E(D.slice(2,4)),E(D.slice(4,6))];},websafe:function(F,E,D){if(B(F)){return this.websafe.apply(this,F);}var G=function(H){if(C(H)){H=Math.min(Math.max(0,H),255);var I,J;for(I=0;I<256;I=I+51){J=I+51;if(H>=I&&H<=J){return(H-I>25)?J:I;}}}return H;};return[G(F),G(E),G(D)];}};}();(function(){var J=0,F=YAHOO.util,C=YAHOO.lang,D=YAHOO.widget.Slider,B=F.Color,E=F.Dom,I=F.Event,A=C.substitute,H="yui-picker";function G(L,K){J=J+1;K=K||{};if(arguments.length===1&&!YAHOO.lang.isString(L)&&!L.nodeName){K=L;L=K.element||null;}if(!L&&!K.element){L=this._createHostElement(K);}G.superclass.constructor.call(this,L,K);this.initPicker();}YAHOO.extend(G,YAHOO.util.Element,{ID:{R:H+"-r",R_HEX:H+"-rhex",G:H+"-g",G_HEX:H+"-ghex",B:H+"-b",B_HEX:H+"-bhex",H:H+"-h",S:H+"-s",V:H+"-v",PICKER_BG:H+"-bg",PICKER_THUMB:H+"-thumb",HUE_BG:H+"-hue-bg",HUE_THUMB:H+"-hue-thumb",HEX:H+"-hex",SWATCH:H+"-swatch",WEBSAFE_SWATCH:H+"-websafe-swatch",CONTROLS:H+"-controls",RGB_CONTROLS:H+"-rgb-controls",HSV_CONTROLS:H+"-hsv-controls",HEX_CONTROLS:H+"-hex-controls",HEX_SUMMARY:H+"-hex-summary",CONTROLS_LABEL:H+"-controls-label"},TXT:{ILLEGAL_HEX:"Illegal hex value entered",SHOW_CONTROLS:"Show color details",HIDE_CONTROLS:"Hide color details",CURRENT_COLOR:"Currently selected color: {rgb}",CLOSEST_WEBSAFE:"Closest websafe color: {rgb}. Click to select.",R:"R",G:"G",B:"B",H:"H",S:"S",V:"V",HEX:"#",DEG:"\u00B0",PERCENT:"%"},IMAGE:{PICKER_THUMB:"../../build/colorpicker/assets/picker_thumb.png",HUE_THUMB:"../../build/colorpicker/assets/hue_thumb.png"},DEFAULT:{PICKER_SIZE:180},OPT:{HUE:"hue",SATURATION:"saturation",VALUE:"value",RED:"red",GREEN:"green",BLUE:"blue",HSV:"hsv",RGB:"rgb",WEBSAFE:"websafe",HEX:"hex",PICKER_SIZE:"pickersize",SHOW_CONTROLS:"showcontrols",SHOW_RGB_CONTROLS:"showrgbcontrols",SHOW_HSV_CONTROLS:"showhsvcontrols",SHOW_HEX_CONTROLS:"showhexcontrols",SHOW_HEX_SUMMARY:"showhexsummary",SHOW_WEBSAFE:"showwebsafe",CONTAINER:"container",IDS:"ids",ELEMENTS:"elements",TXT:"txt",IMAGES:"images",ANIMATE:"animate"},skipAnim:true,_createHostElement:function(){var K=document.createElement("div");if(this.CSS.BASE){K.className=this.CSS.BASE;}return K;},_updateHueSlider:function(){var K=this.get(this.OPT.PICKER_SIZE),L=this.get(this.OPT.HUE);L=K-Math.round(L/360*K);if(L===K){L=0;}this.hueSlider.setValue(L,this.skipAnim);},_updatePickerSlider:function(){var L=this.get(this.OPT.PICKER_SIZE),M=this.get(this.OPT.SATURATION),K=this.get(this.OPT.VALUE);M=Math.round(M*L/100);K=Math.round(L-(K*L/100));this.pickerSlider.setRegionValue(M,K,this.skipAnim);},_updateSliders:function(){this._updateHueSlider();this._updatePickerSlider();},setValue:function(L,K){K=(K)||false;this.set(this.OPT.RGB,L,K);this._updateSliders();},hueSlider:null,pickerSlider:null,_getH:function(){var K=this.get(this.OPT.PICKER_SIZE),L=(K-this.hueSlider.getValue())/K;L=Math.round(L*360);return(L===360)?0:L;},_getS:function(){return this.pickerSlider.getXValue()/this.get(this.OPT.PICKER_SIZE);},_getV:function(){var K=this.get(this.OPT.PICKER_SIZE);return(K-this.pickerSlider.getYValue())/K;},_updateSwatch:function(){var M=this.get(this.OPT.RGB),O=this.get(this.OPT.WEBSAFE),N=this.getElement(this.ID.SWATCH),L=M.join(","),K=this.get(this.OPT.TXT);E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CURRENT_COLOR,{"rgb":"#"+this.get(this.OPT.HEX)});N=this.getElement(this.ID.WEBSAFE_SWATCH);L=O.join(",");E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CLOSEST_WEBSAFE,{"rgb":"#"+B.rgb2hex(O)});},_getValuesFromSliders:function(){this.set(this.OPT.RGB,B.hsv2rgb(this._getH(),this._getS(),this._getV()));},_updateFormFields:function(){this.getElement(this.ID.H).value=this.get(this.OPT.HUE);this.getElement(this.ID.S).value=this.get(this.OPT.SATURATION);this.getElement(this.ID.V).value=this.get(this.OPT.VALUE);this.getElement(this.ID.R).value=this.get(this.OPT.RED);this.getElement(this.ID.R_HEX).innerHTML=B.dec2hex(this.get(this.OPT.RED));this.getElement(this.ID.G).value=this.get(this.OPT.GREEN);this.getElement(this.ID.G_HEX).innerHTML=B.dec2hex(this.get(this.OPT.GREEN));this.getElement(this.ID.B).value=this.get(this.OPT.BLUE);this.getElement(this.ID.B_HEX).innerHTML=B.dec2hex(this.get(this.OPT.BLUE));this.getElement(this.ID.HEX).value=this.get(this.OPT.HEX);},_onHueSliderChange:function(N){var L=this._getH(),K=B.hsv2rgb(L,1,1),M="rgb("+K.join(",")+")";this.set(this.OPT.HUE,L,true);E.setStyle(this.getElement(this.ID.PICKER_BG),"background-color",M);if(this.hueSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();}this._updateFormFields();this._updateSwatch();},_onPickerSliderChange:function(M){var L=this._getS(),K=this._getV();this.set(this.OPT.SATURATION,Math.round(L*100),true);this.set(this.OPT.VALUE,Math.round(K*100),true);if(this.pickerSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();
+}this._updateFormFields();this._updateSwatch();},_getCommand:function(K){var L=I.getCharCode(K);if(L===38){return 3;}else{if(L===13){return 6;}else{if(L===40){return 4;}else{if(L>=48&&L<=57){return 1;}else{if(L>=97&&L<=102){return 2;}else{if(L>=65&&L<=70){return 2;}else{if("8, 9, 13, 27, 37, 39".indexOf(L)>-1||K.ctrlKey||K.metaKey){return 5;}else{return 0;}}}}}}}},_useFieldValue:function(L,K,N){var M=K.value;if(N!==this.OPT.HEX){M=parseInt(M,10);}if(M!==this.get(N)){this.set(N,M);}},_rgbFieldKeypress:function(M,K,O){var N=this._getCommand(M),L=(M.shiftKey)?10:1;switch(N){case 6:this._useFieldValue.apply(this,arguments);break;case 3:this.set(O,Math.min(this.get(O)+L,255));this._updateFormFields();break;case 4:this.set(O,Math.max(this.get(O)-L,0));this._updateFormFields();break;default:}},_hexFieldKeypress:function(L,K,N){var M=this._getCommand(L);if(M===6){this._useFieldValue.apply(this,arguments);}},_hexOnly:function(L,K){var M=this._getCommand(L);switch(M){case 6:case 5:case 1:break;case 2:if(K!==true){break;}default:I.stopEvent(L);return false;}},_numbersOnly:function(K){return this._hexOnly(K,true);},getElement:function(K){return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[K]];},_createElements:function(){var N,M,P,O,L,K=this.get(this.OPT.IDS),Q=this.get(this.OPT.TXT),S=this.get(this.OPT.IMAGES),R=function(U,V){var W=document.createElement(U);if(V){C.augmentObject(W,V,true);}return W;},T=function(U,V){var W=C.merge({autocomplete:"off",value:"0",size:3,maxlength:3},V);W.name=W.id;return new R(U,W);};L=this.get("element");N=new R("div",{id:K[this.ID.PICKER_BG],className:"yui-picker-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.PICKER_THUMB],className:"yui-picker-thumb"});P=new R("img",{src:S.PICKER_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HUE_BG],className:"yui-picker-hue-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.HUE_THUMB],className:"yui-picker-hue-thumb"});P=new R("img",{src:S.HUE_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.CONTROLS],className:"yui-picker-controls"});L.appendChild(N);L=N;N=new R("div",{className:"hd"});M=new R("a",{id:K[this.ID.CONTROLS_LABEL],href:"#"});N.appendChild(M);L.appendChild(N);N=new R("div",{className:"bd"});L.appendChild(N);L=N;N=new R("ul",{id:K[this.ID.RGB_CONTROLS],className:"yui-picker-rgb-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.R+" "));O=new T("input",{id:K[this.ID.R],className:"yui-picker-r"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.G+" "));O=new T("input",{id:K[this.ID.G],className:"yui-picker-g"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.B+" "));O=new T("input",{id:K[this.ID.B],className:"yui-picker-b"});M.appendChild(O);N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HSV_CONTROLS],className:"yui-picker-hsv-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.H+" "));O=new T("input",{id:K[this.ID.H],className:"yui-picker-h"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.DEG));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.S+" "));O=new T("input",{id:K[this.ID.S],className:"yui-picker-s"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.V+" "));O=new T("input",{id:K[this.ID.V],className:"yui-picker-v"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HEX_SUMMARY],className:"yui-picker-hex_summary"});M=new R("li",{id:K[this.ID.R_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.G_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.B_HEX]});N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HEX_CONTROLS],className:"yui-picker-hex-controls"});N.appendChild(document.createTextNode(Q.HEX+" "));M=new T("input",{id:K[this.ID.HEX],className:"yui-picker-hex",size:6,maxlength:6});N.appendChild(M);L.appendChild(N);L=this.get("element");N=new R("div",{id:K[this.ID.SWATCH],className:"yui-picker-swatch"});L.appendChild(N);N=new R("div",{id:K[this.ID.WEBSAFE_SWATCH],className:"yui-picker-websafe-swatch"});L.appendChild(N);},_attachRGBHSV:function(L,K){I.on(this.getElement(L),"keydown",function(N,M){M._rgbFieldKeypress(N,this,K);},this);I.on(this.getElement(L),"keypress",this._numbersOnly,this,true);I.on(this.getElement(L),"blur",function(N,M){M._useFieldValue(N,this,K);},this);},_updateRGB:function(){var K=[this.get(this.OPT.RED),this.get(this.OPT.GREEN),this.get(this.OPT.BLUE)];this.set(this.OPT.RGB,K);this._updateSliders();},_initElements:function(){var O=this.OPT,N=this.get(O.IDS),L=this.get(O.ELEMENTS),K,M,P;for(K in this.ID){if(C.hasOwnProperty(this.ID,K)){N[this.ID[K]]=N[K];}}M=E.get(N[this.ID.PICKER_BG]);if(!M){this._createElements();}else{}for(K in N){if(C.hasOwnProperty(N,K)){M=E.get(N[K]);P=E.generateId(M);N[K]=P;N[N[K]]=P;L[P]=M;}}},initPicker:function(){this._initSliders();this._bindUI();this.syncUI(true);},_initSliders:function(){var K=this.ID,L=this.get(this.OPT.PICKER_SIZE);this.hueSlider=D.getVertSlider(this.getElement(K.HUE_BG),this.getElement(K.HUE_THUMB),0,L);this.pickerSlider=D.getSliderRegion(this.getElement(K.PICKER_BG),this.getElement(K.PICKER_THUMB),0,L,0,L);this.set(this.OPT.ANIMATE,this.get(this.OPT.ANIMATE));},_bindUI:function(){var K=this.ID,L=this.OPT;this.hueSlider.subscribe("change",this._onHueSliderChange,this,true);this.pickerSlider.subscribe("change",this._onPickerSliderChange,this,true);I.on(this.getElement(K.WEBSAFE_SWATCH),"click",function(M){this.setValue(this.get(L.WEBSAFE));},this,true);I.on(this.getElement(K.CONTROLS_LABEL),"click",function(M){this.set(L.SHOW_CONTROLS,!this.get(L.SHOW_CONTROLS));I.preventDefault(M);},this,true);this._attachRGBHSV(K.R,L.RED);this._attachRGBHSV(K.G,L.GREEN);this._attachRGBHSV(K.B,L.BLUE);this._attachRGBHSV(K.H,L.HUE);
+this._attachRGBHSV(K.S,L.SATURATION);this._attachRGBHSV(K.V,L.VALUE);I.on(this.getElement(K.HEX),"keydown",function(N,M){M._hexFieldKeypress(N,this,L.HEX);},this);I.on(this.getElement(this.ID.HEX),"keypress",this._hexOnly,this,true);I.on(this.getElement(this.ID.HEX),"blur",function(N,M){M._useFieldValue(N,this,L.HEX);},this);},syncUI:function(K){this.skipAnim=K;this._updateRGB();this.skipAnim=false;},_updateRGBFromHSV:function(){var L=[this.get(this.OPT.HUE),this.get(this.OPT.SATURATION)/100,this.get(this.OPT.VALUE)/100],K=B.hsv2rgb(L);this.set(this.OPT.RGB,K);this._updateSliders();},_updateHex:function(){var N=this.get(this.OPT.HEX),K=N.length,O,M,L;if(K===3){O=N.split("");for(M=0;M<K;M=M+1){O[M]=O[M]+O[M];}N=O.join("");}if(N.length!==6){return false;}L=B.hex2rgb(N);this.setValue(L);},_hideShowEl:function(M,K){var L=(C.isString(M)?this.getElement(M):M);E.setStyle(L,"display",(K)?"":"none");},initAttributes:function(K){K=K||{};G.superclass.initAttributes.call(this,K);this.setAttributeConfig(this.OPT.PICKER_SIZE,{value:K.size||this.DEFAULT.PICKER_SIZE});this.setAttributeConfig(this.OPT.HUE,{value:K.hue||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.SATURATION,{value:K.saturation||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.VALUE,{value:C.isNumber(K.value)?K.value:100,validator:C.isNumber});this.setAttributeConfig(this.OPT.RED,{value:C.isNumber(K.red)?K.red:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.GREEN,{value:C.isNumber(K.green)?K.green:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.BLUE,{value:C.isNumber(K.blue)?K.blue:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.HEX,{value:K.hex||"FFFFFF",validator:C.isString});this.setAttributeConfig(this.OPT.RGB,{value:K.rgb||[255,255,255],method:function(O){this.set(this.OPT.RED,O[0],true);this.set(this.OPT.GREEN,O[1],true);this.set(this.OPT.BLUE,O[2],true);var Q=B.websafe(O),P=B.rgb2hex(O),N=B.rgb2hsv(O);this.set(this.OPT.WEBSAFE,Q,true);this.set(this.OPT.HEX,P,true);if(N[1]){this.set(this.OPT.HUE,N[0],true);}this.set(this.OPT.SATURATION,Math.round(N[1]*100),true);this.set(this.OPT.VALUE,Math.round(N[2]*100),true);},readonly:true});this.setAttributeConfig(this.OPT.CONTAINER,{value:null,method:function(N){if(N){N.showEvent.subscribe(function(){this.pickerSlider.focus();},this,true);}}});this.setAttributeConfig(this.OPT.WEBSAFE,{value:K.websafe||[255,255,255]});var M=K.ids||C.merge({},this.ID),L;if(!K.ids&&J>1){for(L in M){if(C.hasOwnProperty(M,L)){M[L]=M[L]+J;}}}this.setAttributeConfig(this.OPT.IDS,{value:M,writeonce:true});this.setAttributeConfig(this.OPT.TXT,{value:K.txt||this.TXT,writeonce:true});this.setAttributeConfig(this.OPT.IMAGES,{value:K.images||this.IMAGE,writeonce:true});this.setAttributeConfig(this.OPT.ELEMENTS,{value:{},readonly:true});this.setAttributeConfig(this.OPT.SHOW_CONTROLS,{value:C.isBoolean(K.showcontrols)?K.showcontrols:true,method:function(N){var O=E.getElementsByClassName("bd","div",this.getElement(this.ID.CONTROLS))[0];this._hideShowEl(O,N);this.getElement(this.ID.CONTROLS_LABEL).innerHTML=(N)?this.get(this.OPT.TXT).HIDE_CONTROLS:this.get(this.OPT.TXT).SHOW_CONTROLS;}});this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS,{value:C.isBoolean(K.showrgbcontrols)?K.showrgbcontrols:true,method:function(N){this._hideShowEl(this.ID.RGB_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS,{value:C.isBoolean(K.showhsvcontrols)?K.showhsvcontrols:false,method:function(N){this._hideShowEl(this.ID.HSV_CONTROLS,N);if(N&&this.get(this.OPT.SHOW_HEX_SUMMARY)){this.set(this.OPT.SHOW_HEX_SUMMARY,false);}}});this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS,{value:C.isBoolean(K.showhexcontrols)?K.showhexcontrols:false,method:function(N){this._hideShowEl(this.ID.HEX_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_WEBSAFE,{value:C.isBoolean(K.showwebsafe)?K.showwebsafe:true,method:function(N){this._hideShowEl(this.ID.WEBSAFE_SWATCH,N);}});this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY,{value:C.isBoolean(K.showhexsummary)?K.showhexsummary:true,method:function(N){this._hideShowEl(this.ID.HEX_SUMMARY,N);if(N&&this.get(this.OPT.SHOW_HSV_CONTROLS)){this.set(this.OPT.SHOW_HSV_CONTROLS,false);}}});this.setAttributeConfig(this.OPT.ANIMATE,{value:C.isBoolean(K.animate)?K.animate:true,method:function(N){if(this.pickerSlider){this.pickerSlider.animate=N;this.hueSlider.animate=N;}}});this.on(this.OPT.HUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.SATURATION+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.VALUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.RED+"Change",this._updateRGB,this,true);this.on(this.OPT.GREEN+"Change",this._updateRGB,this,true);this.on(this.OPT.BLUE+"Change",this._updateRGB,this,true);this.on(this.OPT.HEX+"Change",this._updateHex,this,true);this._initElements();}});YAHOO.widget.ColorPicker=G;})();YAHOO.register("colorpicker",YAHOO.widget.ColorPicker,{version:"2.7.0",build:"1796"});
+
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if("style" in D){B.Dom.setStyle(D,C,F+E);}else{if(C in D){D[C]=F;}}},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style" in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];
+}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();
+/*
+TERMS OF USE - EASING EQUATIONS
+Open source under the BSD License.
+Copyright 2001 Robert Penner All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.5625*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,C){if(B<C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);
+}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"});
diff --git a/modules_v2/ckeditor/plugins/wsc/dialogs/ciframe.html b/modules_v2/ckeditor/plugins/wsc/dialogs/ciframe.html new file mode 100644 index 0000000000..0a96d82e8a --- /dev/null +++ b/modules_v2/ckeditor/plugins/wsc/dialogs/ciframe.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html>
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <script type="text/javascript">
+
+function gup( name )
+{
+ name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ;
+ var regexS = '[\\?&]' + name + '=([^&#]*)' ;
+ var regex = new RegExp( regexS ) ;
+ var results = regex.exec( window.location.href ) ;
+
+ if ( results )
+ return results[ 1 ] ;
+ else
+ return '' ;
+}
+
+var interval;
+
+function sendData2Master()
+{
+ var destination = window.parent.parent ;
+ try
+ {
+ if ( destination.XDTMaster )
+ {
+ var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ;
+ window.clearInterval( interval ) ;
+ }
+ }
+ catch (e) {}
+}
+
+function onLoad()
+{
+ interval = window.setInterval( sendData2Master, 100 );
+}
+
+</script>
+</head>
+<body onload="onLoad()"><p></p></body>
+</html>
diff --git a/modules_v2/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/modules_v2/ckeditor/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000000..41abd6ee2f --- /dev/null +++ b/modules_v2/ckeditor/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html>
+<head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <script type="text/javascript">
+
+function doLoadScript( url )
+{
+ if ( !url )
+ return false ;
+
+ var s = document.createElement( "script" ) ;
+ s.type = "text/javascript" ;
+ s.src = url ;
+ document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ;
+
+ return true ;
+}
+
+var opener;
+function tryLoad()
+{
+ opener = window.parent;
+
+ // get access to global parameters
+ var oParams = window.opener.oldFramesetPageParams;
+
+ // make frameset rows string prepare
+ var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ;
+ document.getElementById( 'itFrameset' ).rows = sFramesetRows ;
+
+ // dynamic including init frames and crossdomain transport code
+ // from config sproxy_js_frameset url
+ var addScriptUrl = oParams.sproxy_js_frameset ;
+ doLoadScript( addScriptUrl ) ;
+}
+
+ </script>
+</head>
+
+<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0">
+ <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame>
+ <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame>
+ <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame>
+ <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame>
+</frameset>
+</html>
diff --git a/modules_v2/ckeditor/plugins/wsc/dialogs/wsc.css b/modules_v2/ckeditor/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000000..f7e41cff45 --- /dev/null +++ b/modules_v2/ckeditor/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+html,body{background-color:transparent;margin:0;padding:0;}body{padding:10px;}body,td,input,select,textarea{font-size:11px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;}.midtext{padding:0;margin:10px;}.midtext p{padding:0;margin:10px;}.Button{border:#737357 1px solid;color:#3b3b1f;background-color:#c7c78f;}.PopupTabArea{color:#737357;background-color:#e3e3c7;}.PopupTitleBorder{border-bottom:#d5d59d 1px solid;}.PopupTabEmptyArea{padding-left:10px;border-bottom:#d5d59d 1px solid;}.PopupTab,.PopupTabSelected{border-right:#d5d59d 1px solid;border-top:#d5d59d 1px solid;border-left:#d5d59d 1px solid;padding:3px 5px 3px 5px;color:#737357;}.PopupTab{margin-top:1px;border-bottom:#d5d59d 1px solid;cursor:pointer;}.PopupTabSelected{font-weight:bold;cursor:default;padding-top:4px;border-bottom:#f1f1e3 1px solid;background-color:#f1f1e3;}
diff --git a/modules_v2/ckeditor/plugins/wsc/dialogs/wsc.js b/modules_v2/ckeditor/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000000..66e90aea75 --- /dev/null +++ b/modules_v2/ckeditor/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add('checkspell',function(a){var b=CKEDITOR.tools.getNextNumber(),c='cke_frame_'+b,d='cke_data_'+b,e='cke_error_'+b,f,g=document.location.protocol||'http:',h=a.lang.spellCheck.notAvailable,i='<textarea style="display: none" id="'+d+'"'+' rows="10"'+' cols="40">'+' </textarea><div'+' id="'+e+'"'+' style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;">'+'</div><iframe'+' src=""'+' style="width:100%;background-color:#f1f1e3;"'+' frameborder="0"'+' name="'+c+'"'+' id="'+c+'"'+' allowtransparency="1">'+'</iframe>',j=a.config.wsc_customLoaderScript||g+'//loader.spellchecker.net/sproxy_fck/sproxy.php'+'?plugin=fck2'+'&customerid='+a.config.wsc_customerId+'&cmd=script&doc=wsc&schema=22';if(a.config.wsc_customLoaderScript)h+='<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">'+a.lang.spellCheck.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+'</p>';function k(m,n){var o=0;return function(){if(typeof window.doSpell=='function'){if(typeof f!='undefined')window.clearInterval(f);l(m);}else if(o++==180)window._cancelOnError(n);};};window._cancelOnError=function(m){if(typeof window.WSC_Error=='undefined'){CKEDITOR.document.getById(c).setStyle('display','none');var n=CKEDITOR.document.getById(e);n.setStyle('display','block');n.setHtml(m||a.lang.spellCheck.notAvailable);}};function l(m){var n=new window._SP_FCK_LangCompare(),o=CKEDITOR.getUrl(a.plugins.wsc.path+'dialogs/'),p=o+'tmpFrameset.html';window.gFCKPluginName='wsc';n.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:d,lang:a.config.wsc_lang||n.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang||n.getSPLangCode(a.langCode),winType:c,onCancel:function(){m.hide();},onFinish:function(q){a.focus();m.getParentEditor().setData(q.value);m.hide();},staticFrame:p,framesetPath:p,iframePath:o+'ciframe.html',schemaURI:o+'wsc.css',userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(','),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(e).setStyle('display','none');CKEDITOR.document.getById(c).setStyle('display','block');};return{title:a.config.wsc_dialogTitle||a.lang.spellCheck.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var m=this.getContentElement('general','content').getElement();m.setHtml(i);m.getChild(2).setStyle('height',this._.contentSize.height+'px');
+if(typeof window.doSpell!='function')CKEDITOR.document.getHead().append(CKEDITOR.document.createElement('script',{attributes:{type:'text/javascript',src:j}}));var n=a.getData();CKEDITOR.document.getById(d).setValue(n);f=window.setInterval(k(this,h),250);},onHide:function(){window.ooo=undefined;window.int_framsetLoaded=undefined;window.framesetLoaded=undefined;window.is_window_opened=false;},contents:[{id:'general',label:a.config.wsc_dialogTitle||a.lang.spellCheck.title,padding:0,elements:[{type:'html',id:'content',html:''}]}]};});CKEDITOR.dialog.on('resize',function(a){var b=a.data,c=b.dialog;if(c._.name=='checkspell'){var d=c.getContentElement('general','content').getElement(),e=d&&d.getChild(2);e&&e.setStyle('height',b.height+'px');}});
diff --git a/modules_v2/ckeditor/skins/kama/dialog.css b/modules_v2/ckeditor/skins/kama/dialog.css new file mode 100644 index 0000000000..70e86df510 --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/dialog.css @@ -0,0 +1,9 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+body .cke_dialog{visibility:visible;}.cke_skin_kama table.cke_dialog.cke_browser_gecko{display:block;}.cke_skin_kama .cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;position:relative;_position:static;}.cke_skin_kama .cke_dialog_tl,.cke_skin_kama .cke_dialog_tr,.cke_skin_kama .cke_dialog_tc,.cke_skin_kama .cke_dialog_bl,.cke_skin_kama .cke_dialog_br,.cke_skin_kama .cke_dialog_bc,.cke_skin_kama .cke_dialog_ml,.cke_skin_kama .cke_dialog_mr{display:none;}.cke_skin_kama .cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_title,.cke_skin_kama .cke_browser_ie6 .cke_dialog_title,.cke_skin_kama .cke_browser_ie7 .cke_dialog_title{margin-bottom:22px;}.cke_skin_kama .cke_browser_iequirks.cke_single_page .cke_dialog_title,.cke_skin_kama .cke_browser_ie6.cke_single_page .cke_dialog_title,.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_title{margin-bottom:10px;}.cke_skin_kama .cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:none;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px;}.cke_skin_kama .cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:none;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px;}.cke_skin_kama .cke_rtl .cke_dialog_footer{text-align:left;}.cke_skin_kama .cke_dialog_footer .cke_resizer{margin-top:20px;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_footer .cke_resizer,.cke_skin_kama .cke_browser_ie6 .cke_dialog_footer .cke_resizer{margin-top:27px;}.cke_skin_kama .cke_dialog_tabs{height:23px;display:inline-block;_display:block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_tabs,.cke_skin_kama .cke_browser_ie6 .cke_dialog_tabs,.cke_skin_kama .cke_browser_ie7 .cke_dialog_tabs{top:33px;}.cke_skin_kama .cke_rtl .cke_dialog_tabs{right:10px;}.cke_skin_kama a.cke_dialog_tab,.cke_skin_kama a:link.cke_dialog_tab,.cke_skin_kama a:active.cke_dialog_tab,.cke_skin_kama a:hover.cke_dialog_tab,.cke_skin_kama a:visited.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer;}.cke_skin_kama .cke_browser_gecko18 a.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:link.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:active.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:hover.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:visited.cke_dialog_tab{display:inline;position:relative;top:6px;}.cke_skin_kama a:hover.cke_dialog_tab{background-color:#f1f1e3;}.cke_skin_kama .cke_hc a:hover.cke_dialog_tab{padding:2px 6px!important;border-width:3px;}.cke_skin_kama a.cke_dialog_tab_selected,.cke_skin_kama a:link.cke_dialog_tab_selected,.cke_skin_kama a:active.cke_dialog_tab_selected,.cke_skin_kama a:hover.cke_dialog_tab_selected,.cke_skin_kama a:visited.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default;}.cke_skin_kama .cke_hc a.cke_dialog_tab_selected,.cke_skin_kama .cke_hc a:link.cke_dialog_tab_selected,.cke_skin_kama .cke_hc a:active.cke_dialog_tab_selected,.cke_skin_kama .cke_hc a:hover.cke_dialog_tab_selected,.cke_skin_kama .cke_hc a:visited.cke_dialog_tab_selected{padding:2px 6px!important;border-width:3px;}.cke_skin_kama .cke_single_page .cke_dialog_tabs{display:none;}.cke_skin_kama .cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px;}.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_contents{margin-top:0;position:relative;margin-bottom:-22px;}
+.cke_skin_kama .cke_dialog_ui_vbox table,.cke_skin_kama .cke_dialog_ui_hbox table{margin:auto;}.cke_skin_kama .cke_dialog_ui_vbox_child{padding:5px 0;}.cke_skin_kama input.cke_dialog_ui_input_text,.cke_skin_kama input.cke_dialog_ui_input_password{background-color:white;border:none;padding:0;width:100%;height:14px;}.cke_skin_kama div.cke_dialog_ui_input_text,.cke_skin_kama div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_kama .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password,.cke_skin_kama .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px;}.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password,.cke_skin_kama .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px;}.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child,.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child,.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important;}.cke_skin_kama .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px;}.cke_skin_kama .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password{border-width:0;}.cke_skin_kama .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_text,.cke_skin_kama .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_password{border-width:1px;}.cke_skin_kama textarea.cke_dialog_ui_input_textarea{background-color:white;border:none;padding:0;width:100%;_width:99%;overflow:auto;resize:none;}.cke_skin_kama div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_kama div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default;}.cke_skin_kama .cke_dialog_ui_hbox{width:100%;}.cke_skin_kama .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_dialog_ui_hbox_child,.cke_skin_kama .cke_dialog_ui_hbox_last{vertical-align:top;}.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px;}.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px;}.cke_skin_kama a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;_background:none;padding:5px 0;text-align:center;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button{padding:0;}.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span{width:70px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span{width:100px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span{padding:5px 15px;text-align:center;color:#3b3b1f;background:#53D9F0 none;display:inline-block;cursor:default;}.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button span.cke_dialog_ui_button{margin:0;}.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button{display:inline-block;padding-top:3px;padding-bottom:2px;margin:2px 0;}.cke_skin_kama a.cke_dialog_ui_button_ok span,.cke_skin_kama a.cke_dialog_ui_button_cancel span{width:60px;padding-right:20px;padding-left:20px;}.cke_skin_kama a.cke_dialog_ui_button_ok{background-position:0 -1143px;}.cke_skin_kama a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1219px;}.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1219px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span{background-color:#B8E834;margin-right:0;}
+.cke_skin_kama a.cke_dialog_ui_button_cancel{background-position:0 -1104px;}.cke_skin_kama a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1245px;}.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1245px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span{background-color:#F65D20;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span,.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span{background-image:none;}.cke_skin_kama span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;min-width:60px;+margin:2px 0;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{display:block;}.cke_skin_kama a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3;}.cke_skin_kama a:hover.cke_dialog_ui_button,.cke_skin_kama a:focus.cke_dialog_ui_button,.cke_skin_kama a:active.cke_dialog_ui_button{background-position:0 -1179px;}.cke_skin_kama .cke_hc a:hover.cke_dialog_ui_button,.cke_skin_kama .cke_hc a:focus.cke_dialog_ui_button,.cke_skin_kama .cke_hc a:active.cke_dialog_ui_button{border-width:2px;}.cke_skin_kama .cke_browser_iequirks a:hover.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a:focus.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a:active.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a:hover.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a:focus.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a:active.cke_dialog_ui_button span{background-image:none;background:#F7A922;}.cke_skin_kama .cke_dialog_footer_buttons{display:inline-table;margin-right:12px;margin-left:12px;width:auto;position:relative;}.cke_skin_kama .cke_browser_ie7 .cke_dialog_footer_buttons{position:static;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons{display:inline;}.cke_skin_kama .cke_dialog_footer_buttons span.cke_dialog_ui_button{margin:7px 0;text-align:center;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons a.cke_dialog_ui_button{display:block;padding:0;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{padding-bottom:5px;padding-top:6px;margin-bottom:0;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_ok .cke_dialog_ui_button{background-position:right -1214px;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_cancel .cke_dialog_ui_button{background-position:right -1242px;}.cke_skin_kama strong{font-weight:bold;}.cke_skin_kama .cke_dialog .cke_dialog_body .cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;_background-image:url(images/sprites_ie6.png);}.cke_skin_kama .cke_dialog_close_button span{display:none;}.cke_skin_kama .cke_dialog_close_button:hover{background-position:0 -1045px;}.cke_skin_kama .cke_ltr .cke_dialog_close_button{right:10px;}.cke_skin_kama .cke_browser_ie8.cke_rtl .cke_dialog_close_button{left:8px;}.cke_skin_kama .cke_rtl .cke_dialog_close_button{left:10px;}.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button{left:16px;top:0;}.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button{position:absolute;left:10px;top:5px;}.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_footer{margin-top:22px;}.cke_skin_kama .cke_browser_ie6 .cke_dialog_close_button,.cke_skin_kama .cke_browser_iequirks .cke_dialog_close_button{top:7px;}.cke_skin_kama .cke_browser_ie7.cke_ltr .cke_dialog_close_button{margin-top:0;}.cke_skin_kama .cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white;}.cke_skin_kama .cke_dialog_ui_input_file{width:100%;height:25px;}
+.cke_skin_kama .cke_dialog .cke_dark_background{background-color:#eaead1;}.cke_skin_kama .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_kama .cke_dialog .cke_centered{text-align:center;}.cke_skin_kama .cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px;}.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_reset{float:left;}.cke_skin_kama .cke_dialog a.cke_btn_locked,.cke_skin_kama .cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px;}.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_locked,.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_unlocked{float:right;}.cke_skin_kama .cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif);}.cke_skin_kama .cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer;}.cke_skin_kama .cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white;}.cke_skin_kama .cke_dialog .ImagePreviewBox table td{white-space:normal;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_page_contents{_position:absolute;}.cke_skin_kama .cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4;}.cke_skin_kama .cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white;}.cke_skin_kama .cke_dialog .cke_pastetext{width:346px;height:170px;}.cke_skin_kama .cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none;}.cke_skin_kama .cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black;}.cke_skin_kama .cke_dialog .cke_dark_background{text-align:center;background-color:#eaead1;font-size:14px;}.cke_skin_kama .cke_dialog .cke_light_background{text-align:center;background-color:#ffffbe;}.cke_skin_kama .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_kama .cke_disabled{color:#a0a0a0;}.cke_skin_kama .cke_hc .cke_dialog_title,.cke_skin_kama .cke_hc .cke_dialog_tabs,.cke_skin_kama .cke_hc .cke_dialog_contents,.cke_skin_kama .cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid;}.cke_skin_kama .cke_hc .cke_dialog_title{border-top:1px solid;}.cke_skin_kama .cke_hc .cke_dialog_footer{border-bottom:1px solid;}.cke_skin_kama .cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px;}.cke_skin_kama .cke_dialog_body .cke_label{display:none;}.cke_skin_kama .cke_dialog_body label.cke_required{font-weight:bold;}.cke_skin_kama .cke_hc .cke_dialog_body .cke_label{display:inline;}.cke_skin_kama .cke_hc a.cke_btn_locked,.cke_skin_kama .cke_hc a.cke_btn_unlocked,.cke_skin_kama .cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;}.cke_skin_kama .cke_rtl.cke_hc a.cke_btn_locked,.cke_skin_kama .cke_rtl.cke_hc a.cke_btn_unlocked,.cke_skin_kama .cke_rtl.cke_hc a.cke_btn_reset{float:right;}.cke_skin_kama a.cke_smile img{border:2px solid #eaead1;}.cke_skin_kama a.cke_smile:focus img,.cke_skin_kama a.cke_smile:active img,.cke_skin_kama a.cke_smile:hover img{border-color:#C7C78F;}.cke_skin_kama .cke_hc .cke_dialog_tabs a,.cke_skin_kama .cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white;}.cke_skin_kama .cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px;}.cke_skin_kama .cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px;}
diff --git a/modules_v2/ckeditor/skins/kama/editor.css b/modules_v2/ckeditor/skins/kama/editor.css new file mode 100644 index 0000000000..e039268d34 --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/editor.css @@ -0,0 +1,13 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+.cke_skin_kama *,.cke_skin_kama a:hover,.cke_skin_kama a:link,.cke_skin_kama a:visited,.cke_skin_kama a:active{margin:0;padding:0;border:0;background:transparent;text-decoration:none;font:normal normal normal 100% Sans-Serif;width:auto;height:auto;border-collapse:collapse;text-align:left;vertical-align:baseline;white-space:nowrap;cursor:auto;color:#000;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif;}.cke_skin_kama .cke_rtl *,.cke_skin_kama .cke_rtl a:hover,.cke_skin_kama .cke_rtl a:link,.cke_skin_kama .cke_rtl a:visited,.cke_skin_kama .cke_rtl a:active,.cke_rtl .cke_skin_kama *,.cke_rtl .cke_skin_kama a:hover,.cke_rtl .cke_skin_kama a:link,.cke_rtl .cke_skin_kama a:visited,.cke_rtl .cke_skin_kama a:active{text-align:right;}.cke_skin_kama iframe{vertical-align:inherit;}.cke_skin_kama textarea{white-space:pre;}.cke_skin_kama .cke_browser_gecko textarea{cursor:text;}.cke_skin_kama .cke_browser_gecko textarea[disabled]{cursor:default;}.cke_skin_kama input[type="text"],.cke_skin_kama input[type="password"]{cursor:text;}.cke_skin_kama input[type="text"][disabled],.cke_skin_kama input[type="password"][disabled]{cursor:default;}.cke_skin_kama fieldset{padding:10px;border:2px groove #E0DFE3;}.cke_skin_kama{display:block;}span.cke_skin_kama{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #D3D3D3;padding:5px;}.cke_skin_kama span.cke_browser_webkit,.cke_skin_kama span.cke_browser_gecko18{display:block;}.cke_skin_kama .cke_wrapper{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-color:#d3d3d3;background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1950px;display:block;_display:inline-block;padding:5px;}.cke_shared .cke_skin_kama .cke_wrapper{padding-bottom:0;}.cke_skin_kama .cke_browser_ie6 .cke_wrapper,.cke_skin_kama .cke_browser_iequirks .cke_wrapper{background-image:none;}.cke_skin_kama .cke_editor{display:inline-table;width:100%;}.cke_skin_kama .ltr .cke_browser_ie iframe{margin-right:-10px;}.cke_skin_kama .rtl .cke_browser_ie iframe{margin-left:-10px;}.cke_skin_kama .cke_browser_opera .cke_editor.cke_skin_kama .cke_resizer{display:table;}.cke_skin_kama .cke_contents{margin:5px;}.cke_skin_kama .cke_hc .cke_contents{border:1px solid black;}.cke_skin_kama .cke_contents iframe{background-color:#fff;}.cke_skin_kama .cke_focus{outline:auto 5px -webkit-focus-ring-color;}.cke_skin_kama textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre;}.cke_skin_kama .cke_browser_iequirks textarea.cke_source{_white-space:normal;}.cke_skin_kama .cke_resizer{width:12px;height:12px;margin-top:9px;display:block;float:right;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1428px;background-repeat:no-repeat;cursor:se-resize;}.cke_skin_kama .cke_browser_air .cke_resizer,.cke_skin_kama .cke_browser_air .cke_rtl .cke_resizer{cursor:move;}.cke_skin_kama .cke_rtl .cke_resizer{cursor:sw-resize;background-position:0 -1455px;float:left;}.cke_skin_kama .cke_resizer_horizontal,.cke_skin_kama .cke_rtl .cke_resizer_horizontal{cursor:e-resize;}.cke_skin_kama .cke_resizer_vertical,.cke_skin_kama .cke_rtl .cke_resizer_vertical{cursor:n-resize;}.cke_skin_kama .cke_maximized .cke_resizer{display:none;}.cke_skin_kama .cke_browser_ie6 .cke_contents textarea,.cke_skin_kama .cke_browser_ie7 .cke_contents textarea{position:absolute;}.cke_skin_kama .cke_browser_ie.cke_browser_quirks .cke_contents iframe{position:absolute;top:0;}.cke_skin_kama .cke_browser_ie6 .cke_editor,.cke_skin_kama .cke_browser_ie7 .cke_editor{display:inline-block;}.cke_skin_kama .cke_browser_ie6 .cke_editor,.cke_shared .cke_skin_kama .cke_browser_ie7 .cke_wrapper{padding-bottom:5px;}.cke_skin_kama .cke_voice_label{display:none;}.cke_skin_kama legend.cke_voice_label{display:none;}.cke_skin_kama .cke_browser_ie legend.cke_voice_label{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_kama .cke_panel{border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}
+.cke_skin_kama .cke_contextmenu{margin:0;}.cke_skin_kama .cke_panel iframe{width:100%;height:100%;}html.cke_skin_kama_container{overflow:auto;overflow-x:hidden;}body.cke_panel_frame{overflow:auto;}.cke_panel_frame .cke_label{display:none;}ul.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap;}li.cke_panel_listItem{margin:0;}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;}* html .cke_panel_listItem a{width:100%;color:#000;}*:first-child+html .cke_panel_listItem a{color:#000;}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff;}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff;}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0;}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px;}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px;}.cke_skin_kama .cke_button_textcolor_panel,.cke_skin_kama .cke_button_bgcolor_panel{width:150px;height:135px;}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000;}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left;}.cke_rtl span.cke_colorbox{float:right;}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;}.cke_rtl a.cke_colorbox{float:right;}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff;}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer;}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff;}@media print{.cke_skin_kama .cke_toolbox{display:none;}}.cke_skin_kama .cke_browser_webkit .cke_toolbox,.cke_skin_kama .cke_browser_webkit .cke_toolbox>span{white-space:normal;}.cke_skin_kama .cke_toolbox{clear:both;padding-bottom:1px;}.cke_skin_kama a.cke_toolbox_collapser,.cke_skin_kama a:hover.cke_toolbox_collapser{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:3px -1366px;background-repeat:no-repeat;width:11px;height:11px;float:right;border:1px outset #D3D3D3;margin:11px 0 2px;cursor:pointer;}.cke_skin_kama .cke_rtl a.cke_toolbox_collapser,.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser{float:left;}.cke_skin_kama a.cke_toolbox_collapser span{display:none;}.cke_skin_kama .cke_hc a.cke_toolbox_collapser span{font-size:10px;font-weight:bold;font-family:Arial;display:inline;}.cke_skin_kama a.cke_toolbox_collapser_min,.cke_skin_kama a:hover.cke_toolbox_collapser_min{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:4px -1387px;background-repeat:no-repeat;margin:2px 4px;}.cke_skin_kama .cke_rtl a.cke_toolbox_collapser_min,.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser_min{background-position:4px -1408px;}.cke_skin_kama .cke_toolbar{display:inline;}.cke_skin_kama .cke_separator{display:none;}.cke_skin_kama .cke_break{font-size:0;clear:left;}.cke_skin_kama .cke_rtl .cke_break{clear:right;}.cke_skin_kama .cke_toolbar_start{display:none;}.cke_skin_kama .cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:repeat-x;background-position:0 -500px;float:left;margin-right:6px;margin-bottom:5px;padding:2px;display:inline;}
+.cke_skin_kama .cke_rtl .cke_toolgroup{float:right;margin-right:0;margin-left:6px;}.cke_skin_kama .cke_toolgroup{display:block;height:22px;}.cke_skin_kama .cke_button a,.cke_skin_kama .cke_button a:hover,.cke_skin_kama .cke_button a:focus,.cke_skin_kama .cke_button a:active,.cke_skin_kama .cke_button a.cke_off{border-radius:3px;outline:none;padding:2px 4px;height:18px;display:inline-block;cursor:default;}.cke_skin_kama .cke_button a,.cke_skin_kama .cke_button a.cke_off{filter:alpha(opacity=70);opacity:.70;-moz-border-radius:3px;-webkit-border-radius:3px;}.cke_skin_kama .cke_hc .cke_button a,.cke_skin_kama .cke_hc .cke_button a.cke_off{opacity:1.0;filter:alpha(opacity=100);border:1px solid white;}.cke_skin_kama .cke_button a.cke_on{background-color:#a3d7ff;filter:alpha(opacity=100);opacity:1;padding:2px 4px;}.cke_skin_kama .cke_hc .cke_button a.cke_on{padding:0 2px!important;border-width:3px;}.cke_skin_kama .cke_button a.cke_disabled *{filter:alpha(opacity=30);opacity:.3;}.cke_skin_kama .cke_browser_ie .cke_button a.cke_disabled *,.cke_skin_kama .cke_browser_ie a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *,.cke_skin_kama .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_kama .cke_browser_ie6 .cke_button a.cke_disabled *,.cke_skin_kama .cke_browser_ie6 a:hover.cke_button .cke_disabled *{filter:alpha(opacity=30);}.cke_skin_kama .cke_hc .cke_button a.cke_disabled *,.cke_skin_kama .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled *{filter:alpha(opacity=60);opacity:.6;}.cke_skin_kama .cke_button a:hover.cke_on,.cke_skin_kama .cke_button a:focus.cke_on,.cke_skin_kama .cke_button a:active.cke_on,.cke_skin_kama .cke_button a:hover.cke_off,.cke_skin_kama .cke_button a:focus.cke_off,.cke_skin_kama .cke_button a:active.cke_off{filter:alpha(opacity=100);opacity:1;padding:2px 4px;}.cke_skin_kama .cke_button a:hover,.cke_skin_kama .cke_button a:focus,.cke_skin_kama .cke_button a:active{background-color:#dff1ff;}.cke_skin_kama .cke_button a:hover.cke_on,.cke_skin_kama .cke_button a:focus.cke_on,.cke_skin_kama .cke_button a:active.cke_on{background-color:#86caff;}.cke_skin_kama .cke_hc .cke_button a:hover,.cke_skin_kama .cke_hc .cke_button a:focus,.cke_skin_kama .cke_hc .cke_button a:active{padding:0 2px!important;border-width:3px;}.cke_skin_kama .cke_button .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;display:inline-block;float:left;cursor:default;}.cke_skin_kama .cke_rtl .cke_button .cke_icon{background-image:url(icons_rtl.png);}.cke_skin_kama .cke_browser_ie .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_kama .cke_browser_ie6 .cke_button .cke_icon,.cke_skin_kama .cke_browser_ie6 .cke_rtl .cke_button .cke_icon{filter:;}.cke_skin_kama .cke_rtl .cke_button .cke_icon{float:right;}.cke_skin_kama .cke_button .cke_label{cursor:default;display:none;padding-left:3px;line-height:18px;vertical-align:middle;float:left;}.cke_skin_kama .cke_rtl .cke_button .cke_label{padding-left:0;padding-right:3px;float:right;}.cke_skin_kama .cke_hc .cke_button .cke_label{padding:0;display:inline-block;}.cke_skin_kama .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_kama .cke_accessibility{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_kama .cke_button .cke_buttonarrow{display:inline-block;height:17px;width:8px;background-position:2px -1469px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;float:left;cursor:default;}.cke_skin_kama .cke_browser_ie .cke_button .cke_buttonarrow{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}
+.cke_skin_kama .cke_browser_ie6 .cke_button .cke_buttonarrow{filter:;}.cke_skin_kama .cke_rtl .cke_button .cke_buttonarrow{background-position:0 -1469px;float:right;}.cke_skin_kama .cke_browser_gecko .cke_toolbar,.cke_skin_kama .cke_browser_gecko .cke_button a,.cke_skin_kama .cke_browser_gecko .cke_button a.cke_off,.cke_skin_kama .cke_browser_gecko .cke_button .cke_icon,.cke_skin_kama .cke_browser_gecko .cke_button .cke_buttonarrow,.cke_skin_kama .cke_browser_gecko .cke_separator,.cke_skin_kama .cke_browser_gecko .cke_toolbar_start{display:block;float:left;}.cke_skin_kama .cke_browser_gecko.cke_hc .cke_button .cke_icon{display:none;}.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button a,.cke_skin_kama .cke_browser_gecko .cke_rtl.cke_button a.cke_off,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_icon,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_buttonarrow,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar_start{float:right;}.cke_skin_kama .cke_browser_gecko .cke_button .cke_label,.cke_skin_kama .cke_browser_gecko .cke_break{float:left;}.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_label,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_break{float:right;}.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_icon,.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_label,.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_buttonarrow{float:none;}.cke_skin_kama .cke_browser_webkit .cke_toolbar{float:left;}.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_toolbar{float:right;}.cke_skin_kama .cke_browser_ie8 .cke_button .cke_label,.cke_skin_kama .cke_browser_opera .cke_button .cke_label,.cke_skin_kama .cke_browser_webkit .cke_button .cke_label{line-height:20px;}.cke_skin_kama .cke_browser_opera.cke_browser_quirks .cke_button .cke_label,.cke_skin_kama .cke_browser_iequirks .cke_button .cke_label{line-height:17px;}.cke_skin_kama .cke_browser_ie .cke_rcombo,.cke_skin_kama .cke_browser_ie .cke_rcombo *{cursor:default;}.cke_skin_kama .cke_browser_ie .cke_toolbox{padding-bottom:5px;_padding-bottom:6px;}.cke_shared .cke_skin_kama .cke_browser_ie .cke_toolbox{padding-bottom:0;}.cke_skin_kama .cke_contextmenu{padding:2px;}.cke_skin_kama .cke_menuitem a{display:block;}.cke_skin_kama .cke_menuitem span{cursor:default;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{background-color:#D3D3D3;display:block;}.cke_hc .cke_menuitem a:hover,.cke_hc .cke_menuitem a:focus,.cke_hc .cke_menuitem a:active{border:2px solid;}.cke_skin_kama .cke_menuitem .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;background-color:transparent;width:16px;height:16px;float:left;}.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon{background-image:url(icons_rtl.png);}.cke_browser_ie .cke_skin_kama .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_kama .cke_menuitem .cke_icon{filter:;}.cke_skin_kama .cke_menuitem .cke_disabled .cke_icon{filter:alpha(opacity=70);opacity:.70;}.cke_browser_ie .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_kama .cke_menuitem .cke_disabled .cke_icon{filter:;}.cke_skin_kama .cke_menuitem .cke_icon_wrapper{background-color:#D3D3D3;border:solid 4px #D3D3D3;width:16px;height:16px;float:left;filter:alpha(opacity=70);opacity:.70;clear:both;}.cke_browser_ie9 .cke_skin_kama .cke_menuitem .cke_icon_wrapper{width:24px;height:24px;}.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon_wrapper{float:right;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{background-color:#9d9d9d;border:solid 4px #9d9d9d;filter:alpha(opacity=70);opacity:.70;}
+.cke_skin_kama .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active.cke_disabled .cke_icon_wrapper{background-color:#D3D3D3;border:solid 4px #D3D3D3;}.cke_skin_kama .cke_menuitem .cke_label{display:block;padding-right:3px;padding-top:5px;padding-left:4px;height:19px;margin-left:24px;background-color:#fff;}.cke_browser_ie9 .cke_skin_kama .cke_menuitem .cke_label{height:24px;}.cke_skin_kama .cke_frameLoaded .cke_menuitem .cke_label{filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_kama .cke_menuitem .cke_label{padding-right:0;margin-left:0;padding-left:3px;margin-right:28px;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.30;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{background-color:#D3D3D3;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{background-color:transparent;}.cke_skin_kama .cke_menuseparator{background-color:#D3D3D3;height:2px;filter:alpha(opacity=70);opacity:.70;_font-size:0;}.cke_skin_kama .cke_menuarrow{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1411px;background-repeat:no-repeat;height:5px;width:3px;float:right;margin-right:2px;margin-top:3px;}.cke_rtl .cke_skin_kama .cke_menuarrow{float:left;margin-right:0;margin-left:2px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1390px;background-repeat:no-repeat;}.cke_skin_kama .cke_menuarrow span{display:none;}.cke_hc .cke_skin_kama .cke_menuarrow{width:auto;margin-top:0;}.cke_hc .cke_skin_kama .cke_menuarrow span{display:inline;}.cke_browser_ie.cke_ltr .cke_skin_kama .cke_menuarrow{position:absolute;right:2px;}.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuarrow{position:absolute;left:2px;}.cke_skin_kama .cke_rcombo{display:inline;}.cke_skin_kama .cke_rcombopanel{border:1px solid #8F8F73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;height:auto;_height:100px;}.cke_skin_kama .cke_rcombo a,.cke_skin_kama .cke_rcombo a:active,.cke_skin_kama .cke_rcombo a:hover{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:repeat-x;background-position:0 -100px;border-bottom:1px solid #DAD9D9;border-right:1px solid #DAD9D9;float:left;padding:2px;height:21px;margin-right:6px;}.cke_skin_kama .cke_rtl .cke_rcombo a,.cke_skin_kama .cke_rtl .cke_rcombo a:active,.cke_skin_kama .cke_rtl .cke_rcombo a:hover{float:right;margin-right:0;margin-left:6px;}.cke_skin_kama .cke_hc .cke_rcombo a{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_kama .cke_rcombo .cke_label{display:none;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity=70);opacity:.70;}.cke_skin_kama .cke_rtl .cke_rcombo .cke_label{margin-right:0;margin-left:5px;}.cke_skin_kama .cke_rcombo .cke_inline_label{line-height:21px;font-style:italic;color:#666;}.cke_skin_kama .cke_hc .cke_rcombo .cke_openbutton{vertical-align:top;}.cke_skin_kama .cke_hc .cke_rcombo .cke_label{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_kama .cke_rcombo .cke_text{filter:alpha(opacity=70);opacity:.70;height:21px;line-height:21px;width:60px;text-overflow:ellipsis;overflow:hidden;display:inline-block;margin:0 2px 0 4px;cursor:default;}.cke_skin_kama .cke_rtl .cke_rcombo .cke_text{margin:0 4px 0 2px;}.cke_skin_kama .cke_rcombo .cke_openbutton{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -68px;background-repeat:no-repeat;display:inline-block;width:17px;height:19px;margin:1px 2px;background-repeat:no-repeat;}.cke_skin_kama .cke_rcombo .cke_openbutton span{display:none;}.cke_skin_kama .cke_hc .cke_rcombo .cke_openbutton span{display:inline;}
+.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_openbutton{margin-bottom:0;}.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_text,.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_text,.cke_skin_kama .cke_rcombo .cke_off a:active .cke_text,.cke_skin_kama .cke_rcombo .cke_on .cke_text{border-color:#316ac5;filter:alpha(opacity=100);opacity:1;}.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_openbutton,.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_openbutton,.cke_skin_kama .cke_rcombo .cke_off a:active .cke_openbutton,.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton{border-color:#316ac5;background-color:#dff1ff;}.cke_skin_kama .cke_rcombo .cke_on .cke_text{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton{-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}.cke_skin_kama .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.3;}.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=70);opacity:.7;}.cke_skin_kama .cke_rcombo .cke_disabled .cke_text,.cke_skin_kama .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);opacity:.5;}.cke_skin_kama .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=50);}.cke_skin_kama .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);}.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_text,.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=80);opacity:.8;}.cke_skin_kama .cke_rcombo .cke_disabled .cke_text{color:#fff;}.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_openbutton,.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_openbutton{display:block;float:left;}.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_label,.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_label{float:left;}.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_label,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_openbutton,.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton{float:right;}.cke_skin_kama .cke_browser_ie7 .cke_rcombo .cke_text{line-height:18px;}.cke_skin_kama .cke_browser_ie6 .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_text{height:auto;line-height:17px;}.cke_skin_kama .cke_rtl .cke_rcombo .cke_font .cke_text,.cke_skin_kama .cke_rtl .cke_rcombo .cke_fontSize .cke_text{direction:ltr;}@media print{.cke_path{display:none;}}.cke_skin_kama .cke_path{display:inline-block;float:left;margin-top:5px;}.cke_skin_kama .cke_rtl .cke_path{float:right;}.cke_shared .cke_skin_kama .cke_path{_width:100%;margin:0 0 5px;}.cke_skin_kama .cke_path a,.cke_skin_kama .cke_path .cke_empty{display:inline-block;float:left;padding:1px 4px 0;color:#60676a;cursor:default;}.cke_skin_kama .cke_path .cke_empty{visibility:hidden;}.cke_skin_kama .cke_rtl .cke_path a,.cke_skin_kama .cke_rtl .cke_path cke_empty{float:right;}.cke_skin_kama .cke_path a:hover,.cke_skin_kama .cke_path a:focus,.cke_skin_kama .cke_path a:active{background-color:#dff1ff;padding:1px 4px 0;outline:none;color:#000;}.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path a,.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path .cke_empty{float:none;}.cke_skin_kama .cke_path .cke_label{display:none;}.cke_skin_kama .cke_button_source .cke_icon{background-position:0 0;}.cke_skin_kama .cke_button_newpage .cke_icon{background-position:0 -48px;}.cke_skin_kama .cke_button_preview .cke_icon{background-position:0 -64px;}.cke_skin_kama .cke_button_cut .cke_icon{background-position:0 -96px;}.cke_skin_kama .cke_button_copy .cke_icon{background-position:0 -112px;}
+.cke_skin_kama .cke_button_paste .cke_icon{background-position:0 -128px;}.cke_skin_kama .cke_button_pastetext .cke_icon{background-position:0 -144px;}.cke_skin_kama .cke_button_find .cke_icon{background-position:0 -240px;}.cke_skin_kama .cke_button_replace .cke_icon{background-position:0 -256px;}.cke_skin_kama .cke_button_selectAll .cke_icon{background-position:0 -272px;}.cke_skin_kama .cke_button_removeFormat .cke_icon{background-position:0 -288px;}.cke_skin_kama .cke_button_bold .cke_icon{background-position:0 -304px;}.cke_skin_kama .cke_button_italic .cke_icon{background-position:0 -320px;}.cke_skin_kama .cke_button_underline .cke_icon{background-position:0 -336px;}.cke_skin_kama .cke_button_strike .cke_icon{background-position:0 -352px;}.cke_skin_kama .cke_button_subscript .cke_icon{background-position:0 -368px;}.cke_skin_kama .cke_button_superscript .cke_icon{background-position:0 -384px;}.cke_skin_kama .cke_button_table .cke_icon{background-position:0 -608px;}.cke_skin_kama .cke_button_horizontalrule .cke_icon{background-position:0 -624px;}.cke_skin_kama .cke_button_smiley .cke_icon{background-position:0 -640px;}.cke_skin_kama .cke_button_link .cke_icon{background-position:0 -528px;}.cke_skin_kama .cke_button_unlink .cke_icon{background-position:0 -544px;}.cke_skin_kama .cke_button_anchor .cke_icon{background-position:0 -560px;}.cke_skin_kama .cke_button_image .cke_icon{background-position:0 -576px;}.cke_skin_kama .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_kama .cke_button_specialchar .cke_icon{background-position:0 -656px;}.cke_skin_kama .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_kama .cke_button_print .cke_icon{background-position:0 -176px;}.cke_skin_kama .cke_button_checkspell .cke_icon,.cke_skin_kama .cke_button_scayt .cke_icon{background-position:0 -192px;}.cke_skin_kama .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_kama .cke_button_textcolor .cke_icon{background-position:0 -704px;}.cke_skin_kama .cke_button_bgcolor .cke_icon{background-position:0 -720px;}.cke_skin_kama .cke_button_form .cke_icon{background-position:0 -752px;}.cke_skin_kama .cke_button_checkbox .cke_icon{background-position:0 -768px;}.cke_skin_kama .cke_button_radio .cke_icon{background-position:0 -784px;}.cke_skin_kama .cke_button_textfield .cke_icon{background-position:0 -800px;}.cke_skin_kama .cke_button_textarea .cke_icon{background-position:0 -816px;}.cke_skin_kama .cke_button_showblocks .cke_icon{background-position:0 -1136px;}.cke_skin_kama .cke_button_select .cke_icon{background-position:0 -832px;}.cke_skin_kama .cke_button_button .cke_icon{background-position:0 -848px;}.cke_skin_kama .cke_button_imagebutton .cke_icon{background-position:0 -864px;}.cke_skin_kama .cke_button_hiddenfield .cke_icon{background-position:0 -880px;}.cke_skin_kama .cke_button_undo .cke_icon{background-position:0 -208px;}.cke_skin_kama .cke_rtl .cke_button_undo .cke_icon{background-position:0 -224px;}.cke_skin_kama .cke_button_redo .cke_icon{background-position:0 -224px;}.cke_skin_kama .cke_rtl .cke_button_redo .cke_icon{background-position:0 -208px;}.cke_skin_kama .cke_button_templates .cke_icon{background-position:0 -80px;}.cke_skin_kama .cke_button_numberedlist .cke_icon{background-position:0 -400px;}.cke_skin_kama .cke_button_bulletedlist .cke_icon{background-position:0 -416px;}.cke_skin_kama .cke_mixed_dir_content .cke_button_numberedlist .cke_icon{background-position:0 -1217px;}.cke_skin_kama .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon{background-position:0 -1233px;}.cke_skin_kama .cke_button_outdent .cke_icon{background-position:0 -432px;}.cke_skin_kama .cke_button_indent .cke_icon{background-position:0 -448px;}.cke_skin_kama .cke_mixed_dir_content .cke_button_indent .cke_icon{background-position:0 -1265px;}.cke_skin_kama .cke_mixed_dir_content .cke_button_outdent .cke_icon{background-position:0 -1249px;}.cke_skin_kama .cke_button_justifyleft .cke_icon{background-position:0 -464px;}.cke_skin_kama .cke_button_justifycenter .cke_icon{background-position:0 -480px;}
+.cke_skin_kama .cke_button_justifyright .cke_icon{background-position:0 -496px;}.cke_skin_kama .cke_button_justifyblock .cke_icon{background-position:0 -512px;}.cke_skin_kama .cke_button_blockquote .cke_icon{background-position:0 -1152px;}.cke_skin_kama .cke_button_creatediv .cke_icon{background-position:0 -1168px;}.cke_skin_kama .cke_button_editdiv .cke_icon{background-position:0 -1184px;}.cke_skin_kama .cke_button_removediv .cke_icon{background-position:0 -1200px;}.cke_skin_kama .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_kama .cke_button_pastefromword .cke_icon{background-position:0 -160px;}.cke_skin_kama .cke_button_save .cke_icon{background-position:0 -32px;}.cke_skin_kama .cke_button_about .cke_icon{background-position:0 -736px;}.cke_skin_kama .cke_button_maximize .cke_icon{background-position:0 -1040px;}.cke_skin_kama .cke_button_editdiv .cke_icon{background-position:0 -1184px;}.cke_skin_kama .cke_button_bidirtl .cke_icon{background-position:0 -1072px;}.cke_skin_kama .cke_button_bidiltr .cke_icon{background-position:0 -1056px;}.cke_skin_kama .cke_button_iframe .cke_icon{background-position:0 -1279px;}.cke_skin_kama .cke_button_source .cke_label{display:inline;}.cke_skin_kama .cke_styles_panel{width:150px;height:170px;}.cke_skin_kama .cke_format_panel{width:150px;height:170px;}.cke_skin_kama .cke_font_panel{width:150px;height:170px;}.cke_skin_kama .cke_fontSize_panel{height:170px;}.cke_skin_kama .cke_fontSize .cke_text{width:25px;}.cke_skin_kama .cke_browser_iequirks .cke_fontSize .cke_text{width:32px;}html .cke_skin_kama{visibility:inherit;}html.cke_skin_kama_container{visibility:visible;}
diff --git a/modules_v2/ckeditor/skins/kama/icons.png b/modules_v2/ckeditor/skins/kama/icons.png Binary files differnew file mode 100644 index 0000000000..4bdaef89d1 --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/icons.png diff --git a/modules_v2/ckeditor/skins/kama/icons_rtl.png b/modules_v2/ckeditor/skins/kama/icons_rtl.png Binary files differnew file mode 100644 index 0000000000..8824ce8fb5 --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/icons_rtl.png diff --git a/modules_v2/ckeditor/skins/kama/images/dialog_sides.gif b/modules_v2/ckeditor/skins/kama/images/dialog_sides.gif Binary files differnew file mode 100644 index 0000000000..8f91b4753a --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/images/dialog_sides.gif diff --git a/modules_v2/ckeditor/skins/kama/images/dialog_sides.png b/modules_v2/ckeditor/skins/kama/images/dialog_sides.png Binary files differnew file mode 100644 index 0000000000..1042a61cf9 --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/images/dialog_sides.png diff --git a/modules_v2/ckeditor/skins/kama/images/dialog_sides_rtl.png b/modules_v2/ckeditor/skins/kama/images/dialog_sides_rtl.png Binary files differnew file mode 100644 index 0000000000..d7f7b49fcc --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/images/dialog_sides_rtl.png diff --git a/modules_v2/ckeditor/skins/kama/images/mini.gif b/modules_v2/ckeditor/skins/kama/images/mini.gif Binary files differnew file mode 100644 index 0000000000..54d9107416 --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/images/mini.gif diff --git a/modules_v2/ckeditor/skins/kama/images/noimage.png b/modules_v2/ckeditor/skins/kama/images/noimage.png Binary files differnew file mode 100644 index 0000000000..159811305a --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/images/noimage.png diff --git a/modules_v2/ckeditor/skins/kama/images/sprites.png b/modules_v2/ckeditor/skins/kama/images/sprites.png Binary files differnew file mode 100644 index 0000000000..0955bc924f --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/images/sprites.png diff --git a/modules_v2/ckeditor/skins/kama/images/sprites_ie6.png b/modules_v2/ckeditor/skins/kama/images/sprites_ie6.png Binary files differnew file mode 100644 index 0000000000..29b87edf24 --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/images/sprites_ie6.png diff --git a/modules_v2/ckeditor/skins/kama/images/toolbar_start.gif b/modules_v2/ckeditor/skins/kama/images/toolbar_start.gif Binary files differnew file mode 100644 index 0000000000..1774246c2e --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/images/toolbar_start.gif diff --git a/modules_v2/ckeditor/skins/kama/skin.js b/modules_v2/ckeditor/skins/kama/skin.js new file mode 100644 index 0000000000..5b315aee5f --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/skin.js @@ -0,0 +1,7 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.skins.add('kama',(function(){var a='cke_ui_color';return{editor:{css:['editor.css']},dialog:{css:['dialog.css']},templates:{css:['templates.css']},margins:[0,0,0,0],init:function(b){if(b.config.width&&!isNaN(b.config.width))b.config.width-=12;var c=[],d=/\$color/g,e='/* UI Color Support */.cke_skin_kama .cke_menuitem .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{\tbackground-color: transparent !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuseparator{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{\tbackground-color: $color !important;}';if(CKEDITOR.env.webkit){e=e.split('}').slice(0,-1);for(var f=0;f<e.length;f++)e[f]=e[f].split('{');}function g(j){var k=j.getById(a);if(!k){k=j.getHead().append('style');k.setAttribute('id',a);k.setAttribute('type','text/css');}return k;};function h(j,k,l){var m,n,o;for(var p=0;p<j.length;p++){if(CKEDITOR.env.webkit)for(n=0;n<k.length;n++){o=k[n][1];for(m=0;m<l.length;m++)o=o.replace(l[m][0],l[m][1]);j[p].$.sheet.addRule(k[n][0],o);}else{o=k;for(m=0;m<l.length;m++)o=o.replace(l[m][0],l[m][1]);if(CKEDITOR.env.ie)j[p].$.styleSheet.cssText+=o;else j[p].$.innerHTML+=o;}}};var i=/\$color/g;CKEDITOR.tools.extend(b,{uiColor:null,getUiColor:function(){return this.uiColor;},setUiColor:function(j){var k,l=g(CKEDITOR.document),m='.'+b.id,n=[m+' .cke_wrapper',m+'_dialog .cke_dialog_contents',m+'_dialog a.cke_dialog_tab',m+'_dialog .cke_dialog_footer'].join(','),o='background-color: $color !important;';
+if(CKEDITOR.env.webkit)k=[[n,o]];else k=n+'{'+o+'}';return(this.setUiColor=function(p){var q=[[i,p]];b.uiColor=p;h([l],k,q);h(c,e,q);})(j);}});b.on('menuShow',function(j){var k=j.data[0],l=k.element.getElementsByTag('iframe').getItem(0).getFrameDocument();if(!l.getById('cke_ui_color')){var m=g(l);c.push(m);var n=b.getUiColor();if(n)h([m],e,[[i,n]]);}});if(b.config.uiColor)b.setUiColor(b.config.uiColor);}};})());(function(){CKEDITOR.dialog?a():CKEDITOR.on('dialogPluginReady',a);function a(){CKEDITOR.dialog.on('resize',function(b){var c=b.data,d=c.width,e=c.height,f=c.dialog,g=f.parts.contents;if(c.skin!='kama')return;g.setStyles({width:d+'px',height:e+'px'});setTimeout(function(){var h=f.parts.dialog.getChild([0,0,0]),i=h.getChild(0),j=h.getChild(2);j.setStyle('width',i.$.offsetWidth+'px');j=h.getChild(7);j.setStyle('width',i.$.offsetWidth-28+'px');j=h.getChild(4);j.setStyle('height',e+i.getChild(0).$.offsetHeight+'px');j=h.getChild(5);j.setStyle('height',e+i.getChild(0).$.offsetHeight+'px');},100);});};})();
diff --git a/modules_v2/ckeditor/skins/kama/templates.css b/modules_v2/ckeditor/skins/kama/templates.css new file mode 100644 index 0000000000..14d62f55c9 --- /dev/null +++ b/modules_v2/ckeditor/skins/kama/templates.css @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+.cke_skin_kama .cke_tpl_list{border:#dcdcdc 2px solid;background-color:#fff;overflow-y:auto;overflow-x:hidden;width:100%;height:220px;}.cke_skin_kama .cke_tpl_item{margin:5px;padding:7px;border:#eee 1px solid;*width:88%;}.cke_skin_kama .cke_tpl_preview{border-collapse:separate;text-indent:0;width:100%;}.cke_skin_kama .cke_tpl_preview td{padding:2px;vertical-align:middle;}.cke_skin_kama .cke_tpl_preview .cke_tpl_preview_img{width:100px;}.cke_skin_kama .cke_tpl_preview span{white-space:normal;}.cke_skin_kama .cke_tpl_title{font-weight:bold;}.cke_skin_kama .cke_tpl_list a:active .cke_tpl_item,.cke_skin_kama .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_kama .cke_tpl_list a:focus .cke_tpl_item{border:#f93 1px solid;background-color:#fffacd;}.cke_skin_kama .cke_tpl_list a:active *,.cke_skin_kama .cke_tpl_list a:hover *,.cke_skin_kama .cke_tpl_list a:focus *{cursor:pointer;}.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:active,.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:hover,.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:focus{background-position:0 0;}.cke_skin_kama .cke_hc .cke_tpl_list a:active .cke_tpl_item,.cke_skin_kama .cke_hc .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_kama .cke_hc .cke_tpl_list a:focus .cke_tpl_item{border-width:3px;}.cke_skin_kama .cke_tpl_empty,.cke_tpl_loading{text-align:center;padding:5px;}
diff --git a/modules_v2/ckeditor/skins/office2003/dialog.css b/modules_v2/ckeditor/skins/office2003/dialog.css new file mode 100644 index 0000000000..b1757b8f3f --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/dialog.css @@ -0,0 +1,9 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+body .cke_dialog{visibility:visible;}.cke_skin_office2003 table.cke_dialog.cke_browser_gecko{display:block;}.cke_skin_office2003 .cke_dialog_body{margin-left:16px;margin-right:16px;margin-top:2px;margin-bottom:20px;z-index:1;position:relative;_position:static;}.cke_skin_office2003 .cke_dialog_tl,.cke_skin_office2003 .cke_dialog_tr,.cke_skin_office2003 .cke_dialog_tc,.cke_skin_office2003 .cke_dialog_bl,.cke_skin_office2003 .cke_dialog_br,.cke_skin_office2003 .cke_dialog_bc{background-image:url(images/sprites.png);background-repeat:no-repeat;position:absolute;_background-image:url(images/sprites_ie6.png);_z-index:-1;}.cke_skin_office2003 .cke_dialog_tl{background-position:-16px -16px;height:16px;width:16px;top:0;left:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_tl{background-position:-16px -397px;}.cke_skin_office2003 .cke_dialog_tr{background-position:-16px -76px;height:16px;width:16px;top:0;right:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_tr{background-position:-16px -457px;}.cke_skin_office2003 .cke_dialog_tc{background-position:0 -136px;background-repeat:repeat-x;height:16px;top:0;left:16px;right:16px;}.cke_skin_office2003 .cke_dialog_bl{background-position:-16px -196px;height:51px;width:30px;bottom:0;left:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_bl{background-position:-16px -517px;}.cke_skin_office2003 .cke_dialog_br{background-position:-16px -263px;height:51px;width:30px;bottom:0;right:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_br{background-position:-16px -584px;}.cke_skin_office2003 .cke_dialog_bc{background-position:0 -330px;background-repeat:repeat-x;height:51px;bottom:0;left:30px;right:30px;}.cke_skin_office2003 .cke_dialog_ml,.cke_skin_office2003 .cke_dialog_mr{background-image:url(images/dialog_sides.png);background-repeat:repeat-y;position:absolute;width:16px;top:16px;bottom:51px;_background-image:url(images/dialog_sides.gif);_top:auto;}.cke_skin_office2003 .cke_rtl .cke_dialog_ml,.cke_skin_office2003 .cke_rtl .cke_dialog_mr{background-image:url(images/dialog_sides_rtl.png);_background-image:url(images/dialog_sides.gif);}.cke_skin_office2003 .cke_dialog_ml{background-position:0 0;left:0;}.cke_skin_office2003 .cke_dialog_mr{background-position:-16px 0;right:0;}.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_ml,.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_mr{margin-top:3px;}.cke_skin_office2003 .cke_dialog_title{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -678px;background-repeat:repeat-x;font-weight:bold;font-size:14pt;color:#0E3460;background-color:#8db1ff;padding:3px 10px 26px 10px;cursor:move;position:relative;}.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_title{position:static;}.cke_skin_office2003 .cke_dialog_contents{background-color:#f7f8fd;border:#2b66c9 1px solid;overflow:auto;padding:5px 10px;}.cke_skin_office2003 .cke_dialog_footer{background-color:#8db1ff;text-align:right;}.cke_skin_office2003 .cke_rtl .cke_dialog_footer{text-align:left;}.cke_skin_office2003 .cke_dialog_footer .cke_resizer{margin-top:21px;}.cke_skin_office2003 .cke_dialog_tabs{height:23px;background-color:#8db1ff;display:inline-block;margin-left:10px;margin-right:10px;margin-top:-23px;position:absolute;z-index:2;}.cke_skin_office2003 .cke_rtl .cke_dialog_tabs{right:10px;}.cke_skin_office2003 a.cke_dialog_tab,.cke_skin_office2003 a:link.cke_dialog_tab,.cke_skin_office2003 a:active.cke_dialog_tab,.cke_skin_office2003 a:hover.cke_dialog_tab,.cke_skin_office2003 a:visited.cke_dialog_tab{color:#0E3460;border-left:1px solid #2b66c9;border-right:1px solid #2b66c9;border-top:1px solid #2b66c9;height:14px;padding:4px 5px;display:inline-block;cursor:pointer;}.cke_skin_office2003 .cke_browser_gecko18 a.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:link.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:active.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:hover.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:visited.cke_dialog_tab{display:inline;position:relative;top:6px;}.cke_skin_office2003 a:hover.cke_dialog_tab{background-color:#f7f8fd;}
+.cke_skin_office2003 .cke_hc a:hover.cke_dialog_tab{padding:2px 3px!important;border-width:3px;}.cke_skin_office2003 a.cke_dialog_tab_selected,.cke_skin_office2003 a:link.cke_dialog_tab_selected,.cke_skin_office2003 a:active.cke_dialog_tab_selected,.cke_skin_office2003 a:hover.cke_dialog_tab_selected,.cke_skin_office2003 a:visited.cke_dialog_tab_selected{border-bottom:1px solid #f7f8fd;background-color:#f7f8fd;font-weight:bold;cursor:default;}.cke_skin_office2003 .cke_hc a.cke_dialog_tab_selected,.cke_skin_office2003 .cke_hc a:link.cke_dialog_tab_selected,.cke_skin_office2003 .cke_hc a:active.cke_dialog_tab_selected,.cke_skin_office2003 .cke_hc a:hover.cke_dialog_tab_selected,.cke_skin_office2003 .cke_hc a:visited.cke_dialog_tab_selected{padding:2px 3px!important;border-width:3px;}.cke_skin_office2003 .cke_single_page .cke_dialog_tabs{display:none;}.cke_skin_office2003 .cke_hc .cke_dialog_tabs a,.cke_skin_office2003 .cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white;}.cke_skin_office2003 .cke_single_page .cke_dialog_title{padding-bottom:3px;}.cke_skin_office2003 .cke_dialog_ui_vbox table,.cke_skin_office2003 .cke_dialog_ui_hbox table{margin:auto;}.cke_skin_office2003 .cke_dialog_ui_vbox_child{padding:5px 0;}.cke_skin_office2003 input.cke_dialog_ui_input_text,.cke_skin_office2003 input.cke_dialog_ui_input_password{background-color:white;border:none;padding:0;width:100%;height:14px;}.cke_skin_office2003 div.cke_dialog_ui_input_text,.cke_skin_office2003 div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_office2003 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password,.cke_skin_office2003 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px;}.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password,.cke_skin_office2003 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px;}.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child,.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child,.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important;}.cke_skin_office2003 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px;}.cke_skin_office2003 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password{border-width:0;}.cke_skin_office2003 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_text,.cke_skin_office2003 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_password{border-width:1px;}.cke_skin_office2003 textarea.cke_dialog_ui_input_textarea{background-color:white;border:none;padding:0;width:100%;_width:99%;overflow:auto;resize:none;}.cke_skin_office2003 div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_office2003 div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default;}.cke_skin_office2003 .cke_dialog_ui_hbox{width:100%;}.cke_skin_office2003 .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_dialog_ui_hbox_child,.cke_skin_office2003 .cke_dialog_ui_hbox_last{vertical-align:top;}.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px;}.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px;}.cke_skin_office2003 a.cke_dialog_ui_button{border-collapse:separate;cursor:default;}.cke_skin_office2003 a.cke_dialog_ui_button_ok span,.cke_skin_office2003 a.cke_dialog_ui_button_cancel span{width:60px;}.cke_skin_office2003 span.cke_dialog_ui_button{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -678px;background-repeat:repeat-x;border:#0E3460 1px solid;padding:2px 10px;text-align:center;color:#0E3460;background-color:#8db1ff;display:inline-block;cursor:default;}
+.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{display:block;}.cke_skin_office2003 a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3;}.cke_skin_office2003 a:focus span.cke_dialog_ui_button,.cke_skin_office2003 a:active span.cke_dialog_ui_button{background-color:#8db1ff;}.cke_skin_office2003 .cke_hc a:focus span.cke_dialog_ui_button,.cke_skin_office2003 .cke_hc a:active span.cke_dialog_ui_button{border-width:2px;}.cke_skin_office2003 .cke_dialog_footer_buttons{display:inline-table;margin-right:12px;margin-left:12px;width:auto;position:relative;}.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons{display:inline;}.cke_skin_office2003 .cke_dialog_footer_buttons span.cke_dialog_ui_button{margin:7px 0;}.cke_skin_office2003 .cke_browser_ie7 .cke_dialog_footer_buttons{position:static;}.cke_skin_office2003 strong{font-weight:bold;}.cke_skin_office2003 a.cke_dialog_close_button,.cke_skin_office2003 a:hover.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_ie6 a.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_ie6 a:hover.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:-20px -655px;position:absolute;cursor:pointer;text-align:center;height:21px;width:21px;top:4px;_background-image:url(images/sprites_ie6.png);}.cke_skin_office2003 a.cke_dialog_close_button span{display:none;}.cke_skin_office2003 .cke_ltr a.cke_dialog_close_button{right:10px;_right:22px;}.cke_skin_office2003 .cke_rtl a.cke_dialog_close_button,.cke_skin_office2003 .cke_rtl a:hover.cke_dialog_close_button{left:10px;_left:16px;_top:6px;}.cke_skin_office2003 .cke_browser_ie6.cke_rtl a.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_ie6.cke_rtl a:hover.cke_dialog_close_button{position:relative;float:left;margin-top:-55px;margin-left:-7px;}.cke_skin_office2003 .cke_browser_iequirks.cke_rtl.cke_single_page a.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_iequirks.cke_rtl.cke_single_page a:hover.cke_dialog_close_button{margin-top:-32px;}.cke_skin_office2003 .cke_browser_iequirks.cke_ltr a.cke_dialog_close_button,.cke_skin_office2003 .cke_browser_iequirks.cke_ltr a:hover.cke_dialog_close_button{margin-top:0;}.cke_skin_office2003 .cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white;}.cke_skin_office2003 .cke_dialog_ui_input_file{width:100%;height:25px;}.cke_skin_office2003 .cke_dialog .cke_dark_background{background-color:#eaead1;}.cke_skin_office2003 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_office2003 .cke_dialog .cke_centered{text-align:center;}.cke_skin_office2003 .cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px;}.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_reset{float:left;}.cke_skin_office2003 .cke_dialog a.cke_btn_locked,.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px;}.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_locked,.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_unlocked{float:right;}.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif);}.cke_skin_office2003 .cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer;}.cke_skin_office2003 .cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:210px;width:230px;padding:2px;background-color:white;}.cke_skin_office2003 .cke_dialog .ImagePreviewBox table td{white-space:normal;}.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_page_contents{_position:absolute;}.cke_skin_office2003 .cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4;}.cke_skin_office2003 .cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white;}
+.cke_skin_office2003 .cke_dialog .cke_pastetext{width:346px;height:170px;}.cke_skin_office2003 .cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none;}.cke_skin_office2003 .cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black;}.cke_skin_office2003 .cke_dialog .cke_dark_background{text-align:center;background-color:#eaead1;font-size:14px;}.cke_skin_office2003 .cke_dialog .cke_light_background{text-align:center;background-color:#ffffbe;}.cke_skin_office2003 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_office2003 .cke_disabled{color:#a0a0a0;}.cke_skin_office2003 .cke_hc .cke_dialog_title,.cke_skin_office2003 .cke_hc .cke_dialog_tabs,.cke_skin_office2003 .cke_hc .cke_dialog_contents,.cke_skin_office2003 .cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid;}.cke_skin_office2003 .cke_hc .cke_dialog_title{border-top:1px solid;}.cke_skin_office2003 .cke_hc .cke_dialog_footer{border-bottom:1px solid;}.cke_skin_office2003 .cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px;}.cke_skin_office2003 .cke_dialog_body .cke_label{display:none;}.cke_skin_office2003 .cke_dialog_body label.cke_required{font-weight:bold;}.cke_skin_office2003 .cke_hc .cke_dialog_body .cke_label{display:inline;}.cke_skin_office2003 .cke_hc a.cke_btn_locked,.cke_skin_office2003 .cke_hc a.cke_btn_unlocked,.cke_skin_office2003 .cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;}.cke_skin_office2003 .cke_rtl.cke_hc a.cke_btn_locked,.cke_skin_office2003 .cke_rtl.cke_hc a.cke_btn_unlocked,.cke_skin_office2003 .cke_rtl.cke_hc a.cke_btn_reset{float:right;}.cke_skin_office2003 .cke_dialog_contents a.colorChooser{display:block;margin-top:12px;margin-left:10px;width:40px;}.cke_skin_office2003 .cke_dialog_contents a.colorChooser .cke_dialog_ui_button{width:100%;}.cke_skin_office2003 .cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px;}
diff --git a/modules_v2/ckeditor/skins/office2003/editor.css b/modules_v2/ckeditor/skins/office2003/editor.css new file mode 100644 index 0000000000..cb67fb3fc6 --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/editor.css @@ -0,0 +1,14 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+.cke_skin_office2003 *,.cke_skin_office2003 a:hover,.cke_skin_office2003 a:link,.cke_skin_office2003 a:visited,.cke_skin_office2003 a:active{margin:0;padding:0;border:0;background:transparent;text-decoration:none;font:normal normal normal 100% Sans-Serif;width:auto;height:auto;border-collapse:collapse;text-align:left;vertical-align:baseline;white-space:nowrap;cursor:auto;color:#000;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_skin_office2003 .cke_rtl *,.cke_skin_office2003 .cke_rtl a:hover,.cke_skin_office2003 .cke_rtl a:link,.cke_skin_office2003 .cke_rtl a:visited,.cke_skin_office2003 .cke_rtl a:active,.cke_rtl .cke_skin_office2003 *,.cke_rtl .cke_skin_office2003 a:hover,.cke_rtl .cke_skin_office2003 a:link,.cke_rtl .cke_skin_office2003 a:visited,.cke_rtl .cke_skin_office2003 a:active{text-align:right;}.cke_skin_office2003 iframe{vertical-align:inherit;}.cke_skin_office2003 textarea{white-space:pre;}.cke_skin_office2003 .cke_browser_gecko textarea{cursor:text;}.cke_skin_office2003 .cke_browser_gecko textarea[disabled]{cursor:default;}.cke_skin_office2003 input[type="text"],.cke_skin_office2003 input[type="password"]{cursor:text;}.cke_skin_office2003 input[type="text"][disabled],.cke_skin_office2003 input[type="password"][disabled]{cursor:default;}.cke_skin_office2003 fieldset{padding:10px;border:2px groove #E0DFE3;}.cke_skin_office2003 .cke_editor{display:inline-table;width:100%;}.cke_skin_office2003 span.cke_browser_webkit,.cke_skin_office2003 span.cke_browser_gecko18{display:block;}.cke_skin_office2003,.cke_skin_office2003 .cke_wrapper{display:block;}.cke_skin_office2003 .cke_top,.cke_skin_office2003 .cke_bottom,.cke_shared .cke_skin_office2003{background-color:#f7f8fd;}.cke_skin_office2003 .cke_top{border-top:solid 1px #fafaf5;border-left:solid 1px #fafaf5;border-right:solid 1px #696969;border-bottom:solid 2px #696969;}.cke_skin_office2003 .cke_rtl .cke_top{border-left:solid 1px #696969;border-right:solid 1px #fafaf5;}.cke_skin_office2003 .cke_bottom{border-left:solid 1px #696969;border-right:solid 1px #696969;border-bottom:solid 1px #696969;}.cke_skin_office2003 .cke_contents{border:solid 1px #696969;background-color:white;}.cke_skin_office2003 .cke_focus{outline:auto 5px -webkit-focus-ring-color;}.cke_skin_office2003 textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;white-space:pre;background-color:#fff;}.cke_skin_office2003 .cke_browser_iequirks textarea.cke_source{_white-space:normal;}.cke_skin_office2003 .cke_resizer{width:12px;height:12px;margin-top:16px;display:block;float:right;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1088px;background-repeat:no-repeat;cursor:se-resize;}.cke_skin_office2003 .cke_browser_air .cke_resizer,.cke_skin_office2003 .cke_browser_air .cke_rtl .cke_resizer{cursor:move;}.cke_skin_office2003 .cke_rtl .cke_resizer{cursor:sw-resize;background-position:0 -1115px;float:left;}.cke_skin_office2003 .cke_resizer_horizontal,.cke_skin_office2003 .cke_rtl .cke_resizer_horizontal{cursor:e-resize;}.cke_skin_office2003 .cke_resizer_vertical,.cke_skin_office2003 .cke_rtl .cke_resizer_vertical{cursor:n-resize;}.cke_skin_office2003 .cke_maximized .cke_resizer{display:none;}.cke_skin_office2003 .cke_browser_ie6 .cke_contents textarea,.cke_skin_office2003 .cke_browser_ie7 .cke_contents textarea{position:absolute;}.cke_skin_office2003 .cke_voice_label{display:none;}.cke_skin_office2003 legend.cke_voice_label{display:none;}.cke_skin_office2003 .cke_browser_ie legend.cke_voice_label{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_office2003 .cke_panel{border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.cke_skin_office2003 .cke_panel iframe{width:100%;height:100%;}cke_skin_office2003 .cke_panel_frame .cke_label{display:none;}html.cke_skin_office2003_container{overflow:auto;overflow-x:hidden;}body.cke_panel_frame{overflow:auto;}ul.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap;}
+li.cke_panel_listItem{margin:0;}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;}* html .cke_panel_listItem a{width:100%;color:#000;}*:first-child+html .cke_panel_listItem a{color:#000;}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff;}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff;}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0;}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px;}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px;}.cke_skin_office2003 .cke_button_textcolor_panel,.cke_skin_office2003 .cke_button_bgcolor_panel{width:150px;height:135px;}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000;}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left;}.cke_rtl span.cke_colorbox{float:right;}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;}.cke_rtl a.cke_colorbox{float:right;}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff;}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer;}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff;}@media print{.cke_skin_office2003 .cke_toolbox{display:none;}}.cke_skin_office2003 .cke_browser_webkit .cke_toolbox,.cke_skin_office2003 .cke_browser_webkit .cke_toolbox>span{white-space:normal;}.cke_skin_office2003 .cke_toolbox{clear:both;padding-bottom:1px;}.cke_skin_office2003 a.cke_toolbox_collapser,.cke_skin_office2003 a:hover.cke_toolbox_collapser{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:3px -1026px;background-repeat:no-repeat;width:11px;height:11px;float:right;border:outset 1px;margin:11px 2px 2px;cursor:pointer;}.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser,.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser{float:left;}.cke_skin_office2003 a.cke_toolbox_collapser span{display:none;}.cke_skin_office2003 .cke_hc a.cke_toolbox_collapser span{font-size:10px;font-weight:bold;font-family:Arial;display:inline;}.cke_skin_office2003 a.cke_toolbox_collapser_min,.cke_skin_office2003 a:hover.cke_toolbox_collapser_min{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:4px -1047px;background-repeat:no-repeat;margin:2px;}.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser_min,.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser_min{background-position:4px -1068px;}.cke_skin_office2003 .cke_toolbar{background-color:#d6dff7;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -962px;background-repeat:repeat-x;display:inline-block;float:left;!height:28px;!line-height:28px;}.cke_skin_office2003 .cke_rtl .cke_toolbar{float:right;}.cke_skin_office2003 .cke_toolgroup{display:inline-block;float:left;height:28px;}.cke_skin_office2003 .cke_browser_ie .cke_toolgroup{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_toolgroup{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup{#float:none;}.cke_skin_office2003 .cke_separator{display:inline-block;float:left;border-left:solid 1px #B2CBFF;margin:6px 2px;height:16px;}.cke_skin_office2003 .cke_browser_ie .cke_separator{#float:none;#display:inline;}
+.cke_skin_office2003 .cke_rtl .cke_separator{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator{#float:none;}.cke_skin_office2003 .cke_break{clear:left;}.cke_skin_office2003 .cke_rtl .cke_break{clear:right;}.cke_skin_office2003 .cke_toolbar_start{display:inline-block;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;background-position:-27px -765px;width:10px;height:28px;float:left;}.cke_skin_office2003 .cke_browser_ie .cke_toolbar_start{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_toolbar_start{background-position:-27px -816px;float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start{#float:none;}.cke_skin_office2003 .cke_toolbar_end{display:inline-block;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;background-position:-29px -861px;width:4px;height:28px;float:left;}.cke_skin_office2003 .cke_browser_ie .cke_toolbar_end{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_toolbar_end{background-position:-29px -907px;float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end{#float:none;}.cke_skin_office2003 .cke_button a,.cke_skin_office2003 .cke_button a:hover,.cke_skin_office2003 .cke_button a:focus,.cke_skin_office2003 .cke_button a:active,.cke_skin_office2003 .cke_button a.cke_off{border:solid 1px transparent;border-radius:3px;outline:none;padding-top:2px;padding-left:4px;padding-right:4px;padding-bottom:2px;margin-top:2px;height:18px;vertical-align:top;_border:none;_margin:3px 1px 1px 1px;cursor:default;display:inline-block;}.cke_skin_office2003 .cke_button a,.cke_skin_office2003 .cke_button a.cke_off{filter:alpha(opacity=70);opacity:.70;-moz-border-radius:3px;-webkit-border-radius:3px;}.cke_skin_office2003 .cke_hc .cke_button a,.cke_skin_office2003 .cke_hc .cke_button a.cke_off{opacity:1.0;filter:alpha(opacity=100);_border:1px solid transparent;}.cke_skin_office2003 .cke_button a.cke_on{border:solid 1px #316ac5;background-color:#c1d2ee;filter:alpha(opacity=100);opacity:1;_margin:2px 0 0 0;}.cke_skin_office2003 .cke_hc .cke_button a:hover,.cke_skin_office2003 .cke_hc .cke_button a:focus,.cke_skin_office2003 .cke_hc .cke_button a:active{padding:0 2px!important;border-width:3px;}.cke_skin_office2003 .cke_button a.cke_disabled *{filter:alpha(opacity=30);opacity:.3;}.cke_skin_office2003 .cke_browser_ie .cke_button a.cke_disabled *,.cke_skin_office2003 .cke_browser_ie a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *,.cke_skin_office2003 .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_office2003 .cke_browser_ie6 .cke_button a.cke_disabled *,.cke_skin_office2003 .cke_browser_ie6 a:hover.cke_button .cke_disabled *{filter:alpha(opacity=30);}.cke_skin_office2003 .cke_hc .cke_button a.cke_disabled *,.cke_skin_office2003 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled *{filter:alpha(opacity=60);opacity:.6;}.cke_skin_office2003 .cke_button a:hover,.cke_skin_office2003 .cke_button a:focus,.cke_skin_office2003 .cke_button a:active{border:solid 1px #316ac5;background-color:#dff1ff;filter:alpha(opacity=100);opacity:1;vertical-align:top;_margin:2px 0 0 0;padding:2px 4px;}.cke_skin_office2003 .cke_button .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;display:inline-block;cursor:default;}.cke_skin_office2003 .cke_rtl .cke_button .cke_icon{background-image:url(icons_rtl.png);}.cke_skin_office2003 .cke_browser_ie .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}
+.cke_skin_office2003 .cke_browser_ie6 .cke_button .cke_icon,.cke_skin_office2003 .cke_browser_ie6 .cke_rtl .cke_button .cke_icon{filter:;}.cke_skin_office2003 .cke_button .cke_label{display:none;padding-left:3px;cursor:default;vertical-align:middle;_background-image:url(images/sprites_ie6.png);_background-position:0 -970px;_background-repeat:repeat-x;}.cke_skin_office2003 .cke_button a:hover .cke_label{_background-color:#dff1ff;_background-image:none;}.cke_skin_office2003 .cke_button a.cke_on .cke_label{_background-color:#c1d2ee;_background-image:none;}.cke_skin_office2003 .cke_hc .cke_button .cke_label{padding:0;display:inline-block;}.cke_skin_office2003 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_office2003 .cke_accessibility{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_office2003 .cke_button .cke_buttonarrow{display:inline-block;height:18px;width:8px;background-position:2px -1004px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;cursor:default;}.cke_skin_office2003 .cke_browser_ie .cke_button .cke_buttonarrow{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_office2003 .cke_browser_ie6 .cke_button .cke_buttonarrow{filter:;}.cke_skin_office2003 .cke_rtl .cke_button .cke_buttonarrow{background-position:0 -1004px;}.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar,.cke_skin_office2003 .cke_browser_gecko18 .cke_button a,.cke_skin_office2003 .cke_browser_gecko18 .cke_button a.cke_off,.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_icon,.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_buttonarrow,.cke_skin_office2003 .cke_browser_gecko18 .cke_separator,.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_start,.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_end{display:block;float:left;}.cke_skin_office2003 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_separator,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_end{float:right;}.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_break{float:left;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl span.cke_inline_label{float:right;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_break{float:right;}.cke_skin_office2003 .cke_browser_gecko18 .cke_separator{margin-top:4px;}.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label{padding-top:3px;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end{float:none;}.cke_skin_office2003 .cke_browser_ie8 .cke_toolbar,.cke_skin_office2003 .cke_browser_ie8 .cke_toolgroup{vertical-align:top;}.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar,.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup{vertical-align:baseline;}.cke_skin_office2003 .cke_browser_iequirks .cke_separator{vertical-align:text-bottom;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo,.cke_skin_office2003 .cke_browser_ie .cke_rcombo *{cursor:default;}.cke_skin_office2003 .cke_contextmenu{padding:2px;}.cke_skin_office2003 .cke_menuitem a{display:block;}.cke_skin_office2003 .cke_menuitem span{cursor:default;}.cke_skin_office2003 .cke_menuitem a:hover,.cke_skin_office2003 .cke_menuitem a:focus,.cke_skin_office2003 .cke_menuitem a:active{background-color:#8db1ff;display:block;}
+.cke_hc .cke_menuitem a:hover,.cke_hc .cke_menuitem a:focus,.cke_hc .cke_menuitem a:active{border:2px solid;}.cke_skin_office2003 .cke_menuitem .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;background-color:transparent;width:16px;height:16px;float:left;}.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon{background-image:url(icons_rtl.png);}.cke_browser_ie .cke_skin_office2003 .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_office2003 .cke_menuitem .cke_icon{filter:;}.cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon{filter:alpha(opacity=70);opacity:.70;}.cke_browser_ie .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon{filter:;}.cke_skin_office2003 .cke_menuitem .cke_icon_wrapper{background-color:#f7f8fd;border:solid 4px #f7f8fd;width:16px;height:16px;float:left;filter:alpha(opacity=70);opacity:.70;clear:both;}.cke_browser_ie9 .cke_skin_office2003 .cke_menuitem .cke_icon_wrapper{width:24px;height:24px;}.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon_wrapper{float:right;}.cke_skin_office2003 .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:active .cke_icon_wrapper{background-color:#9d9d9d;border:solid 4px #9d9d9d;filter:alpha(opacity=70);opacity:.70;}.cke_skin_office2003 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper{background-color:#f7f8fd;border:solid 4px #f7f8fd;}.cke_skin_office2003 .cke_menuitem .cke_label{display:block;padding-right:3px;padding-top:5px;padding-left:4px;height:19px;margin-left:24px;background-color:#fff;}.cke_browser_ie9 .cke_skin_office2003 .cke_menuitem .cke_label{height:24px;}.cke_skin_office2003 .cke_frameLoaded .cke_menuitem .cke_label{filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_label{padding-right:0;margin-left:0;padding-left:3px;margin-right:28px;}.cke_skin_office2003 .cke_menuitem a.cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.30;}.cke_skin_office2003 .cke_menuitem a:hover .cke_label,.cke_skin_office2003 .cke_menuitem a:focus .cke_label,.cke_skin_office2003 .cke_menuitem a:active .cke_label{background-color:#8db1ff;}.cke_skin_office2003 .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_office2003 .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_office2003 .cke_menuitem a.cke_disabled:active .cke_label{background-color:transparent;}.cke_skin_office2003 .cke_menuseparator{background-color:#f7f8fd;height:2px;filter:alpha(opacity=70);opacity:.70;_font-size:0;}.cke_skin_office2003 .cke_menuarrow{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1071px;background-repeat:no-repeat;height:5px;width:3px;float:right;margin-right:2px;margin-top:3px;}.cke_rtl .cke_skin_office2003 .cke_menuarrow{float:left;margin-right:0;margin-left:2px;background-position:0 -1050px;}.cke_skin_office2003 .cke_menuarrow span{display:none;}.cke_hc .cke_skin_office2003 .cke_menuarrow{width:auto;margin-top:0;}.cke_hc .cke_skin_office2003 .cke_menuarrow span{display:inline;}.cke_browser_ie.cke_ltr .cke_skin_office2003 .cke_menuarrow{position:absolute;right:2px;}.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuarrow{position:absolute;left:2px;}.cke_skin_office2003 .cke_rcombo{display:inline-block;margin-left:2px;margin-right:2px;margin-top:2px;vertical-align:top;float:left;}
+.cke_skin_office2003 .cke_browser_ie .cke_rcombo{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_rcombo{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo{#float:none;}.cke_skin_office2003 .cke_rcombopanel{border:1px solid #316ac5;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;}.cke_skin_office2003 .cke_rcombo a{display:inline-block;float:left;filter:alpha(opacity=70);opacity:.70;}.cke_skin_office2003 .cke_rtl .cke_rcombo a{float:right;}.cke_skin_office2003 .cke_hc .cke_rcombo a{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_office2003 .cke_rcombo .cke_label{display:inline-block;float:left;cursor:default;line-height:24px;height:24px;vertical-align:top;padding-left:4px;padding-right:5px;filter:alpha(opacity=70);opacity:.70;_background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);_background-position:0 -962px;_background-repeat:repeat-x;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_label{float:right;padding-right:4px;padding-left:5px;}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_label{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_office2003 .cke_rcombo .cke_inline_label{color:#fff;}.cke_skin_office2003 .cke_rcombo .cke_text{border:1px solid #8f8f73;background-color:#fff;height:14px;width:60px;padding-top:4px;padding-bottom:4px;padding-left:5px;padding-right:5px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:top;cursor:default;}.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_text{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_text{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_office2003 .cke_browser_iequirks .cke_rcombo .cke_text{height:22px;}.cke_skin_office2003 .cke_rcombo .cke_openbutton{display:inline-block;background-position:5px -1002px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;border-top:1px solid #8f8f73;border-bottom:1px solid #8f8f73;width:14px;height:22px;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_openbutton{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_openbutton{filter:;}.cke_skin_office2003 .cke_rcombo .cke_openbutton span{display:none;}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_openbutton span{display:inline;}.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_openbutton{border-right:1px solid #8f8f73;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_openbutton{border-left:1px solid #8f8f73;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_office2003 .cke_rcombo .cke_off a:hover,.cke_skin_office2003 .cke_rcombo .cke_off a:focus,.cke_skin_office2003 .cke_rcombo .cke_off a:active,.cke_skin_office2003 .cke_rcombo .cke_on a{filter:alpha(opacity=100);opacity:1;}.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_text,.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_text,.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_text,.cke_skin_office2003 .cke_rcombo .cke_on .cke_text{border-color:#316ac5;}.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_openbutton,.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_openbutton,.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_openbutton,.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton{border-color:#316ac5;background-color:#dff1ff;}.cke_skin_office2003 .cke_rcombo .cke_on .cke_text{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}
+.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton{-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.3;}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=70);opacity:.7;}.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text,.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);opacity:.5;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=50);}.cke_skin_office2003 .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_text,.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=80);opacity:.8;}.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text{color:#fff;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo,.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_openbutton,.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_openbutton{display:block;float:left;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton,.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo a,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label{float:none;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_font .cke_text,.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_fontSize .cke_text{direction:ltr;}@media print{.cke_path{display:none;}}.cke_skin_office2003 .cke_path{padding:3px 3px 0 3px;display:inline-block;float:left;}.cke_skin_office2003 .cke_rtl .cke_path{float:right;}.cke_skin_office2003 .cke_path a,.cke_skin_office2003 .cke_path .cke_empty{display:inline-block;float:left;border:solid 1px #f7f8fd;background-color:#f7f8fd;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;margin-bottom:3px;cursor:default;}.cke_skin_office2003 .cke_path .cke_empty{visibility:hidden;}.cke_skin_office2003 .cke_rtl .cke_path a,.cke_skin_office2003 .cke_rtl .cke_path cke_empty{float:right;}.cke_skin_office2003 .cke_path a:hover,.cke_skin_office2003 .cke_path a:focus,.cke_skin_office2003 .cke_path a:active{border:solid 1px #316ac5;background-color:#dff1ff;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;outline:none;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path a,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path .cke_empty{float:none;}.cke_skin_office2003 .cke_path .cke_label{display:none;}.cke_skin_office2003 .cke_button_source .cke_icon{background-position:0 0;}.cke_skin_office2003 .cke_button_newpage .cke_icon{background-position:0 -48px;}.cke_skin_office2003 .cke_button_preview .cke_icon{background-position:0 -64px;}.cke_skin_office2003 .cke_button_cut .cke_icon{background-position:0 -96px;}.cke_skin_office2003 .cke_button_copy .cke_icon{background-position:0 -112px;}.cke_skin_office2003 .cke_button_paste .cke_icon{background-position:0 -128px;}.cke_skin_office2003 .cke_button_pastetext .cke_icon{background-position:0 -144px;}.cke_skin_office2003 .cke_button_find .cke_icon{background-position:0 -240px;}.cke_skin_office2003 .cke_button_replace .cke_icon{background-position:0 -256px;}
+.cke_skin_office2003 .cke_button_selectAll .cke_icon{background-position:0 -272px;}.cke_skin_office2003 .cke_button_removeFormat .cke_icon{background-position:0 -288px;}.cke_skin_office2003 .cke_button_bold .cke_icon{background-position:0 -304px;}.cke_skin_office2003 .cke_button_italic .cke_icon{background-position:0 -320px;}.cke_skin_office2003 .cke_button_underline .cke_icon{background-position:0 -336px;}.cke_skin_office2003 .cke_button_strike .cke_icon{background-position:0 -352px;}.cke_skin_office2003 .cke_button_subscript .cke_icon{background-position:0 -368px;}.cke_skin_office2003 .cke_button_superscript .cke_icon{background-position:0 -384px;}.cke_skin_office2003 .cke_button_table .cke_icon{background-position:0 -608px;}.cke_skin_office2003 .cke_button_horizontalrule .cke_icon{background-position:0 -624px;}.cke_skin_office2003 .cke_button_smiley .cke_icon{background-position:0 -640px;}.cke_skin_office2003 .cke_button_link .cke_icon{background-position:0 -528px;}.cke_skin_office2003 .cke_button_unlink .cke_icon{background-position:0 -544px;}.cke_skin_office2003 .cke_button_anchor .cke_icon{background-position:0 -560px;}.cke_skin_office2003 .cke_button_image .cke_icon{background-position:0 -576px;}.cke_skin_office2003 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_office2003 .cke_button_specialchar .cke_icon{background-position:0 -656px;}.cke_skin_office2003 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_office2003 .cke_button_print .cke_icon{background-position:0 -176px;}.cke_skin_office2003 .cke_button_checkspell .cke_icon,.cke_skin_office2003 .cke_button_scayt .cke_icon{background-position:0 -192px;}.cke_skin_office2003 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_office2003 .cke_button_textcolor .cke_icon{background-position:0 -704px;}.cke_skin_office2003 .cke_button_bgcolor .cke_icon{background-position:0 -720px;}.cke_skin_office2003 .cke_button_form .cke_icon{background-position:0 -752px;}.cke_skin_office2003 .cke_button_checkbox .cke_icon{background-position:0 -768px;}.cke_skin_office2003 .cke_button_radio .cke_icon{background-position:0 -784px;}.cke_skin_office2003 .cke_button_textfield .cke_icon{background-position:0 -800px;}.cke_skin_office2003 .cke_button_textarea .cke_icon{background-position:0 -816px;}.cke_skin_office2003 .cke_button_showblocks .cke_icon{background-position:0 -1136px;}.cke_skin_office2003 .cke_button_select .cke_icon{background-position:0 -832px;}.cke_skin_office2003 .cke_button_button .cke_icon{background-position:0 -848px;}.cke_skin_office2003 .cke_button_imagebutton .cke_icon{background-position:0 -864px;}.cke_skin_office2003 .cke_button_hiddenfield .cke_icon{background-position:0 -880px;}.cke_skin_office2003 .cke_button_undo .cke_icon{background-position:0 -208px;}.cke_skin_office2003 .cke_rtl .cke_button_undo .cke_icon{background-position:0 -224px;}.cke_skin_office2003 .cke_button_redo .cke_icon{background-position:0 -224px;}.cke_skin_office2003 .cke_rtl .cke_button_redo .cke_icon{background-position:0 -208px;}.cke_skin_office2003 .cke_button_templates .cke_icon{background-position:0 -80px;}.cke_skin_office2003 .cke_button_numberedlist .cke_icon{background-position:0 -400px;}.cke_skin_office2003 .cke_button_bulletedlist .cke_icon{background-position:0 -416px;}.cke_skin_office2003 .cke_mixed_dir_content .cke_button_numberedlist .cke_icon{background-position:0 -1217px;}.cke_skin_office2003 .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon{background-position:0 -1233px;}.cke_skin_office2003 .cke_button_outdent .cke_icon{background-position:0 -432px;}.cke_skin_office2003 .cke_button_indent .cke_icon{background-position:0 -448px;}.cke_skin_office2003 .cke_mixed_dir_content .cke_button_indent .cke_icon{background-position:0 -1265px;}.cke_skin_office2003 .cke_mixed_dir_content .cke_button_outdent .cke_icon{background-position:0 -1249px;}.cke_skin_office2003 .cke_button_justifyleft .cke_icon{background-position:0 -464px;}.cke_skin_office2003 .cke_button_justifycenter .cke_icon{background-position:0 -480px;}.cke_skin_office2003 .cke_button_justifyright .cke_icon{background-position:0 -496px;}
+.cke_skin_office2003 .cke_button_justifyblock .cke_icon{background-position:0 -512px;}.cke_skin_office2003 .cke_button_blockquote .cke_icon{background-position:0 -1152px;}.cke_skin_office2003 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_office2003 .cke_button_pastefromword .cke_icon{background-position:0 -160px;}.cke_skin_office2003 .cke_button_save .cke_icon{background-position:0 -32px;}.cke_skin_office2003 .cke_button_about .cke_icon{background-position:0 -736px;}.cke_skin_office2003 .cke_button_maximize .cke_icon{background-position:0 -1040px;}.cke_skin_office2003 .cke_button_creatediv .cke_icon{background-position:0 -1168px;}.cke_skin_office2003 .cke_button_editdiv .cke_icon{background-position:0 -1184px;}.cke_skin_office2003 .cke_button_removediv .cke_icon{background-position:0 -1200px;}.cke_skin_office2003 .cke_button_bidirtl .cke_icon{background-position:0 -1072px;}.cke_skin_office2003 .cke_button_bidiltr .cke_icon{background-position:0 -1056px;}.cke_skin_office2003 .cke_button_iframe .cke_icon{background-position:0 -1279px;}.cke_skin_office2003 .cke_button_source .cke_label{display:inline;}.cke_skin_office2003 .cke_styles_panel{width:150px;height:170px;}.cke_skin_office2003 .cke_format_panel{width:150px;height:170px;}.cke_skin_office2003 .cke_font_panel{width:150px;height:170px;}.cke_skin_office2003 .cke_fontSize_panel{height:170px;}.cke_skin_office2003 .cke_fontSize .cke_text{width:20px;}.cke_skin_office2003 .cke_browser_iequirks .cke_fontSize .cke_text{width:32px;}html .cke_skin_office2003{visibility:inherit;}html.cke_skin_office2003_container{visibility:visible;}
diff --git a/modules_v2/ckeditor/skins/office2003/icons.png b/modules_v2/ckeditor/skins/office2003/icons.png Binary files differnew file mode 100644 index 0000000000..4bdaef89d1 --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/icons.png diff --git a/modules_v2/ckeditor/skins/office2003/icons_rtl.png b/modules_v2/ckeditor/skins/office2003/icons_rtl.png Binary files differnew file mode 100644 index 0000000000..8824ce8fb5 --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/icons_rtl.png diff --git a/modules_v2/ckeditor/skins/office2003/images/dialog_sides.gif b/modules_v2/ckeditor/skins/office2003/images/dialog_sides.gif Binary files differnew file mode 100644 index 0000000000..5840d01738 --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/images/dialog_sides.gif diff --git a/modules_v2/ckeditor/skins/office2003/images/dialog_sides.png b/modules_v2/ckeditor/skins/office2003/images/dialog_sides.png Binary files differnew file mode 100644 index 0000000000..7da9821879 --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/images/dialog_sides.png diff --git a/modules_v2/ckeditor/skins/office2003/images/dialog_sides_rtl.png b/modules_v2/ckeditor/skins/office2003/images/dialog_sides_rtl.png Binary files differnew file mode 100644 index 0000000000..24fe13aedb --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/images/dialog_sides_rtl.png diff --git a/modules_v2/ckeditor/skins/office2003/images/mini.gif b/modules_v2/ckeditor/skins/office2003/images/mini.gif Binary files differnew file mode 100644 index 0000000000..54d9107416 --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/images/mini.gif diff --git a/modules_v2/ckeditor/skins/office2003/images/noimage.png b/modules_v2/ckeditor/skins/office2003/images/noimage.png Binary files differnew file mode 100644 index 0000000000..159811305a --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/images/noimage.png diff --git a/modules_v2/ckeditor/skins/office2003/images/sprites.png b/modules_v2/ckeditor/skins/office2003/images/sprites.png Binary files differnew file mode 100644 index 0000000000..89d77c94be --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/images/sprites.png diff --git a/modules_v2/ckeditor/skins/office2003/images/sprites_ie6.png b/modules_v2/ckeditor/skins/office2003/images/sprites_ie6.png Binary files differnew file mode 100644 index 0000000000..a7bcd5778b --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/images/sprites_ie6.png diff --git a/modules_v2/ckeditor/skins/office2003/skin.js b/modules_v2/ckeditor/skins/office2003/skin.js new file mode 100644 index 0000000000..14683e183d --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/skin.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.skins.add('office2003',(function(){return{editor:{css:['editor.css']},dialog:{css:['dialog.css']},templates:{css:['templates.css']},margins:[0,14,18,14]};})());(function(){CKEDITOR.dialog?a():CKEDITOR.on('dialogPluginReady',a);function a(){CKEDITOR.dialog.on('resize',function(b){var c=b.data,d=c.width,e=c.height,f=c.dialog,g=f.parts.contents;if(c.skin!='office2003')return;g.setStyles({width:d+'px',height:e+'px'});if(!CKEDITOR.env.ie)return;var h=function(){var i=f.parts.dialog.getChild([0,0,0]),j=i.getChild(0),k=i.getChild(2);k.setStyle('width',j.$.offsetWidth+'px');k=i.getChild(7);k.setStyle('width',j.$.offsetWidth-28+'px');k=i.getChild(4);k.setStyle('height',e+j.getChild(0).$.offsetHeight+'px');k=i.getChild(5);k.setStyle('height',e+j.getChild(0).$.offsetHeight+'px');};setTimeout(h,100);if(b.editor.lang.dir=='rtl')setTimeout(h,1000);});};})();
diff --git a/modules_v2/ckeditor/skins/office2003/templates.css b/modules_v2/ckeditor/skins/office2003/templates.css new file mode 100644 index 0000000000..3124da445f --- /dev/null +++ b/modules_v2/ckeditor/skins/office2003/templates.css @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+.cke_skin_office2003 .cke_tpl_list{border:#dcdcdc 2px solid;background-color:#fff;overflow:auto;width:100%;height:220px;}.cke_skin_office2003 .cke_tpl_item{margin:5px;padding:7px;border:#eee 1px solid;*width:88%;}.cke_skin_office2003 .cke_tpl_preview{border-collapse:separate;text-indent:0;width:100%;}.cke_skin_office2003 .cke_tpl_preview td{padding:2px;vertical-align:middle;}.cke_skin_office2003 .cke_tpl_preview .cke_tpl_preview_img{width:100px;}.cke_skin_office2003 .cke_tpl_preview span{white-space:normal;}.cke_skin_office2003 .cke_tpl_title{font-weight:bold;}.cke_skin_office2003 .cke_tpl_list a:active .cke_tpl_item,.cke_skin_office2003 .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_office2003 .cke_tpl_list a:focus .cke_tpl_item{border:#f93 1px solid!important;background-color:#fffacd!important;}.cke_skin_office2003 .cke_tpl_list a:active *,.cke_skin_office2003 .cke_tpl_list a:hover *,.cke_skin_office2003 .cke_tpl_list a:focus *{cursor:pointer;}.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:active,.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:hover,.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:focus{background-position:0 0;}.cke_skin_office2003 .cke_tpl_list a:active .cke_tpl_item,.cke_skin_office2003 .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_office2003 .cke_tpl_list a:focus .cke_tpl_item{border-width:3px;}.cke_skin_office2003 .cke_tpl_empty,.cke_tpl_loading{text-align:center;padding:5px;}
diff --git a/modules_v2/ckeditor/skins/v2/dialog.css b/modules_v2/ckeditor/skins/v2/dialog.css new file mode 100644 index 0000000000..de3ce20eb3 --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/dialog.css @@ -0,0 +1,9 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+body .cke_dialog{visibility:visible;}.cke_skin_v2 table.cke_dialog.cke_browser_gecko{display:block;}.cke_skin_v2 .cke_dialog_body{margin-left:16px;margin-right:16px;margin-top:2px;margin-bottom:20px;z-index:1;position:relative;_position:static;}.cke_skin_v2 .cke_dialog_tl,.cke_skin_v2 .cke_dialog_tr,.cke_skin_v2 .cke_dialog_tc,.cke_skin_v2 .cke_dialog_bl,.cke_skin_v2 .cke_dialog_br,.cke_skin_v2 .cke_dialog_bc{background-image:url(images/sprites.png);background-repeat:no-repeat;position:absolute;_background-image:url(images/sprites_ie6.png);_z-index:-1;}.cke_skin_v2 .cke_dialog_tl{background-position:-16px -16px;height:16px;width:16px;top:0;left:0;}.cke_skin_v2 .cke_rtl .cke_dialog_tl{background-position:-16px -397px;}.cke_skin_v2 .cke_dialog_tr{background-position:-16px -76px;height:16px;width:16px;top:0;right:0;}.cke_skin_v2 .cke_rtl .cke_dialog_tr{background-position:-16px -457px;}.cke_skin_v2 .cke_dialog_tc{background-position:0 -136px;background-repeat:repeat-x;height:16px;top:0;left:16px;right:16px;}.cke_skin_v2 .cke_dialog_bl{background-position:-16px -196px;height:51px;width:30px;bottom:0;left:0;}.cke_skin_v2 .cke_rtl .cke_dialog_bl{background-position:-16px -517px;}.cke_skin_v2 .cke_dialog_br{background-position:-16px -263px;height:51px;width:30px;bottom:0;right:0;}.cke_skin_v2 .cke_rtl .cke_dialog_br{background-position:-16px -584px;}.cke_skin_v2 .cke_dialog_bc{background-position:0 -330px;background-repeat:repeat-x;height:51px;bottom:0;left:30px;right:30px;}.cke_skin_v2 .cke_dialog_ml,.cke_skin_v2 .cke_dialog_mr{background-image:url(images/dialog_sides.png);background-repeat:repeat-y;position:absolute;width:16px;top:16px;bottom:51px;_background-image:url(images/dialog_sides.gif);_top:auto;}.cke_skin_v2 .cke_rtl .cke_dialog_ml,.cke_skin_v2 .cke_rtl .cke_dialog_mr{background-image:url(images/dialog_sides_rtl.png);_background-image:url(images/dialog_sides.gif);}.cke_skin_v2 .cke_dialog_ml{background-position:0 0;left:0;}.cke_skin_v2 .cke_dialog_mr{background-position:-16px 0;right:0;}.cke_skin_v2 .cke_browser_iequirks .cke_dialog_ml,.cke_skin_v2 .cke_browser_iequirks .cke_dialog_mr{margin-top:3px;}.cke_skin_v2 .cke_dialog_title{font-weight:bold;font-size:14pt;color:#737357;background-color:#e3e3c7;padding:3px 10px 26px 10px;cursor:move;position:relative;}.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_title{position:static;}.cke_skin_v2 .cke_dialog_contents{background-color:#f1f1e3;border:#d5d59d 1px solid;overflow:auto;padding:5px 10px;}.cke_skin_v2 .cke_dialog_footer{background-color:#e3e3c7;text-align:right;}.cke_skin_v2 .cke_rtl .cke_dialog_footer{text-align:left;}.cke_skin_v2 .cke_dialog_footer .cke_resizer{margin-top:21px;}.cke_skin_v2 .cke_dialog_tabs{height:23px;background-color:#e3e3c7;display:inline-block;margin-left:10px;margin-right:10px;margin-top:-23px;position:absolute;z-index:2;}.cke_skin_v2 .cke_rtl .cke_dialog_tabs{right:10px;}.cke_skin_v2 a.cke_dialog_tab,.cke_skin_v2 a:link.cke_dialog_tab,.cke_skin_v2 a:active.cke_dialog_tab,.cke_skin_v2 a:hover.cke_dialog_tab,.cke_skin_v2 a:visited.cke_dialog_tab{color:#737357;border-left:1px solid #d5d59d;border-right:1px solid #d5d59d;border-top:1px solid #d5d59d;height:14px;padding:4px 5px;display:inline-block;cursor:pointer;}.cke_skin_v2 .cke_browser_gecko18 a.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:link.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:active.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:hover.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:visited.cke_dialog_tab{display:inline;position:relative;top:6px;}.cke_skin_v2 a:hover.cke_dialog_tab{background-color:#f1f1e3;}.cke_skin_v2 .cke_hc a:hover.cke_dialog_tab{padding:2px 3px!important;border-width:3px;}.cke_skin_v2 a.cke_dialog_tab_selected,.cke_skin_v2 a:link.cke_dialog_tab_selected,.cke_skin_v2 a:active.cke_dialog_tab_selected,.cke_skin_v2 a:hover.cke_dialog_tab_selected,.cke_skin_v2 a:visited.cke_dialog_tab_selected{border-bottom:1px solid #f1f1e3;background-color:#f1f1e3;font-weight:bold;cursor:default;}.cke_skin_v2 .cke_hc a.cke_dialog_tab_selected,.cke_skin_v2 .cke_hc a:link.cke_dialog_tab_selected,.cke_skin_v2 .cke_hc a:active.cke_dialog_tab_selected,.cke_skin_v2 .cke_hc a:hover.cke_dialog_tab_selected,.cke_skin_v2 .cke_hc a:visited.cke_dialog_tab_selected{padding:2px 3px!important;border-width:3px;}
+.cke_skin_v2 .cke_hc .cke_dialog_tabs a,.cke_skin_v2 .cke_hc .cke_dialog_footer a{opacity:1.0;filter:alpha(opacity=100);border:1px solid white;}.cke_skin_v2 .cke_single_page .cke_dialog_tabs{display:none;}.cke_skin_v2 .cke_single_page .cke_dialog_title{padding-bottom:3px;}.cke_skin_v2 .cke_dialog_ui_vbox table,.cke_skin_v2 .cke_dialog_ui_hbox table{margin:auto;}.cke_skin_v2 .cke_dialog_ui_vbox_child{padding:5px 0;}.cke_skin_v2 input.cke_dialog_ui_input_text,.cke_skin_v2 input.cke_dialog_ui_input_password{background-color:white;border:none;padding:0;width:100%;height:14px;}.cke_skin_v2 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_gecko.cke_hc div.cke_dialog_ui_input_password{border-width:0;}.cke_skin_v2 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_gecko18.cke_hc div.cke_dialog_ui_input_password{border-width:1px;}.cke_skin_v2 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_ie.cke_rtl input.cke_dialog_ui_input_password,.cke_skin_v2 .cke_browser_opera.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px;}.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_text,.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_password,.cke_skin_v2 .cke_browser_opera.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px;}.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_vbox_child,.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_child,.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important;}.cke_skin_v2 div.cke_dialog_ui_input_text,.cke_skin_v2 div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_v2 .cke_browser_ie.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px;}.cke_skin_v2 textarea.cke_dialog_ui_input_textarea{background-color:white;border:none;padding:0;width:100%;_width:99%;overflow:auto;resize:none;}.cke_skin_v2 div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_v2 div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default;}.cke_skin_v2 .cke_dialog_ui_hbox{width:100%;}.cke_skin_v2 .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_dialog_ui_hbox_child,.cke_skin_v2 .cke_dialog_ui_hbox_last{vertical-align:top;}.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px;}.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px;}.cke_skin_v2 a.cke_dialog_ui_button{border-collapse:separate;cursor:default;}.cke_skin_v2 a.cke_dialog_ui_button_ok span,.cke_skin_v2 a.cke_dialog_ui_button_cancel span{width:60px;}.cke_skin_v2 span.cke_dialog_ui_button{border:#737357 1px solid;padding:2px 10px;text-align:center;color:#3b3b1f;background-color:#c7c78f;display:inline-block;cursor:default;}.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{display:block;}.cke_skin_v2 a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3;}.cke_skin_v2 a:focus span.cke_dialog_ui_button,.cke_skin_v2 a:active span.cke_dialog_ui_button{background-color:#e3e3c7;}.cke_skin_v2 .cke_hc a:focus span.cke_dialog_ui_button,.cke_skin_v2 .cke_hc a:active span.cke_dialog_ui_button{border-width:2px;}.cke_skin_v2 .cke_dialog_footer_buttons{display:inline-table;margin-right:12px;margin-left:12px;width:auto;position:relative;}.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons{display:inline;}.cke_skin_v2 .cke_dialog_footer_buttons span.cke_dialog_ui_button{margin:7px 0;}.cke_skin_v2 .cke_browser_ie7 .cke_dialog_footer_buttons{position:static;}.cke_skin_v2 strong{font-weight:bold;}.cke_skin_v2 a.cke_dialog_close_button,.cke_skin_v2 a:hover.cke_dialog_close_button,.cke_skin_v2 .cke_browser_ie6 a.cke_dialog_close_button,.cke_skin_v2 .cke_browser_ie6 a:hover.cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:-16px -651px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;_background-image:url(images/sprites_ie6.png);}
+.cke_skin_v2 a.cke_dialog_close_button span{display:none;}.cke_skin_v2 a:hover.cke_dialog_close_button{background-position:-16px -687px;}.cke_skin_v2 .cke_ltr a.cke_dialog_close_button,.cke_skin_v2 .cke_ltr a:hover.cke_dialog_close_button{right:10px;_right:22px;}.cke_skin_v2 .cke_rtl a.cke_dialog_close_button,.cke_skin_v2 .cke_rtl a:hover.cke_dialog_close_button{left:10px;_left:16px;_top:7px;}.cke_skin_v2 .cke_browser_ie6.cke_rtl a.cke_dialog_close_button,.cke_skin_v2 .cke_browser_ie6.cke_rtl a:hover.cke_dialog_close_button{position:relative;float:left;margin-top:-55px;margin-left:-7px;}.cke_skin_v2 .cke_browser_iequirks.cke_rtl.cke_single_page a.cke_dialog_close_button,.cke_skin_v2 .cke_browser_iequirks.cke_rtl.cke_single_page a:hover.cke_dialog_close_button{margin-top:-32px;}.cke_skin_v2 .cke_browser_iequirks.cke_ltr a.cke_dialog_close_button,.cke_skin_v2 .cke_browser_iequirks.cke_ltr a:hover.cke_dialog_close_button{margin-top:0;}.cke_skin_v2 .cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white;}.cke_skin_v2 .cke_dialog_ui_input_file{width:100%;height:25px;}.cke_skin_v2 .cke_dialog .cke_dark_background{background-color:#eaead1;}.cke_skin_v2 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_v2 .cke_dialog .cke_centered{text-align:center;}.cke_skin_v2 .cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px;}.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_reset{float:left;}.cke_skin_v2 .cke_dialog a.cke_btn_locked,.cke_skin_v2 .cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px;}.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_locked,.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_unlocked{float:right;}.cke_skin_v2 .cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif);}.cke_skin_v2 .cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer;}.cke_skin_v2 .cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:210px;width:230px;padding:2px;background-color:white;}.cke_skin_v2 .cke_dialog .ImagePreviewBox table td{white-space:normal;}.cke_skin_v2 .cke_browser_iequirks .cke_dialog_page_contents{_position:absolute;}.cke_skin_v2 .cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4;}.cke_skin_v2 .cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white;}.cke_skin_v2 .cke_dialog .cke_pastetext{width:346px;height:170px;}.cke_skin_v2 .cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none;}.cke_skin_v2 .cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid black;}.cke_skin_v2 .cke_dialog .cke_dark_background{text-align:center;background-color:#eaead1;font-size:14px;}.cke_skin_v2 .cke_dialog .cke_light_background{text-align:center;background-color:#ffffbe;}.cke_skin_v2 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_v2 .cke_disabled{color:#a0a0a0;}.cke_skin_v2 .cke_hc .cke_dialog_title,.cke_skin_v2 .cke_hc .cke_dialog_tabs,.cke_skin_v2 .cke_hc .cke_dialog_contents,.cke_skin_v2 .cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid;}.cke_skin_v2 .cke_hc .cke_dialog_title{border-top:1px solid;}.cke_skin_v2 .cke_hc .cke_dialog_footer{border-bottom:1px solid;}.cke_skin_v2 .cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px;}.cke_skin_v2 .cke_dialog_body .cke_label{display:none;}.cke_skin_v2 .cke_dialog_body label.cke_required{font-weight:bold;}.cke_skin_v2 .cke_hc .cke_dialog_body .cke_label{display:inline;}.cke_skin_v2 .cke_hc a.cke_btn_locked,.cke_skin_v2 .cke_hc a.cke_btn_unlocked,.cke_skin_v2 .cke_hc a.cke_btn_reset{border-style:solid;float:left;width:auto;height:auto;}
+.cke_skin_v2 .cke_rtl.cke_hc a.cke_btn_locked,.cke_skin_v2 .cke_rtl.cke_hc a.cke_btn_unlocked,.cke_skin_v2 .cke_rtl.cke_hc a.cke_btn_reset{float:right;}.cke_skin_v2 a.cke_smile img{border:2px solid #eaead1;}.cke_skin_v2 a.cke_smile:focus img,.cke_skin_v2 a.cke_smile:active img,.cke_skin_v2 a.cke_smile:hover img{border-color:#C7C78F;}.cke_skin_v2 .cke_dialog_contents a.colorChooser{display:block;margin-top:12px;margin-left:10px;width:40px;}.cke_skin_v2 .cke_dialog_contents a.colorChooser .cke_dialog_ui_button{width:100%;}.cke_skin_v2 .cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px;}
diff --git a/modules_v2/ckeditor/skins/v2/editor.css b/modules_v2/ckeditor/skins/v2/editor.css new file mode 100644 index 0000000000..a74e0ae139 --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/editor.css @@ -0,0 +1,13 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+.cke_skin_v2 *,.cke_skin_v2 a:hover,.cke_skin_v2 a:link,.cke_skin_v2 a:visited,.cke_skin_v2 a:active{margin:0;padding:0;border:0;background:transparent;text-decoration:none;font:normal normal normal 100% Sans-Serif;width:auto;height:auto;border-collapse:collapse;text-align:left;vertical-align:baseline;white-space:nowrap;cursor:auto;color:#000;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_skin_v2 .cke_rtl *,.cke_skin_v2 .cke_rtl a:hover,.cke_skin_v2 .cke_rtl a:link,.cke_skin_v2 .cke_rtl a:visited,.cke_skin_v2 .cke_rtl a:active,.cke_rtl .cke_skin_v2 *,.cke_rtl .cke_skin_v2 a:hover,.cke_rtl .cke_skin_v2 a:link,.cke_rtl .cke_skin_v2 a:visited,.cke_rtl .cke_skin_v2 a:active{text-align:right;}.cke_skin_v2 iframe{vertical-align:inherit;}.cke_skin_v2 textarea{white-space:pre;}.cke_skin_v2 .cke_browser_gecko textarea{cursor:text;}.cke_skin_v2 .cke_browser_gecko textarea[disabled]{cursor:default;}.cke_skin_v2 input[type="text"],.cke_skin_v2 input[type="password"]{cursor:text;}.cke_skin_v2 input[type="text"][disabled],.cke_skin_v2 input[type="password"][disabled]{cursor:default;}.cke_skin_v2 fieldset{padding:10px;border:2px groove #E0DFE3;}.cke_skin_v2 .cke_editor{display:inline-table;width:100%;}.cke_skin_v2{display:block;}.cke_skin_v2 span.cke_browser_webkit,.cke_skin_v2 span.cke_browser_gecko18{display:block;}.cke_skin_v2 .cke_wrapper{display:block;}.cke_skin_v2 .cke_browser_opera .cke_editor{display:table;}.cke_skin_v2 .cke_top,.cke_skin_v2 .cke_bottom,.cke_shared .cke_skin_v2{background-color:#efefde;}.cke_skin_v2 .cke_top{border-top:solid 1px #fafaf5;border-left:solid 1px #fafaf5;border-right:solid 1px #696969;border-bottom:solid 2px #696969;}.cke_skin_v2 .cke_rtl .cke_top{border-left:solid 1px #696969;border-right:solid 1px #fafaf5;}.cke_skin_v2 .cke_bottom{border-left:solid 1px #696969;border-right:solid 1px #696969;border-bottom:solid 1px #696969;}.cke_skin_v2 .cke_contents{border:solid 1px #696969;background-color:white;}.cke_skin_v2 .cke_focus{outline:auto 5px -webkit-focus-ring-color;}.cke_skin_v2 textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre;}.cke_skin_v2 .cke_browser_iequirks textarea.cke_source{_white-space:normal;}.cke_skin_v2 .cke_resizer{width:12px;height:12px;margin-top:16px;display:block;float:right;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -801px;background-repeat:no-repeat;cursor:se-resize;}.cke_skin_v2 .cke_browser_air .cke_resizer,.cke_skin_v2 .cke_browser_air .cke_rtl .cke_resizer{cursor:move;}.cke_skin_v2 .cke_rtl .cke_resizer{cursor:sw-resize;background-position:0 -828px;float:left;}.cke_skin_v2 .cke_resizer_horizontal,.cke_skin_v2 .cke_rtl .cke_resizer_horizontal{cursor:e-resize;}.cke_skin_v2 .cke_resizer_vertical,.cke_skin_v2 .cke_rtl .cke_resizer_vertical{cursor:n-resize;}.cke_skin_v2 .cke_maximized .cke_resizer{display:none;}.cke_skin_v2 .cke_browser_ie6 .cke_contents textarea,.cke_skin_v2 .cke_browser_ie7 .cke_contents textarea{position:absolute;}.cke_skin_v2 .cke_voice_label{display:none;}.cke_skin_v2 legend.cke_voice_label{display:none;}.cke_skin_v2 .cke_browser_ie legend.cke_voice_label{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_v2 .cke_panel{border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.cke_skin_v2 .cke_panel iframe{width:100%;height:100%;}.cke_skin_v2 .cke_panel_frame .cke_label{display:none;}html.cke_skin_v2_container{overflow:auto;overflow-x:hidden;}body.cke_panel_frame{overflow:auto;}ul.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap;}li.cke_panel_listItem{margin:0;}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;}* html .cke_panel_listItem a{width:100%;color:#000;}*:first-child+html .cke_panel_listItem a{color:#000;}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff;}
+.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff;}.cke_hc .cke_panel_listItem.cke_selected a,.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border-width:3px;padding:0;}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px;}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px;}.cke_skin_v2 .cke_button_textcolor_panel,.cke_skin_v2 .cke_button_bgcolor_panel{width:150px;height:135px;}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000;}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left;}.cke_rtl span.cke_colorbox{float:right;}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;}.cke_rtl a.cke_colorbox{float:right;}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff;}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer;}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff;}@media print{.cke_skin_v2 .cke_toolbox{display:none;}}.cke_skin_v2 .cke_browser_webkit .cke_toolbox,.cke_skin_v2 .cke_browser_webkit .cke_toolbox>span{white-space:normal;}.cke_skin_v2 .cke_toolbox{clear:both;padding-bottom:1px;}.cke_skin_v2 a.cke_toolbox_collapser,.cke_skin_v2 a:hover.cke_toolbox_collapser{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:3px -739px;background-repeat:no-repeat;width:11px;height:11px;float:right;border:outset 1px;margin:11px 2px 2px;cursor:pointer;}.cke_skin_v2 a.cke_toolbox_collapser span{display:none;}.cke_skin_v2 .cke_hc a.cke_toolbox_collapser span{font-size:10px;font-weight:bold;font-family:Arial;display:inline;}.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser,.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser{float:left;}.cke_skin_v2 a.cke_toolbox_collapser_min,.cke_skin_v2 a:hover.cke_toolbox_collapser_min{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:4px -760px;background-repeat:no-repeat;margin:2px;}.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser_min,.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser_min{background-position:4px -781px;}.cke_skin_v2 .cke_toolbar{padding-top:1px;padding-bottom:1px;display:inline-block;float:left;}.cke_skin_v2 .cke_rtl .cke_toolbar{float:right;}.cke_skin_v2 .cke_toolgroup{display:inline-block;float:left;}.cke_skin_v2 .cke_browser_ie .cke_toolgroup{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_toolgroup{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup{#float:none;}.cke_skin_v2 .cke_separator{display:inline-block;float:left;border-left:solid 1px #999;margin:4px 2px;height:16px;}.cke_skin_v2 .cke_browser_ie .cke_separator{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_separator{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator{#float:none;}.cke_skin_v2 .cke_break{clear:left;}.cke_skin_v2 .cke_rtl .cke_break{clear:right;}.cke_skin_v2 .cke_toolbar_start{display:inline-block;background-image:url(images/toolbar_start.gif);background-repeat:no-repeat;margin:4px 2px 0 2px;width:3px;height:20px;float:left;}.cke_skin_v2 .cke_browser_ie .cke_toolbar_start{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_toolbar_start{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start{#float:none;}.cke_skin_v2 .cke_toolbar_end{display:inline-block;float:left;}.cke_skin_v2 .cke_browser_ie .cke_toolbar_end{#float:none;#display:inline;}
+.cke_skin_v2 .cke_rtl .cke_toolbar_end{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end{#float:none;}.cke_skin_v2 .cke_button a,.cke_skin_v2 .cke_button a:hover,.cke_skin_v2 .cke_button a:focus,.cke_skin_v2 .cke_button a:active,.cke_skin_v2 .cke_button a.cke_off{border:solid 1px #efefde;display:inline-block;border-radius:3px;outline:none;padding-top:2px;padding-left:4px;padding-right:4px;padding-bottom:2px;height:18px;cursor:default;}.cke_skin_v2 .cke_button a,.cke_skin_v2 .cke_button a.cke_off{background-color:#efefde;filter:alpha(opacity=70);opacity:.70;-moz-border-radius:3px;-webkit-border-radius:3px;}.cke_skin_v2 .cke_hc .cke_button a,.cke_skin_v2 .cke_hc .cke_button a.cke_off{opacity:1.0;filter:alpha(opacity=100);}.cke_skin_v2 .cke_button a.cke_on{border:solid 1px #316ac5;background-color:#a3d7ff;filter:alpha(opacity=100);opacity:1;}.cke_skin_v2 .cke_button a.cke_disabled *{filter:alpha(opacity=30);opacity:.3;}.cke_skin_v2 .cke_browser_ie .cke_button a.cke_disabled *,.cke_skin_v2 .cke_browser_ie a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button a.cke_disabled *,.cke_skin_v2 .cke_browser_ie .cke_rtl a:hover.cke_button .cke_disabled *{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=30);}.cke_skin_v2 .cke_browser_ie6 .cke_button a.cke_disabled *,.cke_skin_v2 .cke_browser_ie6 a:hover.cke_button .cke_disabled *{filter:alpha(opacity=30);}.cke_skin_v2 .cke_hc .cke_button a.cke_disabled *,.cke_skin_v2 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled *{filter:alpha(opacity=60);opacity:.6;}.cke_skin_v2 .cke_button a:hover,.cke_skin_v2 .cke_button a:focus,.cke_skin_v2 .cke_button a:active{border:solid 1px #316ac5;background-color:#dff1ff;padding:2px 4px;}.cke_skin_v2 .cke_hc .cke_button a:hover,.cke_skin_v2 .cke_hc .cke_button a:focus,.cke_skin_v2 .cke_hc .cke_button a:active{padding:0 2px!important;border-width:3px;}.cke_skin_v2 .cke_button .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;display:inline-block;cursor:default;}.cke_skin_v2 .cke_rtl .cke_button .cke_icon{background-image:url(icons_rtl.png);}.cke_skin_v2 .cke_browser_ie .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_button .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_v2 .cke_browser_ie6 .cke_button .cke_icon,.cke_skin_v2 .cke_browser_ie6 .cke_rtl .cke_button .cke_icon{filter:;}.cke_skin_v2 .cke_button .cke_label{cursor:default;display:none;padding-left:3px;vertical-align:middle;}.cke_skin_v2 .cke_hc .cke_button .cke_label{padding:0;display:inline-block;}.cke_skin_v2 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_v2 .cke_accessibility{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_v2 .cke_button .cke_buttonarrow{display:inline-block;height:17px;width:8px;background-position:2px -717px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;cursor:default;}.cke_skin_v2 .cke_rtl .cke_button .cke_buttonarrow{background-position:0 -717px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);}.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar,.cke_skin_v2 .cke_browser_gecko18 .cke_button a,.cke_skin_v2 .cke_browser_gecko18 .cke_button a.cke_off,.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_icon,.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_buttonarrow,.cke_skin_v2 .cke_browser_gecko18 .cke_separator,.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar_start{display:block;float:left;}.cke_skin_v2 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_separator,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start{float:right;}
+.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_break{float:left;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl span.cke_inline_label{float:right;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_break{float:right;}.cke_skin_v2 .cke_browser_gecko18 .cke_separator{margin-top:4px;}.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label{padding-top:3px;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end{float:none;}.cke_skin_v2 .cke_browser_ie8 .cke_toolbar,.cke_skin_v2 .cke_browser_ie8 .cke_toolgroup{vertical-align:top;}.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar,.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup{vertical-align:baseline;}.cke_skin_v2 .cke_browser_ie .cke_rcombo,.cke_skin_v2 .cke_browser_ie .cke_rcombo *{cursor:default;}.cke_skin_v2 .cke_contextmenu{padding:2px;}.cke_skin_v2 .cke_menuitem a{display:block;}.cke_skin_v2 .cke_menuitem span{cursor:default;}.cke_skin_v2 .cke_menuitem a:hover,.cke_skin_v2 .cke_menuitem a:focus,.cke_skin_v2 .cke_menuitem a:active{background-color:#8f8f73;display:block;}.cke_hc .cke_menuitem a:hover,.cke_hc .cke_menuitem a:focus,.cke_hc .cke_menuitem a:active{border:2px solid;}.cke_skin_v2 .cke_menuitem .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;background-color:transparent;width:16px;height:16px;float:left;}.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon{background-image:url(icons_rtl.png);}.cke_browser_ie .cke_skin_v2 .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_v2 .cke_menuitem .cke_icon{filter:;}.cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon{filter:alpha(opacity=70);opacity:.70;}.cke_browser_ie .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_browser_ie6 .cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon{filter:;}.cke_skin_v2 .cke_menuitem .cke_icon_wrapper{background-color:#e3e3c7;border:solid 4px #e3e3c7;width:16px;height:16px;float:left;filter:alpha(opacity=70);opacity:.70;clear:both;}.cke_browser_ie9 .cke_skin_v2 .cke_menuitem .cke_icon_wrapper{width:24px;height:24px;}.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon_wrapper{float:right;}.cke_skin_v2 .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:active .cke_icon_wrapper{background-color:#9d9d9d;border:solid 4px #9d9d9d;filter:alpha(opacity=70);opacity:.70;}.cke_skin_v2 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper{background-color:#e3e3c7;border:solid 4px #e3e3c7;}.cke_skin_v2 .cke_menuitem .cke_label{display:block;padding-right:3px;padding-top:5px;padding-left:4px;height:19px;margin-left:24px;background-color:#fff;}.cke_browser_ie9 .cke_skin_v2 .cke_menuitem .cke_label{height:24px;}.cke_skin_v2 .cke_frameLoaded .cke_menuitem .cke_label{filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_v2 .cke_menuitem .cke_label{padding-right:0;margin-left:0;padding-left:3px;margin-right:28px;}.cke_skin_v2 .cke_menuitem a.cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.30;}.cke_skin_v2 .cke_menuitem a:hover .cke_label,.cke_skin_v2 .cke_menuitem a:focus .cke_label,.cke_skin_v2 .cke_menuitem a:active .cke_label{background-color:#8f8f73;color:white;}.cke_skin_v2 .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_v2 .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_v2 .cke_menuitem a.cke_disabled:active .cke_label{background-color:transparent;color:black;}
+.cke_skin_v2 .cke_menuseparator{background-color:#e3e3c7;height:2px;filter:alpha(opacity=70);opacity:.70;_font-size:0;}.cke_skin_v2 .cke_menuarrow{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -784px;background-repeat:no-repeat;height:5px;width:3px;float:right;margin-right:2px;margin-top:3px;}.cke_rtl .cke_skin_v2 .cke_menuarrow{float:left;margin-right:0;margin-left:2px;background-position:0 -763px;}.cke_skin_v2 .cke_menuarrow span{display:none;}.cke_hc .cke_skin_v2 .cke_menuarrow{width:auto;margin-top:0;}.cke_hc .cke_skin_v2 .cke_menuarrow span{display:inline;}.cke_browser_ie.cke_ltr .cke_skin_v2 .cke_menuarrow{position:absolute;right:2px;}.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuarrow{position:absolute;left:2px;}.cke_skin_v2 .cke_rcombo{display:inline-block;margin-left:2px;margin-right:2px;margin-top:2px;vertical-align:top;float:left;}.cke_skin_v2 .cke_browser_ie .cke_rcombo{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_rcombo{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rcombo{#float:none;}.cke_skin_v2 .cke_rcombopanel{border:1px solid #316ac5;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;}.cke_skin_v2 .cke_rcombo a{display:inline-block;float:left;filter:alpha(opacity=70);opacity:.70;}.cke_skin_v2 .cke_rtl .cke_rcombo a{float:right;}.cke_skin_v2 .cke_hc .cke_rcombo a{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_v2 .cke_rcombo .cke_label{display:inline-block;float:left;line-height:24px;height:22px;vertical-align:top;padding-left:4px;padding-right:5px;filter:alpha(opacity=70);opacity:.70;background-color:#f1f1e3;cursor:default;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_label{float:right;padding-right:4px;padding-left:5px;}.cke_skin_v2 .cke_hc .cke_rcombo .cke_label{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_v2 .cke_rcombo .cke_inline_label{color:#fff;}.cke_skin_v2 .cke_rcombo .cke_text{border:1px solid #8f8f73;background-color:#fff;height:12px;width:60px;padding-top:4px;padding-bottom:4px;padding-left:5px;padding-right:5px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:top;cursor:default;}.cke_skin_v2 .cke_ltr .cke_rcombo .cke_text{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_text{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_v2 .cke_browser_iequirks .cke_rcombo .cke_text{height:22px;}.cke_skin_v2 .cke_rcombo .cke_openbutton{display:inline-block;background-position:5px -715px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;border-top:1px solid #8f8f73;border-bottom:1px solid #8f8f73;width:14px;height:20px;}.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_openbutton{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale');}.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_openbutton{filter:;}.cke_skin_v2 .cke_rcombo .cke_openbutton span{display:none;}.cke_skin_v2 .cke_hc .cke_rcombo .cke_openbutton span{display:inline;}.cke_skin_v2 .cke_ltr .cke_rcombo .cke_openbutton{border-right:1px solid #8f8f73;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_openbutton{border-left:1px solid #8f8f73;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_v2 .cke_rcombo .cke_off a:hover,.cke_skin_v2 .cke_rcombo .cke_off a:focus,.cke_skin_v2 .cke_rcombo .cke_off a:active,.cke_skin_v2 .cke_rcombo .cke_on a{filter:alpha(opacity=100);opacity:1;}
+.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_text,.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_text,.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_text,.cke_skin_v2 .cke_rcombo .cke_on .cke_text{border-color:#316ac5;}.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_openbutton,.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_openbutton,.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_openbutton,.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton{border-color:#316ac5;background-color:#dff1ff;}.cke_skin_v2 .cke_rcombo .cke_on .cke_text{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton{-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}.cke_skin_v2 .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.3;}.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=70);opacity:.7;}.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text,.cke_skin_v2 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);opacity:.5;}.cke_skin_v2 .cke_browser_ie .cke_rcombo .cke_disabled .cke_openbutton{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale'), alpha(opacity=50);}.cke_skin_v2 .cke_browser_ie6 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);}.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_text,.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=80);opacity:.8;}.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text{color:#fff;}.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo,.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_openbutton,.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_openbutton{display:block;float:left;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton,.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo a,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label{float:none;}.cke_skin_v2 .cke_browser_iequirks .cke_rcombo .cke_openbutton{height:22px;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_font .cke_text,.cke_skin_v2 .cke_rtl .cke_rcombo .cke_fontSize .cke_text{direction:ltr;}@media print{.cke_path{display:none;}}.cke_skin_v2 .cke_path{padding:3px 3px 0 3px;display:inline-block;float:left;}.cke_skin_v2 .cke_rtl .cke_path{float:right;}.cke_skin_v2 .cke_path a,.cke_skin_v2 .cke_path .cke_empty{display:inline-block;float:left;border:solid 1px #efefde;background-color:#efefde;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;margin-bottom:3px;cursor:default;}.cke_skin_v2 .cke_path .cke_empty{visibility:hidden;}.cke_skin_v2 .cke_rtl .cke_path a,.cke_skin_v2 .cke_rtl .cke_path cke_empty{float:right;}.cke_skin_v2 .cke_path a:hover,.cke_skin_v2 .cke_path a:focus,.cke_skin_v2 .cke_path a:active{border:solid 1px #316ac5;background-color:#dff1ff;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;outline:none;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path a,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path .cke_empty{float:none;}.cke_skin_v2 .cke_path .cke_label{display:none;}.cke_skin_v2 .cke_button_source .cke_icon{background-position:0 0;}.cke_skin_v2 .cke_button_newpage .cke_icon{background-position:0 -48px;}.cke_skin_v2 .cke_button_preview .cke_icon{background-position:0 -64px;}.cke_skin_v2 .cke_button_cut .cke_icon{background-position:0 -96px;}.cke_skin_v2 .cke_button_copy .cke_icon{background-position:0 -112px;}
+.cke_skin_v2 .cke_button_paste .cke_icon{background-position:0 -128px;}.cke_skin_v2 .cke_button_pastetext .cke_icon{background-position:0 -144px;}.cke_skin_v2 .cke_button_find .cke_icon{background-position:0 -240px;}.cke_skin_v2 .cke_button_replace .cke_icon{background-position:0 -256px;}.cke_skin_v2 .cke_button_selectAll .cke_icon{background-position:0 -272px;}.cke_skin_v2 .cke_button_removeFormat .cke_icon{background-position:0 -288px;}.cke_skin_v2 .cke_button_bold .cke_icon{background-position:0 -304px;}.cke_skin_v2 .cke_button_italic .cke_icon{background-position:0 -320px;}.cke_skin_v2 .cke_button_underline .cke_icon{background-position:0 -336px;}.cke_skin_v2 .cke_button_strike .cke_icon{background-position:0 -352px;}.cke_skin_v2 .cke_button_subscript .cke_icon{background-position:0 -368px;}.cke_skin_v2 .cke_button_superscript .cke_icon{background-position:0 -384px;}.cke_skin_v2 .cke_button_table .cke_icon{background-position:0 -608px;}.cke_skin_v2 .cke_button_horizontalrule .cke_icon{background-position:0 -624px;}.cke_skin_v2 .cke_button_smiley .cke_icon{background-position:0 -640px;}.cke_skin_v2 .cke_button_link .cke_icon{background-position:0 -528px;}.cke_skin_v2 .cke_button_unlink .cke_icon{background-position:0 -544px;}.cke_skin_v2 .cke_button_anchor .cke_icon{background-position:0 -560px;}.cke_skin_v2 .cke_button_image .cke_icon{background-position:0 -576px;}.cke_skin_v2 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_v2 .cke_button_specialchar .cke_icon{background-position:0 -656px;}.cke_skin_v2 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_v2 .cke_button_print .cke_icon{background-position:0 -176px;}.cke_skin_v2 .cke_button_checkspell .cke_icon,.cke_skin_v2 .cke_button_scayt .cke_icon{background-position:0 -192px;}.cke_skin_v2 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_v2 .cke_button_textcolor .cke_icon{background-position:0 -704px;}.cke_skin_v2 .cke_button_bgcolor .cke_icon{background-position:0 -720px;}.cke_skin_v2 .cke_button_form .cke_icon{background-position:0 -752px;}.cke_skin_v2 .cke_button_checkbox .cke_icon{background-position:0 -768px;}.cke_skin_v2 .cke_button_radio .cke_icon{background-position:0 -784px;}.cke_skin_v2 .cke_button_textfield .cke_icon{background-position:0 -800px;}.cke_skin_v2 .cke_button_textarea .cke_icon{background-position:0 -816px;}.cke_skin_v2 .cke_button_showblocks .cke_icon{background-position:0 -1136px;}.cke_skin_v2 .cke_button_select .cke_icon{background-position:0 -832px;}.cke_skin_v2 .cke_button_button .cke_icon{background-position:0 -848px;}.cke_skin_v2 .cke_button_imagebutton .cke_icon{background-position:0 -864px;}.cke_skin_v2 .cke_button_hiddenfield .cke_icon{background-position:0 -880px;}.cke_skin_v2 .cke_button_undo .cke_icon{background-position:0 -208px;}.cke_skin_v2 .cke_rtl .cke_button_undo .cke_icon{background-position:0 -224px;}.cke_skin_v2 .cke_button_redo .cke_icon{background-position:0 -224px;}.cke_skin_v2 .cke_rtl .cke_button_redo .cke_icon{background-position:0 -208px;}.cke_skin_v2 .cke_button_templates .cke_icon{background-position:0 -80px;}.cke_skin_v2 .cke_button_numberedlist .cke_icon{background-position:0 -400px;}.cke_skin_v2 .cke_button_bulletedlist .cke_icon{background-position:0 -416px;}.cke_skin_v2 .cke_mixed_dir_content .cke_button_numberedlist .cke_icon{background-position:0 -1217px;}.cke_skin_v2 .cke_mixed_dir_content .cke_button_bulletedlist .cke_icon{background-position:0 -1233px;}.cke_skin_v2 .cke_button_outdent .cke_icon{background-position:0 -432px;}.cke_skin_v2 .cke_button_indent .cke_icon{background-position:0 -448px;}.cke_skin_v2 .cke_mixed_dir_content .cke_button_indent .cke_icon{background-position:0 -1265px;}.cke_skin_v2 .cke_mixed_dir_content .cke_button_outdent .cke_icon{background-position:0 -1249px;}.cke_skin_v2 .cke_button_justifyleft .cke_icon{background-position:0 -464px;}.cke_skin_v2 .cke_button_justifycenter .cke_icon{background-position:0 -480px;}.cke_skin_v2 .cke_button_justifyright .cke_icon{background-position:0 -496px;}.cke_skin_v2 .cke_button_justifyblock .cke_icon{background-position:0 -512px;}
+.cke_skin_v2 .cke_button_blockquote .cke_icon{background-position:0 -1152px;}.cke_skin_v2 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_v2 .cke_button_pastefromword .cke_icon{background-position:0 -160px;}.cke_skin_v2 .cke_button_save .cke_icon{background-position:0 -32px;}.cke_skin_v2 .cke_button_about .cke_icon{background-position:0 -736px;}.cke_skin_v2 .cke_button_maximize .cke_icon{background-position:0 -1040px;}.cke_skin_v2 .cke_button_creatediv .cke_icon{background-position:0 -1168px;}.cke_skin_v2 .cke_button_editdiv .cke_icon{background-position:0 -1184px;}.cke_skin_v2 .cke_button_removediv .cke_icon{background-position:0 -1200px;}.cke_skin_v2 .cke_button_bidirtl .cke_icon{background-position:0 -1072px;}.cke_skin_v2 .cke_button_bidiltr .cke_icon{background-position:0 -1056px;}.cke_skin_v2 .cke_button_iframe .cke_icon{background-position:0 -1279px;}.cke_skin_v2 .cke_button_source .cke_label{display:inline;display:inline-block;}.cke_skin_v2 .cke_styles_panel{width:150px;height:170px;}.cke_skin_v2 .cke_format_panel{width:150px;height:170px;}.cke_skin_v2 .cke_font_panel{width:150px;height:170px;}.cke_skin_v2 .cke_fontSize_panel{height:170px;}.cke_skin_v2 .cke_fontSize .cke_text{width:20px;}.cke_skin_v2 .cke_browser_iequirks .cke_fontSize .cke_text{width:32px;}html .cke_skin_v2{visibility:inherit;}html.cke_skin_v2_container{visibility:visible;}
diff --git a/modules_v2/ckeditor/skins/v2/icons.png b/modules_v2/ckeditor/skins/v2/icons.png Binary files differnew file mode 100644 index 0000000000..4bdaef89d1 --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/icons.png diff --git a/modules_v2/ckeditor/skins/v2/icons_rtl.png b/modules_v2/ckeditor/skins/v2/icons_rtl.png Binary files differnew file mode 100644 index 0000000000..8824ce8fb5 --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/icons_rtl.png diff --git a/modules_v2/ckeditor/skins/v2/images/dialog_sides.gif b/modules_v2/ckeditor/skins/v2/images/dialog_sides.gif Binary files differnew file mode 100644 index 0000000000..8f91b4753a --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/images/dialog_sides.gif diff --git a/modules_v2/ckeditor/skins/v2/images/dialog_sides.png b/modules_v2/ckeditor/skins/v2/images/dialog_sides.png Binary files differnew file mode 100644 index 0000000000..1042a61cf9 --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/images/dialog_sides.png diff --git a/modules_v2/ckeditor/skins/v2/images/dialog_sides_rtl.png b/modules_v2/ckeditor/skins/v2/images/dialog_sides_rtl.png Binary files differnew file mode 100644 index 0000000000..d7f7b49fcc --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/images/dialog_sides_rtl.png diff --git a/modules_v2/ckeditor/skins/v2/images/mini.gif b/modules_v2/ckeditor/skins/v2/images/mini.gif Binary files differnew file mode 100644 index 0000000000..54d9107416 --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/images/mini.gif diff --git a/modules_v2/ckeditor/skins/v2/images/noimage.png b/modules_v2/ckeditor/skins/v2/images/noimage.png Binary files differnew file mode 100644 index 0000000000..159811305a --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/images/noimage.png diff --git a/modules_v2/ckeditor/skins/v2/images/sprites.png b/modules_v2/ckeditor/skins/v2/images/sprites.png Binary files differnew file mode 100644 index 0000000000..55e2b1a2d0 --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/images/sprites.png diff --git a/modules_v2/ckeditor/skins/v2/images/sprites_ie6.png b/modules_v2/ckeditor/skins/v2/images/sprites_ie6.png Binary files differnew file mode 100644 index 0000000000..4389b65b8a --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/images/sprites_ie6.png diff --git a/modules_v2/ckeditor/skins/v2/images/toolbar_start.gif b/modules_v2/ckeditor/skins/v2/images/toolbar_start.gif Binary files differnew file mode 100644 index 0000000000..1774246c2e --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/images/toolbar_start.gif diff --git a/modules_v2/ckeditor/skins/v2/skin.js b/modules_v2/ckeditor/skins/v2/skin.js new file mode 100644 index 0000000000..d9d7dd942d --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/skin.js @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.skins.add('v2',(function(){return{editor:{css:['editor.css']},dialog:{css:['dialog.css']},templates:{css:['templates.css']},margins:[0,14,18,14]};})());(function(){CKEDITOR.dialog?a():CKEDITOR.on('dialogPluginReady',a);function a(){CKEDITOR.dialog.on('resize',function(b){var c=b.data,d=c.width,e=c.height,f=c.dialog,g=f.parts.contents;if(c.skin!='v2')return;g.setStyles({width:d+'px',height:e+'px'});if(!CKEDITOR.env.ie)return;setTimeout(function(){var h=f.parts.dialog.getChild([0,0,0]),i=h.getChild(0),j=h.getChild(2);j.setStyle('width',i.$.offsetWidth+'px');j=h.getChild(7);j.setStyle('width',i.$.offsetWidth-28+'px');j=h.getChild(4);j.setStyle('height',e+i.getChild(0).$.offsetHeight+'px');j=h.getChild(5);j.setStyle('height',e+i.getChild(0).$.offsetHeight+'px');},100);});};})();
diff --git a/modules_v2/ckeditor/skins/v2/templates.css b/modules_v2/ckeditor/skins/v2/templates.css new file mode 100644 index 0000000000..2c896bee34 --- /dev/null +++ b/modules_v2/ckeditor/skins/v2/templates.css @@ -0,0 +1,6 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+.cke_skin_v2 .cke_tpl_list{border:#dcdcdc 2px solid;background-color:#fff;overflow:auto;width:100%;height:220px;}.cke_skin_v2 .cke_tpl_item{margin:5px;padding:7px;border:#eee 1px solid;*width:88%;}.cke_skin_v2 .cke_tpl_preview{border-collapse:separate;text-indent:0;width:100%;}.cke_skin_v2 .cke_tpl_preview td{padding:2px;vertical-align:middle;}.cke_skin_v2 .cke_tpl_preview .cke_tpl_preview_img{width:100px;}.cke_skin_v2 .cke_tpl_preview span{white-space:normal;}.cke_skin_v2 .cke_tpl_title{font-weight:bold;}.cke_skin_v2 .cke_tpl_list a:active .cke_tpl_item,.cke_skin_v2 .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_v2 .cke_tpl_list a:focus .cke_tpl_item{border:#f93 1px solid!important;background-color:#fffacd!important;}.cke_skin_v2 .cke_tpl_list a:active *,.cke_skin_v2 .cke_tpl_list a:hover *,.cke_skin_v2 .cke_tpl_list a:focus *{cursor:pointer;}.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:active,.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:hover,.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:focus{background-position:0 0;}.cke_skin_v2 .cke_tpl_list a:active .cke_tpl_item,.cke_skin_v2 .cke_tpl_list a:hover .cke_tpl_item,.cke_skin_v2 .cke_tpl_list a:focus .cke_tpl_item{border-width:3px;}.cke_skin_v2 .cke_tpl_empty,.cke_tpl_loading{text-align:center;padding:5px;}
diff --git a/modules_v2/ckeditor/themes/default/theme.js b/modules_v2/ckeditor/themes/default/theme.js new file mode 100644 index 0000000000..a70ebb01a6 --- /dev/null +++ b/modules_v2/ckeditor/themes/default/theme.js @@ -0,0 +1,8 @@ +/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.themes.add('default',(function(){function a(b,c){var d,e;e=b.config.sharedSpaces;e=e&&e[c];e=e&&CKEDITOR.document.getById(e);if(e){var f='<span class="cke_shared"><span class="'+b.skinClass+' '+b.id+' cke_editor_'+b.name+'">'+'<span class="'+CKEDITOR.env.cssClass+'">'+'<span class="cke_wrapper cke_'+b.lang.dir+'">'+'<span class="cke_editor">'+'<div class="cke_'+c+'">'+'</div></span></span></span></span></span>',g=e.append(CKEDITOR.dom.element.createFromHtml(f,e.getDocument()));if(e.getCustomData('cke_hasshared'))g.hide();else e.setCustomData('cke_hasshared',1);d=g.getChild([0,0,0,0]);!b.sharedSpaces&&(b.sharedSpaces={});b.sharedSpaces[c]=d;b.on('focus',function(){for(var h=0,i,j=e.getChildren();i=j.getItem(h);h++){if(i.type==CKEDITOR.NODE_ELEMENT&&!i.equals(g)&&i.hasClass('cke_shared'))i.hide();}g.show();});b.on('destroy',function(){g.remove();});}return d;};return{build:function(b,c){var d=b.name,e=b.element,f=b.elementMode;if(!e||f==CKEDITOR.ELEMENT_MODE_NONE)return;if(f==CKEDITOR.ELEMENT_MODE_REPLACE)e.hide();var g=b.fire('themeSpace',{space:'top',html:''}).html,h=b.fire('themeSpace',{space:'contents',html:''}).html,i=b.fireOnce('themeSpace',{space:'bottom',html:''}).html,j=h&&b.config.height,k=b.config.tabIndex||b.element.getAttribute('tabindex')||0;if(!h)j='auto';else if(!isNaN(j))j+='px';var l='',m=b.config.width;if(m){if(!isNaN(m))m+='px';l+='width: '+m+';';}var n=g&&a(b,'top'),o=a(b,'bottom');n&&(n.setHtml(g),g='');o&&(o.setHtml(i),i='');var p=CKEDITOR.dom.element.createFromHtml(['<span id="cke_',d,'" class="',b.skinClass,' ',b.id,' cke_editor_',d,'" dir="',b.lang.dir,'" title="',CKEDITOR.env.gecko?' ':'','" lang="',b.langCode,'"'+(CKEDITOR.env.webkit?' tabindex="'+k+'"':'')+' role="application"'+' aria-labelledby="cke_',d,'_arialbl"'+(l?' style="'+l+'"':'')+'>'+'<span id="cke_',d,'_arialbl" class="cke_voice_label">'+b.lang.editor+'</span>'+'<span class="',CKEDITOR.env.cssClass,'" role="presentation"><span class="cke_wrapper cke_',b.lang.dir,'" role="presentation"><table class="cke_editor" border="0" cellspacing="0" cellpadding="0" role="presentation"><tbody><tr',g?'':' style="display:none"',' role="presentation"><td id="cke_top_',d,'" class="cke_top" role="presentation">',g,'</td></tr><tr',h?'':' style="display:none"',' role="presentation"><td id="cke_contents_',d,'" class="cke_contents" style="height:',j,'" role="presentation">',h,'</td></tr><tr',i?'':' style="display:none"',' role="presentation"><td id="cke_bottom_',d,'" class="cke_bottom" role="presentation">',i,'</td></tr></tbody></table><style>.',b.skinClass,'{visibility:hidden;}</style></span></span></span>'].join(''));
+p.getChild([1,0,0,0,0]).unselectable();p.getChild([1,0,0,0,2]).unselectable();if(f==CKEDITOR.ELEMENT_MODE_REPLACE)p.insertAfter(e);else e.append(p);b.container=p;p.disableContextMenu();b.fireOnce('themeLoaded');b.fireOnce('uiReady');},buildDialog:function(b){var c=CKEDITOR.tools.getNextNumber(),d=CKEDITOR.dom.element.createFromHtml(['<div class="',b.id,'_dialog cke_editor_',b.name.replace('.','\\.'),'_dialog cke_skin_',b.skinName,'" dir="',b.lang.dir,'" lang="',b.langCode,'" role="dialog" aria-labelledby="%title#"><table class="cke_dialog',' '+CKEDITOR.env.cssClass,' cke_',b.lang.dir,'" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="%body" role="presentation"><div id="%title#" class="%title" role="presentation"></div><a id="%close_button#" class="%close_button" href="javascript:void(0)" title="'+b.lang.common.close+'" role="button"><span class="cke_label">X</span></a>'+'<div id="%tabs#" class="%tabs" role="tablist"></div>'+'<table class="%contents" role="presentation">'+'<tr>'+'<td id="%contents#" class="%contents" role="presentation"></td>'+'</tr>'+'<tr>'+'<td id="%footer#" class="%footer" role="presentation"></td>'+'</tr>'+'</table>'+'</div>'+'<div id="%tl#" class="%tl"></div>'+'<div id="%tc#" class="%tc"></div>'+'<div id="%tr#" class="%tr"></div>'+'<div id="%ml#" class="%ml"></div>'+'<div id="%mr#" class="%mr"></div>'+'<div id="%bl#" class="%bl"></div>'+'<div id="%bc#" class="%bc"></div>'+'<div id="%br#" class="%br"></div>'+'</td></tr>'+'</table>',CKEDITOR.env.ie?'':'<style>.cke_dialog{visibility:hidden;}</style>','</div>'].join('').replace(/#/g,'_'+c).replace(/%/g,'cke_dialog_')),e=d.getChild([0,0,0,0,0]),f=e.getChild(0),g=e.getChild(1);f.unselectable();g.unselectable();return{element:d,parts:{dialog:d.getChild(0),title:f,close:g,tabs:e.getChild(2),contents:e.getChild([3,0,0,0]),footer:e.getChild([3,0,1,0])}};},destroy:function(b){var c=b.container;c.clearCustomData();b.element.clearCustomData();if(c)c.remove();if(b.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE)b.element.show();delete b.element;}};})());CKEDITOR.editor.prototype.getThemeSpace=function(a){var b='cke_'+a,c=this._[b]||(this._[b]=CKEDITOR.document.getById(b+'_'+this.name));return c;};CKEDITOR.editor.prototype.resize=function(a,b,c,d){var e=this.container,f=CKEDITOR.document.getById('cke_contents_'+this.name),g=d?e.getChild(1):e;CKEDITOR.env.webkit&&g.setStyle('display','none');g.setSize('width',a,true);if(CKEDITOR.env.webkit){g.$.offsetWidth;g.setStyle('display','');
+}var h=c?0:(g.$.offsetHeight||0)-(f.$.clientHeight||0);f.setStyle('height',Math.max(b-h,0)+'px');this.fire('resize');};CKEDITOR.editor.prototype.getResizable=function(){return this.container.getChild(1);};
diff --git a/modules_v2/clippings/clippings_ctrl.php b/modules_v2/clippings/clippings_ctrl.php new file mode 100644 index 0000000000..f467bbb1a5 --- /dev/null +++ b/modules_v2/clippings/clippings_ctrl.php @@ -0,0 +1,504 @@ +<?php +/** +* Controller for the Clippings Page +* +* webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView +* Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* @package webtrees +* @subpackage Charts +* @version $Id$ +*/ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +define('WT_CLIPPINGS_CTRL', ''); + +require_once WT_ROOT.'includes/functions/functions.php'; +require_once WT_ROOT.'library/pclzip.lib.php'; + +function same_group($a, $b) { + if ($a['type'] == $b['type']) + return strnatcasecmp($a['id'], $b['id']); + if ($a['type'] == 'source') + return 1; + if ($a['type'] == 'indi') + return -1; + if ($b['type'] == 'source') + return -1; + if ($b['type'] == 'indi') + return 1; + return 0; +} + +/** +* Main controller class for the Clippings page. +*/ +class WT_Controller_Clippings extends WT_Controller_Base { + + var $download_data; + var $media_list = array(); + var $addCount = 0; + var $privCount = 0; + var $type=""; + var $id=""; + var $IncludeMedia; + var $conv_path; + var $conv_slashes; + var $privatize_export; + var $Zip; + var $level1; // number of levels of ancestors + var $level2; + var $level3; // number of levels of descendents + + /** + * @param string $thing the id of the person + */ + function __construct() { + parent::__construct(); + } + //----------------beginning of function definitions for WT_Controller_Clippings + function init() { + global $SCRIPT_NAME, $MEDIA_DIRECTORY, $MEDIA_FIREWALL_ROOTDIR, $GEDCOM, $cart; + + if (!isset($_SESSION['exportConvPath'])) $_SESSION['exportConvPath'] = $MEDIA_DIRECTORY; + if (!isset($_SESSION['exportConvSlashes'])) $_SESSION['exportConvSlashes'] = 'forward'; + + $this->action = safe_GET("action"); + $this->id = safe_GET('id'); + $remove = safe_GET('remove',"","no"); + $convert = safe_GET('convert',"","no"); + $this->Zip = safe_GET('Zip'); + $this->IncludeMedia = safe_GET('IncludeMedia'); + $this->conv_path = safe_GET('conv_path', WT_REGEX_NOSCRIPT, $_SESSION['exportConvPath']); + $this->conv_slashes = safe_GET('conv_slashes', array('forward', 'backward'), $_SESSION['exportConvSlashes']); + $this->privatize_export = safe_GET('privatize_export', array('none', 'visitor', 'user', 'gedadmin')); + $this->level1 = safe_GET('level1', WT_REGEX_INTEGER, PHP_INT_MAX); + $this->level2 = safe_GET('level2', WT_REGEX_INTEGER, PHP_INT_MAX); + $this->level3 = safe_GET('level3', WT_REGEX_INTEGER, PHP_INT_MAX); + $others = safe_GET('others'); + $item = safe_GET('item'); + if (!isset($cart)) $cart = $_SESSION['cart']; + $this->type = safe_GET('type'); + + $this->conv_path = stripLRMRLM($this->conv_path); + $_SESSION['exportConvPath'] = $this->conv_path; // remember this for the next Download + $_SESSION['exportConvSlashes'] = $this->conv_slashes; + + if ($this->action == 'add') { + if (empty($this->type) && !empty($this->id)) { + $this->type=""; + $obj = WT_GedcomRecord::getInstance($this->id); + if (is_null($obj)) { + $this->id=""; + $this->action=""; + } + else $this->type = strtolower($obj->getType()); + } + else if (empty($this->id)) $this->action=""; + if (!empty($this->id) && $this->type != 'fam' && $this->type != 'indi' && $this->type != 'sour') + $this->action = 'add1'; + } + + if ($this->action == 'add1') { + $this->add_clipping(WT_GedcomRecord::getInstance($this->id)); + if ($this->type == 'sour') { + if ($others == 'linked') { + foreach (fetch_linked_indi($this->id, 'SOUR', WT_GED_ID) as $indi) { + $this->add_clipping($indi); + } + foreach (fetch_linked_fam($this->id, 'SOUR', WT_GED_ID) as $fam) { + $this->add_clipping($fam); + } + } + } + if ($this->type == 'fam') { + if ($others == 'parents') { + $this->add_clipping($obj->getHusband()); + $this->add_clipping($obj->getWife()); + } else + if ($others == "members") { + $this->add_family_members(WT_Family::getInstance($this->id)); + } else + if ($others == "descendants") { + $this->add_family_descendancy(WT_Family::getInstance($this->id)); + } + } else + if ($this->type == 'indi') { + if ($others == 'parents') { + foreach (WT_Person::getInstance($this->id)->getChildFamilies() as $family) { + $this->add_family_members($family); + } + } else + if ($others == 'ancestors') { + $this->add_ancestors_to_cart(WT_Person::getInstance($this->id), $this->level1); + } else + if ($others == 'ancestorsfamilies') { + $this->add_ancestors_to_cart_families(WT_Person::getInstance($this->id), $this->level2); + } else + if ($others == 'members') { + foreach (WT_Person::getInstance($this->id)->getSpouseFamilies() as $family) { + $this->add_family_members($family); + } + } else + if ($others == 'descendants') { + foreach (WT_Person::getInstance($this->id)->getSpouseFamilies() as $family) { + $this->add_clipping($family); + $this->add_family_descendancy($family, $this->level3); + } + } + } + } else + if ($this->action == 'remove') { + $ct = count($cart); + for ($i = $item +1; $i < $ct; $i++) { + $cart[$i -1] = $cart[$i]; + } + unset ($cart[$ct -1]); + } else + if ($this->action == 'empty') { + $cart = array (); + $_SESSION["cart"] = $cart; + } else + if ($this->action == 'download') { + usort($cart, "same_group"); + $media = array (); + $mediacount = 0; + $ct = count($cart); + $filetext = "0 HEAD\n1 SOUR ".WT_WEBTREES."\n2 NAME ".WT_WEBTREES."\n2 VERS ".WT_VERSION_TEXT."\n1 DEST DISKETTE\n1 DATE " . date("j M Y") . "\n2 TIME " . date("H:i:s") . "\n"; + $filetext .= "1 GEDC\n2 VERS 5.5\n2 FORM LINEAGE-LINKED\n1 CHAR UTF-8\n"; + $head = find_gedcom_record("HEAD", WT_GED_ID); + $placeform = trim(get_sub_record(1, "1 PLAC", $head)); + if (!empty ($placeform)) + $filetext .= $placeform . "\n"; + else + $filetext .= "1 PLAC\n2 FORM " . "City, County, State/Province, Country" . "\n"; + if ($convert == "yes") { + $filetext = str_replace("UTF-8", "ANSI", $filetext); + $filetext = utf8_decode($filetext); + } + + $tempUserID = '#ExPoRt#'; + if ($this->privatize_export!='none') { + // Create a temporary userid + $export_user_id = createTempUser($tempUserID, $this->privatize_export, $GEDCOM); // Create a temporary userid + + // Temporarily become this user + $_SESSION["org_user"]=$_SESSION["wt_user"]; + $_SESSION["wt_user"]=$export_user_id; + } + + for ($i = 0; $i < $ct; $i++) { + $clipping = $cart[$i]; + if ($clipping['gedcom'] == $GEDCOM) { + $record = find_gedcom_record($clipping['id'], WT_GED_ID); + $savedRecord = $record; // Save this for the "does this file exist" check + if ($clipping['type']=='obje') $record = convert_media_path($record, $this->conv_path, $this->conv_slashes); + $record = privatize_gedcom($record); + $record = remove_custom_tags($record, $remove); + if ($convert == "yes") + $record = utf8_decode($record); + switch ($clipping['type']) { + case 'indi': + $ft = preg_match_all("/1 FAMC @(.*)@/", $record, $match, PREG_SET_ORDER); + for ($k = 0; $k < $ft; $k++) { + if (!self::id_in_cart($match[$k][1])) { + $record = preg_replace("/1 FAMC @" . $match[$k][1] . "@.*/", "", $record); + } + } + $ft = preg_match_all("/1 FAMS @(.*)@/", $record, $match, PREG_SET_ORDER); + for ($k = 0; $k < $ft; $k++) { + if (!self::id_in_cart($match[$k][1])) { + $record = preg_replace("/1 FAMS @" . $match[$k][1] . "@.*/", "", $record); + } + } + $filetext .= trim($record) . "\n"; + $filetext .= "1 SOUR @WEBTREES@\n"; + $filetext .= "2 PAGE ".WT_SERVER_NAME.WT_SCRIPT_PATH."individual.php?pid={$clipping['id']}&ged=" . rawurlencode($clipping['gedcom']) . "\n"; + break; + + case 'fam': + $ft = preg_match_all("/1 CHIL @(.*)@/", $record, $match, PREG_SET_ORDER); + for ($k = 0; $k < $ft; $k++) { + if (!self::id_in_cart($match[$k][1])) { + /* if the child is not in the list delete the record of it */ + $record = preg_replace("/1 CHIL @" . $match[$k][1] . "@.*/", "", $record); + } + } + + $ft = preg_match_all("/1 HUSB @(.*)@/", $record, $match, PREG_SET_ORDER); + for ($k = 0; $k < $ft; $k++) { + if (!self::id_in_cart($match[$k][1])) { + /* if the husband is not in the list delete the record of him */ + $record = preg_replace("/1 HUSB @" . $match[$k][1] . "@.*/", "", $record); + } + } + + $ft = preg_match_all("/1 WIFE @(.*)@/", $record, $match, PREG_SET_ORDER); + for ($k = 0; $k < $ft; $k++) { + if (!self::id_in_cart($match[$k][1])) { + /* if the wife is not in the list delete the record of her */ + $record = preg_replace("/1 WIFE @" . $match[$k][1] . "@.*/", "", $record); + } + } + + $filetext .= trim($record) . "\n"; + $filetext .= "1 SOUR @WEBTREES@\n"; + $filetext .= "2 PAGE " . WT_SERVER_NAME.WT_SCRIPT_PATH . "family.php?famid={$clipping['id']}&ged=" . rawurlencode($clipping['gedcom']) . "\n"; + break; + + case 'source': + $filetext .= trim($record) . "\n"; + $filetext .= "1 NOTE " . WT_SERVER_NAME.WT_SCRIPT_PATH . "source.php?sid={$clipping['id']}&ged=" . rawurlencode($clipping['gedcom']) . "\n"; + break; + + default: + $ft = preg_match_all("/\n\d FILE (.+)/", $savedRecord, $match, PREG_SET_ORDER); + for ($k = 0; $k < $ft; $k++) { + $filename = $MEDIA_DIRECTORY.extract_filename($match[$k][1]); + if (file_exists($filename)) { + $media[$mediacount] = array (PCLZIP_ATT_FILE_NAME => $filename); + $mediacount++; + } else { + $filename = $MEDIA_FIREWALL_ROOTDIR.$MEDIA_DIRECTORY.extract_filename($match[$k][1]); + if (file_exists($filename)) { + // Don't include firewall directory in zipfile. It may start ../ + $media[$mediacount] = array ( + PCLZIP_ATT_FILE_NAME => $filename, + PCLZIP_ATT_FILE_NEW_FULL_NAME => $MEDIA_DIRECTORY.extract_filename($match[$k][1]) + ); + $mediacount++; + } + } + } + $filetext .= trim($record) . "\n"; + break; + } + } + } + + if ($this->privatize_export!='none') { + $_SESSION["wt_user"]=$_SESSION["org_user"]; + delete_user($export_user_id); + AddToLog("deleted dummy user -> {$tempUserID} <-", 'auth'); + } + + if ($this->IncludeMedia == "yes") + { + $this->media_list = $media; + } + $filetext .= "0 @WEBTREES@ SOUR\n1 TITL ".WT_SERVER_NAME.WT_SCRIPT_PATH."\n"; + if ($user_id=get_gedcom_setting(WT_GED_ID, 'CONTACT_EMAIL')) { + $filetext .= "1 AUTH " . getUserFullName($user_id) . "\n"; + } + $filetext .= "0 TRLR\n"; + //-- make sure the preferred line endings are used + $filetext = preg_replace("/[\r\n]+/", WT_EOL, $filetext); + $this->download_data = $filetext; + $this->download_clipping(); + } + } + + public static function id_in_cart($id) { + global $cart, $GEDCOM; + $ct = count($cart); + for ($i = 0; $i < $ct; $i++) { + $temp = $cart[$i]; + if ($temp['id'] == $id && $temp['gedcom'] == $GEDCOM) { + return true; + } + } + return false; + } + + /** + * Loads everything in the clippings cart into a zip file. + */ + function zip_cart() + { + $INDEX_DIRECTORY=get_site_setting('INDEX_DIRECTORY'); + + $tempFileName = 'clipping'.rand().'.ged'; + $fp = fopen($INDEX_DIRECTORY.$tempFileName, "wb"); + if ($fp) + { + flock($fp,LOCK_EX); + fwrite($fp,$this->download_data); + flock($fp,LOCK_UN); + fclose($fp); + $zipName = "clippings".rand(0, 1500).".zip"; + $fname = $INDEX_DIRECTORY.$zipName; + $comment = "Created by ".WT_WEBTREES." ".WT_VERSION_TEXT." on ".date("d M Y")."."; + $archive = new PclZip($fname); + // add the ged file to the root of the zip file (strip off the index_directory) + $this->media_list[]= array (PCLZIP_ATT_FILE_NAME => $INDEX_DIRECTORY.$tempFileName, PCLZIP_ATT_FILE_NEW_FULL_NAME => $tempFileName); + $v_list = $archive->create($this->media_list, PCLZIP_OPT_COMMENT, $comment); + if ($v_list == 0) echo "Error : ".$archive->errorInfo(true)."</td></tr>"; + else { + $openedFile = fopen($fname,"rb"); + $this->download_data = fread($openedFile,filesize($fname)); + fclose($openedFile); + unlink($fname); + } + unlink($INDEX_DIRECTORY.$tempFileName); + } + else + { + echo WT_I18N::translate('Cannot create')." ".$INDEX_DIRECTORY."$tempFileName ".WT_I18N::translate('Check access rights on this directory.')."<br /><br />"; + } + } + /** + * Brings up the download dialog box and allows the user to download the file + * based on the options he or she selected + */ + function download_clipping() { + if ($this->IncludeMedia == "yes" || $this->Zip == "yes") { + header('Content-Type: application/zip'); + header('Content-Disposition: attachment; filename="clipping.zip"'); + $this->zip_cart(); + } else { + header('Content-Type: text/plain'); + header('Content-Disposition: attachment; filename="clipping.ged"'); + } + + header("Content-length: ".strlen($this->download_data)); + print_r ($this->download_data); + exit; + } + /** + * Inserts a clipping into the clipping cart + * + * @param + */ + function add_clipping($clipping) { + global $cart, $MULTI_MEDIA, $GEDCOM; + + if (!$clipping || !$clipping->canDisplayName()) { + return; + } + + $clipping=array( + 'type' =>strtolower($clipping->getType()), + 'id' =>$clipping->getXref(), + 'gedcom'=>get_id_from_gedcom($clipping->getGedId()) + ); + + if (!self::id_in_cart($clipping['id'])) { + $clipping['gedcom'] = $GEDCOM; + $ged_id=get_id_from_gedcom($GEDCOM); + $gedrec=find_gedcom_record($clipping['id'], $ged_id); + if (canDisplayRecord($ged_id, $gedrec) || showLivingNameById($clipping['id'])) { + $cart[] = $clipping; + $this->addCount++; + } else { + $this->privCount++; + return false; + } + //-- look in the gedcom record for any linked SOUR, NOTE, or OBJE and also add them to the + //- clippings cart + $gedrec = find_gedcom_record($clipping['id'], WT_GED_ID); + $st = preg_match_all("/\d SOUR @(.*)@/", $gedrec, $match, PREG_SET_ORDER); + for ($i = 0; $i < $st; $i++) { + // add SOUR + $this->add_clipping(WT_Source::getInstance($match[$i][1])); + // add REPO + $sourec = find_gedcom_record($match[$i][1], WT_GED_ID); + $rt = preg_match_all("/\d REPO @(.*)@/", $sourec, $rmatch, PREG_SET_ORDER); + for ($j = 0; $j < $rt; $j++) { + $this->add_clipping(WT_Repository::getInstance($rmatch[$j][1])); + } + } + $nt = preg_match_all("/\d NOTE @(.*)@/", $gedrec, $match, PREG_SET_ORDER); + for ($i = 0; $i < $nt; $i++) { + $this->add_clipping(WT_Note::getInstance($match[$i][1])); + } + if ($MULTI_MEDIA) { + $nt = preg_match_all("/\d OBJE @(.*)@/", $gedrec, $match, PREG_SET_ORDER); + for ($i = 0; $i < $nt; $i++) { + $this->add_clipping(WT_Media::getInstance($match[$i][1])); + } + } + } + return true; + } + + // --------------------------------- Recursive function to traverse the tree + function add_family_descendancy($family, $level) { + if (!$family) { + return; + } + $this->add_clipping($family->getHusband()); + $this->add_clipping($family->getWife()); + foreach ($family->getChildren() as $child) { + $this->add_clipping($child); + foreach ($child->getSpouseFamilies() as $child_family) { + $this->add_clipping($child_family); + if ($level>0) { + $this->add_family_descendancy($child_family, $level-1); // recurse on the childs family + } + } + } + } + + // Add a family, and all its members + function add_family_members($family) { + if (!$family) { + return; + } + $this->add_clipping($family); + $this->add_clipping($family->getHusband()); + $this->add_clipping($family->getWife()); + foreach ($family->getChildren() as $child) { + $this->add_clipping($child); + } + } + + //-- recursively adds direct-line ancestors to cart + function add_ancestors_to_cart($person, $level) { + if (!$person) { + return; + } + $this->add_clipping($person); + if ($level>0) { + foreach ($person->getChildFamilies() as $family) { + $this->add_clipping($family); + $this->add_ancestors_to_cart($family->getHusband(), $level-1); + $this->add_ancestors_to_cart($family->getWife(), $level-1); + } + } + } + + //-- recursively adds direct-line ancestors and their families to the cart + function add_ancestors_to_cart_families($person, $level) { + if (!$person) { + return; + } + if ($level>0) { + foreach ($person->getChildFamilies() as $family) { + $this->add_family_members($family); + $this->add_ancestors_to_cart_families($family->getHusband(), $level-1); + $this->add_ancestors_to_cart_families($family->getWife(), $level-1); + } + } + } +} diff --git a/modules_v2/clippings/help_text.php b/modules_v2/clippings/help_text.php new file mode 100644 index 0000000000..3f3bbb64a1 --- /dev/null +++ b/modules_v2/clippings/help_text.php @@ -0,0 +1,48 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'add_by_id': + $title=WT_I18N::translate('Add by ID'); + $text=WT_I18N::translate('This input box lets you enter an individual\'s ID number so he can be added to the Clippings Cart. Once added you\'ll be offered options to link that individual\'s relations to your Clippings Cart.<br /><br />If you do not know an individual\'s ID number, you can perform a search by name by pressing the Person icon next to the Add button.'); + break; + +case 'clip_cart': + $title=WT_I18N::translate('Clippings cart'); + $text=WT_I18N::translate('This box shows the contents of your Clippings Cart. The <i>Types</i> column indicates the type of each entry, which can be Individual (INDI), Family (FAM), Source (SOUR), Repository (REPO), Note (NOTE), and Media (OBJE); each is represented by its own icon. The <i>ID</i> column shows the ID number for each item of that particular type. The <i>Name / Description</i> column gives either the name of the family or individual, or a description of the item. The Remove button will remove that record from the Clippings Cart. <b>Confirmation to remove is NOT asked for.</b>'); + break; + +case 'empty_cart': + $title=WT_I18N::translate('Empty Cart'); + $text=WT_I18N::translate('When you click this link your Clippings Cart will be totally emptied.<br /><br />If you don\'t want to remove all persons, families, etc. from the Clippings Cart, you can remove items individually by clicking the <b>Remove</b> link in the Name boxes. There is <u>no</u> confirmation dialog when you click either of these links; the requested deletion takes place immediately.'); + break; +} diff --git a/modules_v2/clippings/index.php b/modules_v2/clippings/index.php new file mode 100644 index 0000000000..c4e10f8843 --- /dev/null +++ b/modules_v2/clippings/index.php @@ -0,0 +1,311 @@ +<?php +// Family Tree Clippings Cart +// +// Uses the $_SESSION["cart"] to store the ids of clippings to download +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +global $ENABLE_AUTOCOMPLETE, $cart, $MAX_PEDIGREE_GENERATIONS, $TEXT_DIRECTION, $GEDCOM, $WT_IMAGES; + +$controller = new WT_Controller_Clippings(); +$controller->init(); + +// -- print html header information +print_header(WT_I18N::translate('Clippings cart')); + +if ($ENABLE_AUTOCOMPLETE) require WT_ROOT.'js/autocomplete.js.htm'; + +echo WT_JS_START; +echo 'function radAncestors(elementid) {var radFamilies=document.getElementById(elementid);radFamilies.checked=true;}'; +echo WT_JS_END; + +if (count($cart)==0) { ?> +<h2><?php echo WT_I18N::translate('Family Tree Clippings Cart'); ?></h2> +<?php } + +if ($controller->action=='add') { + $person = WT_GedcomRecord::getInstance($controller->id); + echo "<b>".$person->getFullName()."</b>"; + if ($controller->type=='fam') { ?> + <form action="module.php" method="get"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + <table> + <tr><td class="topbottombar"><?php echo WT_I18N::translate('Which other links from this family would you like to add?'); ?> + <input type="hidden" name="id" value="<?php echo $controller->id; ?>" /> + <input type="hidden" name="type" value="<?php echo $controller->type; ?>" /> + <input type="hidden" name="action" value="add1" /></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" checked value="none" /><?php echo WT_I18N::translate('Add just this family record.'); ?></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="parents" /><?php echo WT_I18N::translate('Add parents\' records together with this family record.'); ?></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="members" /><?php echo WT_I18N::translate('Add parents\' and children\'s records together with this family record.'); ?></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="descendants" /><?php echo WT_I18N::translate('Add parents\' and all descendants\' records together with this family record.'); ?></td></tr> + <tr><td class="topbottombar"><input type="submit" value="<?php echo WT_I18N::translate('Continue Adding'); ?>" /></td></tr> + + </table> + </form> + <?php } + else if ($controller->type=='indi') { ?> + <form action="module.php" method="get"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + <table> + <tr><td class="topbottombar"><?php echo WT_I18N::translate('Which links from this person would you also like to add?'); ?> + <input type="hidden" name="id" value="<?php echo $controller->id; ?>" /> + <input type="hidden" name="type" value="<?php echo $controller->type; ?>" /> + <input type="hidden" name="action" value="add1" /></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" checked value="none" /><?php echo WT_I18N::translate('Add just this person.'); ?></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="parents" /><?php echo WT_I18N::translate('Add this person, his parents, and siblings.'); ?></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="ancestors" id="ancestors" /><?php echo WT_I18N::translate('Add this person and his direct line ancestors.'); ?><br /> + <?php echo WT_I18N::translate('Number of generations:'); ?> <input type="text" size="5" name="level1" value="<?php echo $MAX_PEDIGREE_GENERATIONS; ?>" onfocus="radAncestors('ancestors');"/></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="ancestorsfamilies" id="ancestorsfamilies" /><?php echo WT_I18N::translate('Add this person, his direct line ancestors, and their families.'); ?><br > + <?php echo WT_I18N::translate('Number of generations:'); ?> <input type="text" size="5" name="level2" value="<?php echo $MAX_PEDIGREE_GENERATIONS; ?>" onfocus="radAncestors('ancestorsfamilies');" /></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="members" /><?php echo WT_I18N::translate('Add this person, his spouse, and children.'); ?></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="descendants" id="descendants" /><?php echo WT_I18N::translate('Add this person, his spouse, and all descendants.'); ?><br > + <?php echo WT_I18N::translate('Number of generations:'); ?> <input type="text" size="5" name="level3" value="<?php echo $MAX_PEDIGREE_GENERATIONS; ?>" onfocus="radAncestors('descendants');" /></td></tr> + <tr><td class="topbottombar"><input type="submit" value="<?php echo WT_I18N::translate('Continue Adding'); ?>" /> + </table> + </form> + <?php } else if ($controller->type=='sour') { ?> + <form action="module.php" method="get"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + <table> + <tr><td class="topbottombar"><?php echo WT_I18N::translate('Which records linked to this source should be added?'); ?> + <input type="hidden" name="id" value="<?php echo $controller->id; ?>" /> + <input type="hidden" name="type" value="<?php echo $controller->type; ?>" /> + <input type="hidden" name="action" value="add1" /></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" checked value="none" /><?php echo WT_I18N::translate('Add just this source.'); ?></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="linked" /><?php echo WT_I18N::translate('Add this source and families/people linked to it.'); ?></td></tr> + <tr><td class="topbottombar"><input type="submit" value="<?php echo WT_I18N::translate('Continue Adding'); ?>" /> + </table> + </form> + <?php } + } +$ct = count($cart); + +if ($controller->privCount>0) { + echo "<span class=\"error\">".WT_I18N::translate('Some items could not be added due to privacy restrictions')."</span><br /><br />"; +} + +if ($ct==0) { + + // -- new lines, added by Jans, to display helptext when cart is empty + if ($controller->action!='add') { + + echo WT_I18N::translate('The Clippings Cart allows you to take extracts ("clippings") from this family tree and bundle them up into a single file for downloading and subsequent importing into your own genealogy program. The downloadable file is recorded in GEDCOM format.<br /><ul><li>How to take clippings?<br />This is really simple. Whenever you see a clickable name (individual, family, or source) you can go to the Details page of that name. There you will see the <b>Add to Clippings Cart</b> option. When you click that link you will be offered several options to download.</li><li>How to download?<br />Once you have items in your cart, you can download them just by clicking the <b>Download Now</b> link. Follow the instructions and links.</li></ul>'); + + echo WT_JS_START; + echo 'var pastefield;'; + echo 'function paste_id(value) {pastefield.value=value;}'; + echo WT_JS_END; + ?> + <form method="get" name="addin" action="module.php"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + <table> + <tr> + <td colspan="2" class="topbottombar" style="text-align:center; "> + <?php echo WT_I18N::translate('Add Individual By ID'), help_link('add_by_id', $this->getName()); ?> + </td> + </tr> + <tr> + <td class="optionbox"> + <input type="hidden" name="action" value="add"/> + <input type="text" name="id" id="cart_item_id" size="5"/> + </td> + <td class="optionbox"> + <?php print_findindi_link('cart_item_id', ''); ?> + <?php print_findfamily_link('cart_item_id', ''); ?> + <?php print_findsource_link('cart_item_id', ''); ?> + <input type="submit" value="<?php echo WT_I18N::translate('Add'); ?>"/> + + </td> + </tr> + </table> + </form> + <?php + } + + // -- end new lines + echo "<br /><br />".WT_I18N::translate('Your Clippings Cart is empty.')."<br /><br />"; +} else { + if ($controller->action != 'download' && $controller->action != 'add') { ?> + <table><tr><td class="width33" valign="top" rowspan="3"> + <form method="get" action="module.php"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + <input type="hidden" name="action" value="download" /> + <table> + <tr><td colspan="2" class="topbottombar"><h2><?php echo WT_I18N::translate('File Information'); ?></h2></td></tr> + <tr><td class="descriptionbox width50 wrap"><?php echo WT_I18N::translate('Zip File(s)'), help_link('zip'); ?></td> + <td class="optionbox"><input type="checkbox" name="Zip" value="yes" checked="checked" /></td></tr> + + <tr><td class="descriptionbox width50 wrap"><?php echo WT_I18N::translate('Include media (automatically zips files)'), help_link('include_media'); ?></td> + <td class="optionbox"><input type="checkbox" name="IncludeMedia" value="yes" checked="checked" /></td></tr> + + <?php + // Determine the Privatize options available to this user + if (WT_USER_IS_ADMIN) { + $radioPrivatizeNone = 'checked="checked" '; + $radioPrivatizeVisitor = ''; + $radioPrivatizeUser = ''; + $radioPrivatizeGedadmin = ''; + $radioPrivatizeAdmin = ''; + } else if (WT_USER_GEDCOM_ADMIN) { + $radioPrivatizeNone = 'DISABLED '; + $radioPrivatizeVisitor = 'checked="checked" '; + $radioPrivatizeUser = ''; + $radioPrivatizeGedadmin = ''; + $radioPrivatizeAdmin = 'DISABLED '; + } else if (WT_USER_ID) { + $radioPrivatizeNone = 'DISABLED '; + $radioPrivatizeVisitor = 'checked="checked" '; + $radioPrivatizeUser = ''; + $radioPrivatizeGedadmin = 'DISABLED '; + $radioPrivatizeAdmin = 'DISABLED '; + } else { + $radioPrivatizeNone = 'DISABLED '; + $radioPrivatizeVisitor = 'checked="checked" DISABLED '; + $radioPrivatizeUser = 'DISABLED '; + $radioPrivatizeGedadmin = 'DISABLED '; + $radioPrivatizeAdmin = 'DISABLED '; + } + ?> + + <tr><td class="descriptionbox width50 wrap"><?php echo WT_I18N::translate('Apply privacy settings?'), help_link('apply_privacy'); ?></td> + <td class="list_value"> + <input type="radio" name="privatize_export" value="none" <?php echo $radioPrivatizeNone; ?>/> <?php echo WT_I18N::translate('None'); ?><br /> + <input type="radio" name="privatize_export" value="visitor" <?php echo $radioPrivatizeVisitor; ?>/> <?php echo WT_I18N::translate('Visitor'); ?><br /> + <input type="radio" name="privatize_export" value="user" <?php echo $radioPrivatizeUser; ?>/> <?php echo WT_I18N::translate('Member'); ?><br /> + <input type="radio" name="privatize_export" value="gedadmin" <?php echo $radioPrivatizeGedadmin; ?>/> <?php echo WT_I18N::translate('Manager'); ?> + </td></tr> + + <tr><td class="descriptionbox width50 wrap"><?php echo WT_I18N::translate('Convert from UTF-8 to ANSI (ISO-8859-1)'), help_link('utf8_ansi'); ?></td> + <td class="optionbox"><input type="checkbox" name="convert" value="yes" /></td></tr> + + <tr><td class="descriptionbox width50 wrap"><?php echo WT_I18N::translate('Remove custom webtrees tags? (eg. _WT_USER, _THUM)'), help_link('remove_tags'); ?></td> + <td class="optionbox"><input type="checkbox" name="remove" value="yes" checked="checked" /></td></tr> + + <tr><td class="descriptionbox width50 wrap"><?php echo WT_I18N::translate('Convert media path to'), help_link('convertPath'); ?></td> + <td class="list_value"><input type="text" name="conv_path" size="30" value="<?php echo getLRM(), $controller->conv_path, getLRM(); ?>" /></td></tr> + + <tr><td class="descriptionbox width50 wrap"><?php echo WT_I18N::translate('Convert media folder separators to'), help_link('convertSlashes'); ?></td> + <td class="list_value"> + <input type="radio" name="conv_slashes" value="forward" <?php if ($controller->conv_slashes=='forward') echo "checked=\"checked\" "; ?>/> <?php echo WT_I18N::translate('Forward slashes : /'); ?><br /> + <input type="radio" name="conv_slashes" value="backward" <?php if ($controller->conv_slashes=='backward') echo "checked=\"checked\" "; ?>/> <?php echo WT_I18N::translate('Backslashes : \\'); ?> + </td></tr> + + <tr><td class="topbottombar" colspan="2"> + <input type="submit" value="<?php echo WT_I18N::translate('Download Now'); ?>" /> + </form> + </td></tr> + </table> + </td></tr> + </table> + <br /> + + <script type="text/javascript"> + <!-- + var pastefield; + function paste_id(value) + { + pastefield.value=value; + } + //--> + </script> + <form method="get" name="addin" action="module.php"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + <table> + <tr> + <td colspan="2" class="topbottombar" style="text-align:center; "> + <?php echo WT_I18N::translate('Add Individual By ID'), help_link('add_by_id', $this->getName()); ?> + </td> + </tr> + <tr> + <td class="optionbox"> + <input type="hidden" name="action" value="add"/> + <input type="text" name="id" id="cart_item_id" size="8" /> + </td> + <td class="optionbox"> + <?php print_findindi_link('cart_item_id', ''); ?> + <?php print_findfamily_link('cart_item_id', ''); ?> + <?php print_findsource_link('cart_item_id', ''); ?> + <input type="submit" value="<?php echo WT_I18N::translate('Add'); ?>"/> + + </td> + </tr> + </table> + </form> + + + <?php } ?> + <br /><a href="module.php?mod=clippings&mod_action=index&action=empty"><?php echo WT_I18N::translate('Empty Cart'); ?></a><?php echo help_link('empty_cart', $this->getName()); ?> + </td></tr> + + <tr><td class="topbottombar"><h2><?php echo WT_I18N::translate('Family Tree Clippings Cart'), help_link('clip_cart', $this->getName()); ?></h2></td></tr> + + <tr><td valign="top"> + <table id="mycart" class="sortable list_table width100"> + <tr> + <th class="list_label"><?php echo WT_I18N::translate('Type'); ?></th> + <th class="list_label"><?php echo WT_I18N::translate('ID'); ?></th> + <th class="list_label"><?php echo WT_I18N::translate('Name / Description'); ?></th> + <th class="list_label"><?php echo WT_I18N::translate('Remove'); ?></th> + </tr> +<?php + for ($i=0; $i<$ct; $i++) { + $clipping = $cart[$i]; + $tag = strtoupper(substr($clipping['type'], 0, 4)); // source => SOUR + //print_r($clipping); + //-- don't show clippings from other gedcoms + if ($clipping['gedcom']==$GEDCOM) { + if ($tag=='INDI') $icon = "indis"; + if ($tag=='FAM' ) $icon = "sfamily"; + if ($tag=='SOUR') $icon = "source"; + if ($tag=='REPO') $icon = "repository"; + if ($tag=='NOTE') $icon = "notes"; + if ($tag=='OBJE') $icon = "media"; + ?> + <tr><td class="list_value"> + <?php if (!empty($icon)) { ?><img src="<?php echo $WT_IMAGES[$icon]; ?>" border="0" alt="<?php echo $tag; ?>" title="<?php echo $tag; ?>" /><?php } ?> + </td> + <td class="list_value ltr"><?php echo $clipping['id']; ?></td> + <td class="list_value"> + <?php + $record=WT_GedcomRecord::getInstance($clipping['id']); + if ($record) echo '<a href="', $record->getHtmlUrl(), '">', PrintReady($record->getListName()), '</a>'; + ?> + </td> + <td class="list_value center vmiddle"><a href="module.php?mod=clippings&mod_action=index&action=remove&item=<?php echo $i; ?>"><img src="<?php echo $WT_IMAGES["remove"]; ?>" border="0" alt="<?php echo WT_I18N::translate('Remove'); ?>" title="<?php echo WT_I18N::translate('Remove'); ?>" /></a></td> + </tr> + <?php + } + } +?> + </table> + </td></tr></table> +<?php +} +if (isset($_SESSION["cart"])) $_SESSION["cart"]=$cart; +print_footer(); diff --git a/modules_v2/clippings/module.php b/modules_v2/clippings/module.php new file mode 100644 index 0000000000..63373c6632 --- /dev/null +++ b/modules_v2/clippings/module.php @@ -0,0 +1,413 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require_once WT_ROOT.WT_MODULES_DIR.'clippings/clippings_ctrl.php'; + +class clippings_WT_Module extends WT_Module implements WT_Module_Menu, WT_Module_Sidebar { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Clippings cart'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('Provides a clippings cart, to copy records for export/download.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_USER; + } + + // Extend WT_Module + public function modAction($mod_action) { + switch($mod_action) { + case 'index': + // TODO: these files should be methods in this class + require WT_ROOT.WT_MODULES_DIR.$this->getName().'/'.$mod_action.'.php'; + break; + } + } + + // Implement WT_Module_Menu + public function defaultMenuOrder() { + return 20; + } + + // Implement WT_Module_Menu + public function getMenu() { + global $SEARCH_SPIDER, $controller; + + if ($SEARCH_SPIDER) { + return new WT_Menu('', '', ''); + } + //-- main clippings menu item + $menu = new WT_Menu($this->getTitle(), 'module.php?mod=clippings&mod_action=index&ged='.WT_GEDURL, 'down'); + $menu->addIcon('clippings'); + $menu->addClass('menuitem', 'menuitem_hover', 'submenu', 'icon_large_clippings'); + if (isset($controller->indi) && $controller->indi->canDisplayDetails()) { + $submenu = new WT_Menu(WT_I18N::translate('Add to Clippings Cart'), "module.php?mod=clippings&mod_action=index&action=add&id={$controller->pid}&type=indi"); + $submenu->addIcon('clippings'); + $submenu->addClass('submenuitem', 'submenuitem_hover'); + $menu->addSubmenu($submenu); + } else if (isset($controller->family) && $controller->family->canDisplayDetails()) { + $submenu = new WT_Menu(WT_I18N::translate('Add to Clippings Cart'), "module.php?mod=clippings&mod_action=index&action=add&id={$controller->famid}&type=fam"); + $submenu->addIcon('clippings'); + $submenu->addClass('submenuitem', 'submenuitem_hover'); + $menu->addSubmenu($submenu); + } else if (isset($controller->mediaobject) && $controller->mediaobject->canDisplayDetails()) { + $submenu = new WT_Menu(WT_I18N::translate('Add to Clippings Cart'), "module.php?mod=clippings&mod_action=index&action=add&id={$controller->mid}&type=obje"); + $submenu->addIcon('clippings'); + $submenu->addClass('submenuitem', 'submenuitem_hover'); + $menu->addSubmenu($submenu); + } else if (isset($controller->source) && $controller->source->canDisplayDetails()) { + $submenu = new WT_Menu(WT_I18N::translate('Add to Clippings Cart'), "module.php?mod=clippings&mod_action=index&action=add&id={$controller->sid}&type=sour"); + $submenu->addIcon('clippings'); + $submenu->addClass('submenuitem', 'submenuitem_hover'); + $menu->addSubmenu($submenu); + } else if (isset($controller->note) && $controller->note->canDisplayDetails()) { + $submenu = new WT_Menu(WT_I18N::translate('Add to Clippings Cart'), "module.php?mod=clippings&mod_action=index&action=add&id={$controller->nid}&type=note"); + $submenu->addIcon('clippings'); + $submenu->addClass('submenuitem', 'submenuitem_hover'); + $menu->addSubmenu($submenu); + } else if (isset($controller->repository) && $controller->repository->canDisplayDetails()) { + $submenu = new WT_Menu(WT_I18N::translate('Add to Clippings Cart'), "module.php?mod=clippings&mod_action=index&action=add&id={$controller->rid}&type=repo"); + $submenu->addIcon('clippings'); + $submenu->addClass('submenuitem', 'submenuitem_hover'); + $menu->addSubmenu($submenu); + } + return $menu; + } + + // Implement WT_Module_Sidebar + public function defaultSidebarOrder() { + return 50; + } + + // Impelement WT_Module_Sidebar + public function hasSidebarContent() { + return true; + } + + // Impelement WT_Module_Sidebar + public function getSidebarContent() { + global $WT_IMAGES, $cart; + + $out = ''; + + if ($this->controller) { + $out .= '<script type="text/javascript"> + <!-- + jQuery(document).ready(function() { + jQuery(".add_cart, .remove_cart").live("click", function() { + jQuery("#sb_clippings_content").load(this.href); + return false; + }); + }); + //--> + </script> + <div id="sb_clippings_content">'; + $out .= $this->getCartList(); + $root = null; + if ($this->controller->pid && !WT_Controller_Clippings::id_in_cart($this->controller->pid)) { + $root = WT_GedcomRecord::getInstance($this->controller->pid); + if ($root && $root->canDisplayDetails()) + $out .= '<a href="sidebar.php?sb_action=clippings&add='.$root->getXref().'" class="add_cart"> + <img src="'.$WT_IMAGES['clippings'].'" width="20" /> '.WT_I18N::translate('Add %s to cart', $root->getListName()).'</a>'; + } + else if ($this->controller->famid && !WT_Controller_Clippings::id_in_cart($this->controller->pid)) { + $fam = WT_Family::getInstance($this->controller->famid); + if ($fam && $fam->canDisplayDetails()) { + $out .= '<a href="sidebar.php?sb_action=clippings&add='.$fam->getXref().'" class="add_cart"> '.WT_I18N::translate('Add %s to cart', $fam->getFullName()).'</a><br />'; + } + } + $out .= '</div>'; + } + return $out; + } + + // Impelement WT_Module_Sidebar + public function getSidebarAjaxContent() { + global $cart; + $controller = new WT_Controller_Clippings(); + $this->controller = $controller; + $add = safe_GET_xref('add',''); + $add1 = safe_GET_xref('add1',''); + $remove = safe_GET('remove', WT_REGEX_INTEGER, -1); + $others = safe_GET('others', WT_REGEX_ALPHANUM, ''); + $controller->level1 = safe_GET('level1'); + $controller->level2 = safe_GET('level2'); + $controller->level3 = safe_GET('level3'); + if (!empty($add)) { + $record = WT_GedcomRecord::getInstance($add); + if ($record) { + $controller->id=$record->getXref(); + $controller->type=$record->getType(); + $ret = $controller->add_clipping($record); + if (isset($_SESSION["cart"])) $_SESSION["cart"]=$cart; + if ($ret) return $this->askAddOptions($record); + } + } elseif (!empty($add1)) { + $record = WT_Person::getInstance($add1); + if ($record) { + $controller->id=$record->getXref(); + $controller->type=strtolower($record->getType()); + if ($others == 'parents') { + foreach ($record->getChildFamilies() as $family) { + $controller->add_clipping($family); + $controller->add_family_members($family); + } + } elseif ($others == 'ancestors') { + $controller->add_ancestors_to_cart($record, $controller->level1); + } elseif ($others == 'ancestorsfamilies') { + $controller->add_ancestors_to_cart_families($record, $controller->level2); + } elseif ($others == 'members') { + foreach ($record->getSpouseFamilies() as $family) { + $controller->add_clipping($family); + $controller->add_family_members($family); + } + } elseif ($others == 'descendants') { + foreach ($record->getSpouseFamilies() as $family) { + $controller->add_clipping($family); + $controller->add_family_descendancy($family, $controller->level3); + } + } + } + } + else if ($remove!=-1) { + $ct = count($cart); + for ($i = $remove +1; $i < $ct; $i++) { + $cart[$i -1] = $cart[$i]; + } + unset ($cart[$ct -1]); + } + else if (isset($_REQUEST['empty'])) { + $cart = array (); + $_SESSION["cart"] = $cart; + } + else if (isset($_REQUEST['download'])) { + return $this->downloadForm(); + } + if (isset($_SESSION["cart"])) $_SESSION["cart"]=$cart; + return $this->getCartList(); + } + + public function getCartList() { + global $WT_IMAGES, $cart; + + $out ='<ul>'; + $ct = count($cart); + if ($ct==0) $out .= '<br /><br />'.WT_I18N::translate('Your Clippings Cart is empty.').'<br /><br />'; + else { + for ($i=0; $i<$ct; $i++) { + $clipping = $cart[$i]; + $tag = strtoupper(substr($clipping['type'], 0, 4)); // source => SOUR + //print_r($clipping); + //-- don't show clippings from other gedcoms + if ($clipping['gedcom']==WT_GEDCOM) { + $icon=''; + if ($tag=='INDI') $icon = "indis"; + if ($tag=='FAM' ) $icon = "sfamily"; + //if ($tag=='SOUR') $icon = "source"; + //if ($tag=='REPO') $icon = "repository"; + //if ($tag=='NOTE') $icon = "notes"; + //if ($tag=='OBJE') $icon = "media"; + if (!empty($icon)) { + $out .= '<li>'; + if (!empty($icon)) { + $out .= '<img src="'.$WT_IMAGES[$icon].'" border="0" alt="'.$tag.'" title="'.$tag.'" width="20" />'; + } + $record=WT_GedcomRecord::getInstance($clipping['id']); + if ($record) { + $out .= '<a href="'.$record->getHtmlUrl().'">'; + if ($record->getType()=="INDI") $out .=$record->getSexImage(); + $out .= ' '.$record->getFullName().' '; + if ($record->getType()=="INDI" && $record->canDisplayDetails()) { + $bd = $record->getBirthDeathYears(false,''); + if (!empty($bd)) $out .= PrintReady(' ('.$bd.')'); + } + $out .= '</a>'; + } + $out .= '<a class="remove_cart" href="sidebar.php?sb_action=clippings&remove='.$i.'"> + <img src="'. $WT_IMAGES["remove"].'" border="0" alt="'.WT_I18N::translate('Remove').'" title="'.WT_I18N::translate('Remove').'" /></a>'; + $out .='</li>'; + } + } + } + } + $out .= '</ul>'; + if (count($cart)>0) { + $out .= '<a href="sidebar.php?sb_action=clippings&empty=true" class="remove_cart">'.WT_I18N::translate('Empty Cart').'</a>'.help_link('empty_cart', $this->getName()); + $out .= '<br /><a href="sidebar.php?sb_action=clippings&download=true" class="add_cart">'.WT_I18N::translate('Download Now').'</a>'; + } + $out .= '<br />'; + return $out; + } + public function askAddOptions(&$person) { + global $MAX_PEDIGREE_GENERATIONS; + $out = "<b>".$person->getFullName()."</b>"; + $out .= WT_JS_START; + $out .= 'function radAncestors(elementid) {var radFamilies=document.getElementById(elementid);radFamilies.checked=true;} + function continueAjax(frm) { + var others = jQuery("input[name=\'others\']:checked").val(); + var link = "sidebar.php?sb_action=clippings&add1="+frm.pid.value+"&others="+others+"&level1="+frm.level1.value+"&level2="+frm.level2.value+"&level3="+frm.level3.value; + jQuery("#sb_clippings_content").load(link); + }'; + $out .= WT_JS_END; + if ($person->getType()=='FAM') { + + $out .= '<form action="module.php" method="get" onsubmit="continueAjax(this); return false;"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + <table> + <tr><td class="topbottombar">'.WT_I18N::translate('Which other links from this family would you like to add?').' + <input type="hidden" name="pid" value="'.$person->getXref().'" /> + <input type="hidden" name="type" value="'.$person->getType().'" /> + <input type="hidden" name="action" value="add1" /></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" checked value="none" />'.WT_I18N::translate('Add just this family record.').'</td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="parents" />'.WT_I18N::translate('Add parents\' records together with this family record.').'</td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="members" />'.WT_I18N::translate('Add parents\' and children\'s records together with this family record.').'</td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="descendants" />'.WT_I18N::translate('Add parents\' and all descendants\' records together with this family record.').'</td></tr> + <tr><td class="topbottombar"><input type="submit" value="'.WT_I18N::translate('Continue Adding').'" /></td></tr> + </table> + </form>'; + } + else if ($person->getType()=='INDI') { + $out .= '<form action="module.php" method="get" onsubmit="continueAjax(this); return false;"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + '.WT_I18N::translate('Which links from this person would you also like to add?').' + <input type="hidden" name="pid" value="'.$person->getXref().'" /> + <input type="hidden" name="type" value="'.$person->getType().'" /> + <input type="hidden" name="action" value="add1" /> + <ul> + <li><input type="radio" name="others" checked value="none" />'.WT_I18N::translate('Add just this person.').'</li> + <li><input type="radio" name="others" value="parents" />'.WT_I18N::translate('Add this person, his parents, and siblings.').'</li> + <li><input type="radio" name="others" value="ancestors" id="ancestors" />'.WT_I18N::translate('Add this person and his direct line ancestors.').'<br /> + '.WT_I18N::translate('Number of generations:').'<input type="text" size="4" name="level1" value="'.$MAX_PEDIGREE_GENERATIONS.'" onfocus="radAncestors(\'ancestors\');"/></li> + <li><input type="radio" name="others" value="ancestorsfamilies" id="ancestorsfamilies" />'.WT_I18N::translate('Add this person, his direct line ancestors, and their families.').'<br /> + '.WT_I18N::translate('Number of generations:').' <input type="text" size="4" name="level2" value="'. $MAX_PEDIGREE_GENERATIONS.'" onfocus="radAncestors(\'ancestorsfamilies\');" /></li> + <li><input type="radio" name="others" value="members" />'.WT_I18N::translate('Add this person, his spouse, and children.').'</li> + <li><input type="radio" name="others" value="descendants" id="descendants" />'.WT_I18N::translate('Add this person, his spouse, and all descendants.').'<br > + '.WT_I18N::translate('Number of generations:').' <input type="text" size="4" name="level3" value="'.$MAX_PEDIGREE_GENERATIONS.'" onfocus="radAncestors(\'descendants\');" /></li> + </ul> + <input type="submit" value="'.WT_I18N::translate('Continue Adding').'" /> + </form>'; + } else if ($person->getType()=='SOUR') { + $out .= '<form action="module.php" method="get" onsubmit="continueAjax(this); return false;"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + <table> + <tr><td class="topbottombar">'.WT_I18N::translate('Which records linked to this source should be added?').' + <input type="hidden" name="pid" value="'.$person->getXref().'" /> + <input type="hidden" name="type" value="'.$person->getType().'" /> + <input type="hidden" name="action" value="add1" /></td></tr> + <tr><td class="optionbox"><input type="radio" name="others" checked value="none" />'.WT_I18N::translate('Add just this source.').'</td></tr> + <tr><td class="optionbox"><input type="radio" name="others" value="linked" />'.WT_I18N::translate('Add this source and families/people linked to it.').'</td></tr> + <tr><td class="topbottombar"><input type="submit" value="'.WT_I18N::translate('Continue Adding').'" /> + </table> + </form>'; + } + else return $this->getSidebarContent(); + return $out; + } + + public function downloadForm() { + global $TEXT_DIRECTION; + $controller = $this->controller; + $out = WT_JS_START; + $out .= 'function cancelDownload() { + var link = "sidebar.php?sb_action=clippings"; + jQuery("#sb_clippings_content").load(link); + }'; + $out .= WT_JS_END; + $out .= '<form method="get" action="module.php"> + <input type="hidden" name="mod" value="clippings" /> + <input type="hidden" name="mod_action" value="index" /> + <input type="hidden" name="action" value="download" /> + <table> + <tr><td colspan="2" class="topbottombar"><h2>'.WT_I18N::translate('File Information').'</h2></td></tr> + <tr><td class="descriptionbox width50 wrap">'.WT_I18N::translate('Zip File(s)').help_link('zip').'</td> + <td class="optionbox"><input type="checkbox" name="Zip" value="yes" checked="checked" /></td></tr> + + <tr><td class="descriptionbox width50 wrap">'.WT_I18N::translate('Include media (automatically zips files)').help_link('include_media').'</td> + <td class="optionbox"><input type="checkbox" name="IncludeMedia" value="yes" checked="checked" /></td></tr> + '; + + // Determine the Privatize options available to this user + if (WT_USER_IS_ADMIN) { + $radioPrivatizeNone = 'checked="checked" '; + $radioPrivatizeVisitor = ''; + $radioPrivatizeUser = ''; + $radioPrivatizeGedadmin = ''; + $radioPrivatizeAdmin = ''; + } else if (WT_USER_GEDCOM_ADMIN) { + $radioPrivatizeNone = 'DISABLED '; + $radioPrivatizeVisitor = 'checked="checked" '; + $radioPrivatizeUser = ''; + $radioPrivatizeGedadmin = ''; + $radioPrivatizeAdmin = 'DISABLED '; + } else if (WT_USER_ID) { + $radioPrivatizeNone = 'DISABLED '; + $radioPrivatizeVisitor = 'checked="checked" '; + $radioPrivatizeUser = ''; + $radioPrivatizeGedadmin = 'DISABLED '; + $radioPrivatizeAdmin = 'DISABLED '; + } else { + $radioPrivatizeNone = 'DISABLED '; + $radioPrivatizeVisitor = 'checked="checked" DISABLED '; + $radioPrivatizeUser = 'DISABLED '; + $radioPrivatizeGedadmin = 'DISABLED '; + $radioPrivatizeAdmin = 'DISABLED '; + } + $out .= ' + <tr><td class="descriptionbox width50 wrap">'.WT_I18N::translate('Apply privacy settings?').help_link('apply_privacy').'</td> + <td class="list_value"> + <input type="radio" name="privatize_export" value="none" '.$radioPrivatizeNone.'/> '.WT_I18N::translate('None').'<br /> + <input type="radio" name="privatize_export" value="visitor" '.$radioPrivatizeVisitor.'/> '.WT_I18N::translate('Visitor').'<br /> + <input type="radio" name="privatize_export" value="user" '.$radioPrivatizeUser.'/> '.WT_I18N::translate('Member').'<br /> + <input type="radio" name="privatize_export" value="gedadmin" '.$radioPrivatizeGedadmin.'/> '.WT_I18N::translate('Administrator').'</td></tr> + + <tr><td class="descriptionbox width50 wrap">'.WT_I18N::translate('Convert from UTF-8 to ANSI (ISO-8859-1)').help_link('utf8_ansi').'</td> + <td class="optionbox"><input type="checkbox" name="convert" value="yes" /></td></tr> + + <tr><td class="descriptionbox width50 wrap">'.WT_I18N::translate('Remove custom webtrees tags? (eg. _WT_USER, _THUM)').help_link('remove_tags').'</td> + <td class="optionbox"><input type="checkbox" name="remove" value="yes" checked="checked" /> + <input type="hidden" name="conv_path" value="'.getLRM(). $controller->conv_path. getLRM().'" /></td></tr> + + <tr><td class="topbottombar" colspan="2"> + <input type="button" value="'.WT_I18N::translate('Cancel').'" onclick="cancelDownload();" /> + <input type="submit" value="'.WT_I18N::translate('Download Now').'" /> + </form>'; + + return $out; + } + +} diff --git a/modules_v2/death_report/module.php b/modules_v2/death_report/module.php new file mode 100644 index 0000000000..3c07e0c682 --- /dev/null +++ b/modules_v2/death_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class death_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Death Date and Place Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of people who died in a given time or place.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('place'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/death_report/report.xml b/modules_v2/death_report/report.xml new file mode 100644 index 0000000000..a50cf2a368 --- /dev/null +++ b/modules_v2/death_report/report.xml @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Death Date and Place Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of people who died in a given time or place.')" /></Description> + <Input name="name" lookup="NAME" type="text"><var var="WT_I18N::translate('Name')" /></Input> + <Input name="deathplace" lookup="PLAC" type="text"><var var="WT_I18N::translate('Death Place contains')" /></Input> + <Input name="deathdate1" lookup="DATE" type="text"><var var="WT_I18N::translate('Death Date range start')" /></Input> + <Input name="deathdate2" lookup="DATE" type="text"><var var="WT_I18N::translate('Death Date range end')" /></Input> + <Input name="sortby" type="select" default="NAME" options="none=>WT_I18N::translate('None')|NAME=>WT_I18N::translate('Name')|DEAT:DATE=>WT_I18N::translate('Date of death')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="adlist" type="select" default="none" options="none=>WT_I18N::translate('None')|_MARNM=>translate_fact('_MARNM')|HUSB=>WT_I18N::translate('Husband')"><var var="WT_I18N::translate('Name List')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="16" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8" /> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9" /> + <!-- Column labels --> + <Style name="label" font="$fonts" size="10" style="b"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + + <Doc pageSize="$pageSize" orientation="landscape"> + <Header> + <Cell align="center" height="20" newline="1" style="header"><var var="WT_I18N::translate('Death Date and Place Report')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" width="200"> + <Text style="label"><var var="WT_I18N::translate('Name')" /></Text> + </TextBox> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='DEAT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <TextBox bgcolor="$fill" border="1" width="100"> + <Text style="label"><var var="WT_I18N::translate('Date')" /></Text> + </TextBox> + + <TextBox border="1" width="150"> + <Text style="label"><var var="WT_I18N::translate('Place')" /></Text> + </TextBox> + + <TextBox border="1" newline="1"> + <Text style="label"><var var="WT_I18N::translate('Source')" /></Text> + </TextBox> + </Header> + + <Body> + <List list="individual" filter1="DEAT:PLAC CONTAINS $deathplace" filter2="DEAT:DATE GTE $deathdate1" filter3="DEAT:DATE LTE $deathdate2" filter4="NAME CONTAINS $name" sortby="$sortby"> + <TextBox width="200"> + <Text style="text"><GetPersonName id="" /> + <if condition="$adlist=='_MARNM'"> + <RepeatTag tag="NAME:_MARNM"> + <br /><GedcomValue tag="_MARNM" /> + </RepeatTag> + </if> + <if condition="($adlist=='HUSB') and (@SEX=='F')"> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS:@HUSB"> + <br /><GetPersonName id="" /> + </Gedcom> + </RepeatTag> + </if> + </Text> + </TextBox> + <TextBox width="100"> + <Text style="text"><GedcomValue tag="DEAT:DATE" newline="1" /></Text> + </TextBox> + <TextBox width="150"> + <Text style="text"><GedcomValue tag="DEAT:PLAC" /></Text> + </TextBox> + <TextBox newline="1"> + <!-- Only with multiple sources use line feed (br) --> + <SetVar name="usebr" value="0"/> + <Text style="text"> + <RepeatTag tag="DEAT:SOUR"> + <Gedcom id="@SOUR"> + <if condition="$usebr==1"><br /></if> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + <SetVar name="usebr" value="1"/> + </RepeatTag> + </Text> + </TextBox> + </List> + <Cell align="rightrtl" height="24" newline="1" style="label"><br/><var var="WT_I18N::translate('Total individuals')"/>: <ListTotal/></Cell> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now/></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/descendancy/module.php b/modules_v2/descendancy/module.php new file mode 100644 index 0000000000..a94f23e201 --- /dev/null +++ b/modules_v2/descendancy/module.php @@ -0,0 +1,246 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class descendancy_WT_Module extends WT_Module implements WT_Module_Sidebar { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Descendancy'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a sidebar which allows for easy navigation of individuals in a descendants tree-view format.'); + } + + // Implement WT_Module_Sidebar + public function defaultSidebarOrder() { + return 20; + } + + // Implement WT_Module_Sidebar + public function hasSidebarContent() { + return true; + } + + // Implement WT_Module_Sidebar + public function getSidebarAjaxContent() { + $search =safe_GET('search'); + $pid =safe_GET('pid', WT_REGEX_XREF); + $famid =safe_GET('famid', WT_REGEX_XREF); + + $last = array('search'=>$search); + $_SESSION['sb_descendancy_last'] = $last; + + if (!empty($search)) return $this->search($search); + else if (!empty($pid)) return $this->loadSpouses($pid, 1); + else if (!empty($famid)) return $this->loadChildren($famid, 1); + } + + // Implement WT_Module_Sidebar + public function getSidebarContent() { + global $WT_IMAGES; + + $out = '<script type="text/javascript"> + <!-- + var dloadedNames = new Array(); + + function dsearchQ() { + var query = jQuery("#sb_desc_name").attr("value"); + if (query.length>1) { + jQuery("#sb_desc_content").load("sidebar.php?sb_action=descendancy&search="+query); + } + } + + jQuery(document).ready(function(){ + jQuery("#sb_desc_name").focus(function(){this.select();}); + jQuery("#sb_desc_name").blur(function(){if (this.value=="") this.value="'.WT_I18N::translate('Search').'";}); + var dtimerid = null; + jQuery("#sb_desc_name").keyup(function(e) { + if (dtimerid) window.clearTimeout(dtimerid); + dtimerid = window.setTimeout("dsearchQ()", 500); + }); + + jQuery(".sb_desc_indi").live("click", function() { + var pid=this.title; + if (!dloadedNames[pid]) { + jQuery("#sb_desc_"+pid+" div").load(this.href); + jQuery("#sb_desc_"+pid+" div").show(); + jQuery("#sb_desc_"+pid+" .plusminus").attr("src", "'.$WT_IMAGES['minus'].'"); + dloadedNames[pid]=2; + } + else if (dloadedNames[pid]==1) { + dloadedNames[pid]=2; + jQuery("#sb_desc_"+pid+" div").show(); + jQuery("#sb_desc_"+pid+" .plusminus").attr("src", "'.$WT_IMAGES['minus'].'"); + } + else { + dloadedNames[pid]=1; + jQuery("#sb_desc_"+pid+" div").hide(); + jQuery("#sb_desc_"+pid+" .plusminus").attr("src", "'.$WT_IMAGES['plus'].'"); + } + return false; + }); + }); + //--> + </script> + <form method="post" action="sidebar.php" onsubmit="return false;"> + <input type="text" name="sb_desc_name" id="sb_desc_name" value="'.WT_I18N::translate('Search').'" />'; + $out .= '</form><div id="sb_desc_content">'; + + if ($this->controller) { + $root = null; + if ($this->controller->pid) { + $root = WT_Person::getInstance($this->controller->pid); + } + else if ($this->controller->famid) { + $fam = WT_Family::getInstance($this->controller->famid); + if ($fam) $root = $fam->getHusband(); + if (!$root) $root = $fam->getWife(); + } + if ($root!=null) { + $out .= '<ul>'; + $out .= $this->getPersonLi($root, 1); + $out .= '</ul>'; + } + } + $out .= '</div>'; + return $out; + } + + public function getPersonLi(&$person, $generations=0) { + global $WT_IMAGES; + + $out = ''; + $out .= '<li id="sb_desc_'.$person->getXref().'" class="sb_desc_indi_li"><a href="sidebar.php?sb_action=descendancy&pid='.$person->getXref().'" title="'.$person->getXref().'" class="sb_desc_indi">'; + if ($generations>0) $out .= '<img src="'.$WT_IMAGES['minus'].'" border="0" class="plusminus" />'; + else $out .= '<img src="'.$WT_IMAGES['plus'].'" border="0" class="plusminus" />'; + $out .= $person->getSexImage().' '.$person->getListName().' '; + if ($person->canDisplayDetails()) { + $bd = $person->getBirthDeathYears(false,''); + if (!empty($bd)) $out .= PrintReady(' ('.$bd.')'); + } + $out .= '</a> <a href="'.$person->getHtmlUrl().'"><img src="'.$WT_IMAGES['button_indi'].'" border="0" alt="indi" /></a>'; + if ($generations>0) { + $out .= '<div class="desc_tree_div_visible">'; + $out .= $this->loadSpouses($person->getXref()); + $out .= '</div><script type="text/javascript">dloadedNames["'.$person->getXref().'"]=2;</script>'; + }else { + $out .= '<div class="desc_tree_div">'; + $out .= '</div>'; + } + $out .= '</li>'; + return $out; + } + + public function getFamilyLi(&$family, &$person, $generations=0) { + global $WT_IMAGES; + + $out = ''; + $out .= '<li id="sb_desc_'.$family->getXref().'" class="sb_desc_indi_li"><a href="sidebar.php?sb_action=descendancy&famid='.$family->getXref().'" title="'.$family->getXref().'" class="sb_desc_indi">'; + $out .= '<img src="'.$WT_IMAGES['minus'].'" border="0" class="plusminus" />'; + $out .= $person->getSexImage().$person->getListName(); + + $marryear = $family->getMarriageYear(); + if (!empty($marryear)) { + $out .= ' ('.translate_fact('MARR').' '.$marryear.')'; + } + $out .= '</a> <a href="'.$person->getHtmlUrl().'"><img src="'.$WT_IMAGES['button_indi'].'" border="0" alt="indi" /></a>'; + $out .= '<a href="'.$family->getHtmlUrl().'"><img src="'.$WT_IMAGES['button_family'].'" border="0" alt="family" /></a>'; + $out .= '<div class="desc_tree_div_visible">'; + $out .= $this->loadChildren($family->getXref(), $generations); + $out .= '</div><script type="text/javascript">dloadedNames["'.$family->getXref().'"]=2;</script>'; + $out .= '</li>'; + return $out; + } + + public function search($query) { + global $WT_IMAGES; + + if (strlen($query)<2) return ''; + $rows=WT_DB::prepare( + "SELECT ? AS type, i_id AS xref, i_file AS ged_id, i_gedcom AS gedrec, i_isdead, i_sex". + " FROM `##individuals`, `##name`". + " WHERE (i_id LIKE ? OR n_sort LIKE ?)". + " AND i_id=n_id AND i_file=n_file AND i_file=?". + " ORDER BY n_sort LIMIT".WT_AUTOCOMPLETE_LIMIT + ) + ->execute(array('INDI', "%{$query}%", "%{$query}%", WT_GED_ID)) + ->fetchAll(PDO::FETCH_ASSOC); + + $out = '<ul>'; + $private_count = 0; + foreach ($rows as $row) { + $person=PWT_erson::getInstance($row); + if ($person->canDisplayName()) { + $out .= $this->getPersonLi($person); + } + else $private_count++; + } + if ($private_count>0) $out .= '<li>'.WT_I18N::translate('Private').' ('.$private_count.')</li>'; + $out .= '</ul>'; + return $out; + } + + public function loadSpouses($pid, $generations=0) { + $out = '<ul>'; + $person = WT_Person::getInstance($pid); + if ($person->canDisplayDetails()) { + foreach($person->getSpouseFamilies() as $family) { + $spouse = $family->getSpouse($person); + if ($spouse) { + $out .= $this->getFamilyLi($family, $spouse, $generations-1); + } + } + } + $out .= "</ul>"; + return $out; + } + + public function loadChildren($famid, $generations=0) { + $out = '<ul>'; + $family = WT_Family::getInstance($famid); + if ($family->canDisplayDetails()) { + $children = $family->getChildren(); + if (count($children)>0) { + $private = 0; + foreach($children as $child) { + if ($child->canDisplayName()) $out .= $this->getPersonLi($child, $generations-1); + else $private++; + } + if ($private>0) $out .= '<li class="sb_desc_indi_li">'.WT_I18N::translate('Private').' ('.$private.')</li>'; + } + else { + $out .= WT_I18N::translate('No children'); + } + } + $out .= "</ul>"; + return $out; + } +} diff --git a/modules_v2/descendancy_report/module.php b/modules_v2/descendancy_report/module.php new file mode 100644 index 0000000000..5524a27742 --- /dev/null +++ b/modules_v2/descendancy_report/module.php @@ -0,0 +1,69 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class descendancy_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Descendancy Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of a person\'s descendants in a narrative style.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + global $controller; + + if ($controller && isset($controller->pid)) { + $pid='&pid='.$controller->pid; + } elseif ($controller && isset($controller->rootid)) { + $pid='&pid='.$controller->rootid; + } else { + $pid=''; + } + + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'.$pid); + $menu->addIcon('descendant'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/descendancy_report/report.xml b/modules_v2/descendancy_report/report.xml new file mode 100644 index 0000000000..d310d7c556 --- /dev/null +++ b/modules_v2/descendancy_report/report.xml @@ -0,0 +1,620 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Descendancy Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of a person\'s descendants in a narrative style.')" /></Description> + <Input name="pid" lookup="INDI" type="text" default=""><var var="WT_I18N::translate('Enter Individual ID')" /></Input> + <Input name="maxgen" type="select" options="3=>3|4=>4|5=>5|6=>6|7=>7|8=>8|9=>9|*=>*"><var var="WT_I18N::translate('Generations')" /></Input> + <Input name="sources" type="checkbox" default="1"><var var="WT_I18N::translate('Show sources?')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="18"/> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9"/> + <!-- Source text - FootnoteTexts - required style name by the generator --> + <Style name="footnote" font="$fonts" size="8"/> + <!-- Links to sources - required style name by the generator --> + <Style name="footnotenum" font="$fonts" size="7"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + <Style name="subheader" font="$fonts" size="12" style="b" /> + <Style name="label1" font="$fonts" size="8"/> + <Style name="label2" font="$fonts" size="10"/> + <Style name="name" font="$fonts" size="9"/> + <Style name="name1" font="$fonts" size="14"/> + + <SetVar name="personNumber" value="1" /> + <SetVar name="childNumber" value="2" /> + <SetVar name="generation" value="0" /> + <!-- New Page for Sources controller if SOUR exist --> + <SetVar name="source_exist" value="0" /> + + <Doc pageSize="$pageSize"> + <Header> + <Cell align="center" height="30" newline="1" style="header"><var var="WT_I18N::translate('Descendancy Report for ')" /><GetPersonName id="$pid" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + </Header> + <Body> + <Relatives id="$pid" group="descendants" sortby="generation" maxgen="$maxgen"> + <SetVar name="showPerson" value="F" /> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS:@CHIL"> + <SetVar name="showPerson" value="T" /> + </Gedcom> + </RepeatTag> + <if condition="$showPerson=='T'"> + <if condition="$generation!=@generation"> + <Cell align="center" height="20" newline="1" style="subheader"><var var="WT_I18N::translate('Generation ')" /> <Generation /></Cell> + <SetVar name="generation" value="@generation" /> + </if> + <TextBox border="" width="25" height="40"> + <Text style="name"><var var="personNumber" />.</Text> + </TextBox> + + <TextBox border="" height="40" newline="1"> + <Text style="name"><GetPersonName id="" /> </Text> +<!-- main --> <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <SetVar name="printPeriod" value="false" /> + <if condition="@SEX=='M'"> + <SetVar name="gender" value="male" /> + </if> + <if condition="@SEX=='F'"> + <SetVar name="gender" value="female" /> + </if> + <SetVar name="birtExists" value="false" /> + <Gedcom id="BIRT"> + <SetVar name="birtExists" value="true" /> + <SetVar name="printPeriod" value="true" /> + <if condition="$gender=='male'"> + <Text style="label1"> <var var="WT_I18N::translate_c('MALE', 'was born')" /> </Text> + </if> + <if condition="$gender=='female'"> + <Text style="label1"> <var var="WT_I18N::translate_c('FEMALE', 'was born')" /> </Text> + </if> + <if condition="$sources==1"> + <RepeatTag tag="BIRT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="label1"> <var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="label1"> <var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + </Gedcom> + <Gedcom id="DEAT"> + <SetVar name="printPeriod" value="true" /> + <if condition="$birtExists=='true'"> + <Text style="label1"> <var var="WT_I18N::translate('and')" /></Text> + </if> + <if condition="$gender=='male'"> + <Text style="label1"> <var var="WT_I18N::translate_c('MALE', 'died')" /> </Text> + </if> + <if condition="$gender=='female'"> + <Text style="label1"> <var var="WT_I18N::translate_c('FEMALE', 'died')" /> </Text> + </if> + <if condition="$sources==1"> + <RepeatTag tag="DEAT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="label1"> <var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="label1"> <var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + </Gedcom> + <if condition="$printPeriod=='true'"> + <Text style="label1">.</Text> + <SetVar name="printPronoun" value="true" /> + </if> + <RepeatTag tag="FAMS"> + <SetVar name="printPeriod" value="false" /> + <Gedcom id="@FAMS"> + <SetVar name="marrExists" value="false" /> + <if condition="$gender=='male'"> + <Gedcom id="MARR"> + <SetVar name="marrExists" value="true" /> + <if condition="$printPronoun=='true'" > + <Text style="label1"> <var var="WT_I18N::translate('He married')" /> </Text> + </if> + <if condition="$printPronoun=='false'" > + <Text style="label1"> <var var="WT_I18N::translate_c('MALE', 'married')" /> </Text> + </if> + <SetVar name="printPeriod" value="true" /> + <if condition="$sources==1"> + <RepeatTag tag="MARR:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </Gedcom> + <if condition="$marrExists=='true'"> + <Gedcom id="@WIFE"> + <Text style="name"> <GetPersonName id="" /> </Text> +<!-- wife --> <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Gedcom id="@FAMC"> + <Text style="label1"> <var var="WT_I18N::translate('daughter of')" /></Text> + <Text style="name"> <GetPersonName id="@HUSB" /> </Text> + <Gedcom id="@HUSB"> + <Gedcom id="@FAMS:@WIFE"> + <Text style="label1"> <var var="WT_I18N::translate('and')" /></Text> + </Gedcom> + </Gedcom> + <Text style="name"> <GetPersonName id="@WIFE" /> </Text> + </Gedcom> + </Gedcom> + </if> + </if> + <if condition="$gender=='female'"> + <Gedcom id="MARR"> + <SetVar name="marrExists" value="true" /> + <if condition="$printPronoun=='true'" > + <Text style="label1"> <var var="WT_I18N::translate('She married')" /> </Text> + </if> + <if condition="$printPronoun=='false'" > + <Text style="label1"> <var var="WT_I18N::translate_c('FEMALE', 'married')" /> </Text> + </if> + <SetVar name="printPeriod" value="true" /> + <if condition="$sources==1"> + <RepeatTag tag="MARR:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </Gedcom> + <if condition="$marrExists=='true'"> + <Gedcom id="@HUSB"> + <Text style="name"> <GetPersonName id="" /> </Text> +<!-- husband --> <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Gedcom id="@FAMC"> + <Text style="label1"> <var var="WT_I18N::translate('son of')" /></Text> + <Text style="name"> <GetPersonName id="@HUSB" /></Text> + <Gedcom id="@HUSB"> + <Gedcom id="@FAMS:@WIFE"> + <Text style="label1"> <var var="WT_I18N::translate('and')" /></Text> + </Gedcom> + </Gedcom> + <Text style="name"> <GetPersonName id="@WIFE" /></Text> + </Gedcom> + </Gedcom> + </if> + </if> + <Gedcom id="MARR"> + <Text style="label1"> <var var=" " /></Text> + <if condition="@DATE!=''"> + <SetVar name="printPeriod" value="true" /> + <Text style="label1"> <var var=" " /> <GedcomValue tag="DATE" level="2"/></Text> + </if> + <if condition="@PLAC!=''"> + <SetVar name="printPeriod" value="true" /> + <Text style="label1"> <var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2"/></Text> + </if> + </Gedcom> + <if condition="$printPeriod=='true'"> + <Text style="label1">.</Text> + <SetVar name="printPronoun" value="true" /> + </if> + <if condition="$marrExists=='true'"> + <if condition="$gender=='male'"> + <Gedcom id="@WIFE"> + <SetVar name="printPeriod" value="false" /> + <SetVar name="birtExist" value="false" /> + <SetVar name="printPronoun" value="true" /> + <Gedcom id="BIRT"> + <if condition="$printPronoun=='true'"> + <SetVar name="printPeriod" value="true" /> + <Text style="label1"> <var var="WT_I18N::translate('She was born')" /></Text> + <SetVar name="printPronoun" value="false" /> + </if> + <SetVar name="birtExist" value="true" /> + <if condition="$sources==1"> + <RepeatTag tag="BIRT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="label1"> <var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="label1"> <var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + </Gedcom> + <Gedcom id="DEAT"> + <if condition="$printPronoun=='true'"> + <Text style="label1"> <var var="WT_I18N::translate('She ')" /></Text> + <SetVar name="printPronoun" value="false" /> + </if> + <SetVar name="printPeriod" value="true" /> + <if condition="$birtExist=='true'"> + <Text style="label1"> <var var="WT_I18N::translate('and')" /></Text> + </if> + <Text style="label1"> <var var="WT_I18N::translate_c('FEMALE', 'died')" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="DEAT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="label1"> <var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="label1"> <var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + </Gedcom> + <if condition="$printPeriod=='true'"> + <Text style="label1">.</Text> + <SetVar name="printPronoun" value="true" /> + </if> + </Gedcom> + </if> + <if condition="$gender=='female'"> + <Gedcom id="@HUSB"> + <SetVar name="printPronoun" value="true" /> + <SetVar name="printPeriod" value="false" /> + <SetVar name="birtExist" value="false" /> + <Gedcom id="BIRT"> + <SetVar name="printPeriod" value="true" /> + <if condition="$printPronoun=='true'"> + <Text style="label1"> <var var="WT_I18N::translate('He was born')" /></Text> + <SetVar name="printPronoun" value="false" /> + </if> + <SetVar name="birtExist" value="true" /> + <if condition="$sources==1"> + <RepeatTag tag="BIRT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="label1"> <var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="label1"> <var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + </Gedcom> + <Gedcom id="DEAT"> + <if condition="$printPronoun=='true'"> + <Text style="label1"> <var var="WT_I18N::translate('He ')" /></Text> + <SetVar name="printPronoun" value="true" /> + </if> + <SetVar name="printPeriod" value="true" /> + <if condition="$birtExist=='true'"> + <Text style="label1"> <var var="WT_I18N::translate('and')" /></Text> + </if> + <Text style="label1"> <var var="WT_I18N::translate_c('MALE', 'died')" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="DEAT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + <if condition="@DATE!=''"> + <Text style="label1"> <var var=" " /> <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="label1"> <var var="WT_I18N::translate(' in ')" /> <GedcomValue tag="PLAC" level="2" /></Text> + </if> + </Gedcom> + <if condition="$printPeriod=='true'"> + <Text style="label1">.</Text> + <SetVar name="printPronoun" value="true" /> + </if> + </Gedcom> + </if> + </if> + </Gedcom> + </RepeatTag> + </TextBox> + + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS"> + <if condition="@CHIL!=''"> + <SetVar name="numberOfChildren" value="0" /> + <RepeatTag tag="CHIL"> + <Gedcom id="@CHIL"> + <SetVar name="numberOfChildren" value="$numberOfChildren+1" /> + </Gedcom> + </RepeatTag> + + <TextBox height="20" left="25" newline="1"> + <if condition="$numberOfChildren==1"> + <Text style="label1"><var var="WT_I18N::translate('Child of ')" /></Text> + </if> + <if condition="$numberOfChildren>1"> + <Text style="label1"><var var="WT_I18N::translate('Children of ')" /></Text> + </if> + <Text style="name"><GetPersonName id="@HUSB" /></Text> + <Text style="label1"> <var var="WT_I18N::translate('and')" /> </Text> + <Text style="name"><GetPersonName id="@WIFE" /></Text> + <Text style="label1">:</Text> + </TextBox> + + <SetVar name="familyChildNumber" value ="1" /> + <RepeatTag tag="CHIL"> + <Gedcom id="@CHIL"> + <if condition="$familyChildNumber==1"><SetVar name="familyChildRoman" value="i" /></if> + <if condition="$familyChildNumber==2"><SetVar name="familyChildRoman" value="ii" /></if> + <if condition="$familyChildNumber==3"><SetVar name="familyChildRoman" value="iii" /></if> + <if condition="$familyChildNumber==4"><SetVar name="familyChildRoman" value="iv" /></if> + <if condition="$familyChildNumber==5"><SetVar name="familyChildRoman" value="v" /></if> + <if condition="$familyChildNumber==6"><SetVar name="familyChildRoman" value="vi" /></if> + <if condition="$familyChildNumber==7"><SetVar name="familyChildRoman" value="vii" /></if> + <if condition="$familyChildNumber==8"><SetVar name="familyChildRoman" value="viii" /></if> + <if condition="$familyChildNumber==9"><SetVar name="familyChildRoman" value="ix" /></if> + <if condition="$familyChildNumber==10"><SetVar name="familyChildRoman" value="x" /></if> + <if condition="$familyChildNumber==11"><SetVar name="familyChildRoman" value="xi" /></if> + <if condition="$familyChildNumber==12"><SetVar name="familyChildRoman" value="xii" /></if> + <if condition="$familyChildNumber==13"><SetVar name="familyChildRoman" value="xiii" /></if> + <if condition="$familyChildNumber==14"><SetVar name="familyChildRoman" value="xiv" /></if> + <if condition="$familyChildNumber==15"><SetVar name="familyChildRoman" value="xv" /></if> + <if condition="$familyChildNumber==16"><SetVar name="familyChildRoman" value="xvi" /></if> + <if condition="$familyChildNumber==17"><SetVar name="familyChildRoman" value="xvii" /></if> + <if condition="$familyChildNumber==18"><SetVar name="familyChildRoman" value="xviii" /></if> + <if condition="$familyChildNumber==19"><SetVar name="familyChildRoman" value="xix" /></if> + <if condition="$familyChildNumber==20"><SetVar name="familyChildRoman" value="xx" /></if> + <SetVar name="showChildNumber" value="false" /> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS:@CHIL"> + <SetVar name="showChildNumber" value="true" /> + </Gedcom> + </RepeatTag> + <TextBox left="25" height="20" width="25"> + <if condition="$showChildNumber=='true'"> + <Text style="name"><var var="childNumber" />.</Text> + <SetVar name="childNumber" value="$childNumber + 1" /> + </if> + </TextBox> + + <TextBox height="20" newline="1"> + <Text style="label1"><var var="familyChildRoman" /></Text> + <Text style="name"> <GetPersonName id="" /> </Text> +<!-- children --> <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Gedcom id="BIRT"> + <Text style="label1"> <varLetter var="BIRT" />: <GedcomValue tag="DATE" level="2"/> <GedcomValue tag="PLAC" level="2"/></Text> + </Gedcom> + <SetVar name="showMarraige" value="T" /> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS:@CHIL"> + <SetVar name="showMarraige" value="F" /> + </Gedcom> + </RepeatTag> + <if condition="$showMarraige=='T'"> + <if condition="@SEX=='M'"> + <SetVar name="gender" value="male" /> + </if> + <if condition="@SEX=='F'"> + <SetVar name="gender" value="female" /> + </if> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS"> + <Text style="label1"> <varLetter var="MARR" />: </Text> + <if condition="$gender=='male'"> + <Text style="name"><GetPersonName id="@WIFE" /></Text> + </if> + <if condition="$gender=='female'"> + <Text style="name"><GetPersonName id="@HUSB" /></Text> + </if> + <Gedcom id="MARR"> + <if condition="@DATE!=''"> + <Text style="label1">, <GedcomValue tag="DATE" level="2" /></Text> + </if> + <if condition="@PLAC!=''"> + <Text style="label1">, <GedcomValue tag="PLAC" level="2" /></Text> + </if> + </Gedcom> + </Gedcom> + </RepeatTag> + </if> + <Gedcom id="DEAT"> + <Text style="label1"> <varLetter var="DEAT" />: <GedcomValue tag="DATE" level="2"/> <GedcomValue tag="PLAC" level="2"/></Text> + </Gedcom> + </TextBox> + </Gedcom> + <SetVar name="familyChildNumber" value="$familyChildNumber+1" /> + </RepeatTag> + </if> + </Gedcom> + </RepeatTag> + <SetVar name="personNumber" value="$personNumber + 1" /> + <TextBox height="10" newline="1" padding="0"/> + </if> + </Relatives> + <!-- if the sources were on, print the source citations as footnotes --> + <if condition="$source_exist==1"> + <NewPage/> + <TextBox newline="1"> + <Text style="subheader"><var var="WT_I18N::translate('Sources')" /><br /><br /></Text> + <FootnoteTexts /> + </TextBox> + </if> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now /></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/fact_sources/module.php b/modules_v2/fact_sources/module.php new file mode 100644 index 0000000000..2f9bb3271d --- /dev/null +++ b/modules_v2/fact_sources/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class fact_sources_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Fact Sources'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of facts which are supported by a given source.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_USER; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('menu_source'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/fact_sources/report.xml b/modules_v2/fact_sources/report.xml new file mode 100644 index 0000000000..1b9dcd758b --- /dev/null +++ b/modules_v2/fact_sources/report.xml @@ -0,0 +1,363 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Fact Sources')" /></Title> + <Description><var var="WT_I18N::translate('A report of facts which are supported by a given source.')" /></Description> + <Input name="sid" lookup="SOUR" default="" type="text"><var var="WT_I18N::translate('Find Source ID')" /></Input> + <Input name="stype" type="select" default="facts" options="facts=>WT_I18N::translate('facts')|records=>WT_I18N::translate('records')"><var var="WT_I18N::translate('Source type')" /></Input> + <Input name="sortby" type="select" default="BIRT:DATE" options="NAME=>WT_I18N::translate('Name')|BIRT:DATE=>WT_I18N::translate('Date of birth')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="18" style="b" /> + <!-- Source Title --> + <Style name="header2" font="$fonts" size="14" style="b" /> + <!-- Name of the List Type. INDI or FAM --> + <Style name="listtype" font="$fonts" size="12" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8" /> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date Text - CSS Style name --> + <Style name="date" font="$fonts" size="8"/> + <!-- Column list labels - CSS Style name --> + <Style name="list_label" font="$fonts" size="9" style="b"/> + <!-- List values - CSS Style name --> + <Style name="list_value" font="$fonts" size="8"/> + + <SetVar name="nameindi" value="200" /> + <SetVar name="datebirth" value="120" /> + <SetVar name="namefam" value="$nameindi + $datebirth" /> + <SetVar name="fact" value="100" /> + <SetVar name="dateevent" value="110" /> + <SetVar name="vspace" value="5" /> + <SetVar name="printedsource" value="0" /> + <SetVar name="moresourcespaceindi" value="$nameindi + $datebirth" /> + <SetVar name="ignore" value="CHAN,CHIL,FAMC,FAMS,HUSB,OBJE,RESN,SEX,SOUR,TITL,WIFE,_UID,_WT_OBJE_SORT"/> + + <Doc pageSize="$pageSize" orientation="landscape"> + <Header> + <Cell align="center" newline="1" style="header"><var var="WT_I18N::translate('Sources')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + <!-- Source Title --> + <Gedcom id="$sid"> + <Cell align="center" newline="1" style="header2"><GedcomValue tag="TITL" /></Cell> + </Gedcom> + </Header> + + <Body> + <if condition="$stype=='facts'"> + <!-- List type --> + <Cell align="center" newline="1" style="listtype"><var var="WT_I18N::translate('Individuals')" /></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + + <!-- Individual Name --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" style="list_label" width="$nameindi"><var var="WT_I18N::translate('Name')" /></Cell> + <!-- Birth date --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='BIRT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" style="list_label" width="$datebirth"><var var="translate_fact('BIRT:DATE')" /></Cell> + <!-- Name of the fact that contains the source --> + <Cell border="1" style="list_label" width="$fact"><var var="WT_I18N::translate('Event')" /></Cell> + <!-- Date of the fact --> + <Cell border="1" style="list_label" width="$dateevent"><var var="translate_fact('DATE')" /></Cell> + <!-- Detailed source text --> + <Cell border="1" newline="1" style="list_label"><var var="translate_fact('SOUR:PAGE')" /></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + + <!-- Individual List --> + <List list="individual" filter1=":SOUR CONTAINS @$sid@" sortby="$sortby"> + <SetVar name="moresource" value="0" /> + <SetVar name="printsource" value="0" /> + <!-- Printed List counter --> + <SetVar name="printedsource" value="$printedsource + 1" /> + + <!-- Individual Name --> + <Cell style="list_value" width="$nameindi"><GetPersonName id="" /></Cell> + <!-- Birth date --> + <Cell style="list_value" width="$datebirth"><GedcomValue tag="BIRT:DATE" /></Cell> + <Facts ignore="$ignore"> + <SetVar name="printfact" value="0" /> + <RepeatTag tag="@fact:SOUR"> + <Gedcom id="@SOUR"> + <if condition="@ID==$sid"> + <SetVar name="printfact" value="1" /> + </if> + </Gedcom> + </RepeatTag> + + <if condition="$printfact==1"> + <SetVar name="printsource" value="0" /> + <!-- Indent the fact line if more then one fact has source --> + <if condition="$moresource==1"> + <Cell style="list_value" width="$moresourcespaceindi"> </Cell> + </if> + + <!-- Name of the fact that contains the source --> + <Cell style="list_value" width="$fact"><var var="@fact" /></Cell> + <!-- Date of the fact --> + <Cell style="list_value" width="$dateevent"><GedcomValue tag="@fact:DATE"/></Cell> + <!-- Detailed source text --> + <Cell style="list_value" newline="1"> + <SetVar name="repeatedSource" value="0" /> + <RepeatTag tag="@fact:SOUR"> + <Gedcom id="@SOUR"> + <if condition="@ID==$sid"> + <SetVar name="printsource" value="1" /> + </if> + </Gedcom> + <if condition="$printsource==1"> + <if condition="$repeatedSource==1">; </if> + <if condition="@SOUR:PAGE!='' or @SOUR:DATA:TEXT!=''"> + <SetVar name="repeatedSource" value="1" /> + </if> + <GedcomValue tag="SOUR:PAGE"/> + <if condition="@SOUR:DATA:TEXT!=''"> + <if condition="@SOUR:PAGE!=''"> + <br /> + </if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </if> + <SetVar name="printsource" value="0" /> + </if> + </RepeatTag> + </Cell> + <SetVar name="moresource" value="1" /> + </if> + <SetVar name="printfact" value="0" /> + </Facts> + </List> + + <!-- Print the list counter --> + <if condition="$printedsource==0"> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total individuals')"/>: 0</Cell> + </if> + <if condition="$printedsource > 0"> + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total individuals')"/>: <var var="printedsource" /></Cell> + </if> + + <NewPage /> + <!-- Family List --> + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="center" newline="1" style="listtype"><var var="WT_I18N::translate('Families')" /></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + <!-- Family Name --> + <Cell border="1" style="list_label" width="$namefam"><var var="WT_I18N::translate('Name')" /></Cell> + <!-- Name of the fact that contains the source --> + <Cell border="1" style="list_label" width="$fact"><var var="WT_I18N::translate('Event')" /></Cell> + <!-- Date of the fact --> + <Cell bgcolor="#AAAAAA" border="1" style="list_label" width="$dateevent"><var var="translate_fact('DATE')" /></Cell> + <!-- Detailed source text --> + <Cell border="1" newline="1" style="list_label"><var var="translate_fact('SOUR:PAGE')" /></Cell> + + <!-- Family List --> + <TextBox height="$vspace" newline="1" padding="0"/> + <SetVar name="printedsource" value="0" /> + <List list="family" filter1=":SOUR CONTAINS @$sid@" sortby="MARR:DATE"> + <SetVar name="moresource" value="0" /> + <SetVar name="printsource" value="0" /> + <!-- Printed List counter --> + <SetVar name="printedsource" value="$printedsource + 1" /> + + <!-- Family Name --> + <Cell style="list_value" width="$namefam"><GetPersonName id="" /></Cell> + <Facts ignore="$ignore"> + <SetVar name="printfact" value="0" /> + <RepeatTag tag="@fact:SOUR"> + <Gedcom id="@SOUR"> + <if condition="@ID==$sid"> + <SetVar name="printfact" value="1" /> + </if> + </Gedcom> + </RepeatTag> + + <if condition="$printfact==1"> + <SetVar name="printsource" value="0" /> + <!-- Indent the fact line if more then one fact has source --> + <if condition="$moresource==1"> + <Cell style="list_value" width="$namefam"> </Cell> + </if> + + <!-- Name of the fact that contains the source --> + <Cell style="list_value" width="$fact"> + <if condition="@fact=='MARR'"> + <!-- Print different type of marriages --> + <if condition="@MARR:TYPE==''"> + <var var="@fact" /> + </if> + <if condition="@MARR:TYPE=='Religious'"> + <var var="WT_I18N::translate('Religious marriage')" /> + </if> + <if condition="@MARR:TYPE=='Civil'"> + <var var="WT_I18N::translate('Civil marriage')" /> + </if> + <if condition="@MARR:TYPE=='Partners'"> + <var var="WT_I18N::translate('Registered partnership')" /> + </if> + </if> + <if condition="@fact!='MARR'"> + <var var="@fact" /> + </if> + </Cell> + + <!-- Date of the fact --> + <Cell style="list_value" width="$dateevent"><GedcomValue tag="@fact:DATE"/></Cell> + <!-- Detailed source text --> + <Cell style="list_value" newline="1"> + <SetVar name="repeatedSource" value="0" /> + <RepeatTag tag="@fact:SOUR"> + <Gedcom id="@SOUR"> + <if condition="@ID==$sid"> + <SetVar name="printsource" value="1" /> + </if> + </Gedcom> + <if condition="$printsource==1"> + <if condition="$repeatedSource==1">; </if> + <if condition="@SOUR:PAGE!='' or @SOUR:DATA:TEXT!=''"> + <SetVar name="repeatedSource" value="1" /> + </if> + <GedcomValue tag="SOUR:PAGE"/> + <if condition="@SOUR:DATA:TEXT!=''"> + <if condition="@SOUR:PAGE!=''"> + <br /> + </if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </if> + <SetVar name="printsource" value="0" /> + </if> + </RepeatTag> + </Cell> + <SetVar name="moresource" value="1" /> + </if> + <SetVar name="printfact" value="0" /> + </Facts> + </List> + + <!-- Print the list counter --> + <if condition="$printedsource==0"> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total families')"/>: 0</Cell> + </if> + <if condition="$printedsource > 0"> + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total families')"/>: <var var="printedsource" /></Cell> + </if> + <TextBox height="$vspace" newline="1" padding="0"/> + </if> + <if condition="$stype=='records'"> + <!-- List type --> + <Cell align="center" newline="1" style="listtype"><var var="WT_I18N::translate('Individuals')" /></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + + <!-- Individual Name --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" style="list_label" width="$nameindi"><var var="WT_I18N::translate('Name')" /></Cell> + <!-- Birth date --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='BIRT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" style="list_label" width="$fact"><var var="translate_fact('BIRT:DATE')" /></Cell> + <Cell border="1" style="list_label" width="$dateevent"><var var="translate_fact('BIRT:PLAC')" /></Cell> + <Cell border="1" style="list_label" width="$fact"><var var="translate_fact('DEAT:DATE')" /></Cell> + <Cell border="1" style="list_label" width="$dateevent"><var var="translate_fact('DEAT:PLAC')" /></Cell> + <!-- Detailed source text --> + <Cell border="1" newline="1" style="list_label"><var var="translate_fact('SOUR:PAGE')" /></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + + <!-- Individual List --> + <List list="individual" filter1="SOUR CONTAINS @$sid@" sortby="$sortby"> + <!-- Printed List counter --> + <SetVar name="printedsource" value="$printedsource + 1" /> + <!-- Individual Name --> + <Cell style="list_value" width="$nameindi"><GetPersonName id="" /></Cell> + <!-- Birth date --> + <Cell style="list_value" width="$dateevent"><GedcomValue tag="BIRT:DATE" /></Cell> + <!-- Birth place --> + <Cell style="list_value" width="$fact"><GedcomValue tag="BIRT:PLAC" /></Cell> + <!-- Death date --> + <Cell style="list_value" width="$dateevent"><GedcomValue tag="DEAT:DATE" /></Cell> + <!-- Death place --> + <Cell style="list_value" width="$fact"><GedcomValue tag="DEAT:PLAC" /></Cell> + <!-- Detailed source text --> + <Cell style="list_value" newline="1"> + <GedcomValue tag="SOUR:PAGE"/> + <if condition="@SOUR:DATA:TEXT!=''"> + <br /><GedcomValue tag="SOUR:DATA:TEXT"/> + </if> + </Cell> + </List> + + <!-- Print the list counter --> + <if condition="$printedsource==0"> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total individuals')"/>: 0</Cell> + </if> + <if condition="$printedsource > 0"> + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total individuals')"/>: <var var="printedsource" /></Cell> + </if> + <NewPage /> + <!-- Family List --> + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="center" newline="1" style="listtype"><var var="WT_I18N::translate('Families')" /></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + <!-- Family Name --> + <Cell border="1" style="list_label" width="$namefam"><var var="WT_I18N::translate('Name')" /></Cell> + <!-- Name of the fact that contains the source --> + <Cell bgcolor="#AAAAAA" border="1" style="list_label" width="$dateevent"><var var="translate_fact('MARR:DATE')" /></Cell> + <!-- Date of the fact --> + <Cell border="1" style="list_label" width="$fact"><var var="translate_fact('MARR:PLAC')" /></Cell> + <!-- Detailed source text --> + <Cell border="1" newline="1" style="list_label"><var var="translate_fact('SOUR:PAGE')" /></Cell> + + <!-- Family List --> + <TextBox height="$vspace" newline="1" padding="0"/> + <SetVar name="printedsource" value="0" /> + <List list="family" filter1="SOUR CONTAINS @$sid@" sortby="MARR:DATE"> + <SetVar name="printsource" value="0" /> + <!-- Printed List counter --> + <SetVar name="printedsource" value="$printedsource + 1" /> + + <!-- Family Name --> + <Cell style="list_value" width="$namefam"><GetPersonName id="" /></Cell> + <!-- Date of the fact --> + <Cell style="list_value" width="$dateevent"><GedcomValue tag="MARR:DATE"/></Cell> + <!-- Place of the fact --> + <Cell style="list_value" width="$fact"><GedcomValue tag="MARR:PLAC"/></Cell> + <!-- Detailed source text --> + <Cell style="list_value" newline="1"> + <GedcomValue tag="SOUR:PAGE"/> + <if condition="@SOUR:DATA:TEXT!=''"> + <br /><GedcomValue tag="SOUR:DATA:TEXT"/> + </if> + </Cell> + </List> + + <!-- Print the list counter --> + <if condition="$printedsource==0"> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total families')"/>: 0</Cell> + </if> + <if condition="$printedsource > 0"> + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total families')"/>: <var var="printedsource" /></Cell> + </if> + <TextBox height="$vspace" newline="1" padding="0"/> + </if> + </Body> + + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now/></Cell> + </Footer> + + </Doc> +</Report> diff --git a/modules_v2/families/module.php b/modules_v2/families/module.php new file mode 100644 index 0000000000..0b6cd930a7 --- /dev/null +++ b/modules_v2/families/module.php @@ -0,0 +1,254 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class families_WT_Module extends WT_Module implements WT_Module_Sidebar { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Families'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a sidebar which allows for easy navigation of famlies in a list format.'); + } + + // Implement WT_Module_Sidebar + public function defaultSidebarOrder() { + return 40; + } + + // Implement WT_Module_Sidebar + public function hasSidebarContent() { + return true; + } + + // Implement WT_Module_Sidebar + public function getSidebarAjaxContent() { + $alpha =safe_GET('alpha'); // All surnames beginning with this letter where "@"=unknown and ","=none + $surname =safe_GET('surname', '[^<>&%{};]*'); // All indis with this surname. NB - allow ' and " + $search =safe_GET('search'); + + $last = array('alpha'=>$alpha, 'surname'=>$surname, 'search'=>$search); + $_SESSION['sb_families_last'] = $last; + if (!empty($search)) return $this->search($search); + else if (empty($surname)) return $this->getAlphaSurnames($alpha, $surname); + else return $this->getSurnameFams($alpha, $surname); + } + + // Implement WT_Module_Sidebar + public function getSidebarContent() { + global $SHOW_MARRIED_NAMES, $WT_IMAGES; + + // Fetch a list of the initial letters of all surnames in the database + $initials=get_indilist_salpha($SHOW_MARRIED_NAMES, false, WT_GED_ID); + + $out = '<script type="text/javascript"> + <!-- + var famloadedNames = new Array(); + + function searchQ() { + var query = jQuery("#sb_fam_name").attr("value"); + if (query.length>1) { + jQuery("#sb_fam_content").load("sidebar.php?sb_action=families&search="+query); + } + } + + jQuery(document).ready(function() { + jQuery("#sb_fam_name").focus(function() {this.select();}); + jQuery("#sb_fam_name").blur(function() {if (this.value=="") this.value="'.WT_I18N::translate('Search').'";}); + var famtimerid = null; + jQuery("#sb_fam_name").keyup(function(e) { + if (famtimerid) window.clearTimeout(famtimerid); + famtimerid = window.setTimeout("searchQ()", 500); + }); + jQuery(".sb_fam_letter").live("click", function() { + jQuery("#sb_fam_content").load(this.href); + return false; + }); + jQuery(".sb_fam_surname").live("click", function() { + var surname = jQuery(this).attr("title"); + var alpha = jQuery(this).attr("alt"); + + if (!famloadedNames[surname]) { + jQuery.ajax({ + url: "sidebar.php?sb_action=families&alpha="+alpha+"&surname="+surname, + cache: false, + success: function(html) { + jQuery("#sb_fam_"+surname+" div").html(html); + jQuery("#sb_fam_"+surname+" div").show(); + jQuery("#sb_fam_"+surname).css("list-style-image", "url('.$WT_IMAGES['minus'].')"); + famloadedNames[surname]=2; + } + }); + } + else if (famloadedNames[surname]==1) { + famloadedNames[surname]=2; + jQuery("#sb_fam_"+surname+" div").show(); + jQuery("#sb_fam_"+surname).css("list-style-image", "url('.$WT_IMAGES['minus'].')"); + } + else { + famloadedNames[surname]=1; + jQuery("#sb_fam_"+surname+" div").hide(); + jQuery("#sb_fam_"+surname).css("list-style-image", "url('.$WT_IMAGES['plus'].')"); + } + return false; + }); + }); + //--> + </script> + <form method="post" action="sidebar.php" onsubmit="return false;"> + <input type="text" name="sb_fam_name" id="sb_fam_name" value="'.WT_I18N::translate('Search').'" /> + <p>'; + foreach ($initials as $letter=>$count) { + switch ($letter) { + case '@': + $html=WT_I18N::translate('(unknown)'); + break; + case ',': + $html=WT_I18N::translate('None'); + break; + default: + $html=$letter; + break; + } + $html='<a href="sidebar.php?sb_action=families&alpha='.urlencode($letter).'" class="sb_fam_letter">'.PrintReady($html).'</a>'; + $out .= $html." "; + } + + $out .= '</p>'; + $out .= '<div id="sb_fam_content">'; + + if (isset($_SESSION['sb_families_last'])) { + $last = $_SESSION['sb_families_last']; + $alpha = $last['alpha']; + $search = $last['search']; + $surname = $last['surname']; + if (!empty($search)) $out.= $this->search($search); + else if (!empty($alpha)) $out.= $this->getAlphaSurnames($alpha, $surname); + } + + $out .= '</div></form>'; + return $out; + } + + public function getAlphaSurnames($alpha, $surname1='') { + global $SHOW_MARRIED_NAMES; + $surns=get_indilist_surns('', $alpha, $SHOW_MARRIED_NAMES, true, WT_GED_ID); + $out = '<ul>'; + foreach ($surns as $surname=>$surns) { + $out .= '<li id="sb_fam_'.$surname.'" class="sb_fam_surname_li"><a href="'.$surname.'" title="'.$surname.'" alt="'.$alpha.'" class="sb_fam_surname">'.$surname.'</a>'; + if (!empty($surname1) && $surname1==$surname) { + $out .= '<div class="name_tree_div_visible">'; + $out .= $this->getSurnameFams($alpha, $surname1); + $out .= '</div>'; + } + else + $out .= '<div class="name_tree_div"></div>'; + $out .= '</li>'; + } + $out .= '</ul>'; + return $out; + } + + public function getSurnameFams($alpha, $surname) { + global $SHOW_MARRIED_NAMES; + $families=get_famlist_fams($surname, $alpha, '', $SHOW_MARRIED_NAMES, WT_GED_ID); + $out = '<ul>'; + $private_count = 0; + foreach ($families as $family) { + if ($family->canDisplayName()) { + $out .= '<li><a href="'.$family->getHtmlUrl().'">'.$family->getFullName().' '; + if ($family->canDisplayDetails()) { + $bd = $family->getMarriageYear(); + if (!empty($bd)) $out .= PrintReady(' ('.$bd.')'); + } + $out .= '</a></li>'; + } + else $private_count++; + } + if ($private_count>0) $out .= '<li>'.PrintReady(WT_I18N::translate('Private').' ('.$private_count.')').'</li>'; + $out .= '</ul>'; + return $out; + } + + public function search($query) { + if (strlen($query)<2) return ''; + + //-- search for INDI names + $rows=WT_DB::prepare( + "SELECT ? AS type, i_id AS xref, i_file AS ged_id, i_gedcom AS gedrec, i_isdead, i_sex". + " FROM `##individuals`, `##name`". + " WHERE (i_id LIKE ? OR n_sort LIKE ?)". + " AND i_id=n_id AND i_file=n_file AND i_file=?". + " ORDER BY n_sort LIMIT ".WT_AUTOCOMPLETE_LIMIT + ) + ->execute(array('INDI', "%{$query}%", "%{$query}%", WT_GED_ID)) + ->fetchAll(PDO::FETCH_ASSOC); + $ids = array(); + foreach ($rows as $row) { + $ids[] = $row['xref']; + } + + $vars=array('FAM'); + if (empty($ids)) { + //-- no match : search for FAM id + $where = "f_id LIKE ?"; + $vars[]="%{$FILTER}%"; + } else { + //-- search for spouses + $qs=implode(',', array_fill(0, count($ids), '?')); + $where = "(f_husb IN ($qs) OR f_wife IN ($qs))"; + $vars=array_merge($vars, $ids, $ids); + } + + $vars[]=WT_GED_ID; + $rows=WT_DB::prepare("SELECT ? AS type, f_id AS xref, f_file AS ged_id, f_gedcom AS gedrec, f_husb, f_wife, f_numchil FROM `##families` WHERE {$where} AND f_file=? LIMIT ".WT_AUTOCOMPLETE_LIMIT) + ->execute($vars) + ->fetchAll(PDO::FETCH_ASSOC); + + $out = '<ul>'; + $private_count = 0; + foreach ($rows as $row) { + $family=WT_Family::getInstance($row); + if ($family->canDisplayName()) { + $out .= '<li><a href="'.$family->getHtmlUrl().'">'.$family->getFullName().' '; + if ($family->canDisplayDetails()) { + $bd = $family->getMarriageYear(); + if (!empty($bd)) $out .= PrintReady(' ('.$bd.')'); + } + $out .= '</a></li>'; + } + else $private_count++; + } + if ($private_count>0) $out .= '<li>'.PrintReady(WT_I18N::translate('Private').' ('.$private_count.')').'</li>'; + $out .= '</ul>'; + return $out; + } +} diff --git a/modules_v2/family_group_report/module.php b/modules_v2/family_group_report/module.php new file mode 100644 index 0000000000..0506dd2623 --- /dev/null +++ b/modules_v2/family_group_report/module.php @@ -0,0 +1,67 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class family_group_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Family Group Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of family members and their details.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + global $controller; + + if ($controller && isset($controller->famid)) { + $pid='&pid='.$controller->famid; + } else { + $pid=''; + } + + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'.$pid); + $menu->addIcon('sfamily'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/family_group_report/report.xml b/modules_v2/family_group_report/report.xml new file mode 100644 index 0000000000..8c39ff7f55 --- /dev/null +++ b/modules_v2/family_group_report/report.xml @@ -0,0 +1,1054 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Family Group Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of family members and their details.')" /></Description> + <!-- User inputs for the report --> + <Input name="famid" lookup="FAM" type="text" default=""><var var="WT_I18N::translate('Enter Family ID')" /></Input> + <Input name="sources" type="checkbox" default="1"><var var="WT_I18N::translate('Show sources?')" /></Input> + <Input name="notes" type="checkbox" default="1"><var var="WT_I18N::translate('Show notes?')" /></Input> + <Input name="photos" type="checkbox" default="1"><var var="WT_I18N::translate('Show photos?')" /></Input> + <Input name="blanks" type="checkbox" default="0"><var var="WT_I18N::translate('Print basic events when blank?')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + <Input name="colors" type="checkbox" default="1"><var var="WT_I18N::translate('Use colors')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="18" /> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Links to sources - required style name by the generator --> + <Style name="footnotenum" font="$fonts" size="6" /> + <!-- Source text - FootnoteTexts - required style name by the generator --> + <Style name="footnote" font="$fonts" size="8" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8" /> + <!-- Page Header text --> + <Style name="pageheader" font="$fonts" size="14"/> + <!-- Individual names in text boxes --> + <Style name="name" font="$fonts" size="10" style="b"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9" /> + <!-- Facts text --> + <Style name="fact" font="$fonts" size="8"/> + <!-- Date --> + <Style name="date" font="$fonts" size="8"/> + + <SetVar name="ignore" value="CHAN,NAME,SEX,SOUR,NOTE,OBJE,RESN,FAMC,FAMS,TITL,CHIL,HUSB,WIFE,MARR,BIRT,CHR,BAPM,DEAT,CREM,BURI,_UID,_WT_OBJE_SORT" /> + <!-- Setup colors --> + <!-- Section title background color --> + <SetVar name="sectionbox_bgcolor" value="#AAAAAA"/> + <SetVar name="malebox_bgcolor" value=""/> + <SetVar name="femalebox_bgcolor" value=""/> + <SetVar name="unknowngenderbox_bgcolor" value=""/> + <SetVar name="factbox_bgcolor" value=""/> + <SetVar name="tcolor" value=""/> + <!-- Use colors --> + <if condition="$colors==1"> + <!-- Section title background color --> + <SetVar name="sectionbox_bgcolor" value="#9CA3D4"/> + <!-- Male background color --> + <SetVar name="malebox_bgcolor" value="#D6E0EA"/> + <!-- Female background color --> + <SetVar name="femalebox_bgcolor" value="#E9DAF1"/> + <!-- Unknown gender --> + <SetVar name="unknowngenderbox_bgcolor" value="#FFFFFF"/> + <!-- Fact boxes --> + <SetVar name="factbox_bgcolor" value="#D1D9FF"/> + <!-- Text color - black --> + <SetVar name="tcolor" value="#000000"/> + </if> + + <!-- space height --> + <SetVar name="sheight" value="15"/> + + <!-- set the default widths --> + <SetVar name="width" value="0" /> + <SetVar name="width1" value="0" /> + <SetVar name="width2" value="0" /> + <SetVar name="dwidth" value="185" /> + <SetVar name="pwidth" value="436" /> + <!-- reset the widths if the photos are shown --> + <if condition="$photos==1"> + <SetVar name="width" value="433" /> + <SetVar name="width1" value="418" /> + <SetVar name="width2" value="233" /> + </if> + <!-- New Page for Sources controller if SOUR exist --> + <SetVar name="source_exist" value="0"/> + + <!-- start of main report document --> + <Doc pageSize="$pageSize"> + <SetVar name="husbid" value="@HUSB" /> + <SetVar name="wifeid" value="@WIFE" /> + + <Header> + <Cell align="center" newline="1" style="header"><var var="WT_I18N::translate('Family Group Report')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + </Header> + + <Body> + <Gedcom id="$famid"> + <!-- Print the Family name with Level 1 sources --> + <TextBox newline="1"> + <Text style="pageheader"><var var="WT_I18N::translate('Family')" /> <GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + + <!-- Show all family images --> + <if condition="$photos==1"> + <!-- This is an image not a text, so don't use text padding + Reset also the last height after all the images has been printed + set pagecheck to 0, the image function check is too + and "trick" the X-position back to the margin with a newline --> + <TextBox left="$pwidth" newline="1" pagecheck="0" padding="0" reseth="1" width="80"> + <RepeatTag tag="OBJE"> + <Image file="@FILE" width="80" ln="N"/> + </RepeatTag> + </TextBox> + </if> + + <!-- Print the husband --> + <Gedcom id="@HUSB"> + <!-- print the name and any level 1 sources --> + <TextBox bgcolor="$malebox_bgcolor" border="1" width="$width" newline="1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Husband')" /> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="" /> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + + <if condition="$blanks==1 or @BIRT:DATE!='' or @BIRT:PLAC!=''"> + <!-- print Birth --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Birth')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="BIRT:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="BIRT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="BIRT:PLAC" /></Text> + </TextBox> + </if> + <if condition="$blanks==1 or @CHR:DATE!='' or @CHR:PLAC!=''"> + <!-- print Christening --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Christening')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="CHR:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="CHR:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="CHR:PLAC" /></Text> + </TextBox> + </if> + + <!-- print all of the other facts --> + <Facts ignore="$ignore"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="@fact" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="@fact:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="@fact:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <if condition="@desc!=''"> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> + <if condition="@desc=='Y'"> + <var var="WT_I18N::translate('Yes')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc=='N'"> + <var var="WT_I18N::translate('No')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc!='Y' and @desc!='N'"> + <GedcomValue tag="@desc"/> <GedcomValue tag="@fact:PLAC"/> + </if> + </Text> + </TextBox> + </if> + <if condition="@desc==''"> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> + <GedcomValue tag="@fact:PLAC" /> <GedcomValue tag="@fact:TEMP" /> + </Text> + </TextBox> + </if> + </Facts> + + <if condition="$blanks==1 or @DEAT:DATE!='' or @DEAT:PLAC!=''"> + <!-- print Death --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Death')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="DEAT:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="DEAT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="DEAT:PLAC" /></Text> + </TextBox> + </if> + <!-- indicates that a Level 1 CREM record is not present --> + <SetVar name="level1CREM" value="0" /> + <if condition="$blanks==1 or @CREM:DATE!='' or @CREM:PLAC!=''"> + <!-- print Cremation --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="translate_fact('CREM')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="CREM:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="CREM:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="CREM:PLAC" /></Text> + </TextBox> + <!-- indicates that a Level 1 CREM record is present --> + <SetVar name="level1CREM" value="1" /> + </if> + <if condition="$blanks==1 or @BURI:CREM!='' or @BURI:DATE!='' or @BURI:PLAC!=''"> + <!-- Look for Level 2 CREM subordinate to BURI (should have been at Level 1) --> + <if condition="@BURI:CREM!='' and $level1CREM!=1"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="translate_fact('CREM')" /> </Text> + <Text color="$tcolor" style="text"> </Text> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> </Text> + </TextBox> + </if> + <!-- Now for the real BURI information --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Burial')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="BURI:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="BURI:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="BURI:PLAC" /></Text> + </TextBox> + </if> + + <Gedcom id="$famid"> + <if condition="$blanks==1 or @MARR:DATE!='' or @MARR:PLAC!=''"> + <!-- print Marriage --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Marriage')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="MARR:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="MARR:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="MARR:PLAC" /></Text> + </TextBox> + </if> + + <!-- print all of the other family facts --> + <Facts ignore="$ignore"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="@fact" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="@fact:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="@fact:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <if condition="@desc!=''"> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> + <if condition="@desc=='Y'"> + <var var="WT_I18N::translate('Yes')" /> <GedcomValue tag="@fact:PLAC"/> <GedcomValue tag="@fact:TEMP" /> + </if> + <if condition="@desc=='N'"> + <var var="WT_I18N::translate('No')" /> <GedcomValue tag="@fact:PLAC"/> <GedcomValue tag="@fact:TEMP" /> + </if> + <if condition="@desc!='Y' and @desc!='N'"> + <GedcomValue tag="@desc"/> <GedcomValue tag="@fact:PLAC"/> <GedcomValue tag="@fact:TEMP" /> + </if> + </Text> + </TextBox> + </if> + <if condition="@desc==''"> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> + <GedcomValue tag="@fact:PLAC" /> <GedcomValue tag="@fact:TEMP" /> + </Text> + </TextBox> + </if> + </Facts> + </Gedcom> + + <!-- print the father and mother of the main husband --> + <Gedcom id="@FAMC"> + <TextBox bgcolor="$malebox_bgcolor" border="1" left="15" width="$width1" newline="1"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Father')" /> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="@HUSB" /></Text> + <Gedcom id="@HUSB"> + <Text color="$tcolor" style="text"> (<varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE"/><Gedcom id="DEAT"> - <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE"/></Gedcom>)</Text> + </Gedcom> + </TextBox> + <TextBox bgcolor="$femalebox_bgcolor" border="1" left="15" width="$width1" newline="1"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Mother')" /> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="@WIFE" /></Text> + <Gedcom id="@WIFE"> + <Text color="$tcolor" style="text"> (<varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE"/><Gedcom id="DEAT"> - <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE"/></Gedcom>)</Text> + </Gedcom> + </TextBox> + </Gedcom> + <!-- print any notes for the husband --> + <if condition="$notes==1"> + <RepeatTag tag="NOTE"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$width1" newline="1"> + <Text color="$tcolor" style="name"><var var="WT_I18N::translate('Note')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="NOTE" /></Text> + </TextBox> + </RepeatTag> + </if> + <TextBox height="$sheight" newline="1"/> + </Gedcom> + <!-- end of main husband --> + + <!-- Print the wife --> + <Gedcom id="@WIFE"> + <!-- print the name and sources --> + <TextBox bgcolor="$femalebox_bgcolor" border="1" width="$width" newline="1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Wife')" /> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="" /> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + + <if condition="$blanks==1 or @BIRT:DATE!='' or @BIRT:PLAC!=''"> + <!-- print Birth --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Birth')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="BIRT:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="BIRT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="BIRT:PLAC" /></Text> + </TextBox> + </if> + <if condition="$blanks==1 or @CHR:DATE!='' or @CHR:PLAC!=''"> + <!-- print Christening --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Christening')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="CHR:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="CHR:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="CHR:PLAC" /></Text> + </TextBox> + </if> + + <!-- print all of the other facts --> + <Facts ignore="$ignore"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="@fact" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="@fact:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="@fact:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <if condition="@desc!=''"> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> + <if condition="@desc=='Y'"> + <var var="WT_I18N::translate('Yes')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc=='N'"> + <var var="WT_I18N::translate('No')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc!='Y' and @desc!='N'"> + <GedcomValue tag="@desc"/> <GedcomValue tag="@fact:PLAC"/> + </if> + </Text> + </TextBox> + </if> + <if condition="@desc==''"> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> + <GedcomValue tag="@fact:PLAC" /> <GedcomValue tag="@fact:TEMP" /> + </Text> + </TextBox> + </if> + </Facts> + + <if condition="$blanks==1 or @DEAT:DATE!='' or @DEAT:PLAC!=''"> + <!-- print Death --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Death')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="DEAT:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="DEAT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="DEAT:PLAC" /></Text> + </TextBox> + </if> + <!-- indicates that a Level 1 CREM record is not present --> + <SetVar name="level1CREM" value="0" /> + <if condition="$blanks==1 or @CREM:DATE!='' or @CREM:PLAC!=''"> + <!-- print Cremation --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="translate_fact('CREM')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="CREM:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="CREM:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="CREM:PLAC" /></Text> + </TextBox> + <!-- indicates that a Level 1 CREM record is present --> + <SetVar name="level1CREM" value="1" /> + </if> + <if condition="$blanks==1 or @BURI:CREM!='' or @BURI:DATE!='' or @BURI:PLAC!=''"> + <!-- Look for Level 2 CREM subordinate to BURI (should have been at Level 1) --> + <if condition="@BURI:CREM!='' and $level1CREM!=1"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="translate_fact('CREM')" /> </Text> + <Text color="$tcolor" style="text"> </Text> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> </Text> + </TextBox> + </if> + <!-- Now for the real BURI information --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Burial')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="BURI:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="BURI:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="BURI:PLAC" /></Text> + </TextBox> + </if> + + <!-- print the wife's parents --> + <Gedcom id="@FAMC"> + <TextBox bgcolor="$malebox_bgcolor" border="1" left="15" width="$width1" newline="1"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Father')" /> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="@HUSB" /></Text> + <Gedcom id="@HUSB"> + <Text color="$tcolor" style="text"> (<varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE"/><Gedcom id="DEAT"> - <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE"/></Gedcom>)</Text> + </Gedcom> + </TextBox> + <TextBox bgcolor="$femalebox_bgcolor" border="1" left="15" width="$width1" newline="1"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Mother')" /> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="@WIFE" /></Text> + <Gedcom id="@WIFE"> + <Text color="$tcolor" style="text"> (<varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE"/><Gedcom id="DEAT"> - <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE"/></Gedcom>)</Text> + </Gedcom> + </TextBox> + </Gedcom> + + <!-- print the wife's notes --> + <if condition="$notes==1"> + <RepeatTag tag="NOTE"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$width1" newline="1"> + <Text color="$tcolor" style="name"><var var="WT_I18N::translate('Note')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="NOTE" /></Text> + </TextBox> + </RepeatTag> + </if> + <TextBox height="$sheight" newline="1"/> + </Gedcom> + <!-- end of main wife --> + + <!-- print the children box in gray or color --> + <TextBox border="1" width="$width" newline="1" bgcolor="$sectionbox_bgcolor"> + <Text color="$tcolor" style="text"> + <var var="WT_I18N::translate('Children')" /> <var var="WT_I18N::translate('List each child in order of birth.')" /> + </Text> + </TextBox> + + <!-- find and print all of the children in the family --> + <RepeatTag tag="CHIL"> + <Gedcom id="@CHIL"> + <!-- Print the male child's name --> + <if condition="@SEX=='M'"> + <TextBox bgcolor="$malebox_bgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Son')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="" /> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + </if> + <!-- Print the female child's name --> + <if condition="@SEX=='F'"> + <TextBox bgcolor="$femalebox_bgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Daughter')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="" /> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + </if> + <!-- Print the unknown gender child's name --> + <if condition="(@SEX=='U') or (@SEX=='')"> + <TextBox bgcolor="$unknowngenderbox_bgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Gender')"/> <var var="WT_I18N::translate_c('unknown gender', 'Unknown')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="" /> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + </if> + + <if condition="$blanks==1 or @BIRT:DATE!='' or @BIRT:PLAC!=''"> + <!-- print Birth --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Birth')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="BIRT:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="BIRT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="BIRT:PLAC" /></Text> + </TextBox> + </if> + <if condition="$blanks==1 or @CHR:DATE!='' or @CHR:PLAC!=''"> + <!-- print Christening --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Christening')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="CHR:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="CHR:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="CHR:PLAC" /></Text> + </TextBox> + </if> + + <!-- print all of the other facts --> + <Facts ignore="$ignore"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="@fact" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="@fact:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="@fact:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <if condition="@desc!=''"> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> + <if condition="@desc=='Y'"> + <var var="WT_I18N::translate('Yes')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc=='N'"> + <var var="WT_I18N::translate('No')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc!='Y' and @desc!='N'"> + <GedcomValue tag="@desc"/> <GedcomValue tag="@fact:PLAC"/> + </if> + </Text> + </TextBox> + </if> + <if condition="@desc==''"> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> + <GedcomValue tag="@fact:PLAC" /> <GedcomValue tag="@fact:TEMP" /> + </Text> + </TextBox> + </if> + </Facts> + + <if condition="$blanks==1 or @DEAT:DATE!='' or @DEAT:PLAC!=''"> + <!-- print Death --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Death')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="DEAT:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="DEAT:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="DEAT:PLAC" /></Text> + </TextBox> + </if> + <!-- indicates that a Level 1 CREM record is not present --> + <SetVar name="level1CREM" value="0" /> + <if condition="$blanks==1 or @CREM:DATE!='' or @CREM:PLAC!=''"> + <!-- print Cremation --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="translate_fact('CREM')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="CREM:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="CREM:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="CREM:PLAC" /></Text> + </TextBox> + <!-- indicates that a Level 1 CREM record is present --> + <SetVar name="level1CREM" value="1" /> + </if> + <if condition="$blanks==1 or @BURI:CREM!='' or @BURI:DATE!='' or @BURI:PLAC!=''"> + <!-- Look for Level 2 CREM subordinate to BURI (should have been at Level 1) --> + <if condition="@BURI:CREM!='' and $level1CREM!=1"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="translate_fact('CREM')" /> </Text> + <Text color="$tcolor" style="text"> </Text> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"> </Text> + </TextBox> + </if> + <!-- Now for the real BURI information --> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Burial')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="BURI:DATE" /> </Text> + <if condition="$sources==1"> + <RepeatTag tag="BURI:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + </if> + </TextBox> + <TextBox bgcolor="$factbox_bgcolor" border="1" width="$width2" newline="1"> + <Text color="$tcolor" style="text"><GedcomValue tag="BURI:PLAC" /></Text> + </TextBox> + </if> + + <!-- set the $spid variable so that we know who this person is and can print the correct spouse later --> + <SetVar name="spid" value="@ID" /> + <RepeatTag tag="FAMS"> + <!-- get this child's family as spouse --> + <Gedcom id="@FAMS"> + <if condition="$spid==@HUSB"> + <TextBox bgcolor="$femalebox_bgcolor" border="1" left="15" width="$width1" newline="1"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Wife')" /> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="@WIFE" /></Text> + <Gedcom id="@WIFE"> + <Text color="$tcolor" style="text"> (<varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE"/><Gedcom id="DEAT"> - <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE"/></Gedcom>)</Text> + </Gedcom> + </TextBox> + </if> + <if condition="$spid==@WIFE"> + <TextBox bgcolor="$malebox_bgcolor" border="1" left="15" width="$width1" newline="1"> + <Text color="$tcolor" style="fact"><var var="WT_I18N::translate('Husband')" /> </Text> + <Text color="$tcolor" style="name"><GetPersonName id="@HUSB" /></Text> + <Gedcom id="@HUSB"> + <Text color="$tcolor" style="text"> (<varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE"/><Gedcom id="DEAT"> - <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE"/></Gedcom>)</Text> + </Gedcom> + </TextBox> + </if> + </Gedcom> + </RepeatTag> + + <!-- print any notes for the child --> + <if condition="$notes==1"> + <RepeatTag tag="NOTE"> + <TextBox bgcolor="$factbox_bgcolor" border="1" left="15" width="$width1" newline="1"> + <Text color="$tcolor" style="name"><var var="WT_I18N::translate('Note')" /> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="NOTE" /></Text> + </TextBox> + </RepeatTag> + </if> + </Gedcom> + <!-- end of child gedcom --> + <TextBox height="$sheight" newline="1"/> + </RepeatTag> + <!-- end of children repeat --> + </Gedcom> + <!-- end of main family gedcom --> + + <!-- if the sources were on, print the source citations as footnotes --> + <if condition="$source_exist==1"> + <NewPage /> + <TextBox newline="1" width="$width"> + <Text style="pageheader"><br /><var var="WT_I18N::translate('Sources')" /><br /><br /></Text> + <FootnoteTexts /> + </TextBox> + </if> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now /></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/family_nav/module.php b/modules_v2/family_nav/module.php new file mode 100644 index 0000000000..8098c633e4 --- /dev/null +++ b/modules_v2/family_nav/module.php @@ -0,0 +1,862 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require_once WT_ROOT.'includes/functions/functions_charts.php'; + +class family_nav_WT_Module extends WT_Module implements WT_Module_Sidebar { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Family Navigator'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab to the individual page which displays a family navigator on the individual page.'); + } + + // Implement WT_Module_Sidebar + public function defaultSidebarOrder() { + return 10; + } + + // Implement WT_Module_Sidebar + public function hasSidebarContent() { + return true; + } + + // Implement WT_Module_Sidebar + public function getSidebarContent() { + global $WT_IMAGES; + + $out = '<div id="sb_family_nav_content">'; + + if ($this->controller) { + $root = null; + if ($this->controller->pid) { + $root = WT_Person::getInstance($this->controller->pid); + } + else if ($this->controller->famid) { + $fam = WT_Family::getInstance($this->controller->famid); + if ($fam) $root = $fam->getHusband(); + if (!$root) $root = $fam->getWife(); + } + if ($root!=null) { + $this->controller = new WT_Controller_Individual(); + $this->controller->indi=$root; + $this->controller->pid=$root->getXref(); + $this->setController($this->controller); + $out .= $this->getTabContent(); + } + } + $out .= '</div>'; + return $out; + } + + // Implement WT_Module_Sidebar + public function getSidebarAjaxContent() { + return ""; + } + + // TODO: These functions aren't really part of the WT_Module_Tab interface, as + // this module no longer provides a tab. + public function hasTabContent() { + return true; + } + public function getTabContent() { + $out = ''; + ob_start(); + // ----------------------------------------------------------------------------- + // Function Family Nav for PHPGedView - called by individual_ctrl.php + // ----------------------------------------------------------------------------- + // function family_nav() { + // ------------------------------------------------------------------------------ + + global $edit, $tabno, $GEDCOM, $pid; + $edit=$edit; + global $show_full, $tabno; + $show_full="1"; + + // ===================================================================== + + echo WT_JS_START; + echo 'function familyNavLoad(url) { + window.location = url+"#"+jQuery("#tabs li:eq("+jQuery("#tabs").tabs("option", "selected")+") a").attr("title"); + return false; + } + '; + echo WT_JS_END; + + // Start Family Nav Table ---------------------------- + echo "<table class=\"nav_content\" cellpadding=\"0\">"; + global $WT_IMAGES, $spouselinks, $parentlinks, $TEXT_DIRECTION; + + $personcount=0; + $families = $this->controller->indi->getChildFamilies(); + + //-- parent families ------------------------------------------------------------- + foreach ($families as $famid=>$family) { + $label = $this->controller->indi->getChildFamilyLabel($family); + $people = $this->controller->buildFamilyList($family, "parents"); + $styleadd = ""; + ?> + <tr> + <td style="padding-bottom:4px;" align="center" colspan="2"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$family->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$family->getHtmlUrl()."');\">"; + echo "<b><br />".$label."</b>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + if (isset($people["husb"])) { + $menu = new WT_Menu(" " . $people["husb"]->getLabel()); + // $menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($people["husb"]->getXref(), 2, 0, $personcount++); + $slabel .= $parentlinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($people["husb"]); ?> nam"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$people["husb"]->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$people['husb']->getHtmlUrl()."');\">"; + echo PrintReady($people["husb"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["husb"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["husb"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + } + + if (isset($people["wife"])) { + $menu = new WT_Menu(" " . $people["wife"]->getLabel()); + //$menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($people["wife"]->getXref(), 2, 0, $personcount++); + $slabel .= $parentlinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($people["wife"]); ?> nam"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$people["wife"]->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$people['wife']->getHtmlUrl()."');\">"; + echo PrintReady($people["wife"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["wife"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["wife"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + } + + if (isset($people["children"])) { + $elderdate = $family->getMarriageDate(); + foreach ($people["children"] as $key=>$child) { + if ($pid != $child->getXref()) { + $menu = new WT_Menu(" " . $child->getLabel()); + //$menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($child->getXref(), 2, 0, $personcount++); + $slabel .= $spouselinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + } + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php + if ($pid == $child->getXref() ) { + echo $child->getLabel(); + } else { + echo $menu->getMenu(); + } + ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($child); ?> nam"> + <?php + if ($pid == $child->getXref()) { + echo "<span style=\"font: 12px tahoma, arial, helvetica, sans-serif;\">".PrintReady($child->getFullName())."</span>"; + echo "<br /><span style=\"font:9px tahoma, arial, helvetica, sans-serif;\">".$child->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $child->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</span>"; + } else { + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$child->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$child->getHtmlUrl()."');\">"; + echo PrintReady($child->getFullName()); + echo "<font size=\"1\"><br />" . $child->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $child->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + } + ?> + </td> + </tr> + <?php + $elderdate = $child->getBirthDate(); + } + } + } + + //-- step parents ---------------------------------------------------------------- + foreach ($this->controller->indi->getChildStepFamilies() as $famid=>$family) { + $label = $this->controller->indi->getStepFamilyLabel($family); + $people = $this->controller->buildFamilyList($family, "step-parents"); + if ($people) { + echo "<tr><td><br /></td><td></td></tr>"; + } + $styleadd = ""; + $elderdate = ""; + ?> + <tr> + <td style="padding-bottom: 4px;" align="center" colspan="2"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$family->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$family->getHtmlUrl()."');\">"; + echo "<b>".$label."</b>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + + //if (isset($people["husb"]) && $people["husb"]->getLabel() == ".") { + if (isset($people["husb"]) ) { + $menu = new WT_Menu(); + if ($people["husb"]->getLabel() == ".") { + $menu->addLabel(WT_I18N::translate('Step-Father')); + } else { + $menu->addLabel($people["husb"]->getLabel()); + } + //$menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($people["husb"]->getXref(), 2, 0, $personcount++); + $slabel .= $parentlinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($people["husb"]); ?> nam"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$people["husb"]->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$people['husb']->getHtmlUrl()."');\">"; + echo PrintReady($people["husb"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["husb"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["husb"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + $elderdate = $people["husb"]->getBirthDate(); + } + + $styleadd = ""; + //if (isset($people["wife"]) && $people["wife"]->getLabel() == ".") { + if (isset($people["wife"]) ) { + $menu = new WT_Menu(); + if ($people["wife"]->getLabel() == ".") { + $menu->addLabel(WT_I18N::translate('Step-Mother')); + } else { + $menu->addLabel($people["wife"]->getLabel()); + } + //$menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($people["wife"]->getXref(), 2, 0, $personcount++); + $slabel .= $parentlinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($people["wife"]); ?> nam"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$people["wife"]->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$people['wife']->getHtmlUrl()."');\">"; + echo PrintReady($people["wife"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["wife"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["wife"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + } + $styleadd = ""; + if (isset($people["children"])) { + $elderdate = $family->getMarriageDate(); + foreach ($people["children"] as $key=>$child) { + $menu = new WT_Menu($child->getLabel()); + //$menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($child->getXref(), 2, 0, $personcount++); + $slabel .= $spouselinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($child); ?> nam"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$child->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$child->getHtmlUrl()."');\">"; + echo PrintReady($child->getFullName()); + echo "<font size=\"1\"><br />" . $child->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $child->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + //$elderdate = $child->getBirthDate(); + } + } + } + + //-- spouse and children -------------------------------------------------- + $families = $this->controller->indi->getSpouseFamilies(); + foreach ($families as $family) { + echo "<tr><td><br /></td><td></td></tr>"; + ?> + <tr> + <td style="padding-bottom: 4px;" align="center" colspan="2"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$family->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$family->getHtmlUrl()."');\">"; + echo "<b>".WT_I18N::translate('Immediate Family')."</b>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + //$personcount = 0; + $people = $this->controller->buildFamilyList($family, "spouse"); + if ($this->controller->indi->equals($people["husb"])) { + $spousetag = 'WIFE'; + } else { + $spousetag = 'HUSB'; + } + $styleadd = ""; + if (isset($people["husb"]) && $spousetag == 'HUSB') { + $menu = new WT_Menu(" " . $people["husb"]->getLabel()); + //$menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($people["husb"]->getXref(), 2, 0, $personcount++); + $slabel .= $parentlinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($people["husb"]); ?> nam"> + <?php + if ($pid == $people["husb"]->getXref()) { + echo PrintReady($people["husb"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["husb"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["husb"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + } else { + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$people["husb"]->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$people['husb']->getHtmlUrl()."');\">"; + echo PrintReady($people["husb"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["husb"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["husb"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + } + ?> + </td> + </tr> + <?php + } + + if (isset($people["wife"]) && $spousetag == 'WIFE') { + $menu = new WT_Menu(" " . $people["wife"]->getLabel()); + //$menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($people["wife"]->getXref(), 2, 0, $personcount++); + $slabel .= $parentlinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($people["wife"]); ?> nam"> + <?php + if ($pid == $people["wife"]->getXref()) { + echo PrintReady($people["wife"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["wife"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["wife"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + } else { + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$people["wife"]->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$people['wife']->getHtmlUrl()."');\">"; + echo PrintReady($people["wife"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["wife"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["wife"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + } + ?> + </td> + </tr> + <?php + } + + $styleadd = ""; + if (isset($people["children"])) { + foreach ($people["children"] as $key=>$child) { + $menu = new WT_Menu(" " . $child->getLabel()); + //$menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($child->getXref(), 2, 0, $personcount++); + $slabel .= $spouselinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubmenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($child); ?> nam"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$child->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$child->getHtmlUrl()."');\">"; + echo PrintReady($child->getFullName()); + echo "<font size=\"1\"><br />" . $child->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $child->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + } + } + + } + //-- step children ---------------------------------------------------------------- + foreach ($this->controller->indi->getSpouseStepFamilies() as $famid=>$family) { + $label = $family->getFullName(); + $people = $this->controller->buildFamilyList($family, "step-children"); + if ($people) { + echo "<tr><td><br /></td><td></td></tr>"; + } + $styleadd = ""; + $elderdate = ""; + ?> + <tr> + <td style="padding-bottom: 4px;" align="center" colspan="2"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$family->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$family->getHtmlUrl()."');\">"; + echo "<b>".$label."</b>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + + //if (isset($people["husb"]) && $people["husb"]->getLabel() == ".") { + if (isset($people["husb"]) ) { + $menu = new WT_Menu($people["husb"]->getLabel()); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($people["husb"]->getXref(), 2, 0, $personcount++); + $slabel .= $parentlinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($people["husb"]); ?> nam"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$people["husb"]->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$people['husb']->getHtmlUrl()."');\">"; + echo PrintReady($people["husb"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["husb"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["husb"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + $elderdate = $people["husb"]->getBirthDate(); + } + + $styleadd = ""; + //if (isset($people["wife"]) && $people["wife"]->getLabel() == ".") { + if (isset($people["wife"]) ) { + $menu = new WT_Menu($people["wife"]->getLabel()); + //$menu->addClass("", "", "submenu"); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($people["wife"]->getXref(), 2, 0, $personcount++); + $slabel .= $parentlinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($people["wife"]); ?> nam"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$people["wife"]->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$people['wife']->getHtmlUrl()."');\">"; + echo PrintReady($people["wife"]->getFullName()); + echo "<font size=\"1\"><br />" . $people["wife"]->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $people["wife"]->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + } + $styleadd = ""; + if (isset($people["children"])) { + $elderdate = $family->getMarriageDate(); + foreach ($people["children"] as $key=>$child) { + $menu = new WT_Menu($child->getLabel()); + if ($TEXT_DIRECTION=="ltr") { + $menu->addClass("", "", "submenu flyout2"); + } else { + $menu->addClass("", "", "submenu flyout2rtl"); + } + $slabel = "</a>".$this->print_pedigree_person_nav($child->getXref(), 2, 0, $personcount++); + $slabel .= $spouselinks."<a>"; + $submenu = new WT_Menu($slabel); + $menu->addSubMenu($submenu); + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>" nowrap="nowrap" style="width:75px;"> + <?php echo $menu->getMenu(); ?> + </td> + <td align="center" class="<?php echo $this->controller->getPersonStyle($child); ?> nam"> + <?php + echo "<a style=\"font:12px tahoma, arial, helvetica, sans-serif; padding:0px; width:100%;\" href=\"".$child->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$child->getHtmlUrl()."');\">"; + echo PrintReady($child->getFullName()); + echo "<font size=\"1\"><br />" . $child->format_first_major_fact(WT_EVENTS_BIRT, 3); + echo " - " . $child->format_first_major_fact(WT_EVENTS_DEAT, 3) . "</font>"; + echo "</a>"; + ?> + </td> + </tr> + <?php + //$elderdate = $child->getBirthDate(); + } + } + } + + echo "</table>"; + + // ----------------------------------------------------------------------------- + // } + // ----------------------------------------------------------------------------- + // End Family Nav Table + // ----------------------------------------------------------------------------- + + $out .= ob_get_contents(); + ob_end_clean(); + return $out; + + } // End public function getTabContent() + + function print_pedigree_person_nav($pid, $style=1, $count=0, $personcount="1") { + global $HIDE_LIVE_PEOPLE, $SHOW_LIVING_NAMES, $ZOOM_BOXES, $LINK_ICONS, $SCRIPT_NAME, $GEDCOM; + global $MULTI_MEDIA, $SHOW_HIGHLIGHT_IMAGES, $bwidth, $bheight, $PEDIGREE_FULL_DETAILS, $SHOW_PEDIGREE_PLACES; + global $TEXT_DIRECTION, $DEFAULT_PEDIGREE_GENERATIONS, $OLD_PGENS, $talloffset, $PEDIGREE_LAYOUT, $MEDIA_DIRECTORY; + global $WT_IMAGES, $ABBREVIATE_CHART_LABELS, $USE_MEDIA_VIEWER; + global $chart_style, $box_width, $generations, $show_spouse, $show_full; + global $CHART_BOX_TAGS, $SHOW_LDS_AT_GLANCE, $PEDIGREE_SHOW_GENDER; + global $SEARCH_SPIDER; + + global $spouselinks, $parentlinks, $step_parentlinks, $persons, $person_step, $person_parent, $tabno, $spousetag; + global $natdad, $natmom; + + if ($style != 2) $style=1; + if (empty($show_full)) $show_full = 0; + if (empty($PEDIGREE_FULL_DETAILS)) $PEDIGREE_FULL_DETAILS = 0; + + if (!isset($OLD_PGENS)) $OLD_PGENS = $DEFAULT_PEDIGREE_GENERATIONS; + if (!isset($talloffset)) $talloffset = $PEDIGREE_LAYOUT; + + $person=WT_Person::getInstance($pid); + if ($pid==false || empty($person)) { + $spouselinks = false; + $parentlinks = false; + $step_parentlinks = false; + } + + $tmp=array('M'=>'','F'=>'F', 'U'=>'NN'); + $isF=$tmp[$person->getSex()]; + $spouselinks = ""; + $parentlinks = ""; + $step_parentlinks = ""; + $disp=$person->canDisplayDetails(); + + if ($person->canDisplayName()) { + if (empty($SEARCH_SPIDER)) { + if ($LINK_ICONS!="disabled") { + //-- draw a box for the family flyout + $parentlinks .= "<span class=\"flyout4\"><b>".WT_I18N::translate('Parents')."</b></span><br />"; + $step_parentlinks .= "<span class=\"flyout4\"><b>".WT_I18N::translate('Parents')."</b></span><br />"; + $spouselinks .= "<span class=\"flyout4\"><b>".WT_I18N::translate('Family')."</b></span><br />"; + + $persons = ""; + $person_parent = ""; + $person_step = ""; + + //-- parent families -------------------------------------- + $fams = $person->getChildFamilies(); + foreach ($fams as $famid=>$family) { + + if (!is_null($family)) { + $husb = $family->getHusband($person); + $wife = $family->getWife($person); + // $spouse = $family->getSpouse($person); + $children = $family->getChildren(); + $num = count($children); + + // Husband ------------------------------ + if ($husb || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$famid; + } else { + $title = $famid." :".WT_I18N::translate('Family book chart'); + } + if ($husb) { + $person_parent="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$husb->getXref(); + } else { + $title = $husb->getXref()." :".WT_I18N::translate('Individual information'); + } + $parentlinks .= "<a id=\"phusb\" href=\"".$husb->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$husb->getHtmlUrl()."');\">"; + $parentlinks .= " ".PrintReady($husb->getFullName()); + $parentlinks .= "</a>"; + $parentlinks .= "<br />"; + $natdad = "yes"; + } + } + + // Wife ------------------------------ + if ($wife || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$famid; + } else { + $title = $famid." :".WT_I18N::translate('Family book chart'); + } + if ($wife) { + $person_parent="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$wife->getXref(); + } else { + $title = $wife->getXref()." :".WT_I18N::translate('Individual information'); + } + $parentlinks .= "<a id=\"pwife\" href=\"".$wife->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$wife->getHtmlUrl()."');\">"; + $parentlinks .= " ".PrintReady($wife->getFullName()); + $parentlinks .= "</a>"; + $parentlinks .= "<br />"; + $natmom = "yes"; + } + } + } + } + + //-- step families ----------------------------------------- + $fams = $person->getChildStepFamilies(); + foreach ($fams as $famid=>$family) { + if (!is_null($family)) { + $husb = $family->getHusband($person); + $wife = $family->getWife($person); + // $spouse = $family->getSpouse($person); + $children = $family->getChildren(); + $num = count($children); + + if ($natdad == "yes") { + } else { + // Husband ----------------------- + if ($husb || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$famid; + } else { + $title = $famid." :".WT_I18N::translate('Family book chart'); + } + if ($husb) { + $person_step="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$husb->getXref(); + } else { + $title = $husb->getXref()." :".WT_I18N::translate('Individual information'); + } + $parentlinks .= "<a id=\"shusb\" href=\"".$husb->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$husb->getHtmlUrl()."');\">"; + $parentlinks .= " ".PrintReady($husb->getFullName()); + $parentlinks .= "</a>"; + $parentlinks .= "<br />"; + } + } + } + + if ($natmom != "yes") { + // Wife ---------------------------- + if ($wife || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$famid; + } else { + $title = $famid." :".WT_I18N::translate('Family book chart'); + } + if ($wife) { + $person_step="Yes"; + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$wife->getXref(); + } else { + $title = $wife->getXref()." :".WT_I18N::translate('Individual information'); + } + $parentlinks .= "<a id=\"swife\" href=\"".$wife->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$wife->getHtmlUrl()."');\">"; + $parentlinks .= " ".PrintReady($wife->getFullName()); + $parentlinks .= "</a>"; + $parentlinks .= "<br />"; + } + } + } + } + } + + // Spouse Families -------------------------------------- @var $family Family + foreach ($person->getSpouseFamilies() as $family) { + $spouse = $family->getSpouse($person); + $children = $family->getChildren(); + $num = count($children); + + // Spouse ------------------------------ + if ($spouse || $num>0) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Family book chart').": ".$family->getXref(); + } else { + $title = $family->getXref()." :".WT_I18N::translate('Family book chart'); + } + if ($spouse) { + if ($TEXT_DIRECTION=="ltr") { + $title = WT_I18N::translate('Individual information').": ".$spouse->getXref(); + } else { + $title = $spouse->getXref()." :".WT_I18N::translate('Individual information'); + } + $spouselinks .= "<a id=\"spouse\" href=\"".$spouse->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$spouse->getHtmlUrl()."');\">"; + $spouselinks .= " ".PrintReady($spouse->getFullName()); + $spouselinks .= "</a>"; + $spouselinks .= "<br />"; + if ($spouse->getFullName() != "") { + $persons = "Yes"; + } + } + } + + // Children ------------------------------ @var $child Person + $hasChildren = false; + foreach ($children as $c=>$child) { + if ($child) { + if (!$hasChildren) { + $hasChildren = true; + $spouselinks .= "<ul class=\"clist ".$TEXT_DIRECTION."\">"; + } + $persons="Yes"; + $title = WT_I18N::translate('Individual information').": ".$child->getXref(); + $spouselinks .= "<li id=\"flyout3\">"; + $spouselinks .= "<a href=\"".$child->getHtmlUrl()."\" onclick=\"return familyNavLoad('".$child->getHtmlUrl()."');\">"; + $spouselinks .= PrintReady($child->getFullName()); + $spouselinks .= "</a>"; + } + } + if ($hasChildren) { + $spouselinks .= "</ul>"; + } + } + if ($persons != "Yes") { + $spouselinks .= " (".WT_I18N::translate('none').")"; + } + if ($person_parent != "Yes") { + $parentlinks .= " (".WT_I18N::translate_c('unknown family', 'unknown').")"; + } + if ($person_step != "Yes") { + $step_parentlinks .= " (".WT_I18N::translate_c('unknown family', 'unknown').")"; + } + } + } + } + } +} diff --git a/modules_v2/faq/help_text.php b/modules_v2/faq/help_text.php new file mode 100644 index 0000000000..7340f9c8d6 --- /dev/null +++ b/modules_v2/faq/help_text.php @@ -0,0 +1,72 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'add_faq_item': + $title=WT_I18N::translate('Frequently asked questions'); + $text= + WT_I18N::translate('FAQs are lists of questions and answers, which allow you to explain the site\'s rules, policies, and procedures to your visitors. Questions are typically concerned with privacy, copyright, user-accounts, unsuitable content, requirement for source-citations, etc.'). + '<br/><br/>'. + WT_I18N::translate('You may use HTML to format the answer and to add links to other websites.'); + break; + +case 'add_faq_order': + $title=WT_I18N::translate('FAQ position'); + $text=WT_I18N::translate('This field controls the order in which the FAQ items are displayed.<br /><br />You do not have to enter the numbers sequentially. If you leave holes in the numbering scheme, you can insert other items later. For example, if you use the numbers 1, 6, 11, 16, you can later insert items with the missing sequence numbers. Negative numbers and zero are allowed, and can be used to insert items in front of the first one.<br /><br />When more than one FAQ item has the same position number, only one of these items will be visible.'); + break; + +case 'add_faq_visibility': + $title=WT_I18N::translate('FAQ visibility'); + $text=WT_I18N::translate('You can determine whether this FAQ will be visible regardless of GEDCOM, or whether it will be visible only to the current GEDCOM.<br /><ul><li><b>ALL</b> The FAQ will appear in all FAQ lists, regardless of GEDCOM.</li><li><b>%s</b> The FAQ will appear only in the currently active GEDCOM\'s FAQ list.</li></ul>', WT_GEDCOM); + break; + +case 'delete_faq_item': + $title=WT_I18N::translate('Delete FAQ item'); + $text=WT_I18N::translate('This option will let you delete an item from the FAQ page'); + break; + +case 'edit_faq_item': + $title=WT_I18N::translate('Edit FAQ item'); + $text=WT_I18N::translate('This option will let you edit an item on the FAQ page.'); + break; + +case 'movedown_faq_item': + $title=WT_I18N::translate('Move FAQ item down'); + $text=WT_I18N::translate('This option will let you move an item downwards on the FAQ page.<br /><br />Each time you use this option, the FAQ Position number of this item is increased by one. You can achieve the same effect by editing the item in question and changing the FAQ Position field. When more than one FAQ item has the same position number, only one of these items will be visible.'); + break; + +case 'moveup_faq_item': + $title=WT_I18N::translate('Move FAQ item up'); + $text=WT_I18N::translate('This option will let you move an item upwards on the FAQ page.<br /><br />Each time you use this option, the FAQ Position number of this item is reduced by one. You can achieve the same effect by editing the item in question and changing the FAQ Position field. When more than one FAQ item has the same position number, only one of these items will be visible.'); + break; + +} diff --git a/modules_v2/faq/module.php b/modules_v2/faq/module.php new file mode 100644 index 0000000000..f0e627ef63 --- /dev/null +++ b/modules_v2/faq/module.php @@ -0,0 +1,431 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class faq_WT_Module extends WT_Module implements WT_Module_Block, WT_Module_Config { + // Extend class WT_Module + public function getTitle() { + return /* Abbreviation for "Frequently Asked Questions" */ WT_I18N::translate('FAQ'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('A list of frequently asked questions'); + } + + // Extend WT_Module + public function modAction($mod_action) { + switch($mod_action) { + case 'admin_config': + $this->config(); + break; + case 'admin_delete': + $this->delete(); + $this->config(); + break; + case 'admin_edit': + $this->edit(); + break; + case 'admin_movedown': + $this->movedown(); + $this->config(); + break; + case 'admin_moveup': + $this->moveup(); + $this->config(); + break; + case 'show': + $this->show(); + break; + default: + die("Internal error - unknown action: $mod_action"); + } + } + + // Implement WT_Module_Config + public function getConfigLink() { + return 'module.php?mod='.$this->getName().'&mod_action=admin_config'; + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return false; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return false; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + } + + // Action from the configuration page + private function edit() { + global $TEXT_DIRECTION; + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + if (safe_POST_bool('save')) { + $block_id=safe_POST('block_id'); + if ($block_id) { + WT_DB::prepare( + "UPDATE `##block` SET gedcom_id=?, block_order=? WHERE block_id=?" + )->execute(array( + safe_POST('gedcom_id'), + (int)safe_POST('block_order'), + $block_id + )); + } else { + WT_DB::prepare( + "INSERT INTO `##block` (gedcom_id, module_name, block_order) VALUES (?, ?, ?)" + )->execute(array( + safe_POST('gedcom_id', array_keys(get_all_gedcoms())), + $this->getName(), + (int)safe_POST('block_order') + )); + $block_id=WT_DB::getInstance()->lastInsertId(); + } + set_block_setting($block_id, 'header', safe_POST('header', WT_REGEX_UNSAFE)); + set_block_setting($block_id, 'faqbody', safe_POST('faqbody', WT_REGEX_UNSAFE)); // allow html + $languages=array(); + foreach (WT_I18N::installed_languages() as $code=>$name) { + if (safe_POST_bool('lang_'.$code)) { + $languages[]=$code; + } + } + set_block_setting($block_id, 'languages', implode(',', $languages)); + $this->config(); + } else { + $block_id=safe_GET('block_id'); + if ($block_id) { + print_header(WT_I18N::translate('Edit FAQ item')); + $header=get_block_setting($block_id, 'header'); + $faqbody=get_block_setting($block_id, 'faqbody'); + $block_order=WT_DB::prepare( + "SELECT block_order FROM `##block` WHERE block_id=?" + )->execute(array($block_id))->fetchOne(); + $gedcom_id=WT_DB::prepare( + "SELECT gedcom_id FROM `##block` WHERE block_id=?" + )->execute(array($block_id))->fetchOne(); + } else { + print_header(WT_I18N::translate('Add FAQ item')); + $header=''; + $faqbody=''; + $block_order=WT_DB::prepare( + "SELECT IFNULL(MAX(block_order)+1, 0) FROM `##block` WHERE module_name=?" + )->execute(array($this->getName()))->fetchOne(); + $gedcom_id=WT_GED_ID; + } + + // "Help for this page" link + echo '<div id="page_help">', help_link('add_faq_item', $this->getName()), '</div>'; + echo '<form name="faq" method="post" action="#">'; + echo '<input type="hidden" name="save" value="1" />'; + echo '<input type="hidden" name="block_id" value="', $block_id, '" />'; + echo '<table id="faq_module">'; + echo '<tr><th>'; + echo WT_I18N::translate('Question'); + echo '</th></tr><tr><td><input type="text" name="header" size="90" tabindex="1" value="'.htmlspecialchars($header).'"/></td></tr>'; + echo '<tr><th>'; + echo WT_I18N::translate('Answer'); + echo '</th></tr><tr><td>'; + if (array_key_exists('ckeditor', WT_Module::getActiveModules())) { + // use CKeditor module + require_once WT_ROOT.WT_MODULES_DIR.'ckeditor/ckeditor.php'; + $oCKeditor = new CKEditor(); + $oCKeditor->basePath = WT_MODULES_DIR.'ckeditor/'; + $oCKeditor->config['width'] = 900; + $oCKeditor->config['height'] = 400; + $oCKeditor->config['AutoDetectLanguage'] = false ; + $oCKeditor->config['DefaultLanguage'] = 'en'; + $oCKeditor->editor('faqbody', $faqbody); + } else { + //use standard textarea + echo '<textarea name="faqbody" rows="10" cols="90" tabindex="2">', htmlspecialchars($faqbody), '</textarea>'; + } + echo '</td></tr>'; + echo '</table><table id="faq_module2">'; + echo '<tr>'; + echo '<th>', WT_I18N::translate('Show this block for which languages?'), '</th>'; + echo '<th>', WT_I18N::translate('FAQ position'), help_link('add_faq_order', $this->getName()), '</th>'; + echo '<th>', WT_I18N::translate('FAQ visibility'), help_link('add_faq_visibility', $this->getName()), '</th>'; + echo '</tr><tr>'; + echo '<td>'; + $languages=get_block_setting($block_id, 'languages'); + echo edit_language_checkboxes('lang_', $languages); + echo '</td><td>'; + echo '<input type="text" name="block_order" size="3" tabindex="3" value="', $block_order, '" /></td>'; + echo '</td><td>'; + echo '<select name="gedcom_id" tabindex="4" />'; + echo '<option value="">', WT_I18N::translate('All'), '</option>'; + echo '<option value="', WT_GED_ID, '" selected="selected">', WT_I18N::translate('%s', get_gedcom_setting(WT_GED_ID, 'title')), '</option'; + echo '</select>'; + echo '</td></tr>'; + echo '</table>'; + + echo '<p><input type="submit" value="', WT_I18N::translate('Save'), '" tabindex="5"/>'; + echo ' <input type="button" value="', WT_I18N::translate('Cancel'), '" onclick="window.location=\''.$this->getConfigLink().'\';" tabindex="6" /></p>'; + echo '</form>'; + + print_footer(); + exit; + } + } + + private function delete() { + $block_id=safe_GET('block_id'); + + $block_order=WT_DB::prepare( + "SELECT block_order FROM `##block` WHERE block_id=?" + )->execute(array($block_id))->fetchOne(); + + WT_DB::prepare( + "DELETE FROM `##block_setting` WHERE block_id=?" + )->execute(array($block_id)); + + WT_DB::prepare( + "DELETE FROM `##block` WHERE block_id=?" + )->execute(array($block_id)); + } + + private function moveup() { + $block_id=safe_GET('block_id'); + + $block_order=WT_DB::prepare( + "SELECT block_order FROM `##block` WHERE block_id=?" + )->execute(array($block_id))->fetchOne(); + + $swap_block=WT_DB::prepare( + "SELECT block_order, block_id". + " FROM `##block`". + " WHERE block_order=(". + " SELECT MAX(block_order) FROM `##block` WHERE block_order < ? AND module_name=?". + " )". + " LIMIT 1" + )->execute(array($block_order, $this->getName()))->fetchOneRow(); + if ($swap_block) { + WT_DB::prepare( + "UPDATE `##block` SET block_order=? WHERE block_id=?" + )->execute(array($swap_block->block_order, $block_id)); + WT_DB::prepare( + "UPDATE `##block` SET block_order=? WHERE block_id=?" + )->execute(array($block_order, $swap_block->block_id)); + } + } + + private function movedown() { + $block_id=safe_GET('block_id'); + + $block_order=WT_DB::prepare( + "SELECT block_order FROM `##block` WHERE block_id=?" + )->execute(array($block_id))->fetchOne(); + + $swap_block=WT_DB::prepare( + "SELECT block_order, block_id". + " FROM `##block`". + " WHERE block_order=(". + " SELECT MIN(block_order) FROM `##block` WHERE block_order>? AND module_name=?". + " )". + " LIMIT 1" + )->execute(array($block_order, $this->getName()))->fetchOneRow(); + if ($swap_block) { + WT_DB::prepare( + "UPDATE `##block` SET block_order=? WHERE block_id=?" + )->execute(array($swap_block->block_order, $block_id)); + WT_DB::prepare( + "UPDATE `##block` SET block_order=? WHERE block_id=?" + )->execute(array($block_order, $swap_block->block_id)); + } + } + + private function show() { + print_header($this->getTitle()); + + $faqs=WT_DB::prepare( + "SELECT block_id, bs1.setting_value AS header, bs2.setting_value AS body". + " FROM `##block` b". + " JOIN `##block_setting` bs1 USING (block_id)". + " JOIN `##block_setting` bs2 USING (block_id)". + " WHERE module_name=?". + " AND bs1.setting_name='header'". + " AND bs2.setting_name='faqbody'". + " AND (gedcom_id IS NULL OR gedcom_id=?)". + " ORDER BY block_order" + )->execute(array($this->getName(), WT_GED_ID))->fetchAll(); + + // Define your colors for the alternating rows + echo '<h2 class="center">', WT_I18N::translate('Frequently asked questions'), '</h2>'; + // Instructions + echo '<div class="faq_italic">', WT_I18N::translate('Click on a title to go straight to it, or scroll down to read them all'); + if (WT_USER_GEDCOM_ADMIN) { + echo '<div style="float:right;">', + '<a href="module.php?mod=faq&mod_action=admin_config">', WT_I18N::translate('Click here to Add, Edit, or Delete'), '</a>', + '</div>'; + } + echo '</div>'; + //Start the table to contain the list of headers + $row_count = 0; + echo '<table class="faq">'; + // List of titles + foreach ($faqs as $id => $faq) { + $header = get_block_setting($faq->block_id, 'header'); + $faqbody = get_block_setting($faq->block_id, 'faqbody'); + $languages=get_block_setting($faq->block_id, 'languages'); + if ($languages && !in_array(WT_LOCALE, explode(',', $languages))) { + return; + } + if ($header && $faqbody) { + $row_color = ($row_count % 2) ? 'odd' : 'even'; + echo ''; + // NOTE: Print the header of the current item + echo '<tr class="', $row_color, '"><td style="padding: 5px;">'; + echo '<a href="#faq', $id, '">'; + echo $id+1, '. ', $faq->header; + echo '</a>'; + echo '</td></tr>'; + echo ''; + $row_count++; + } + } + echo '</table><hr>'; + // Detailed entries + echo '<table>'; + foreach ($faqs as $id => $faq) { + $header = get_block_setting($faq->block_id, 'header'); + $faqbody = get_block_setting($faq->block_id, 'faqbody'); + $languages=get_block_setting($faq->block_id, 'languages'); + if ($languages && !in_array(WT_LOCALE, explode(',', $languages))) { + return; + } + if ($header && $faqbody) { + // NOTE: Print the body text of the current item, with its header + echo '<div class="faq_title" id="faq', $id, '">', + $faq->header; + echo '<div style="float:right;" class="faq_italic">'; + echo '<a href="#body">[', WT_I18N::translate('back to top'), ']</a>'; + echo '</div>'; + echo '</div>'; + echo '<div class="faq_body">', + substr($faqbody, 0, 1)=='<' ? $faqbody : nl2br($faqbody); + echo '</div>'; + echo '<hr />'; + } + } + echo '</table>'; + + print_footer(); + } + + private function config() { + global $WT_IMAGES; + + print_header($this->getTitle()); + + $faqs=WT_DB::prepare( + "SELECT block_id, block_order, gedcom_id, bs1.setting_value AS header, bs2.setting_value AS faqbody". + " FROM `##block` b". + " JOIN `##block_setting` bs1 USING (block_id)". + " JOIN `##block_setting` bs2 USING (block_id)". + " WHERE module_name=?". + " AND bs1.setting_name='header'". + " AND bs2.setting_name='faqbody'". + " AND (gedcom_id IS NULL OR gedcom_id=?)". + " ORDER BY block_order" + )->execute(array($this->getName(), WT_GED_ID))->fetchAll(); + + $min_block_order=WT_DB::prepare( + "SELECT MIN(block_order) FROM `##block` WHERE module_name=?" + )->execute(array($this->getName()))->fetchOne(); + + $max_block_order=WT_DB::prepare( + "SELECT MAX(block_order) FROM `##block` WHERE module_name=?" + )->execute(array($this->getName()))->fetchOne(); + + echo '<table class="list_table width100">'; + echo '<tr><td class="width20 list_label" colspan="5">'; + echo '<a href="module.php?mod=', $this->getName(), '&mod_action=admin_edit">', WT_I18N::translate('Add FAQ item'), '</a>'; + echo help_link('add_faq_item', $this->getName()); + echo '</td></tr>'; + if (empty($faqs)) { + echo '<tr><td class="error center">', WT_I18N::translate('The FAQ list is empty.'), '</td></tr></table>'; + } else { + foreach ($faqs as $faq) { + echo '<tr>'; + // NOTE: Print the position of the current item + echo '<td class="descriptionbox width20 $TEXT_DIRECTION">'; + echo WT_I18N::translate('Position item'), ': ', $faq->block_order, ', '; + if ($faq->gedcom_id==null) { + echo WT_I18N::translate('All'); + } else { + echo get_gedcom_from_id($faq->gedcom_id); + } + echo '</td>'; + echo '<td class="descriptionbox">', $faq->header, '</td>'; + echo '<tr>'; + // NOTE: Print the edit options of the current item + echo '<td class="optionbox center">'; + if ($faq->block_order==$min_block_order) { + echo ' '; + } else { + echo '<a href="module.php?mod=', $this->getName(), '&mod_action=admin_moveup&block_id=', $faq->block_id, '"><img src="', $WT_IMAGES["uarrow"], '" border="0" alt="" /></a>'; + echo help_link('moveup_faq_item', $this->getName()); + } + echo '</td><td class="optionbox center">'; + if ($faq->block_order==$max_block_order) { + echo ' '; + } else { + echo '<a href="module.php?mod=', $this->getName(), '&mod_action=admin_movedown&block_id=', $faq->block_id, '"><img src="', $WT_IMAGES["darrow"], '" border="0" alt="" /></a>'; + echo help_link('movedown_faq_item', $this->getName()); + } + echo '</td><td class="optionbox center">'; + echo '<a href="module.php?mod=', $this->getName(), '&mod_action=admin_edit&block_id=', $faq->block_id, '">', WT_I18N::translate('Edit'), '</a>'; + echo help_link('edit_faq_item', $this->getName()); + echo '</td><td class="optionbox center">'; + echo '<a href="module.php?mod=', $this->getName(), '&mod_action=admin_delete&block_id=', $faq->block_id, '" onclick="return confirm(\'', WT_I18N::translate('Are you sure you want to delete this FAQ entry?'), '\');">', WT_I18N::translate('Delete'), '</a>'; + echo help_link('delete_faq_item', $this->getName()); + echo '</td>'; + // NOTE: Print the body text of the current item + echo '<td class="list_value_wrap">', substr($faq->faqbody, 0, 1)=='<' ? $faq->faqbody : nl2br($faq->faqbody), '</td></tr>'; + } + echo '</table>'; + } + print_footer(); + } +} diff --git a/modules_v2/gedcom_block/module.php b/modules_v2/gedcom_block/module.php new file mode 100644 index 0000000000..cebd7dcf45 --- /dev/null +++ b/modules_v2/gedcom_block/module.php @@ -0,0 +1,83 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class gedcom_block_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('GEDCOM Welcome'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The GEDCOM Welcome block works the same as the User Welcome block. It welcomes the visitor to the site and displays the title of the currently active database as well as the current date and time.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $hitCount, $SHOW_COUNTER; + + $id=$this->getName().$block_id; + $title=get_gedcom_setting(WT_GED_ID, 'title'); + $content = "<div class=\"center\">"; + $content .= "<br />".format_timestamp(client_time())."<br />"; + if ($SHOW_COUNTER) + $content .= WT_I18N::translate('Hit Count:')." ".$hitCount."<br />"; + $content .= "<br />"; + if (WT_USER_GEDCOM_ADMIN) { + $content .= "<a href=\"javascript:;\" onclick=\"window.open('index_edit.php?name=".WT_GEDURL."&ctype=gedcom', '_blank', 'top=50,left=10,width=600,height=500,scrollbars=1,resizable=1'); return false;\">".WT_I18N::translate('Customize this GEDCOM Home Page')."</a><br />"; + } + $content .= "</div>"; + + if ($template) { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return false; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + } +} diff --git a/modules_v2/gedcom_favorites/db_schema/db_schema_0_1.php b/modules_v2/gedcom_favorites/db_schema/db_schema_0_1.php new file mode 100644 index 0000000000..5dff92e48a --- /dev/null +++ b/modules_v2/gedcom_favorites/db_schema/db_schema_0_1.php @@ -0,0 +1,61 @@ +<?php +/** + * Update the favorite module database schema from version 0 to version 1 + * + * Version 0: empty database + * Version 1: create the tables, as per PGV 4.2.1 + * + * The script should assume that it can be interrupted at + * any point, and be able to continue by re-running the script. + * Fatal errors, however, should be allowed to throw exceptions, + * which will be caught by the framework. + * It shouldn't do anything that might take more than a few + * seconds, for systems with low timeout values. + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2009 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { +header('HTTP/1.0 403 Forbidden'); +exit; +} + +define('WT_FV_DB_SCHEMA_0_1', ''); + +WT_DB::exec( + "CREATE TABLE IF NOT EXISTS `##favorites` (". + " fv_id INTEGER AUTO_INCREMENT NOT NULL,". + " fv_username VARCHAR(32) NOT NULL,". + " fv_gid VARCHAR(20) NULL,". + " fv_type VARCHAR(15) NULL,". + " fv_file VARCHAR(100) NULL,". + " fv_url VARCHAR(255) NULL,". + " fv_title VARCHAR(255) NULL,". + " fv_note TEXT NULL,". + " PRIMARY KEY (fv_id),". + " KEY ix1 (fv_username)". + ") COLLATE utf8_unicode_ci ENGINE=InnoDB" +); + +// Update the version to indicate success +set_site_setting($schema_name, $next_version); diff --git a/modules_v2/gedcom_favorites/help_text.php b/modules_v2/gedcom_favorites/help_text.php new file mode 100644 index 0000000000..8f5785da1c --- /dev/null +++ b/modules_v2/gedcom_favorites/help_text.php @@ -0,0 +1,44 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'recent_changes': + $title=WT_I18N::translate('GEDCOM favorites block'); + $text=WT_I18N::translate('The GEDCOM Favorites block gives the administrator the ability to designate individuals from the database so that their information is easily accessible to all. This is a way to highlight people who are important in your family history.'); + $text.='<ul><li>'; + + // TODO: Other options of this block + + $text.='</li></ul>'; + break; +} +?> diff --git a/modules_v2/gedcom_favorites/module.php b/modules_v2/gedcom_favorites/module.php new file mode 100644 index 0000000000..c98652617f --- /dev/null +++ b/modules_v2/gedcom_favorites/module.php @@ -0,0 +1,371 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +// Create tables, if not already present +try { + WT_DB::updateSchema(WT_ROOT.WT_MODULES_DIR.'gedcom_favorites/db_schema/', 'FV_SCHEMA_VERSION', 1); +} catch (PDOException $ex) { + // The schema update scripts should never fail. If they do, there is no clean recovery. + die($ex); +} + +class gedcom_favorites_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('GEDCOM Favorites'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The GEDCOM Favorites block gives the administrator the ability to designate individuals from the database so that their information is easily accessible to all. This is a way to highlight people who are important in your family history.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $WT_IMAGES, $ctype, $TEXT_DIRECTION; + global $show_full, $PEDIGREE_FULL_DETAILS, $BROWSERTYPE, $ENABLE_AUTOCOMPLETE; + + $action=safe_GET('action'); + switch ($action) { + case 'deletefav': + $fv_id=safe_GET('fv_id'); + if ($fv_id) { + self::deleteFavorite($fv_id); + } + unset($_GET['action']); + break; + case 'addfav': + $gid =safe_GET('gid'); + $favnote =safe_GET('favnote'); + $url =safe_GET('url', WT_REGEX_URL); + $favtitle=safe_GET('favtitle'); + + if ($gid) { + $indirec = find_gedcom_record($gid, WT_GED_ID); + $ct = preg_match('/0 @(.*)@ (.*)/', $indirec, $match); + if ($indirec && $ct>0) { + $favorite = array(); + $favorite['username'] = WT_GEDCOM; + $favorite['gid'] = $gid; + $favorite['type'] = trim($match[2]); + $favorite['file'] = WT_GEDCOM; + $favorite['url'] = ''; + $favorite['note'] = $favnote; + $favorite['title'] = ''; + self::addFavorite($favorite); + } + } + $url=safe_GET('url'); + if ($url) { + if (empty($favtitle)) $favtitle = $url; + $favorite = array(); + $favorite['username'] = WT_GEDCOM; + $favorite['gid'] = ''; + $favorite['type'] = 'URL'; + $favorite['file'] = WT_GEDCOM; + $favorite['url'] = $url; + $favorite['note'] = $favnote; + $favorite['title'] = $favtitle; + self::addFavorite($favorite); + } + unset($_GET['action']); + break; + } + + $block=get_block_setting($block_id, 'block', false); + if ($cfg) { + foreach (array('block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + // Override GEDCOM configuration temporarily + if (isset($show_full)) $saveShowFull = $show_full; + $savePedigreeFullDetails = $PEDIGREE_FULL_DETAILS; + $show_full = 1; + $PEDIGREE_FULL_DETAILS = 1; + + $userfavs = self::getUserFavorites(WT_GEDCOM); + if (!is_array($userfavs)) $userfavs = array(); + + $id=$this->getName().$block_id; + $title=WT_I18N::translate('This GEDCOM\'s Favorites').help_link('index_favorites'); + if ($TEXT_DIRECTION=="rtl") $title .= getRLM(); + $title .= "(".count($userfavs).")"; + if ($TEXT_DIRECTION=="rtl") $title .= getRLM(); + + if (WT_USER_IS_ADMIN && $ENABLE_AUTOCOMPLETE) { + $content = '<script type="text/javascript" src="js/jquery/jquery.min.js"></script> + <script type="text/javascript" src="js/jquery/jquery.autocomplete.js"></script> + <script type="text/javascript" src="js/jquery/jquery.ajaxQueue.js"></script> + <script type="text/javascript"> + jQuery.noConflict(); // @see http://docs.jquery.com/Using_jQuery_with_Other_Libraries/ + jQuery(document).ready(function($) { + $("input[name^=gid]").autocomplete("autocomplete.php", { + extraParams: {field:"IFSRO"}, + formatItem: function(row, i) { + return row[0] + " (" + row[1] + ")"; + }, + formatResult: function(row) { + return row[1]; + }, + width: 400, + minChars: 2 + }); + }); + </script>'; + } else $content = ''; + + if ($block) { + $style = 2; // 1 means "regular box", 2 means "wide box" + $tableWidth = ($BROWSERTYPE=="msie") ? "95%" : "99%"; // IE needs to have room for vertical scroll bar inside the box + $cellSpacing = "1px"; + } else { + $style = 2; + $tableWidth = "99%"; + $cellSpacing = "3px"; + } + if (count($userfavs)==0) { + if (WT_USER_GEDCOM_ADMIN) { + $content .= WT_I18N::translate('You have not selected any favorites.<br /><br />To add an individual, a family, or a source to your favorites, click on the <b>Add a new favorite</b> link to reveal some fields where you can enter or search for an ID number. Instead of an ID number, you can enter a URL and a title.'); + } else { + $content .= WT_I18N::translate('At this moment there are no selected Favorites. The admin can add Favorites to display at startup.'); + } + } else { + $content .= "<table width=\"{$tableWidth}\" style=\"border:none\" cellspacing=\"{$cellSpacing}\" class=\"center $TEXT_DIRECTION\">"; + foreach ($userfavs as $key=>$favorite) { + if (isset($favorite["id"])) $key=$favorite["id"]; + $removeFavourite = "<a class=\"font9\" href=\"index.php?ctype=$ctype&action=deletefav&fv_id={$key}\" onclick=\"return confirm('".WT_I18N::translate('Are you sure you want to remove this item from your list of Favorites?')."');\">".WT_I18N::translate('Remove')."</a><br />"; + $content .= "<tr><td>"; + if ($favorite["type"]=="URL") { + $content .= "<div id=\"boxurl".$key.".0\" class=\"person_box\">"; + if ($ctype=="user" || WT_USER_GEDCOM_ADMIN) $content .= $removeFavourite; + $content .= "<a href=\"".$favorite["url"]."\"><b>".PrintReady($favorite["title"])."</b></a>"; + $content .= "<br />".PrintReady($favorite["note"]); + $content .= "</div>"; + } else { + $record=WT_GedcomRecord::getInstance($favorite['gid']); + if ($record && $record->canDisplayDetails()) { + if ($favorite["type"]=="INDI") { + $indirec = find_person_record($favorite["gid"], WT_GED_ID); + $content .= "<div id=\"box".$favorite["gid"].".0\" class=\"person_box"; + if (strpos($indirec, "\n1 SEX F")!==false) $content .= "F"; + elseif (strpos($indirec, "\n1 SEX M")!==false) $content .= ""; + else $content .= "NN"; + $content .= "\">"; + if ($ctype=="user" || WT_USER_GEDCOM_ADMIN) $content .= $removeFavourite; + ob_start(); + print_pedigree_person($record, $style, 1, $key); + $content .= ob_get_clean(); + $content .= PrintReady($favorite["note"]); + $content .= "</div>"; + } else { + $record=WT_GedcomRecord::getInstance($favorite['gid']); + $content .= "<div id=\"box".$favorite["gid"].".0\" class=\"person_box\">"; + if ($ctype=="user" || WT_USER_GEDCOM_ADMIN) $content .= $removeFavourite; + if ($record) { + $content.=$record->format_list('span'); + } else { + $content.=WT_I18N::translate('No such ID exists in this GEDCOM file.'); + } + $content .= "<br />".PrintReady($favorite["note"]); + $content .= "</div>"; + } + } + } + $content .= "</td></tr>"; + } + $content .= "</table>"; + } + if (WT_USER_GEDCOM_ADMIN) { + $content .= ' + <script type="text/javascript"> + <!-- + var pastefield; + function paste_id(value) { + pastefield.value=value; + } + --> + </script> + <br /> + '; + $uniqueID = floor(microtime() * 1000000); + $content .= "<b><a href=\"javascript://".WT_I18N::translate('Add a new favorite')." \" onclick=\"expand_layer('add_ged_fav{$uniqueID}'); return false;\"><img id=\"add_ged_fav_img\" src=\"".$WT_IMAGES["plus"]."\" border=\"0\" alt=\"\" /> ".WT_I18N::translate('Add a new favorite')."</a></b>"; + $content .= help_link('index_add_favorites'); + $content .= "<br /><div id=\"add_ged_fav{$uniqueID}\" style=\"display: none;\">"; + $content .= "<form name=\"addgfavform\" method=\"get\" action=\"index.php\">"; + $content .= "<input type=\"hidden\" name=\"action\" value=\"addfav\" />"; + $content .= "<input type=\"hidden\" name=\"ctype\" value=\"$ctype\" />"; + $content .= "<input type=\"hidden\" name=\"ged\" value=\"".WT_GEDCOM."\" />"; + $content .= "<table width=\"{$tableWidth}\" style=\"border:none\" cellspacing=\"{$cellSpacing}\" class=\"center {$TEXT_DIRECTION}\">"; + $content .= "<tr><td>".WT_I18N::translate('Enter a Person, Family, or Source ID')." <br />"; + $content .= "<input class=\"pedigree_form\" type=\"text\" name=\"gid\" id=\"gid{$uniqueID}\" size=\"5\" value=\"\" />"; + + $content .= print_findindi_link("gid{$uniqueID}",'',true); + $content .= print_findfamily_link("gid{$uniqueID}",'',true); + $content .= print_findsource_link("gid{$uniqueID}",'',true); + $content .= print_findrepository_link("gid{$uniqueID}",'',true); + $content .= print_findnote_link("gid{$uniqueID}",'',true); + $content .= print_findmedia_link("gid{$uniqueID}",'1','',true); + + $content .= "<br />".WT_I18N::translate('OR<br />Enter a URL and a title'); + $content .= "<table><tr><td>".translate_fact('URL')."</td><td><input type=\"text\" name=\"url\" size=\"40\" value=\"\" /></td></tr>"; + $content .= "<tr><td>".WT_I18N::translate('Title:')."</td><td><input type=\"text\" name=\"favtitle\" size=\"40\" value=\"\" /></td></tr></table>"; + if ($block) $content .= "</td></tr><tr><td><br />"; + else $content .= "</td><td>"; + $content .= "".WT_I18N::translate('Enter an optional note about this favorite'); + $content .= "<br /><textarea name=\"favnote\" rows=\"6\" cols=\"50\"></textarea>"; + $content .= "</td></tr></table>"; + $content .= "<br /><input type=\"submit\" value=\"".WT_I18N::translate('Add')."\" style=\"font-size: 8pt; \" />"; + $content .= "</form></div>"; + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + // Restore GEDCOM configuration + unset($show_full); + if (isset($saveShowFull)) $show_full = $saveShowFull; + $PEDIGREE_FULL_DETAILS = $savePedigreeFullDetails; + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return false; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $block=get_block_setting($block_id, 'block', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } + + /** + * deleteFavorite + * deletes a favorite in the database + * @param int $fv_id the id of the favorite to delete + */ + public static function deleteFavorite($fv_id) { + return (bool) + WT_DB::prepare("DELETE FROM `##favorites` WHERE fv_id=?") + ->execute(array($fv_id)); + } + + /** + * stores a new favorite in the database + * @param array $favorite the favorite array of the favorite to add + */ + public static function addFavorite($favorite) { + // -- make sure a favorite is added + if (empty($favorite["gid"]) && empty($favorite["url"])) + return false; + + //-- make sure this is not a duplicate entry + $sql = "SELECT 1 FROM `##favorites` WHERE"; + if (!empty($favorite["gid"])) { + $sql.=" fv_gid=?"; + $vars=array($favorite["gid"]); + } else { + $sql.=" fv_url=?"; + $vars=array($favorite["url"]); + } + $sql.=" AND fv_file=? AND fv_username=?"; + $vars[]=$favorite["file"]; + $vars[]=$favorite["username"]; + + if (WT_DB::prepare($sql)->execute($vars)->fetchOne()) { + return false; + } + + //-- add the favorite to the database + return (bool) + WT_DB::prepare("INSERT INTO `##favorites` (fv_username, fv_gid, fv_type, fv_file, fv_url, fv_title, fv_note) VALUES (?, ? ,? ,? ,? ,? ,?)") + ->execute(array($favorite["username"], $favorite["gid"], $favorite["type"], $favorite["file"], $favorite["url"], $favorite["title"], $favorite["note"])); + } + + /** + * Get a user's favorites + * Return an array of a users messages + * @param string $username the username to get the favorites for + */ + public static function getUserFavorites($username) { + $rows= + WT_DB::prepare("SELECT * FROM `##favorites` WHERE fv_username=?") + ->execute(array($username)) + ->fetchAll(); + + $favorites = array(); + foreach ($rows as $row) { + if (get_id_from_gedcom($row->fv_file)) { // If gedcom exists + $favorites[]=array( + "id"=>$row->fv_id, + "username"=>$row->fv_username, + "gid"=>$row->fv_gid, + "type"=>$row->fv_type, + "file"=>$row->fv_file, + "title"=>$row->fv_title, + "note"=>$row->fv_note, + "url"=>$row->fv_url + ); + } + } + return $favorites; + } +} diff --git a/modules_v2/gedcom_news/db_schema/db_schema_0_1.php b/modules_v2/gedcom_news/db_schema/db_schema_0_1.php new file mode 100644 index 0000000000..d588ba8e26 --- /dev/null +++ b/modules_v2/gedcom_news/db_schema/db_schema_0_1.php @@ -0,0 +1,58 @@ +<?php +/** + * Update the news/blog module database schema from version 0 to version 1 + * + * Version 0: empty database + * Version 1: create the tables, as per PGV 4.2.1 + * + * The script should assume that it can be interrupted at + * any point, and be able to continue by re-running the script. + * Fatal errors, however, should be allowed to throw exceptions, + * which will be caught by the framework. + * It shouldn't do anything that might take more than a few + * seconds, for systems with low timeout values. + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2009 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { +header('HTTP/1.0 403 Forbidden'); +exit; +} + +define('WT_NB_DB_SCHEMA_0_1', ''); + +WT_DB::exec( + "CREATE TABLE IF NOT EXISTS `##news` (". + " n_id INTEGER AUTO_INCREMENT NOT NULL,". + " n_username VARCHAR(100) NOT NULL,". + " n_date INTEGER NOT NULL,". + " n_title VARCHAR(255) NOT NULL,". + " n_text TEXT NOT NULL,". + " PRIMARY KEY (n_id),". + " KEY ix1 (n_username)". + ") COLLATE utf8_unicode_ci ENGINE=InnoDB" +); + +// Update the version to indicate success +set_site_setting($schema_name, $next_version); diff --git a/modules_v2/gedcom_news/module.php b/modules_v2/gedcom_news/module.php new file mode 100644 index 0000000000..fe974405d1 --- /dev/null +++ b/modules_v2/gedcom_news/module.php @@ -0,0 +1,201 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +// Create tables, if not already present +try { + WT_DB::updateSchema(WT_ROOT.WT_MODULES_DIR.'gedcom_news/db_schema/', 'NB_SCHEMA_VERSION', 1); +} catch (PDOException $ex) { + // The schema update scripts should never fail. If they do, there is no clean recovery. + die($ex); +} + +class gedcom_news_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('GEDCOM News'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The GEDCOM News block shows the visitor news releases or articles posted by an admin user.<br /><br />The News block is a good place to announce a significant database update, a family reunion, or the birth of a child.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $WT_IMAGES, $TEXT_DIRECTION, $ctype; + + switch (safe_GET('action')) { + case 'deletenews': + $news_id=safe_GET('news_id'); + if ($news_id) { + deleteNews($news_id); + } + break; + } + + if (isset($_REQUEST['gedcom_news_archive'])) { + $limit='nolimit'; + $flag=0; + } else { + $flag=get_block_setting($block_id, 'flag', 0); + if ($flag==0) { + $limit='nolimit'; + } else { + $limit=get_block_setting($block_id, 'limit', 'nolimit'); + } + } + if ($cfg) { + foreach (array('limit', 'flag') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + $usernews = getUserNews(WT_GEDCOM); + + $id=$this->getName().$block_id; + $title=''; + if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) { + if ($ctype=="gedcom") { + $name = WT_GEDCOM; + } else { + $name = WT_USER_NAME; + } + $title.="<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title.="<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + $title .= WT_I18N::translate('News'); + if (WT_USER_GEDCOM_ADMIN) { + $title .= help_link('index_gedcom_news_adm'); + } else { + $title .= help_link('index_gedcom_news'); + } + $content = ""; + if (count($usernews) == 0) + { + $content .= WT_I18N::translate('No News articles have been submitted.').'<br />'; + } + $c = 0; + $td = time(); + foreach ($usernews as $news) + { + if ($limit=='count') { + if ($c >= $flag) { + break; + } + $c++; + } + if ($limit=='date') { + if (floor(($td - $news['date']) / 86400) > $flag) { + break; + } + } + $content .= "<div class=\"news_box\" id=\"{$news['anchor']}\">"; + $newsTitle = $news['title']; + $content .= "<div class=\"news_title\">".PrintReady($newsTitle)."</div>"; + $content .= "<div class=\"news_date\">".format_timestamp($news['date'])."</div>"; + if ($news["text"]==strip_tags($news["text"])) { + // No HTML? + $news["text"]=nl2br($news["text"]); + } + $content .= $news["text"]; + // Print Admin options for this News item + if (WT_USER_GEDCOM_ADMIN) { + $content .= "<hr size=\"1\" />" + ."<a href=\"javascript:;\" onclick=\"editnews('".$news['id']."'); return false;\">".WT_I18N::translate('Edit')."</a> | " + ."<a href=\"index.php?action=deletenews&news_id=".$news['id']."&ctype={$ctype}\" onclick=\"return confirm('".WT_I18N::translate('Are you sure you want to delete this News entry?')."');\">".WT_I18N::translate('Delete')."</a><br />"; + } + $content .= "</div>"; + } + $printedAddLink = false; + if (WT_USER_GEDCOM_ADMIN) { + $content .= "<a href=\"javascript:;\" onclick=\"addnews('".WT_GEDURL."'); return false;\">".WT_I18N::translate('Add a News article')."</a>"; + $printedAddLink = true; + } + if ($limit=='date' || $limit=='count') { + if ($printedAddLink) $content .= " | "; + $content .= "<a href=\"index.php?gedcom_news_archive=yes&ctype={$ctype}\">".WT_I18N::translate('View archive')."</a>"; + $content .= help_link('gedcom_news_archive').'<br />'; + } + + if ($template) { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return false; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'limit', safe_POST('limit')); + set_block_setting($block_id, 'flag', safe_POST('flag')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + + // Limit Type + $limit=get_block_setting($block_id, 'limit', 'nolimit'); + echo + '<tr><td class="descriptionbox wrap width33">', + WT_I18N::translate('Limit display by:'), help_link('gedcom_news_limit'), + '</td><td class="optionbox"><select name="limit"><option value="nolimit"', + ($limit == 'nolimit'?' selected="selected"':'').">", + WT_I18N::translate('No limit')."</option>", + '<option value="date"'.($limit == 'date'?' selected="selected"':'').">".WT_I18N::translate('Age of item')."</option>", + '<option value="count"'.($limit == 'count'?' selected="selected"':'').">".WT_I18N::translate('Number of items')."</option>", + '</select></td></tr>'; + + // Flag to look for + $flag=get_block_setting($block_id, 'flag', 0); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Limit:'), help_link('gedcom_news_flag'); + echo '</td><td class="optionbox"><input type="text" name="flag" size="4" maxlength="4" value="'.$flag.'" /></td></tr>'; + } +} diff --git a/modules_v2/gedcom_stats/module.php b/modules_v2/gedcom_stats/module.php new file mode 100644 index 0000000000..a25d1bdd06 --- /dev/null +++ b/modules_v2/gedcom_stats/module.php @@ -0,0 +1,384 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class gedcom_stats_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Family tree statistics'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The GEDCOM Statistics block shows the visitor some basic information about the database, such as when it was created and how many people are in it.<br /><br />It also has a list of the most frequent surnames. You can configure this block to not show the Frequent Surnames list, and you can also configure the GEDCOM to remove or add names to this list. You can set the occurrence threshold for this list in the GEDCOM configuration.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $WT_IMAGES, $MULTI_MEDIA, $top10_block_present; + + $show_last_update =get_block_setting($block_id, 'show_last_update', true); + $show_common_surnames=get_block_setting($block_id, 'show_common_surnames', true); + $stat_indi =get_block_setting($block_id, 'stat_indi', true); + $stat_fam =get_block_setting($block_id, 'stat_fam', true); + $stat_sour =get_block_setting($block_id, 'stat_sour', true); + $stat_other =get_block_setting($block_id, 'stat_other', true); + $stat_media =get_block_setting($block_id, 'stat_media', true); + $stat_repo =get_block_setting($block_id, 'stat_repo', true); + $stat_surname =get_block_setting($block_id, 'stat_surname', true); + $stat_events =get_block_setting($block_id, 'stat_events', true); + $stat_users =get_block_setting($block_id, 'stat_users', true); + $stat_first_birth =get_block_setting($block_id, 'stat_first_birth', true); + $stat_last_birth =get_block_setting($block_id, 'stat_last_birth', true); + $stat_first_death =get_block_setting($block_id, 'stat_first_death', true); + $stat_last_death =get_block_setting($block_id, 'stat_last_death', true); + $stat_long_life =get_block_setting($block_id, 'stat_long_life', true); + $stat_avg_life =get_block_setting($block_id, 'stat_avg_life', true); + $stat_most_chil =get_block_setting($block_id, 'stat_most_chil', true); + $stat_avg_chil =get_block_setting($block_id, 'stat_avg_chil', true); + $stat_link =get_block_setting($block_id, 'stat_link', true); + $block =get_block_setting($block_id, 'block', false); + if ($cfg) { + foreach (array('show_common_surnames', 'stat_indi', 'stat_fam', 'stat_sour', 'stat_other', 'stat_media', 'stat_surname', 'stat_events', 'stat_users', 'stat_first_birth', 'stat_last_birth', 'stat_first_death', 'stat_last_death', 'stat_long_life', 'stat_avg_life', 'stat_most_chil', 'stat_avg_chil', 'stat_link', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + $id=$this->getName().$block_id; + $title=''; + if ($ctype=='gedcom' && WT_USER_GEDCOM_ADMIN || $ctype=='user' && WT_USER_ID) { + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title .= "<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + $title.=$this->getTitle(); + + $stats=new WT_Stats(WT_GEDCOM); + + $content = "<b><a href=\"index.php?ctype=gedcom\">".PrintReady(strip_tags(get_gedcom_setting(WT_GED_ID, 'title')))."</a></b><br />"; + + if ($show_last_update) { + $content .= '<div>'./* I18N: %s is a date */ WT_I18N::translate('This family tree was last updated on %s.', strip_tags($stats->gedcomUpdated())).'</div>'; + } + + $content .= '<table><tr><td valign="top" class="width20"><table cellspacing="1" cellpadding="0">'; + if ($stat_indi) { + $content.='<tr><td class="facts_label">'.WT_I18N::translate('Individuals').'</td><td class="facts_value"><div dir="rtl"><a href="'."indilist.php?surname_sublist=no&ged=".WT_GEDURL.'">'.$stats->totalIndividuals().'</a></div></td></tr>'; + $content.='<tr><td class="facts_label">'.WT_I18N::translate('Males').'</td><td class="facts_value"><div dir="rtl">'.$stats->totalSexMales().'<br />'.$stats->totalSexMalesPercentage().'%</div></td></tr>'; + $content.='<tr><td class="facts_label">'.WT_I18N::translate('Females').'</td><td class="facts_value"><div dir="rtl">'.$stats->totalSexFemales().'<br />'.$stats->totalSexFemalesPercentage().'%</div></td></tr>'; + } + if ($stat_surname) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Total surnames').'</td><td class="facts_value"><div dir="rtl"><a href="'."indilist.php?show_all=yes&surname_sublist=yes&ged=".WT_GEDURL.'">'.$stats->totalSurnames().'</a></div></td></tr>'; + } + if ($stat_fam) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Families').'</td><td class="facts_value"><div dir="rtl"><a href="famlist.php?ged='.WT_GEDURL.'">'.$stats->totalFamilies().'</a></div></td></tr>'; + } + if ($stat_sour) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Sources').'</td><td class="facts_value"><div dir="rtl"><a href="sourcelist.php?ged='.WT_GEDURL.'">'.$stats->totalSources().'</a></div></td></tr>'; + } + if ($stat_media && $MULTI_MEDIA==true) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Media objects').'</td><td class="facts_value"><div dir="rtl"><a href="medialist.php?ged='.WT_GEDURL.'">'.$stats->totalMedia().'</a></div></td></tr>'; + } + if ($stat_repo) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Repositories').'</td><td class="facts_value"><div dir="rtl">'.$stats->totalRepositories().'</div></td></tr>'; + } + if ($stat_other) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Other records').'</td><td class="facts_value"><div dir="rtl">'.$stats->totalOtherRecords().'</div></td></tr>'; + } + if ($stat_events) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Total events').'</td><td class="facts_value"><div dir="rtl">'.$stats->totalEvents().'</div></td></tr>'; + } + if ($stat_users) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Total users').'</td><td class="facts_value"><div dir="rtl">'; + if (WT_USER_GEDCOM_ADMIN) { + $content .= '<a href="admin_users.php">'.$stats->totalUsers().'</a>'; + } else { + $content .= $stats->totalUsers(); + } + $content .= '</div> + </td> + </tr>'; + } + if (!$block) { + $content .= '</table></td><td><br /></td><td valign="top"><table cellspacing="1" cellpadding="1" border="0">'; + } + if ($stat_first_birth) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Earliest birth year').'</td><td class="facts_value"><div dir="rtl">'.$stats->firstBirthYear().'</div></td>'; + if (!$block) { + $content .= '<td class="facts_value">'.$stats->firstBirth().'</td>'; + } + $content .= '</tr>'; + } + if ($stat_last_birth) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Latest birth year').'</td><td class="facts_value"><div dir="rtl">'.$stats->lastBirthYear().'</div></td>'; + if (!$block) { + $content .= '<td class="facts_value">'.$stats->lastBirth().'</td>'; + } + $content .= '</tr>'; + } + if ($stat_first_death) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Earliest death year').'</td><td class="facts_value"><div dir="rtl">'.$stats->firstDeathYear().'</div></td>'; + if (!$block) { + $content .= '<td class="facts_value">'.$stats->firstDeath().'</td>'; + } + $content .= '</tr>'; + } + if ($stat_last_death) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Latest death year').'</td><td class="facts_value"><div dir="rtl">'.$stats->lastDeathYear().'</div> + </td>'; + if (!$block) { + $content .= '<td class="facts_value">'.$stats->lastDeath().'</td>'; + } + $content .='</tr>'; + } + if ($stat_long_life) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Person who lived the longest').'</td><td class="facts_value"><div dir="rtl">'.$stats->LongestLifeAge().'</div></td>'; + if (!$block) { + $content .= '<td class="facts_value">'.$stats->LongestLife().'</td>'; + } + $content .= '</tr>'; + } + if ($stat_avg_life) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Average age at death').'</td><td class="facts_value"><div dir="rtl">'.$stats->averageLifespan().'</div></td>'; + if (!$block) { + $content .= '<td class="facts_value">'.WT_I18N::translate('Males').': '.$stats->averageLifespanMale(); + $content .= ' '.WT_I18N::translate('Females').': '.$stats->averageLifespanFemale().'</td>'; + } + $content .= '</tr>'; + } + + if ($stat_most_chil && !$block) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Family with the most children').'</td><td class="facts_value"><div dir="rtl">'.$stats->largestFamilySize().'</div></td>'; + if (!$block) { + $content .= '<td class="facts_value">'.$stats->largestFamily().'</td>'; + } + $content .= '</tr>'; + } + if ($stat_avg_chil) { + $content .= '<tr><td class="facts_label">'.WT_I18N::translate('Average number of children per family').'</td><td class="facts_value"><div dir="rtl">'.$stats->averageChildren().'</div></td>'; + if (!$block) { + $content .= '<td class="facts_value"> </td>'; + } + $content .= '</tr>'; + } + $content .= '</table></td></tr></table>'; + if ($stat_link) { + $content .= '<a href="statistics.php?ged='.WT_GEDURL.'"><b>'.WT_I18N::translate('View statistics as graphs').'</b></a><br />'; + } + // NOTE: Print the most common surnames + if ($show_common_surnames) { + $surnames = get_common_surnames(get_gedcom_setting(WT_GED_ID, 'COMMON_NAMES_THRESHOLD')); + if (count($surnames)>0) { + $content .= '<br /><b>'.WT_I18N::translate('Most Common Surnames').'</b>'; + $content .= help_link('index_common_names'); + $content .= '<br />'; + $i=0; + foreach ($surnames as $indexval => $surname) { + if (stristr($surname['name'], '@N.N')===false) { + if ($i>0) { + $content .= ', '; + } + $content .= '<a href="'."indilist.php?ged=".WT_GEDURL."&surname=".rawurlencode($surname['name']).'">'.PrintReady($surname['name']).'</a>'; + $i++; + } + } + } + } + + if ($template) { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'show_last_update', safe_POST_bool('show_last_update')); + set_block_setting($block_id, 'show_common_surnames', safe_POST_bool('show_common_surnames')); + set_block_setting($block_id, 'stat_indi', safe_POST_bool('stat_indi')); + set_block_setting($block_id, 'stat_fam', safe_POST_bool('stat_fam')); + set_block_setting($block_id, 'stat_sour', safe_POST_bool('stat_sour')); + set_block_setting($block_id, 'stat_other', safe_POST_bool('stat_other')); + set_block_setting($block_id, 'stat_media', safe_POST_bool('stat_media')); + set_block_setting($block_id, 'stat_repo', safe_POST_bool('stat_repo')); + set_block_setting($block_id, 'stat_surname', safe_POST_bool('stat_surname')); + set_block_setting($block_id, 'stat_events', safe_POST_bool('stat_events')); + set_block_setting($block_id, 'stat_users', safe_POST_bool('stat_users')); + set_block_setting($block_id, 'stat_first_birth', safe_POST_bool('stat_first_birth')); + set_block_setting($block_id, 'stat_last_birth', safe_POST_bool('stat_last_birth')); + set_block_setting($block_id, 'stat_first_death', safe_POST_bool('stat_first_death')); + set_block_setting($block_id, 'stat_last_death', safe_POST_bool('stat_last_death')); + set_block_setting($block_id, 'stat_long_life', safe_POST_bool('stat_long_life')); + set_block_setting($block_id, 'stat_avg_life', safe_POST_bool('stat_avg_life')); + set_block_setting($block_id, 'stat_most_chil', safe_POST_bool('stat_most_chil')); + set_block_setting($block_id, 'stat_avg_chil', safe_POST_bool('stat_avg_chil')); + set_block_setting($block_id, 'stat_link', safe_POST_bool('stat_link')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $show_last_update=get_block_setting($block_id, 'show_last_update', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for yes/no option */ WT_I18N::translate('Show date of last update?'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('show_last_update', $show_last_update); + echo '</td></tr>'; + + $show_common_surnames=get_block_setting($block_id, 'show_common_surnames', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show common surnames?'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('show_common_surnames', $show_common_surnames); + echo '</td></tr>'; + + $stat_indi =get_block_setting($block_id, 'stat_indi', true); + $stat_fam =get_block_setting($block_id, 'stat_fam', true); + $stat_sour =get_block_setting($block_id, 'stat_sour', true); + $stat_other =get_block_setting($block_id, 'stat_other', true); + $stat_media =get_block_setting($block_id, 'stat_media', true); + $stat_repo =get_block_setting($block_id, 'stat_repo', true); + $stat_surname =get_block_setting($block_id, 'stat_surname', true); + $stat_events =get_block_setting($block_id, 'stat_events', true); + $stat_users =get_block_setting($block_id, 'stat_users', true); + $stat_first_birth =get_block_setting($block_id, 'stat_first_birth', true); + $stat_last_birth =get_block_setting($block_id, 'stat_last_birth', true); + $stat_first_death =get_block_setting($block_id, 'stat_first_death', true); + $stat_last_death =get_block_setting($block_id, 'stat_last_death', true); + $stat_long_life =get_block_setting($block_id, 'stat_long_life', true); + $stat_avg_life =get_block_setting($block_id, 'stat_avg_life', true); + $stat_most_chil =get_block_setting($block_id, 'stat_most_chil', true); + $stat_avg_chil =get_block_setting($block_id, 'stat_avg_chil', true); + $stat_link =get_block_setting($block_id, 'stat_link', true); +?> + <tr> + <td class="descriptionbox wrap width33"><?php echo WT_I18N::translate('Select the stats to show in this block'); ?></td> + <td class="optionbox"> + <table> + <tr> + <td><input type="checkbox" value="yes" name="stat_indi" + <?php if ($stat_indi) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Individuals'); ?></td> + <td><input type="checkbox" value="yes" name="stat_first_birth" + <?php if ($stat_first_birth) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Earliest birth year'); ?></td> + </tr> + <tr> + <td><input type="checkbox" value="yes" name="stat_surname" + <?php if ($stat_surname) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Total surnames'); ?></td> + <td><input type="checkbox" value="yes" name="stat_last_birth" + <?php if ($stat_last_birth) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Latest birth year'); ?></td> + </tr> + <tr> + <td><input type="checkbox" value="yes" name="stat_fam" + <?php if ($stat_fam) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Families'); ?></td> + <td><input type="checkbox" value="yes" name="stat_first_death" + <?php if ($stat_first_death) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Earliest death year'); ?></td> + </tr> + <tr> + <td><input type="checkbox" value="yes" name="stat_sour" + <?php if ($stat_sour) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Sources'); ?></td> + <td><input type="checkbox" value="yes" name="stat_last_death" + <?php if ($stat_last_death) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Latest death year'); ?></td> + </tr> + <tr> + <td><input type="checkbox" value="yes" name="stat_media" + <?php if ($stat_media) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Media objects'); ?></td> + <td><input type="checkbox" value="yes" name="stat_long_life" + <?php if ($stat_long_life) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Person who lived the longest'); ?></td> + </tr> + <tr> + <td><input type="checkbox" value="yes" name="stat_repo" + <?php if ($stat_repo) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Repositories'); ?></td> + <td><input type="checkbox" value="yes" name="stat_avg_life" + <?php if ($stat_avg_life) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Average age at death'); ?></td> + </tr> + <tr> + <td><input type="checkbox" value="yes" name="stat_other" + <?php if ($stat_other) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Other records'); ?></td> + <td><input type="checkbox" value="yes" name="stat_most_chil" + <?php if ($stat_most_chil) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Family with the most children'); ?></td> + </tr> + <tr> + <td><input type="checkbox" value="yes" name="stat_events" + <?php if ($stat_events) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Total events'); ?></td> + <td><input type="checkbox" value="yes" name="stat_avg_chil" + <?php if ($stat_avg_chil) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Average number of children per family'); ?></td> + </tr> + <tr> + <td><input type="checkbox" value="yes" name="stat_users" + <?php if ($stat_users) echo ' checked="checked"'; ?> /> + <?php echo WT_I18N::translate('Total users'); ?></td> + <td> </td> + </tr> + </table> + </td> + </tr> + <?php + $stat_link=get_block_setting($block_id, 'stat_link', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show link to Statistics charts?'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('stat_link', $stat_link); + echo '</td></tr>'; + } +} diff --git a/modules_v2/googlemap/admin_config.php b/modules_v2/googlemap/admin_config.php new file mode 100644 index 0000000000..1fa5c80f25 --- /dev/null +++ b/modules_v2/googlemap/admin_config.php @@ -0,0 +1,55 @@ +<?php +/** + * Googlemap configuration User Interface. + * + * Provides links for administrators to get to other administrative areas of the site + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * This Page Is Valid XHTML 1.0 Transitional! > 01 September 2005 + * + * @package webtrees + * @subpackage Admin + * $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; + +print_header(WT_I18N::translate('Google Maps')); + +if (WT_USER_IS_ADMIN) { + echo '<table id="gm_config"><tr>', + '<th><a ', (safe_GET('mod_action')=="admin_editconfig" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_editconfig">', WT_I18N::translate('Google Maps configuration'), '</a>', help_link('GOOGLEMAP_CONFIG','googlemap'), '</th>', + '<th><a ', (safe_GET('mod_action')=="admin_places" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_places">', WT_I18N::translate('Edit geographic place locations'), '</a>', help_link('PLE_EDIT','googlemap'), '</th>', + '<th><a ', (safe_GET('mod_action')=="admin_placecheck" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_placecheck">', WT_I18N::translate('Place Check'), '</a>', help_link('GOOGLEMAP_PLACECHECK','googlemap'), '</th>', + '</tr></table>'; + print_footer(); +} else { + header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH.'login.php?url=module.php?mod=googlemap&mod_action=admin_config'); + exit; +} + + diff --git a/modules_v2/googlemap/admin_editconfig.php b/modules_v2/googlemap/admin_editconfig.php new file mode 100644 index 0000000000..3844ca6a67 --- /dev/null +++ b/modules_v2/googlemap/admin_editconfig.php @@ -0,0 +1,407 @@ +<?php +// Online UI for editing site configuration variables +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; +require WT_ROOT.'includes/functions/functions_edit.php'; + +$action=safe_REQUEST($_REQUEST, 'action'); + +function print_level_config_table($level) { + global $GM_MARKER_COLOR, $GM_MARKER_SIZE, $GM_PREFIX; + global $GM_POSTFIX, $GM_PRE_POST_MODE, $GM_MAX_NOF_LEVELS; +?> + <div id="level<?php echo $level; ?>" style="display:<?php if ($GM_MAX_NOF_LEVELS >= $level) {echo "block";} else {echo "none";} ?>"> + <table id="gm_levels"> + <tr> + <th colspan="2"> + <?php + if ($level==1) { + echo WT_I18N::translate('Country'); + } else { + echo WT_I18N::translate('Level'), " ", $level; + } + ?> + </th> + </tr> + <tr> + <td> + <?php echo WT_I18N::translate('Prefix'), help_link('GM_NAME_PREFIX','googlemap'); ?> + </td> + <td> + <input type="text" name="NEW_GM_PREFIX_<?php echo $level; ?>" value="<?php echo $GM_PREFIX[$level]; ?>" size="20" /> + </td> + </tr> + <tr> + <td> + <?php echo WT_I18N::translate('Postfix'), help_link('GM_NAME_POSTFIX','googlemap'); ?> + </td> + <td> + <input type="text" name="NEW_GM_POSTFIX_<?php echo $level; ?>" value="<?php echo $GM_POSTFIX[$level]; ?>" size="20" /> + </td> + </tr> + <tr> + <td> + <?php echo WT_I18N::translate('Prefix / Postfix order'), help_link('GM_NAME_PRE_POST','googlemap'); ?> + </td> + <td> + <select name="NEW_GM_PRE_POST_MODE_<?php echo $level; ?>" dir="ltr" onchange="showSelectedLevels()"> + <option value="0"<?php if ($GM_PRE_POST_MODE[$level] == 0) echo ' selected="selected"'; ?>><?php echo WT_I18N::translate('No pre/postfix'); ?></option> + <option value="1"<?php if ($GM_PRE_POST_MODE[$level] == 1) echo ' selected="selected"'; ?>><?php echo WT_I18N::translate('Normal, prefix, postfix, both'); ?></option> + <option value="2"<?php if ($GM_PRE_POST_MODE[$level] == 2) echo ' selected="selected"'; ?>><?php echo WT_I18N::translate('Normal, postfix, prefix, both'); ?></option> + <option value="3"<?php if ($GM_PRE_POST_MODE[$level] == 3) echo ' selected="selected"'; ?>><?php echo WT_I18N::translate('Prefix, postfix, both, normal'); ?></option> + <option value="4"<?php if ($GM_PRE_POST_MODE[$level] == 4) echo ' selected="selected"'; ?>><?php echo WT_I18N::translate('Postfix, prefix, both, normal'); ?></option> + <option value="5"<?php if ($GM_PRE_POST_MODE[$level] == 5) echo ' selected="selected"'; ?>><?php echo WT_I18N::translate('Prefix, postfix, normal, both'); ?></option> + <option value="6"<?php if ($GM_PRE_POST_MODE[$level] == 6) echo ' selected="selected"'; ?>><?php echo WT_I18N::translate('Postfix, prefix, normal, both'); ?></option> + </select> + </td> + </tr> + </table> + </div> +<?php +} + +print_header(WT_I18N::translate('Google Maps configuration')); + + +if (!WT_USER_IS_ADMIN) { + echo '<div>', WT_I18N::translate('Page only for Administrators'), '</div>'; + print_footer(); + exit; +} else { + echo '<table id="gm_config"><tr>', + '<th><a ', (safe_GET('mod_action')=="admin_editconfig" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_editconfig">', WT_I18N::translate('Google Maps configuration'), '</a>', help_link('GOOGLEMAP_CONFIG','googlemap'), '</th>', + '<th><a ', (safe_GET('mod_action')=="admin_places" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_places">', WT_I18N::translate('Edit geographic place locations'), '</a>', help_link('PLE_EDIT','googlemap'), '</th>', + '<th><a ', (safe_GET('mod_action')=="admin_placecheck" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_placecheck">', WT_I18N::translate('Place Check'), '</a>', help_link('GOOGLEMAP_PLACECHECK','googlemap'), '</th>', + '</tr></table>'; +} + +if ($action=="update" && !isset($security_user)) { + set_module_setting('googlemap', 'GM_MAP_TYPE', $_POST['NEW_GM_MAP_TYPE']); + set_module_setting('googlemap', 'GM_USE_STREETVIEW', $_POST['NEW_GM_USE_STREETVIEW']); + set_module_setting('googlemap', 'GM_MIN_ZOOM', $_POST['NEW_GM_MIN_ZOOM']); + set_module_setting('googlemap', 'GM_MAX_ZOOM', $_POST['NEW_GM_MAX_ZOOM']); + set_module_setting('googlemap', 'GM_XSIZE', $_POST['NEW_GM_XSIZE']); + set_module_setting('googlemap', 'GM_YSIZE', $_POST['NEW_GM_YSIZE']); + set_module_setting('googlemap', 'GM_PRECISION_0', $_POST['NEW_GM_PRECISION_0']); + set_module_setting('googlemap', 'GM_PRECISION_1', $_POST['NEW_GM_PRECISION_1']); + set_module_setting('googlemap', 'GM_PRECISION_2', $_POST['NEW_GM_PRECISION_2']); + set_module_setting('googlemap', 'GM_PRECISION_3', $_POST['NEW_GM_PRECISION_3']); + set_module_setting('googlemap', 'GM_PRECISION_4', $_POST['NEW_GM_PRECISION_4']); + set_module_setting('googlemap', 'GM_PRECISION_5', $_POST['NEW_GM_PRECISION_5']); + set_module_setting('googlemap', 'GM_DEFAULT_TOP_VALUE', $_POST['NEW_GM_DEFAULT_TOP_LEVEL']); + set_module_setting('googlemap', 'GM_MAX_NOF_LEVELS', $_POST['NEW_GM_LEVEL_COUNT']); + set_module_setting('googlemap', 'GM_COORD', $_POST['NEW_GM_COORD']); + set_module_setting('googlemap', 'GM_PLACE_HIERARCHY', $_POST['NEW_GM_PLACE_HIERARCHY']); + set_module_setting('googlemap', 'GM_PH_XSIZE', $_POST['NEW_GM_PH_XSIZE']); + set_module_setting('googlemap', 'GM_PH_YSIZE', $_POST['NEW_GM_PH_YSIZE']); + set_module_setting('googlemap', 'GM_PH_MARKER', $_POST['NEW_GM_PH_MARKER']); + set_module_setting('googlemap', 'GM_DISP_SHORT_PLACE', $_POST['NEW_GM_DISP_SHORT_PLACE']); + set_module_setting('googlemap', 'GM_PH_WHEEL', $_POST['NEW_GM_PH_WHEEL']); + set_module_setting('googlemap', 'GM_PH_CONTROLS', $_POST['NEW_GM_PH_CONTROLS']); + set_module_setting('googlemap', 'GM_DISP_COUNT', $_POST['NEW_GM_DISP_COUNT']); + + for ($i=1; $i<=9; $i++) { + set_module_setting('googlemap', 'GM_PREFIX_'.$i, $_POST['NEW_GM_PREFIX_'.$i]); + set_module_setting('googlemap', 'GM_POSTFIX_'.$i, $_POST['NEW_GM_POSTFIX_'.$i]); + set_module_setting('googlemap', 'GM_PRE_POST_MODE_'.$i, $_POST['NEW_GM_PRE_POST_MODE_'.$i]); + } + + AddToLog('Googlemap config updated', 'config'); + // read the config file again, to set the vars + require WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; +} + +?> +<script type="text/javascript"> +<!-- + function showSelectedLevels() { + if (document.configform.NEW_GM_LEVEL_COUNT.value >= 1) { + document.getElementById('level1').style.display = 'block'; + } else { + document.getElementById('level1').style.display = 'none'; + } + if (document.configform.NEW_GM_LEVEL_COUNT.value >= 2) { + document.getElementById('level2').style.display = 'block'; + } else { + document.getElementById('level2').style.display = 'none'; + } + if (document.configform.NEW_GM_LEVEL_COUNT.value >= 3) { + document.getElementById('level3').style.display = 'block'; + } else { + document.getElementById('level3').style.display = 'none'; + } + if (document.configform.NEW_GM_LEVEL_COUNT.value >= 4) { + document.getElementById('level4').style.display = 'block'; + } else { + document.getElementById('level4').style.display = 'none'; + } + if (document.configform.NEW_GM_LEVEL_COUNT.value >= 5) { + document.getElementById('level5').style.display = 'block'; + } else { + document.getElementById('level5').style.display = 'none'; + } + if (document.configform.NEW_GM_LEVEL_COUNT.value >= 6) { + document.getElementById('level6').style.display = 'block'; + } else { + document.getElementById('level6').style.display = 'none'; + } + if (document.configform.NEW_GM_LEVEL_COUNT.value >= 7) { + document.getElementById('level7').style.display = 'block'; + } else { + document.getElementById('level7').style.display = 'none'; + } + if (document.configform.NEW_GM_LEVEL_COUNT.value >= 8) { + document.getElementById('level8').style.display = 'block'; + } else { + document.getElementById('level8').style.display = 'none'; + } + if (document.configform.NEW_GM_LEVEL_COUNT.value >= 9) { + document.getElementById('level9').style.display = 'block'; + } else { + document.getElementById('level9').style.display = 'none'; + } + } + + //--> +</script> + + +<?php +echo WT_JS_START; +?> +jQuery(document).ready(function() { +jQuery("#tabs").tabs(); +}); +<?php +echo WT_JS_END; +echo '<div id="tabs">', + '<ul>', + '<li><a href="#gm_basic"><span>', WT_I18N::translate('Basic'), '</span></a></li>', + '<li><a href="#gm_advanced"><span>', WT_I18N::translate('Advanced'), '</span></a></li>', + '</ul>'; +?> +<form method="post" name="configform" action="module.php?mod=googlemap&mod_action=admin_editconfig"> +<input type="hidden" name="action" value="update" /> + +<div id="gm_basic"> +<table class="gm_edit_config"> + <tr> + <th><?php echo WT_I18N::translate('Default map type'), help_link('GOOGLEMAP_MAP_TYPE','googlemap'); ?></th> + <td> + <select name="NEW_GM_MAP_TYPE"> + <option value="G_NORMAL_MAP" <?php if ($GOOGLEMAP_MAP_TYPE=="G_NORMAL_MAP") echo "selected=\"selected\""; ?>><?php echo WT_I18N::translate('Map'); ?></option> + <option value="G_SATELLITE_MAP" <?php if ($GOOGLEMAP_MAP_TYPE=="G_SATELLITE_MAP") echo "selected=\"selected\""; ?>><?php echo WT_I18N::translate('Satellite'); ?></option> + <option value="G_HYBRID_MAP" <?php if ($GOOGLEMAP_MAP_TYPE=="G_HYBRID_MAP") echo "selected=\"selected\""; ?>><?php echo WT_I18N::translate('Hybrid'); ?></option> + <option value="G_PHYSICAL_MAP" <?php if ($GOOGLEMAP_MAP_TYPE=="G_PHYSICAL_MAP") echo "selected=\"selected\""; ?>><?php echo WT_I18N::translate('Terrain'); ?></option> + </select> + </td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Enable Google Street View'), help_link('STREETVIEW_ENABLE','googlemap'); ?></th> + <td><?php echo edit_field_yes_no('NEW_GM_USE_STREETVIEW', get_module_setting('googlemap', 'GM_USE_STREETVIEW')); ?></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Size of map (in pixels)'), help_link('GOOGLEMAP_MAP_SIZE','googlemap'); ?></th> + <td> + <?php echo WT_I18N::translate('Width'); ?> + <input type="text" name="NEW_GM_XSIZE" value="<?php echo $GOOGLEMAP_XSIZE; ?>" size="10" /> + <?php echo WT_I18N::translate('Height'); ?> + <input type="text" name="NEW_GM_YSIZE" value="<?php echo $GOOGLEMAP_YSIZE; ?>" size="10" /> + </td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Use Googlemap for Place Hierarchy'), help_link('GOOGLEMAP_PH','googlemap'); ?></th> + <td><?php echo edit_field_yes_no('NEW_GM_PLACE_HIERARCHY', $GOOGLEMAP_PLACE_HIERARCHY); ?></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Size of Place Hierarchy map (in pixels)'), help_link('GOOGLEMAP_PH_MAP_SIZE','googlemap'); ?></th> + <td> + <?php echo WT_I18N::translate('Width'); ?> + <input type="text" name="NEW_GM_PH_XSIZE" value="<?php echo $GOOGLEMAP_PH_XSIZE; ?>" size="10" /> + <?php echo WT_I18N::translate('Height'); ?> + <input type="text" name="NEW_GM_PH_YSIZE" value="<?php echo $GOOGLEMAP_PH_YSIZE; ?>" size="10" /> + </td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Type of place markers in Place Hierarchy'), help_link('GOOGLEMAP_PH_MARKER','googlemap'); ?></th> + <td> + <select name="NEW_GM_PH_MARKER"> + <option value="G_DEFAULT_ICON" <?php if ($GOOGLEMAP_PH_MARKER=="G_DEFAULT_ICON") echo "selected=\"selected\""; ?>><?php echo WT_I18N::translate('Standard'); ?></option> + <option value="G_FLAG" <?php if ($GOOGLEMAP_PH_MARKER=="G_FLAG") echo "selected=\"selected\""; ?>><?php echo WT_I18N::translate('Flag'); ?></option> + </select> + </td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Display short placenames'), help_link('GM_DISP_SHORT_PLACE','googlemap'); ?></th> + <td><?php echo edit_field_yes_no('NEW_GM_DISP_SHORT_PLACE', $GM_DISP_SHORT_PLACE); ?></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Display indis and families count'), help_link('GM_DISP_COUNT','googlemap'); ?></th> + <td><?php echo edit_field_yes_no('NEW_GM_DISP_COUNT', $GM_DISP_COUNT); ?></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Use mouse wheel for zoom'), help_link('GOOGLEMAP_PH_WHEEL','googlemap'); ?></th> + <td><?php echo edit_field_yes_no('NEW_GM_PH_WHEEL', $GOOGLEMAP_PH_WHEEL); ?></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Hide map controls'), help_link('GOOGLEMAP_PH_CONTROLS','googlemap'); ?></th> + <td><?php echo edit_field_yes_no('NEW_GM_PH_CONTROLS', $GOOGLEMAP_PH_CONTROLS); ?></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Display Map Co-ordinates'), help_link('GOOGLEMAP_COORD','googlemap'); ?></th> + <td><?php echo edit_field_yes_no('NEW_GM_COORD', $GOOGLEMAP_COORD); ?></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Zoom factor of map'), help_link('GOOGLEMAP_MAP_ZOOM','googlemap'); ?></th> + <td> + <?php echo WT_I18N::translate('minimum'); ?>: <select name="NEW_GM_MIN_ZOOM"> + <?php for ($j=1; $j < 15; $j++) { ?> + <option value="<?php echo $j, "\""; if ($GOOGLEMAP_MIN_ZOOM==$j) echo " selected=\"selected\""; echo ">", $j; ?></option> + <?php } ?> + </select> + <?php echo WT_I18N::translate('maximum'); ?>: <select name="NEW_GM_MAX_ZOOM"> + <?php for ($j=1; $j < 15; $j++) { ?> + <option value="<?php echo $j, "\""; if ($GOOGLEMAP_MAX_ZOOM==$j) echo " selected=\"selected\""; echo ">", $j; ?></option> + <?php } ?> + </select> + </td> + </tr> +</table> +</div> +<div id="gm_advanced"> +<table class="gm_edit_config"> + <tr> + <th><?php echo WT_I18N::translate('Precision'), help_link('GOOGLEMAP_PRECISION','googlemap'); ?></th> + <td> + <table> + <tr> + <td><?php echo WT_I18N::translate('Country'); ?> </td> + <td><select name="NEW_GM_PRECISION_0"> + <?php for ($j=0; $j < 10; $j++) { ?> + <option value="<?php echo $j; ?>"<?php if ($GOOGLEMAP_PRECISION_0==$j) echo " selected=\"selected\""; echo ">", $j; ?></option> + <?php } ?> + </select> <?php echo WT_I18N::translate('digits'); ?> + </td> + </tr> + <tr> + <td><?php echo WT_I18N::translate('State'); ?> </td> + <td><select name="NEW_GM_PRECISION_1"> + <?php for ($j=0; $j < 10; $j++) { ?> + <option value="<?php echo $j; ?>"<?php if ($GOOGLEMAP_PRECISION_1==$j) echo " selected=\"selected\""; echo ">", $j; ?></option> + <?php } ?> + </select> <?php echo WT_I18N::translate('digits'); ?> + </td> + </tr> + <tr> + <td><?php echo WT_I18N::translate('City'); ?> </td> + <td><select name="NEW_GM_PRECISION_2"> + <?php for ($j=0; $j < 10; $j++) { ?> + <option value="<?php echo $j; ?>"<?php if ($GOOGLEMAP_PRECISION_2==$j) echo " selected=\"selected\""; echo ">", $j; ?></option> + <?php } ?> + </select> <?php echo WT_I18N::translate('digits'); ?> + </td> + </tr> + <tr><td><?php echo WT_I18N::translate('Neighborhood'); ?> </td> + <td><select name="NEW_GM_PRECISION_3"> + <?php for ($j=0; $j < 10; $j++) { ?> + <option value="<?php echo $j; ?>"<?php if ($GOOGLEMAP_PRECISION_3==$j) echo " selected=\"selected\""; echo ">", $j; ?></option> + <?php } ?> + </select> <?php echo WT_I18N::translate('digits'); ?> + </td> + </tr> + <tr><td><?php echo WT_I18N::translate('House'); ?> </td> + <td><select name="NEW_GM_PRECISION_4"> + <?php for ($j=0; $j < 10; $j++) { ?> + <option value="<?php echo $j; ?>"<?php if ($GOOGLEMAP_PRECISION_4==$j) echo " selected=\"selected\""; echo ">", $j; ?></option> + <?php } ?> + </select> <?php echo WT_I18N::translate('digits'); ?> + </td> + </tr> + <tr><td><?php echo WT_I18N::translate('Max'); ?> </td> + <td><select name="NEW_GM_PRECISION_5"> + <?php for ($j=0; $j < 10; $j++) { ?> + <option value="<?php echo $j; ?>"<?php if ($GOOGLEMAP_PRECISION_5==$j) echo " selected=\"selected\""; echo ">", $j; ?></option> + <?php } ?> + </select> <?php echo WT_I18N::translate('digits'); ?> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Default top level value'), help_link('GM_DEFAULT_LEVEL_0','googlemap'); ?></th> + <td><input type="text" name="NEW_GM_DEFAULT_TOP_LEVEL" value="<?php echo $GM_DEFAULT_TOP_VALUE; ?>" size="20" /></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Number of levels'), help_link('GM_NOF_LEVELS','googlemap'); ?></th> + <td> + <select name="NEW_GM_LEVEL_COUNT" dir="ltr" onchange="showSelectedLevels()"> + <option value="1"<?php if ($GM_MAX_NOF_LEVELS == 1) echo " selected=\"selected\""; ?>>1</option> + <option value="2"<?php if ($GM_MAX_NOF_LEVELS == 2) echo " selected=\"selected\""; ?>>2</option> + <option value="3"<?php if ($GM_MAX_NOF_LEVELS == 3) echo " selected=\"selected\""; ?>>3</option> + <option value="4"<?php if ($GM_MAX_NOF_LEVELS == 4) echo " selected=\"selected\""; ?>>4</option> + <option value="5"<?php if ($GM_MAX_NOF_LEVELS == 5) echo " selected=\"selected\""; ?>>5</option> + <option value="6"<?php if ($GM_MAX_NOF_LEVELS == 6) echo " selected=\"selected\""; ?>>6</option> + <option value="7"<?php if ($GM_MAX_NOF_LEVELS == 7) echo " selected=\"selected\""; ?>>7</option> + <option value="8"<?php if ($GM_MAX_NOF_LEVELS == 8) echo " selected=\"selected\""; ?>>8</option> + <option value="9"<?php if ($GM_MAX_NOF_LEVELS == 9) echo " selected=\"selected\""; ?>>9</option> + </select> + </td> + </tr> + <tr><th colspan="2"><?php echo WT_I18N::translate('Configuration per level'); ?></th></tr> + <tr><td colspan="2"> + <table id="gm_levels"> + <?php + echo + '<tr><td>', print_level_config_table(1), '</td><td>', print_level_config_table(2), '</td></tr>', + '<tr><td>', print_level_config_table(3), '</td><td>', print_level_config_table(4), '</td></tr>', + '<tr><td>', print_level_config_table(5), '</td><td>', print_level_config_table(6), '</td></tr>', + '<tr><td>', print_level_config_table(7), '</td><td>', print_level_config_table(8), '</td></tr>', + '<tr><td>', print_level_config_table(9), '</td><td> </td></tr>'; + ?> + </table> + </td></tr> +</table> +</div> +</div> +<p> + <input type="submit" value="<?php echo WT_I18N::translate('Save configuration'); ?>" onclick="closeHelp();" /> + + <input type="reset" value="<?php echo WT_I18N::translate('Reset'); ?>" /> +</p> +</form> +<?php + +if (empty($SEARCH_SPIDER)) { + print_footer(); +} else { + echo WT_I18N::translate('Search Engine Spider Detected'), ": ", $SEARCH_SPIDER; + echo "</div></body></html>"; +} diff --git a/modules_v2/googlemap/admin_placecheck.php b/modules_v2/googlemap/admin_placecheck.php new file mode 100644 index 0000000000..0b0c28282f --- /dev/null +++ b/modules_v2/googlemap/admin_placecheck.php @@ -0,0 +1,349 @@ +<?php +// Check a GEDCOM file for compliance with the 5.5.1 specification +// and other common errors. +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License or, +// at your discretion, 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +$action =safe_POST ('action' ); +$gedcom_id=safe_POST ('gedcom_id', array_keys(get_all_gedcoms()), WT_GED_ID); +$openinnew=safe_POST_bool('openinnew' ); +$country =safe_POST ('country', WT_REGEX_UNSAFE, '' ); +if (!$country) { + // allow placelist to link directly to a specific country/state + $country=safe_GET ('country', WT_REGEX_UNSAFE, 'XYZ' ); +} +$state =safe_POST ('state', WT_REGEX_UNSAFE, '' ); +if (!$state) { + $state=safe_GET ('state', WT_REGEX_UNSAFE, 'XYZ' ); +} +if (isset($_REQUEST['show_changes']) && $_REQUEST['show_changes']=='yes') { + $_POST["matching"] = 1; +} + +// Must be an admin user to use this module +if (!WT_USER_GEDCOM_ADMIN) { + header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH.'login.php?url=placelist.php'); + exit; +} +print_header(WT_I18N::translate('Place Check').' - '.WT_GEDCOM); + +$target=$openinnew ? "target='_blank'" : ""; + +echo '<table id="gm_config"><tr>', + '<th><a ', (safe_GET('mod_action')=="admin_editconfig" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_editconfig">', WT_I18N::translate('Google Maps configuration'), '</a>', help_link('GOOGLEMAP_CONFIG','googlemap'), '</th>', + '<th><a ', (safe_GET('mod_action')=="admin_places" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_places">', WT_I18N::translate('Edit geographic place locations'), '</a>', help_link('PLE_EDIT','googlemap'), '</th>', + '<th><a ', (safe_GET('mod_action')=="admin_placecheck" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_placecheck">', WT_I18N::translate('Place Check'), '</a>', help_link('GOOGLEMAP_PLACECHECK','googlemap'), '</th>', +'</tr></table>'; + +//Start of User Defined options +echo "<table id=\"gm_check_outer\">"; +echo "<form method='post' name='placecheck' action='module.php?mod=googlemap&mod_action=admin_placecheck'>"; +echo "<tr valign='top'>"; +echo "<td>"; +echo "<table class=\"gm_check_top\" align='left'>"; +echo "<tr><th colspan='2'>", WT_I18N::translate('PlaceCheck List Options'), "</th></tr>"; +//Option box to select gedcom +echo "<tr><td>".WT_I18N::translate('Family tree')."</td>"; +echo "<td><select name='gedcom_id'>"; +foreach (get_all_gedcoms() as $ged_id=>$gedcom) { + echo '<option value="', $ged_id, '"', $ged_id==$gedcom_id?' selected="selected"':'', '>', get_gedcom_setting($ged_id, 'title'), '</option>'; +} +echo "</select></td></tr>"; +//Option box for 'Open in new window' +echo "<tr><td>".WT_I18N::translate('Open links in')."</td>"; +echo "<td><select name='openinnew'>"; +echo "<option value='0' ", $openinnew?" selected='selected'":"", ">".WT_I18N::translate('Same tab/window')."</option>"; +echo "<option value='1' ", $openinnew?" selected='selected'":"", ">".WT_I18N::translate('New tab/window')."</option>"; +echo "</select></td></tr>"; +//Option box to select Country within Gedcom +echo "<tr><td>", WT_I18N::translate('Country'), "</td>"; +echo "<td><select name='country'>"; +echo "<option value='XYZ' selected='selected'>", /* I18N: first/default option in a drop-down listbox */ WT_I18N::translate('<select>'), "</option>"; +echo "<option value='XYZ'>", WT_I18N::translate('All'), "</option>"; +$rows= + WT_DB::prepare("SELECT pl_id, pl_place FROM `##placelocation` WHERE pl_level=0 ORDER BY pl_place") + ->fetchAssoc(); +foreach ($rows as $id=>$place) { + echo "<option value='{$place}'"; + if ($place==$country) { + echo " selected='selected'"; + $par_id=$id; + } + echo ">{$place}</option>"; +} +echo "</select></td></tr>"; + +//Option box to select level 2 place within the selected Country +if ($country!='XYZ') { + echo "<tr><td>", /* I18N: Part of a country, state/region/county */ WT_I18N::translate('Subdivision'), "</td>"; + echo "<td><select name='state'>"; + echo "<option value='XYZ' selected='selected'>", WT_I18N::translate('<select>'), "</option>"; + echo "<option value='XYZ'>", WT_I18N::translate('All'), "</option>"; + $places= + WT_DB::prepare("SELECT pl_place FROM `##placelocation` WHERE pl_parent_id=? ORDER BY pl_place") + ->execute(array($par_id)) + ->fetchOneColumn(); + foreach ($places as $place) { + echo "<option value='{$place}'", $place==$state?" selected='selected'":"", ">{$place}</option>"; + } + echo "</select></td></tr>"; +} +echo "</table>"; +echo "</td>"; +//Show Filter table +if (!isset ($_POST["matching"])) {$matching=0;} else {$matching=1;} +echo "<td>"; +echo "<table class=\"gm_check_top\" align='center'>"; +echo "<tr><th colspan='2'>"; +echo WT_I18N::translate('List filtering options'), help_link('PLACECHECK_FILTER','googlemap'); +echo "</th></tr><tr><td>"; +echo WT_I18N::translate('Include fully matched places: '), help_link('PLACECHECK_MATCH','googlemap'); +echo "</td><td><input type=\"checkbox\" name=\"matching\" value=\"active\""; +if ($matching) { + echo " checked=\"checked\""; + $action = 'go'; +} +echo "></td></tr>"; +echo "</table>"; +echo "</td>"; +echo "<td>"; +echo "<input type='submit' value='".WT_I18N::translate('Show')."' $target><input type='hidden' name='action' value='go'>"; +echo "</td>"; +echo "</tr>"; +echo "</form>"; +echo "</table>"; +echo "<hr />"; + +switch ($action) { +case 'go': + //Identify gedcom file + echo "<div id=\"gm_check_title\"><span>", WT_I18N::translate('Place list for GEDCOM file'), ": </span>", htmlspecialchars(get_gedcom_setting($gedcom_id, 'title')), "</div>"; + //Select all '2 PLAC ' tags in the file and create array + $place_list=array(); + $ged_data=WT_DB::prepare("SELECT i_gedcom FROM `##individuals` WHERE i_gedcom LIKE ? AND i_file=?") + ->execute(array("%\n2 PLAC %", $gedcom_id)) + ->fetchOneColumn(); + foreach ($ged_data as $ged_datum) { + preg_match_all('/\n2 PLAC (.+)/', $ged_datum, $matches); + foreach ($matches[1] as $match) { + $place_list[$match]=true; + } + } + $ged_data=WT_DB::prepare("SELECT f_gedcom FROM `##families` WHERE f_gedcom LIKE ? AND f_file=?") + ->execute(array("%\n2 PLAC %", $gedcom_id)) + ->fetchOneColumn(); + foreach ($ged_data as $ged_datum) { + preg_match_all('/\n2 PLAC (.+)/', $ged_datum, $matches); + foreach ($matches[1] as $match) { + $place_list[$match]=true; + } + } + // Unique list of places + $place_list=array_keys($place_list); + + // Apply_filter + if ($country=='XYZ') { + $filter='.*$'; + } else { + $filter=preg_quote($country).'$'; + if ($state!='XYZ') { + $filter=preg_quote($state).', '.$filter; + } + } + $place_list=preg_grep('/'.$filter.'/', $place_list); + + //sort the array, limit to unique values, and count them + $place_parts=array(); + usort($place_list, "utf8_strcasecmp"); + $i=count($place_list); + + //calculate maximum no. of levels to display + $x=0; + $max=0; + while ($x<$i) { + $levels=explode(",", $place_list[$x]); + $parts=count($levels); + if ($parts>$max) $max=$parts; + $x++;} + $x=0; + + //scripts for edit, add and refresh + ?> + <script type="text/javascript"> + <!-- + function edit_place_location(placeid) { + window.open('module.php?mod=googlemap&mod_action=places_edit&action=update&placeid='+placeid+"&"+sessionname+"="+sessionid, '_blank', 'top=50, left=50, width=680, height=550, resizable=1, scrollbars=1'); + return false; + } + + function add_place_location(placeid) { + window.open('module.php?mod=googlemap&mod_action=places_edit&action=add&placeid='+placeid+"&"+sessionname+"="+sessionid, '_blank', 'top=50, left=50, width=680, height=550, resizable=1, scrollbars=1'); + return false; + } + function showchanges() { + window.location='<?php echo $_SERVER["REQUEST_URI"]; ?>&show_changes=yes'; + } + //--> + </script> + <?php + + //start to produce the display table + $cols=0; + $span=$max*3+3; + echo "<div class='gm_check_details'>"; + echo "<table class='gm_check_details'><tr>"; + echo "<th rowspan='3'>", WT_I18N::translate('GEDCOM File Place Data<br />(2 PLAC tag)'), "</th>"; + echo "<th colspan='", $span, "'>", WT_I18N::translate('GoogleMap Places Table Data'), "</th></tr>"; + echo "<tr>"; + while ($cols<$max) { + if ($cols == 0) { + echo "<th colspan='3'>", PrintReady(WT_I18N::translate('Country')), "</th>"; + } else { + echo "<th colspan='3'>", PrintReady(WT_I18N::translate('Level')), " ", $cols+1, "</th>"; + } + $cols++; + } + echo "</tr><tr>"; + $cols=0; + while ($cols<$max) { + echo "<th>", translate_fact('PLAC'), "</th><th>", WT_I18N::translate('Latitude'), "</th><th>", WT_I18N::translate('Longitude'), "</th></td>"; + $cols++; + } + echo "</tr>"; + $countrows=0; + while ($x<$i) { + $placestr=""; + $levels=explode(",", $place_list[$x]); + $parts=count($levels); + $levels=array_reverse($levels); + $placestr.="<a href=\"placelist.php?action=show&"; + foreach ($levels as $pindex=>$ppart) { + $ppart=urlencode(trim($ppart)); + $placestr.="parent[$pindex]=".$ppart."&"; + } + $placestr.="level=".count($levels); + $placestr.="\">".$place_list[$x]."</a>"; + $gedplace="<tr><td>".$placestr."</td>"; + $z=0; + $y=0; + $id=0; + $level=0; + $matched[$x]=0;// used to exclude places where the gedcom place is matched at all levels + $mapstr_edit="<a href=\"javascript:;\" onclick=\"edit_place_location('"; + $mapstr_add="<a href=\"javascript:;\" onclick=\"add_place_location('"; + $mapstr3=""; + $mapstr4=""; + $mapstr5="')\" title='"; + $mapstr6="' >"; + $mapstr7="')\">"; + $mapstr8="</a>"; + while ($z<$parts) { + if ($levels[$z]==' ' || $levels[$z]=='') + $levels[$z]="unknown";// GoogleMap module uses "unknown" while GEDCOM uses , , + + $levels[$z]=rtrim(ltrim($levels[$z])); + + $placelist=create_possible_place_names($levels[$z], $z+1); // add the necessary prefix/postfix values to the place name + foreach ($placelist as $key=>$placename) { + $row= + WT_DB::prepare("SELECT pl_id, pl_place, pl_long, pl_lati, pl_zoom FROM `##placelocation` WHERE pl_level=? AND pl_parent_id=? AND pl_place LIKE ? ORDER BY pl_place") + ->execute(array($z, $id, $placename)) + ->fetchOneRow(PDO::FETCH_ASSOC); + if (!empty($row['pl_id'])) { + $row['pl_placerequested']=$levels[$z]; // keep the actual place name that was requested so we can display that instead of what is in the db + break; + } + } + if ($row['pl_id']!='') { + $id=$row['pl_id']; + } + + if ($row['pl_place']!='') { + $placestr2=$mapstr_edit.$id."&level=".$level.$mapstr3.$mapstr5.WT_I18N::translate('Zoom=').$row['pl_zoom'].$mapstr6.$row['pl_placerequested'].$mapstr8; + if ($row['pl_place']=='unknown') + $matched[$x]++; + } else { + if ($levels[$z]=="unknown") { + $placestr2=$mapstr_add.$id."&level=".$level.$mapstr3.$mapstr7."<strong>".rtrim(ltrim(WT_I18N::translate('unknown')))."</strong>".$mapstr8;$matched[$x]++; + } else { + $placestr2=$mapstr_add.$id."&place_name=".urlencode($levels[$z])."&level=".$level.$mapstr3.$mapstr7.'<span class="error">'.rtrim(ltrim($levels[$z])).'</span>'.$mapstr8;$matched[$x]++; + } + } + $plac[$z]="<td>".$placestr2."</td>\n"; + if ($row['pl_lati']=='0') { + $lati[$z]="<td class='error'><strong>".$row['pl_lati']."</strong></td>"; + } else if ($row['pl_lati']!='') { + $lati[$z]="<td>".$row['pl_lati']."</td>"; + } else { + $lati[$z]="<td class='error' align='center'><strong>X</strong></td>";$matched[$x]++; + } + if ($row['pl_long']=='0') { + $long[$z]="<td class='error'><strong>".$row['pl_long']."</strong></td>"; + } else if ($row['pl_long']!='') { + $long[$z]="<td>".$row['pl_long']."</td>"; + } else { + $long[$z]="<td class='error' align='center'><strong>X</strong></td>";$matched[$x]++; + } + $level++; + $mapstr3=$mapstr3."&parent[".$z."]=".addslashes(PrintReady($row['pl_placerequested'])); + $mapstr4=$mapstr4."&parent[".$z."]=".addslashes(PrintReady(rtrim(ltrim($levels[$z])))); + $z++; + } + if ($matching) { + $matched[$x]=1; + } + if ($matched[$x]!=0) { + echo $gedplace; + $z=0; + while ($z<$max) { + if ($z<$parts) { + echo $plac[$z]; + echo $lati[$z]; + echo $long[$z]; + } else { + echo "<td> </td><td> </td><td> </td>";} + $z++; + } + echo "</tr>"; + $countrows++; + } + $x++; + } + + // echo final row of table + echo "<tr><td colspan=\"2\" class=\"accepted\">", WT_I18N::translate('Total unique places'), ": ", $countrows, "</td></tr></table></div>"; + break; +default: + // Do not run until user selects a gedcom/place/etc. + // Instead, show some useful help info. + echo "<div class=\"gm_check_top accepted\">", WT_I18N::translate('This will list all the places from the selected GEDCOM file. By default this will NOT INCLUDE places that are fully matched between the GEDCOM file and the GoogleMap tables'), "</div>"; + break; +} + +//echo footers +print_footer(); diff --git a/modules_v2/googlemap/admin_places.php b/modules_v2/googlemap/admin_places.php new file mode 100644 index 0000000000..8a62520046 --- /dev/null +++ b/modules_v2/googlemap/admin_places.php @@ -0,0 +1,649 @@ +<?php +// Online UI for editing config.php site configuration variables +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; + +global $iso3166, $WT_IMAGES; +$action=safe_REQUEST($_REQUEST, 'action'); +if (isset($_REQUEST['parent'])) $parent=$_REQUEST['parent']; +if (isset($_REQUEST['display'])) $display=$_REQUEST['display']; +if (isset($_REQUEST['mode'])) $mode=$_REQUEST['mode']; +if (isset($_REQUEST['deleteRecord'])) $deleteRecord=$_REQUEST['deleteRecord']; + +if (!isset($parent)) $parent=0; +if (!isset($display)) $display=""; + +// Take a place id and find its place in the hierarchy +// Input: place ID +// Output: ordered array of id=>name values, starting with the Top Level +// e.g. array(0=>"Top Level", 16=>"England", 19=>"London", 217=>"Westminster"); +// NB This function exists in both places.php and places_edit.php +function place_id_to_hierarchy($id) { + $statement= + WT_DB::prepare("SELECT pl_parent_id, pl_place FROM `##placelocation` WHERE pl_id=?"); + $arr=array(); + while ($id!=0) { + $row=$statement->execute(array($id))->fetchOneRow(); + $arr=array($id=>$row->pl_place)+$arr; + $id=$row->pl_parent_id; + } + return $arr; +} + +// NB This function exists in both admin_places.php and places_edit.php +function getHighestIndex() { + return (int)WT_DB::prepare("SELECT MAX(pl_id) FROM `##placelocation`")->fetchOne(); +} + +function getHighestLevel() { + return (int)WT_DB::prepare("SELECT MAX(pl_level) FROM `##placelocation`")->fetchOne(); +} + +/** + * Find all of the places in the hierarchy + */ +function get_place_list_loc($parent_id, $display='') { + if ($display=="inactive") { + $rows= + WT_DB::prepare("SELECT pl_id, pl_place, pl_lati, pl_long, pl_zoom, pl_icon FROM `##placelocation` WHERE pl_parent_id=? ORDER BY pl_place") + ->execute(array($parent_id)) + ->fetchAll(); + } else { + $rows= + WT_DB::prepare( + "SELECT DISTINCT pl_id, pl_place, pl_lati, pl_long, pl_zoom, pl_icon". + " FROM `##placelocation`". + " INNER JOIN `##places` ON `##placelocation`.pl_place=`##places`.p_place AND `##placelocation`.pl_level=`##places`.p_level". + " WHERE pl_parent_id=? ORDER BY pl_place" + ) + ->execute(array($parent_id)) + ->fetchAll(); + } + + $placelist=array(); + foreach ($rows as $row) { + $placelist[]=array("place_id"=>$row->pl_id, "place"=>$row->pl_place, "lati"=>$row->pl_lati, "long"=>$row->pl_long, "zoom"=>$row->pl_zoom, "icon"=>$row->pl_icon); + } + uasort($placelist, "placesort"); + return $placelist; +} + +function outputLevel($parent_id) { + $tmp = place_id_to_hierarchy($parent_id); + $maxLevel = getHighestLevel(); + if ($maxLevel>8) $maxLevel = 8; + $prefix = implode(';', $tmp); + if ($prefix!='') + $prefix.=';'; + $suffix=str_repeat(';', $maxLevel-count($tmp)); + $level=count($tmp); + + $rows= + WT_DB::prepare("SELECT pl_id, pl_place, pl_long, pl_lati, pl_zoom, pl_icon FROM `##placelocation` WHERE pl_parent_id=? ORDER BY pl_place") + ->execute(array($parent_id)) + ->fetchAll(); + + foreach ($rows as $row) { + echo "{$level};{$prefix}{$row->pl_place}{$suffix};{$row->pl_long};{$row->pl_lati};{$row->pl_zoom};{$row->pl_icon}\r\n"; + if ($level < $maxLevel) + outputLevel($row->pl_id); + } +} + +/** + * recursively find all of the csv files on the server + * + * @param string $path + */ +function findFiles($path) { + global $placefiles; + if (file_exists($path)) { + $dir = dir($path); + while (false !== ($entry = $dir->read())) { + if ($entry!="." && $entry!=".." && $entry!=".svn") { + if (is_dir($path."/".$entry)) { + findFiles($path."/".$entry); + } elseif (strstr($entry, ".csv")!==false) { + $placefiles[] = preg_replace('~'.WT_MODULES_DIR.'googlemap/extra~', '', $path).'/'.$entry; + } + } + } + $dir->close(); + } +} + +if (!WT_USER_IS_ADMIN) { + header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH.'admin.php'); + exit; +} + +global $GOOGLEMAP_MAX_ZOOM; + +if ($action=="ExportFile" && WT_USER_IS_ADMIN) { + $tmp = place_id_to_hierarchy($parent); + $maxLevel = getHighestLevel(); + if ($maxLevel>8) $maxLevel=8; + $tmp[0] = "places"; + $outputFileName=preg_replace('/[:;\/\\\(\)\{\}\[\] $]/', '_', implode('-', $tmp)).'.csv'; + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="'.$outputFileName.'"'); + echo "\"".WT_I18N::translate('Level')."\";\"".WT_I18N::translate('Country')."\";"; + if ($maxLevel>0) echo '"', WT_I18N::translate('State'), '";'; + if ($maxLevel>1) echo '"', WT_I18N::translate('County'), '";'; + if ($maxLevel>2) echo '"', WT_I18N::translate('City'), '";'; + if ($maxLevel>3) echo '"', WT_I18N::translate('Place'), '";'; + if ($maxLevel>4) echo '"', WT_I18N::translate('Place'), '";'; + if ($maxLevel>5) echo '"', WT_I18N::translate('Place'), '";'; + if ($maxLevel>6) echo '"', WT_I18N::translate('Place'), '";'; + if ($maxLevel>7) echo '"', WT_I18N::translate('Place'), '";'; + echo '"', WT_I18N::translate('Longitude'), '";"', WT_I18N::translate('Latitude'), '";'; + echo '"', WT_I18N::translate('Zoom factor'), '";"', WT_I18N::translate('Icon'), WT_EOL; + outputLevel($parent); + exit; +} + +print_header(WT_I18N::translate('Edit geographic place locations')); + +echo '<table id="gm_config"><tr>', + '<th><a ', (safe_GET('mod_action')=="admin_editconfig" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_editconfig">', WT_I18N::translate('Google Maps configuration'), '</a>', help_link('GOOGLEMAP_CONFIG','googlemap'), '</th>', + '<th><a ', (safe_GET('mod_action')=="admin_places" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_places">', WT_I18N::translate('Edit geographic place locations'), '</a>', help_link('PLE_EDIT','googlemap'), '</th>', + '<th><a ', (safe_GET('mod_action')=="admin_placecheck" ? 'class="current" ' : ''), 'href="module.php?mod=googlemap&mod_action=admin_placecheck">', WT_I18N::translate('Place Check'), '</a>', help_link('GOOGLEMAP_PLACECHECK','googlemap'), '</th>', +'</tr></table>'; + +if ($action=="ImportGedcom") { + $placelist=array(); + $j=0; + if ($mode=="all") { + $statement= + WT_DB::prepare("SELECT i_gedcom FROM `##individuals` UNION ALL SELECT f_gedcom FROM `##families`") + ->execute(); + } else { + $statement= + WT_DB::prepare("SELECT i_gedcom FROM `##individuals` WHERE i_file=? UNION ALL SELECT f_gedcom FROM `##families` WHERE f_file=?") + ->execute(array(WT_GED_ID, WT_GED_ID)); + } + while ($gedrec=$statement->fetchColumn()) { + $i = 1; + $placerec = get_sub_record(2, "2 PLAC", $gedrec, $i); + while (!empty($placerec)) { + if (preg_match("/2 PLAC (.+)/", $placerec, $match)) { + $placelist[$j] = array(); + $placelist[$j]["place"] = trim($match[1]); + if (preg_match("/4 LATI (.*)/", $placerec, $match)) { + $placelist[$j]["lati"] = trim($match[1]); + if (($placelist[$j]["lati"][0] != "N") && ($placelist[$j]["lati"][0] != "S")) { + if ($placelist[$j]["lati"] < 0) { + $placelist[$j]["lati"][0] = "S"; + } else { + $placelist[$j]["lati"] = "N".$placelist[$j]["lati"]; + } + } + } + else $placelist[$j]["lati"] = "0"; + if (preg_match("/4 LONG (.*)/", $placerec, $match)) { + $placelist[$j]["long"] = trim($match[1]); + if (($placelist[$j]["long"][0] != "E") && ($placelist[$j]["long"][0] != "W")) { + if ($placelist[$j]["long"] < 0) { + $placelist[$j]["long"][0] = "W"; + } else { + $placelist[$j]["long"] = "E".$placelist[$j]["long"]; + } + } + } + else $placelist[$j]["long"] = "0"; + $j = $j + 1; + } + $i = $i + 1; + $placerec = get_sub_record(2, "2 PLAC", $gedrec, $i); + } + } + asort($placelist); + + $prevPlace = ""; + $prevLati = ""; + $prevLong = ""; + $placelistUniq = array(); + $j = 0; + foreach ($placelist as $k=>$place) { + if ($place["place"] != $prevPlace) { + $placelistUniq[$j] = array(); + $placelistUniq[$j]["place"] = $place["place"]; + $placelistUniq[$j]["lati"] = $place["lati"]; + $placelistUniq[$j]["long"] = $place["long"]; + $j = $j + 1; + } else if (($place["place"] == $prevPlace) && (($place["lati"] != $prevLati) || ($place["long"] != $prevLong))) { + if (($placelistUniq[$j-1]["lati"] == 0) || ($placelistUniq[$j-1]["long"] == 0)) { + $placelistUniq[$j-1]["lati"] = $place["lati"]; + $placelistUniq[$j-1]["long"] = $place["long"]; + } else if (($place["lati"] != "0") || ($place["long"] != "0")) { + echo "Verscil: vorige waarde = $prevPlace, $prevLati, $prevLong, huidige = ", $place["place"], ", ", $place["lati"], ", ", $place["long"], "<br />"; + } + } + $prevPlace = $place["place"]; + $prevLati = $place["lati"]; + $prevLong = $place["long"]; + } + + $highestIndex = getHighestIndex(); + + $default_zoom_level=array(4, 7, 10, 12); + foreach ($placelistUniq as $k=>$place) { + $parent=preg_split('/ *, */', $place["place"]); + $parent=array_reverse($parent); + $parent_id=0; + for ($i=0; $i<count($parent); $i++) { + if (!isset($default_zoom_level[$i])) + $default_zoom_level[$i]=$default_zoom_level[$i-1]; + $escparent=$parent[$i]; + if ($escparent == "") { + $escparent = "Unknown"; + } + $row= + WT_DB::prepare("SELECT pl_id, pl_long, pl_lati, pl_zoom FROM `##placelocation` WHERE pl_level=? AND pl_parent_id=? AND pl_place LIKE ?") + ->execute(array($i, $parent_id, $escparent)) + ->fetchOneRow(); + if ($i < count($parent)-1) { + // Create higher-level places, if necessary + if (empty($row)) { + $highestIndex++; + WT_DB::prepare("INSERT INTO `##placelocation` (pl_id, pl_parent_id, pl_level, pl_place, pl_zoom) VALUES (?, ?, ?, ?, ?)") + ->execute(array($highestIndex, $parent_id, $i, $escparent, $default_zoom_level[$i])); + echo htmlspecialchars($escparent), '<br />'; + $parent_id=$highestIndex; + } else { + $parent_id=$row->pl_id; + } + } else { + // Create lowest-level place, if necessary + if (empty($row->pl_id)) { + $highestIndex++; + WT_DB::prepare("INSERT INTO `##placelocation` (pl_id, pl_parent_id, pl_level, pl_place, pl_long, pl_lati, pl_zoom) VALUES (?, ?, ?, ?, ?, ?, ?)") + ->execute(array($highestIndex, $parent_id, $i, $escparent, $place["long"], $place["lati"], $default_zoom_level[$i])); + echo htmlspecialchars($escparent), '<br />'; + } else { + if (empty($row->pl_long) && empty($row->pl_lati) && $place['lati']!="0" && $place['long']!="0") { + WT_DB::prepare("UPDATE `##placelocation` SET pl_lati=?, pl_long=? WHERE pl_id=?") + ->execute(array($place["lati"], $place["long"], $row->pl_id)); + echo htmlspecialchars($escparent), '<br />'; + } + } + } + } + } + $parent=0; +} + +if ($action=="ImportFile") { + $placefiles = array(); + findFiles(WT_MODULES_DIR.'googlemap/extra'); + sort($placefiles); +?> +<form method="post" enctype="multipart/form-data" id="importfile" name="importfile" action="module.php?mod=googlemap&mod_action=admin_places"> + <input type="hidden" name="action" value="ImportFile2" /> + <table class="gm_plac_edit "> + <tr> + <th><?php echo WT_I18N::translate('File containing places (CSV)'), help_link('PLIF_FILENAME','googlemap'); ?></th> + <td><input type="file" name="placesfile" size="50"></td> + </tr> + <?php if (count($placefiles)>0) { ?> + <tr> + <th><?php echo WT_I18N::translate('Server file containing places (CSV)'), help_link('PLIF_LOCALFILE','googlemap'); ?></th> + <td> + <select name="localfile"> + <option></option> + <?php foreach ($placefiles as $p=>$placefile) { ?> + <option value="<?php echo htmlspecialchars($placefile); ?>"><?php + if (substr($placefile, 0, 1)=="/") echo substr($placefile, 1); + else echo $placefile; ?></option> + <?php } ?> + </select> + </td> + </tr> + <?php } ?> + <tr> + <th><?php echo WT_I18N::translate('Clear all place-locations before import?'), help_link('PLIF_CLEAN','googlemap'); ?></th> + <td><input type="checkbox" name="cleardatabase"></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Update existing places only?'), help_link('PLIF_UPDATE','googlemap'); ?></th> + <td><input type="checkbox" name="updateonly"></td> + </tr> + <tr> + <th><?php echo WT_I18N::translate('Overwrite location-data with data from file?'), help_link('PLIF_OVERWRITE','googlemap'); ?></th> + <td><input type="checkbox" name="overwritedata"></td> + </tr> + </table> + <input id="savebutton" type="submit" value="<?php echo WT_I18N::translate('Continue Adding'); ?>" /><br /> +</form> +<?php + print_footer(); + exit; +} + +if ($action=="ImportFile2") { + $country_names=array(); + foreach ($iso3166 as $key=>$value) { + $country_names[$key]=WT_I18N::translate($key); + } + if (isset($_POST["cleardatabase"])) { + WT_DB::exec("DELETE FROM `##placelocation` WHERE 1=1"); + } + if (!empty($_FILES["placesfile"]["tmp_name"])) { + $lines = file($_FILES["placesfile"]["tmp_name"]); + } elseif (!empty($_REQUEST['localfile'])) { + $lines = file(WT_MODULES_DIR.'googlemap/extra'.$_REQUEST['localfile']); + } + // Strip BYTE-ORDER-MARK, if present + if (!empty($lines[0]) && substr($lines[0], 0, 3)==WT_UTF8_BOM) $lines[0]=substr($lines[0], 3); + asort($lines); + $highestIndex = getHighestIndex(); + $placelist = array(); + $j = 0; + $maxLevel = 0; + foreach ($lines as $p => $placerec) { + $fieldrec = explode(';', $placerec); + if ($fieldrec[0] > $maxLevel) $maxLevel = $fieldrec[0]; + } + $fields = count($fieldrec); + foreach ($lines as $p => $placerec) { + $fieldrec = explode(';', $placerec); + if (is_numeric($fieldrec[0]) && $fieldrec[0]<=$maxLevel) { + $placelist[$j] = array(); + $placelist[$j]["place"] = ""; + for ($ii=$fields-4; $ii>1; $ii--) { + if ($fieldrec[0] > $ii-2) $placelist[$j]["place"] .= $fieldrec[$ii].","; + } + foreach ($country_names as $countrycode => $countryname) { + if ($countrycode == strtoupper($fieldrec[1])) { + $fieldrec[1] = $countryname; + break; + } + } + $placelist[$j]["place"] .= $fieldrec[1]; + $placelist[$j]["long"] = $fieldrec[$fields-4]; + $placelist[$j]["lati"] = $fieldrec[$fields-3]; + $placelist[$j]["zoom"] = $fieldrec[$fields-2]; + $placelist[$j]["icon"] = trim($fieldrec[$fields-1]); + $j = $j + 1; + } + } + + $prevPlace = ""; + $prevLati = ""; + $prevLong = ""; + $placelistUniq = array(); + $j = 0; + foreach ($placelist as $k=>$place) { + if ($place["place"] != $prevPlace) { + $placelistUniq[$j] = array(); + $placelistUniq[$j]["place"] = $place["place"]; + $placelistUniq[$j]["lati"] = $place["lati"]; + $placelistUniq[$j]["long"] = $place["long"]; + $placelistUniq[$j]["zoom"] = $place["zoom"]; + $placelistUniq[$j]["icon"] = $place["icon"]; + $j = $j + 1; + } else if (($place["place"] == $prevPlace) && (($place["lati"] != $prevLati) || ($place["long"] != $prevLong))) { + if (($placelistUniq[$j-1]["lati"] == 0) || ($placelistUniq[$j-1]["long"] == 0)) { + $placelistUniq[$j-1]["lati"] = $place["lati"]; + $placelistUniq[$j-1]["long"] = $place["long"]; + $placelistUniq[$j-1]["zoom"] = $place["zoom"]; + $placelistUniq[$j-1]["icon"] = $place["icon"]; + } else if (($place["lati"] != "0") || ($place["long"] != "0")) { + echo "Differenc: last value = $prevPlace, $prevLati, $prevLong, current = ", $place["place"], ", ", $place["lati"], ", ", $place["long"], "<br />"; + } + } + $prevPlace = $place["place"]; + $prevLati = $place["lati"]; + $prevLong = $place["long"]; + } + + $default_zoom_level = array(); + $default_zoom_level[0] = 4; + $default_zoom_level[1] = 7; + $default_zoom_level[2] = 10; + $default_zoom_level[3] = 12; + foreach ($placelistUniq as $k=>$place) { + $parent = explode(',', $place["place"]); + $parent = array_reverse($parent); + $parent_id=0; + for ($i=0; $i<count($parent); $i++) { + $escparent=$parent[$i]; + if ($escparent == "") { + $escparent = "Unknown"; + } + $row= + WT_DB::prepare("SELECT pl_id, pl_long, pl_lati, pl_zoom, pl_icon FROM `##placelocation` WHERE pl_level=? AND pl_parent_id=? AND pl_place LIKE ? ORDER BY pl_place") + ->execute(array($i, $parent_id, $escparent)) + ->fetchOneRow(); + if (empty($row)) { // this name does not yet exist: create entry + if (!isset($_POST["updateonly"])) { + $highestIndex = $highestIndex + 1; + if (($i+1) == count($parent)) { + $zoomlevel = $place["zoom"]; + } elseif (isset($default_zoom_level[$i])) { + $zoomlevel = $default_zoom_level[$i]; + } else { + $zoomlevel = $GOOGLEMAP_MAX_ZOOM; + } + if (($place["lati"] == "0") || ($place["long"] == "0") || (($i+1) < count($parent))) { + WT_DB::prepare("INSERT INTO `##placelocation` (pl_id, pl_parent_id, pl_level, pl_place, pl_zoom, pl_icon) VALUES (?, ?, ?, ?, ?, ?)") + ->execute(array($highestIndex, $parent_id, $i, $escparent, $zoomlevel, $place["icon"])); + } else { + //delete leading zero + $pl_lati = str_replace(array('N', 'S', ','), array('', '-', '.') , $place["lati"]); + $pl_long = str_replace(array('E', 'W', ','), array('', '-', '.') , $place["long"]); + if ($pl_lati >= 0) { + $place["lati"] = "N".abs($pl_lati); + } elseif ($pl_lati < 0) { + $place["lati"] = "S".abs($pl_lati); + } + if ($pl_long >= 0) { + $place["long"] = "E".abs($pl_long); + } elseif ($pl_long < 0) { + $place["long"] = "W".abs($pl_long); + } + WT_DB::prepare("INSERT INTO `##placelocation` (pl_id, pl_parent_id, pl_level, pl_place, pl_long, pl_lati, pl_zoom, pl_icon) VALUES (?, ?, ?, ?, ?, ?, ?, ?)") + ->execute(array($highestIndex, $parent_id, $i, $escparent, $place["long"], $place["lati"], $zoomlevel, $place["icon"])); + } + $parent_id = $highestIndex; + } + } else { + $parent_id = $row->pl_id; + if ((isset($_POST["overwritedata"])) && ($i+1 == count($parent))) { + WT_DB::prepare("UPDATE `##placelocation` SET pl_lati=?, pl_long=?, pl_zoom=?, pl_icon=? WHERE pl_id=?") + ->execute(array($place["lati"], $place["long"], $place["zoom"], $place["icon"], $parent_id)); + } else { + if ((($row->pl_long == "0") || ($row->pl_long == null)) && (($row->pl_lati == "0") || ($row->pl_lati == null))) { + WT_DB::prepare("UPDATE `##placelocation` SET pl_lati=?, pl_long=? WHERE pl_id=?") + ->execute(array($place["lati"], $place["long"], $parent_id)); + } + if (empty($row->pl_icon) && !empty($place['icon'])) { + WT_DB::prepare("UPDATE `##placelocation` SET pl_icon=? WHERE pl_id=?") + ->execute(array($place["icon"], $parent_id)); + } + } + } + } + } + $parent=0; +} + +if ($action=="DeleteRecord") { + $exists= + WT_DB::prepare("SELECT 1 FROM `##placelocation` WHERE pl_parent_id=?") + ->execute(array($deleteRecord)) + ->fetchOne(); + + if (!$exists) { + WT_DB::prepare("DELETE FROM `##placelocation` WHERE pl_id=?") + ->execute(array($deleteRecord)); + } else { + echo "<table class=\"facts_table\"><tr><td>".WT_I18N::translate('Location not removed: this location contains sub-locations')."</td></tr></table>"; + } +} + +?> +<script type="text/javascript"> +<!-- +function showchanges() { + window.location = '<?php echo basename($_SERVER["REQUEST_URI"]); ?>&show_changes=yes'; +} + +function edit_place_location(placeid) { + window.open('module.php?mod=googlemap&mod_action=places_edit&action=update&placeid='+placeid+"&"+sessionname+"="+sessionid, '_blank', 'top=50, left=50, width=690, height=630, resizable=1, scrollbars=1'); + return false; +} + +function add_place_location(placeid) { + window.open('module.php?mod=googlemap&mod_action=places_edit&action=add&placeid='+placeid+"&"+sessionname+"="+sessionid, '_blank', 'top=50, left=50, width=690, height=630, resizable=1, scrollbars=1'); + return false; +} + +function delete_place(placeid) { + var answer=confirm("<?php echo WT_I18N::translate('Remove this location?'); ?>"); + if (answer == true) { + window.location = "<?php echo $_SERVER["REQUEST_URI"]; ?>&action=DeleteRecord&deleteRecord=" + placeid; + } +} + +//--> +</script> +<?php +echo '<div id="gm_breadcrumb">'; +$where_am_i=place_id_to_hierarchy($parent); +foreach (array_reverse($where_am_i, true) as $id=>$place) { + if ($id==$parent) { + if ($place != "Unknown") { + echo PrintReady($place); + } else { + echo WT_I18N::translate('unknown'); + } + } else { + echo "<a href=\"module.php?mod=googlemap&mod_action=admin_places&parent={$id}&display={$display}\">"; + if ($place != "Unknown") { + echo PrintReady($place), "</a>"; + } else { + echo WT_I18N::translate('unknown'), "</a>"; + } + } + echo " - "; +} +echo "<a href=\"module.php?mod=googlemap&mod_action=admin_places&parent=0&display=$display\">".WT_I18N::translate('Top Level')."</a></div>"; +echo "<form name=\"active\" method=\"post\" action=\"module.php?mod=googlemap&mod_action=admin_places&parent=$parent&display=$display\"><div id=\"gm_active\">"; +echo WT_I18N::translate('Click here to show inactive places'); +echo help_link('PLE_ACTIVE','googlemap'); +echo "<input type=\"checkbox\" name=\"display\" value=\"inactive\""; +if ($display == 'inactive') echo " checked=\"checked\""; +echo "> <input type=\"submit\" value=\"", WT_I18N::translate('View'), "\" >"; +echo "</div></form>"; + +$placelist=get_place_list_loc($parent, $display); +echo "<div class=\"gm_plac_edit\">"; +echo "<table class=\"gm_plac_edit\"><tr>"; +echo "<th>", translate_fact('PLAC'), "</th>"; +echo "<th>", translate_fact('LATI'), "</th>"; +echo "<th>", translate_fact('LONG'), "</th>"; +echo "<th>".WT_I18N::translate('Zoom factor')."</th>"; +echo "<th>".WT_I18N::translate('Icon')."</th>"; +echo "<th colspan=\"2\">"; +echo WT_I18N::translate('Edit geographic location'), help_link('PL_EDIT_LOCATION','googlemap'), "</th></tr>"; +if (count($placelist) == 0) + echo "<tr><td colspan=\"7\" class=\"accepted\">", WT_I18N::translate('No places found'), "</td></tr>"; +foreach ($placelist as $place) { + echo "<tr><td><a href=\"module.php?mod=googlemap&mod_action=admin_places&parent={$place['place_id']}&display={$display}\">"; + if ($place["place"] != "Unknown") + echo PrintReady($place["place"]), "</a></td>"; + else + echo WT_I18N::translate('unknown'), "</a></td>"; + echo "<td>{$place['lati']}</td>"; + echo "<td>{$place['long']}</td>"; + echo "<td>{$place['zoom']}</td>"; + echo "<td>"; + if (($place["icon"] == NULL) || ($place["icon"] == "")) { + if (($place['lati'] == NULL) || ($place['long'] == NULL) || (($place['lati'] == "0") && ($place['long'] == "0"))) { + echo " "; + echo "<img src=\"http://labs.google.com/ridefinder/images/mm_20_yellow.png\">"; + } + else { + echo " "; + echo "<img src=\"http://labs.google.com/ridefinder/images/mm_20_red.png\">"; + } + } else { + echo '<img src="', WT_MODULES_DIR, 'googlemap/', $place['icon'], '" width="25" height="15">'; + } + echo "</td>"; + echo "<td class=\"narrow\"><a href=\"javascript:;\" onclick=\"edit_place_location({$place['place_id']});return false;\"><img src=\"", $WT_IMAGES["edit"], "\" border=\"0\" alt=\"", WT_I18N::translate("Edit"), "\" /></a></td>"; + $noRows= + WT_DB::prepare("SELECT COUNT(pl_id) FROM `##placelocation` WHERE pl_parent_id=?") + ->execute(array($place["place_id"])) + ->fetchOne(); + if ($noRows==0) { ?> + <td><a href="javascript:;" onclick="delete_place(<?php echo $place["place_id"], ");return false;\">"; ?><img src="<?php echo $WT_IMAGES["remove"];?>" border="0" alt="<?php echo WT_I18N::translate('Remove'); ?>" /></a></td> +<?php } else { ?> + <td><img src="<?php echo $WT_IMAGES["remove_grey"];?>" border="0" alt="" /> </td> +<?php } ?> + </tr> + <?php +} +?> +</table> +</div> +<?php +?> + <table id="gm_manage"> + <tr> + <td colspan="3"><a href="javascript:;" onclick="add_place_location(<?php echo $parent; ?>);return false;"><?php echo WT_I18N::translate('Add place'); ?></a><?php echo help_link('PL_ADD_LOCATION','googlemap'); ?></td> + </tr> + <tr> + <td><a href="module.php?mod=googlemap&mod_action=admin_places&action=ImportGedcom&mode=curr"><?php echo WT_I18N::translate('Import from current GEDCOM'); ?></a><?php echo help_link('PL_IMPORT_GEDCOM','googlemap'); ?></td> + <td><a href="module.php?mod=googlemap&mod_action=admin_places&action=ImportGedcom&mode=all"><?php echo WT_I18N::translate('Import from all GEDCOMs'); ?></a><?php echo help_link('PL_IMPORT_ALL_GEDCOM','googlemap'); ?></td> + <td><a href="module.php?mod=googlemap&mod_action=admin_places&action=ImportFile&mode=add"><?php echo WT_I18N::translate('Import from file'); ?></a><?php echo help_link('PL_IMPORT_FILE','googlemap'); ?></td> + </tr> + <tr> + <td> +<?php + if (count($where_am_i)<=4) { + echo "<a href=\"module.php?mod=googlemap&mod_action=admin_places&action=ExportFile&parent={$parent}\">"; + echo WT_I18N::translate('Export current view to file'), "</a>"; + echo help_link('PL_EXPORT_FILE','googlemap'); + } else { + echo " "; + } + echo "</td><td colspan=\"2\">"; + echo "<a href=\"module.php?mod=googlemap&mod_action=admin_places&action=ExportFile&parent=0\">"; + echo WT_I18N::translate('Export all locations to file'), "</a>"; + echo help_link('PL_EXPORT_ALL_FILE','googlemap'); + echo "</td></tr></table>"; +if (empty($SEARCH_SPIDER)) + print_footer(); +else { + echo WT_I18N::translate('Search Engine Spider Detected'), ": ", $SEARCH_SPIDER; + echo "\n</div>\n\t</body>\n</html>"; +} diff --git a/modules_v2/googlemap/css/googlemap_style.css b/modules_v2/googlemap/css/googlemap_style.css new file mode 100644 index 0000000000..775c94c5aa --- /dev/null +++ b/modules_v2/googlemap/css/googlemap_style.css @@ -0,0 +1,60 @@ +/** + * Stylesheet for Googlemap module + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Modules + * @version $Id$ + */ + +#map_type +{ + margin: 0; + padding: 0; + font-family: Arial; + font-size: 10px; + list-style: none; +} +#map_type li +{ + display: block; + width: 70px; + text-align: center; + padding: 2px; + border: 1px solid black; + cursor: pointer; + float: left; + margin-left: 2px; +} +#map_type li.non_active +{ + background: white; + color: black; + font-weight: normal; +} +#map_type li.active +{ + background: gray; + color: white; + font-weight: bold; +} +#map_type li:hover +{ + background: #ddd; +} diff --git a/modules_v2/googlemap/css/wt_v3_googlemap.css b/modules_v2/googlemap/css/wt_v3_googlemap.css new file mode 100644 index 0000000000..50e8f90ead --- /dev/null +++ b/modules_v2/googlemap/css/wt_v3_googlemap.css @@ -0,0 +1,268 @@ +/* + * webtrees googlemap V3 css + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * $Id$ + * + * @author Brian Holland +*/ + +div.infowindow { + max-height:260px; + overflow-x:hidden; +} + +#iwhead { + text-align: center; + font-size: 10px; + white-space: normal; + margin-right: 0px; + margin-left: -2px; + margin-top: -1px; + background: #ffffff; + border-top: 1px solid #bbbbbb; + border-bottom: 1px solid #bbbbbb; + border-left: 0px solid #bbbbbb; + border-right: 0px solid #bbbbbb; + padding-left: .2em; + padding-right: .2em; + padding-top: .3em; + padding-bottom: .3em; + width: 300px; + +} + +#iwhead a:hover { + color: red; +} + +#iwcontent { + /* background-color: #ddeeff; */ + background-color: #eeeeee; + border: 1px solid #bbbbbb; + /*min-width: 314px; */ + min-height: 260px; + margin-right: 0em; +} + +#iwcontent a { + color: black; +} + +#iwhead a { + color: #0000cc; +} + +#iwcontent a:hover { + color: red; +} + +#gmtabs { + /* background-color: #ddeeff; */ + background-color: #eeeeee; + border: 0px solid red; + margin-top: 0em; + margin-left: -2px; + font-size: 11px; + margin-right: 4.5em; + width: 247px; +} + +#gmtabs ul { + margin-left: -2px; + border: 0px solid red; + border-bottom: 1px solid #aaaaaa; +} + +h4 { + margin-bottom: -0.1em; +} + + +#txt { +width:300px; +margin-top: -8px; +margin-left: -8px; +background: #ffffcc; +text-align: center; +} + +#pano { +width:297px; +height: 216px; +margin-left: 0px; +margin-top: 0em; +border-top: 1px solid #aaaaaa; +} + +.highlt_img { + width: 60px; + /* background-color: #ddeeff; */ + background-color: #eeeeee; + text-align: center; +} +.highlt_img img{ + float: none; + border: none; +} + +/* root element for tabs ====================== */ +ul.tabs { + margin:0 !important; + padding:0; + padding-left:2px; + padding-top: 2px; + height:20px; + border: 1px solid #666; + background: #ddeeff; + width: 296px; +} + +/* single tab */ +ul.tabs li { + float:left; + padding:0; + margin:0; + margin-left:2px; + list-style-type:none; +} + +/* link inside the tab. uses a background image */ +ul.tabs a { + float:left; + font-size:13px; + display:block; + /* padding:5px 30px; */ + padding: 0px 10px; + text-decoration:none; + border:1px solid #666; + border-bottom:0px; + height:18px; + background-color:#efefef; + color:#777; + margin-right:2px; + position:relative; + top:1px; + outline:0; + -moz-border-radius:4px 4px 0 0; +} + +ul.tabs a:hover { + /* background-color:#F7F7F7; */ + background-color:#ffffff; + color:#333; +} + +/* selected tab */ +ul.tabs a.current { + background-color:#fff; + border-bottom:1px solid #ddd; + color:#000; + cursor:default; +} + + +/* tabs */ +#EV { + background: #ffffff; + padding-bottom: 1px; +} +#SV { + background: #cccccc; + padding-bottom: 0px; +} +#PH { + background: #cccccc; + padding-bottom: 0px; +} +#SP { + background: #cccccc; + padding-bottom: 0px; +} + + + +/* tab panes */ +#pane1 { + display:block; +} +#pane2 { + display:none; +} +#pane3 { + display:none; +} +#pane3_text, #pane4_text { + margin-left: 10px; +} + + +/* view_type */ +#view_type { + display: block; + margin-top: -12px; +} +#view_type td { + width: 360px; +} +#view_type form{ + width: 360px; + text-align: center; +} + + +/* place_hierarchy elements */ +#place_hierarchy { +/* float:left; +margin-left:-130px; */ +} + +/* === Elements To be defined later (leave as dislay:none; for now) ==== */ + +/* sidebar */ +#s_bar { + display: none; + width:370px; + border: 1px solid black; + margin-bottom: 1em; +} +#s_bar td{ + padding-left:5px; + width: 370px; + text-decoration:none; + color:#4444ff; + background:#aabbd8; +} + +/* Generated by http://css.spritegen.com CSS Sprite Generator */ +.icon_bapm, .icon_reti, .icon_cens, .icon_buri, .icon_mili, +.icon_resi, .icon_deat, .icon_occu, .icon_birt +{ display: block; background: url('../images/css_sprite_facts.png') no-repeat; } + +.icon_bapm { background-position: -0px -0px; width: 60px; height: 60px; } +.icon_reti { background-position: -60px -0px; width: 60px; height: 60px; } +.icon_cens { background-position: -120px -0px; width: 60px; height: 60px; } +.icon_buri { background-position: -0px -60px; width: 60px; height: 60px; } +.icon_mili { background-position: -60px -60px; width: 60px; height: 60px; } +.icon_resi { background-position: -120px -60px; width: 60px; height: 60px; } +.icon_deat { background-position: -0px -120px; width: 60px; height: 60px; } +.icon_occu { background-position: -60px -120px; width: 60px; height: 60px; } +.icon_birt { background-position: -120px -120px; width: 60px; height: 60px; } diff --git a/modules_v2/googlemap/css/wt_v3_places_edit.css b/modules_v2/googlemap/css/wt_v3_places_edit.css new file mode 100644 index 0000000000..508b79c950 --- /dev/null +++ b/modules_v2/googlemap/css/wt_v3_places_edit.css @@ -0,0 +1,37 @@ +/* + * webtrees googlemap V3 css + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * $Id$ + * + * @author Brian Holland +*/ + +#gname { + vertical-align: text-middle; + margin-top: 0px; + white-space:pre-wrap; + width:200px; + height: 60px; + +#namelink { + padding-bottom: 5px; +}
\ No newline at end of file diff --git a/modules_v2/googlemap/db_schema/db_schema_0_1.php b/modules_v2/googlemap/db_schema/db_schema_0_1.php new file mode 100644 index 0000000000..2dfbcda158 --- /dev/null +++ b/modules_v2/googlemap/db_schema/db_schema_0_1.php @@ -0,0 +1,66 @@ +<?php +/** + * Update the GM module database schema from version 0 to version 1 + * + * Version 0: empty database + * Version 1: create the tables, as per PGV 4.2.1 + * + * The script should assume that it can be interrupted at + * any point, and be able to continue by re-running the script. + * Fatal errors, however, should be allowed to throw exceptions, + * which will be caught by the framework. + * It shouldn't do anything that might take more than a few + * seconds, for systems with low timeout values. + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2009 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { +header('HTTP/1.0 403 Forbidden'); +exit; +} + +define('WT_GM_DB_SCHEMA_0_1', ''); + +// Create all of the tables needed for this module +WT_DB::exec( + "CREATE TABLE IF NOT EXISTS `##placelocation` (". + " pl_id INTEGER NOT NULL,". + " pl_parent_id INTEGER NULL,". + " pl_level INTEGER NULL,". + " pl_place VARCHAR(255) NULL,". + " pl_long VARCHAR(30) NULL,". + " pl_lati VARCHAR(30) NULL,". + " pl_zoom INTEGER NULL,". + " pl_icon VARCHAR(255) NULL,". + " PRIMARY KEY (pl_id),". + " KEY ix1 (pl_level),". + " KEY ix2 (pl_long),". + " KEY ix3 (pl_lati),". + " KEY ix4 (pl_place),". + " KEY ix5 (pl_parent_id)". + ") COLLATE utf8_unicode_ci ENGINE=InnoDB" +); + +// Update the version to indicate success +set_site_setting($schema_name, $next_version); diff --git a/modules_v2/googlemap/db_schema/db_schema_1_2.php b/modules_v2/googlemap/db_schema/db_schema_1_2.php new file mode 100644 index 0000000000..83c35bf4b9 --- /dev/null +++ b/modules_v2/googlemap/db_schema/db_schema_1_2.php @@ -0,0 +1,63 @@ +<?php +/** + * Update the GM module database schema from version 1 to version 2 + * + * Version 0: empty database + * Version 1: create the tables, as per PGV 4.2.1 + * Version 2: update the tables to support streetview + * + * The script should assume that it can be interrupted at + * any point, and be able to continue by re-running the script. + * Fatal errors, however, should be allowed to throw exceptions, + * which will be caught by the framework. + * It shouldn't do anything that might take more than a few + * seconds, for systems with low timeout values. + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2009 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { +header('HTTP/1.0 403 Forbidden'); +exit; +} + +define('WT_GM_DB_SCHEMA_1_2', ''); + +// Create all of the tables needed for this module +//try { + WT_DB::exec( + "ALTER TABLE `##placelocation` ADD (". + " pl_media VARCHAR(60) NULL,". + " sv_long FLOAT NOT NULL DEFAULT 0,". + " sv_lati FLOAT NOT NULL DEFAULT 0,". + " sv_bearing FLOAT NOT NULL DEFAULT 0,". + " sv_elevation FLOAT NOT NULL DEFAULT 0,". + " sv_zoom FLOAT NOT NULL DEFAULT 1". + ")" + ); +//} catch (PDOException $ex) { + // Already done this? +//} + +// Update the version to indicate success +set_site_setting($schema_name, $next_version); diff --git a/modules_v2/googlemap/db_schema/db_schema_2_3.php b/modules_v2/googlemap/db_schema/db_schema_2_3.php new file mode 100644 index 0000000000..bb416f6cfa --- /dev/null +++ b/modules_v2/googlemap/db_schema/db_schema_2_3.php @@ -0,0 +1,42 @@ +<?php +// Update the GM module database schema from version 2 to version 3 +// +// Convert flag icons from .gif to .png +// +// The script should assume that it can be interrupted at +// any point, and be able to continue by re-running the script. +// Fatal errors, however, should be allowed to throw exceptions, +// which will be caught by the framework. +// It shouldn't do anything that might take more than a few +// seconds, for systems with low timeout values. +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { +header('HTTP/1.0 403 Forbidden'); +exit; +} + +define('WT_GM_DB_SCHEMA_2_3', ''); + +WT_DB::exec("UPDATE `##placelocation` SET pl_icon=REPLACE(pl_icon, '.gif', '.png')"); + +// Update the version to indicate success +set_site_setting($schema_name, $next_version); diff --git a/modules_v2/googlemap/db_schema/db_schema_3_4.php b/modules_v2/googlemap/db_schema/db_schema_3_4.php new file mode 100644 index 0000000000..338eae10c8 --- /dev/null +++ b/modules_v2/googlemap/db_schema/db_schema_3_4.php @@ -0,0 +1,47 @@ +<?php +// Update the GM module database schema from version 3 to version 4 +// +// Combine the two ways of enabling the GM module +// +// The script should assume that it can be interrupted at +// any point, and be able to continue by re-running the script. +// Fatal errors, however, should be allowed to throw exceptions, +// which will be caught by the framework. +// It shouldn't do anything that might take more than a few +// seconds, for systems with low timeout values. +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { +header('HTTP/1.0 403 Forbidden'); +exit; +} + +define('WT_GM_DB_SCHEMA_3_4', ''); + +self::exec( + "UPDATE `##module` m, `##module_setting` ms SET m.status=CASE WHEN (m.status=1 AND ms.setting_value=1) THEN 'enabled' ELSE 'disabled' END WHERE m.module_name=ms.module_name AND m.module_name='googlemap' AND ms.setting_name='GM_ENABLED'" +); +self::exec( + "DELETE FROM `##module_setting` WHERE module_name='googlemap' AND setting_name='GM_ENABLED'" +); + +// Update the version to indicate success +set_site_setting($schema_name, $next_version); diff --git a/modules_v2/googlemap/defaultconfig.php b/modules_v2/googlemap/defaultconfig.php new file mode 100644 index 0000000000..a8c7c2d2f0 --- /dev/null +++ b/modules_v2/googlemap/defaultconfig.php @@ -0,0 +1,166 @@ +<?php +/** + * Configuration file required by GoogleMap module + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GoogleMap + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +// Create GM tables, if not already present +try { + WT_DB::updateSchema(WT_ROOT.WT_MODULES_DIR.'/googlemap/db_schema/', 'GM_SCHEMA_VERSION', 4); +} catch (PDOException $ex) { + // The schema update scripts should never fail. If they do, there is no clean recovery. + die($ex); +} + +// TODO: it will be more efficient to fetch all GM_% settings in a single DB query +global $GOOGLEMAP_ENABLED; +$GOOGLEMAP_ENABLED = WT_DB::prepare("SELECT status FROM `##module` WHERE module_name='googlemap'")->execute()->fetchOne()=='enabled'; // Enable or disable Googlemap + +global $GOOGLEMAP_MAP_TYPE; +$GOOGLEMAP_MAP_TYPE = get_module_setting('googlemap', 'GM_MAP_TYPE', 'G_NORMAL_MAP'); // possible values: G_PHYSICAL_MAP, G_NORMAL_MAP, G_SATELLITE_MAP or G_HYBRID_MAP. + +global $GOOGLEMAP_MIN_ZOOM; +$GOOGLEMAP_MIN_ZOOM = get_module_setting('googlemap', 'GM_MIN_ZOOM', '2'); // min zoom level +global $GOOGLEMAP_MAX_ZOOM; +$GOOGLEMAP_MAX_ZOOM = get_module_setting('googlemap', 'GM_MAX_ZOOM', '13'); // max zoom level + +global $GOOGLEMAP_XSIZE; +$GOOGLEMAP_XSIZE = get_module_setting('googlemap', 'GM_XSIZE', '600'); // X-size of Google map +global $GOOGLEMAP_YSIZE; +$GOOGLEMAP_YSIZE = get_module_setting('googlemap', 'GM_YSIZE', '400'); // Y-size of Google map + +global $GOOGLEMAP_PRECISION_0; +$GOOGLEMAP_PRECISION_0 = get_module_setting('googlemap', 'GM_PRECISION_0', '0'); // Country level +global $GOOGLEMAP_PRECISION_1; +$GOOGLEMAP_PRECISION_1 = get_module_setting('googlemap', 'GM_PRECISION_1', '1'); // State level +global $GOOGLEMAP_PRECISION_2; +$GOOGLEMAP_PRECISION_2 = get_module_setting('googlemap', 'GM_PRECISION_2', '2'); // City level +global $GOOGLEMAP_PRECISION_3; +$GOOGLEMAP_PRECISION_3 = get_module_setting('googlemap', 'GM_PRECISION_3', '3'); // Neighborhood level +global $GOOGLEMAP_PRECISION_4; +$GOOGLEMAP_PRECISION_4 = get_module_setting('googlemap', 'GM_PRECISION_4', '4'); // House level +global $GOOGLEMAP_PRECISION_5; +$GOOGLEMAP_PRECISION_5 = get_module_setting('googlemap', 'GM_PRECISION_5', '9'); // Max prcision level + +global $GM_MAX_NOF_LEVELS; +$GM_MAX_NOF_LEVELS = get_module_setting('googlemap', 'GM_MAX_NOF_LEVELS', '4'); // Max nr of levels to use in Googlemap +global $GM_DEFAULT_TOP_VALUE; +$GM_DEFAULT_TOP_VALUE = get_module_setting('googlemap', 'GM_DEFAULT_TOP_VALUE', '' ); // Default value, inserted when no location can be found + +global $GOOGLEMAP_COORD; +$GOOGLEMAP_COORD = get_module_setting('googlemap', 'GM_COORD', '0'); // Enable or disable Display Map Co-ordinates + +//Place Hierarchy +global $GOOGLEMAP_PLACE_HIERARCHY; +$GOOGLEMAP_PLACE_HIERARCHY=get_module_setting('googlemap', 'GM_PLACE_HIERARCHY', '1' ); // Enable or disable Display Map in place herarchy +global $GOOGLEMAP_PH_XSIZE; +$GOOGLEMAP_PH_XSIZE =get_module_setting('googlemap', 'GM_PH_XSIZE', '500' ); // X-size of Place Hierarchy Google map +global $GOOGLEMAP_PH_YSIZE; +$GOOGLEMAP_PH_YSIZE =get_module_setting('googlemap', 'GM_PH_YSIZE', '350' ); // Y-size of Place Hierarchy Google map +global $GOOGLEMAP_PH_MARKER; +$GOOGLEMAP_PH_MARKER =get_module_setting('googlemap', 'GM_PH_MARKER', 'G_FLAG'); // Possible values: G_FLAG = Flag, G_DEFAULT_ICON = Standard icon +global $GM_DISP_SHORT_PLACE; +$GM_DISP_SHORT_PLACE =get_module_setting('googlemap', 'GM_DISP_SHORT_PLACE', '0'); // Display full place name or only the actual level name +global $GM_DISP_COUNT; +$GM_DISP_COUNT =get_module_setting('googlemap', 'GM_DISP_COUNT', '0'); // Display the count of individuals and families connected to the place +global $GOOGLEMAP_PH_WHEEL; +$GOOGLEMAP_PH_WHEEL =get_module_setting('googlemap', 'GM_PH_WHEEL', '0'); // Use mouse wheel for zooming +global $GOOGLEMAP_PH_CONTROLS; +$GOOGLEMAP_PH_CONTROLS =get_module_setting('googlemap', 'GM_PH_CONTROLS', '1'); // Hide map controls when mouse is out + + +// Configuration-options per location-level +global $GM_MARKER_COLOR; +global $GM_MARKER_SIZE; +global $GM_PREFIX; +global $GM_POSTFIX; +global $GM_PRE_POST_MODE; + +$GM_MARKER_COLOR [1]=get_module_setting('googlemap', 'GM_MARKER_COLOR_1', 'Red' ); // Marker to be used +$GM_MARKER_SIZE [1]=get_module_setting('googlemap', 'GM_MARKER_SIZE_1', 'Large'); // 'Small' or 'Large' +$GM_PREFIX [1]=get_module_setting('googlemap', 'GM_PREFIX_1', '' ); // Text to be placed in front of the name +$GM_POSTFIX [1]=get_module_setting('googlemap', 'GM_POSTFIX_1', '' ); // Text to be placed after the name +$GM_PRE_POST_MODE[1]=get_module_setting('googlemap', 'GM_PRE_POST_MODE_1', '0' ); // Prefix/Postfix mode. Possible value are: + // 0 = no pre/postfix + // 1 = Normal name, Prefix, Postfix, Both + // 2 = Normal name, Postfix, Prefxi, Both + // 3 = Prefix, Postfix, Both, Normal name + // 4 = Postfix, Prefix, Both, Normal name + // 5 = Prefix, Postfix, Normal name, Both + // 6 = Postfix, Prefix, Normal name, Both + +$GM_MARKER_COLOR [2]=get_module_setting('googlemap', 'GM_MARKER_COLOR_2', 'Red' ); +$GM_MARKER_SIZE [2]=get_module_setting('googlemap', 'GM_MARKER_SIZE_2', 'Large'); +$GM_PREFIX [2]=get_module_setting('googlemap', 'GM_PREFIX_2', '' ); +$GM_POSTFIX [2]=get_module_setting('googlemap', 'GM_POSTFIX_2', '' ); +$GM_PRE_POST_MODE[2]=get_module_setting('googlemap', 'GM_PRE_POST_MODE_2', '0' ); + +$GM_MARKER_COLOR [3]=get_module_setting('googlemap', 'GM_MARKER_COLOR_3', 'Red' ); +$GM_MARKER_SIZE [3]=get_module_setting('googlemap', 'GM_MARKER_SIZE_3', 'Large'); +$GM_PREFIX [3]=get_module_setting('googlemap', 'GM_PREFIX_3', '' ); +$GM_POSTFIX [3]=get_module_setting('googlemap', 'GM_POSTFIX_3', '' ); +$GM_PRE_POST_MODE[3]=get_module_setting('googlemap', 'GM_PRE_POST_MODE_3', '0' ); + +$GM_MARKER_COLOR [4]=get_module_setting('googlemap', 'GM_MARKER_COLOR_4', 'Red' ); +$GM_MARKER_SIZE [4]=get_module_setting('googlemap', 'GM_MARKER_SIZE_4', 'Large'); +$GM_PREFIX [4]=get_module_setting('googlemap', 'GM_PREFIX_4', '' ); +$GM_POSTFIX [4]=get_module_setting('googlemap', 'GM_POSTFIX_4', '' ); +$GM_PRE_POST_MODE[4]=get_module_setting('googlemap', 'GM_PRE_POST_MODE_4', '0' ); + +$GM_MARKER_COLOR [5]=get_module_setting('googlemap', 'GM_MARKER_COLOR_5', 'Red' ); +$GM_MARKER_SIZE [5]=get_module_setting('googlemap', 'GM_MARKER_SIZE_5', 'Large'); +$GM_PREFIX [5]=get_module_setting('googlemap', 'GM_PREFIX_5', '' ); +$GM_POSTFIX [5]=get_module_setting('googlemap', 'GM_POSTFIX_5', '' ); +$GM_PRE_POST_MODE[5]=get_module_setting('googlemap', 'GM_PRE_POST_MODE_5', '0' ); + +$GM_MARKER_COLOR [6]=get_module_setting('googlemap', 'GM_MARKER_COLOR_6', 'Red' ); +$GM_MARKER_SIZE [6]=get_module_setting('googlemap', 'GM_MARKER_SIZE_6', 'Large'); +$GM_PREFIX [6]=get_module_setting('googlemap', 'GM_PREFIX_6', '' ); +$GM_POSTFIX [6]=get_module_setting('googlemap', 'GM_POSTFIX_6', '' ); +$GM_PRE_POST_MODE[6]=get_module_setting('googlemap', 'GM_PRE_POST_MODE_6', '0' ); + +$GM_MARKER_COLOR [7]=get_module_setting('googlemap', 'GM_MARKER_COLOR_7', 'Red' ); +$GM_MARKER_SIZE [7]=get_module_setting('googlemap', 'GM_MARKER_SIZE_7', 'Large'); +$GM_PREFIX [7]=get_module_setting('googlemap', 'GM_PREFIX_7', '' ); +$GM_POSTFIX [7]=get_module_setting('googlemap', 'GM_POSTFIX_7', '' ); +$GM_PRE_POST_MODE[7]=get_module_setting('googlemap', 'GM_PRE_POST_MODE_7', '0' ); + +$GM_MARKER_COLOR [8]=get_module_setting('googlemap', 'GM_MARKER_COLOR_8', 'Red' ); +$GM_MARKER_SIZE [8]=get_module_setting('googlemap', 'GM_MARKER_SIZE_8', 'Large'); +$GM_PREFIX [8]=get_module_setting('googlemap', 'GM_PREFIX_8', '' ); +$GM_POSTFIX [8]=get_module_setting('googlemap', 'GM_POSTFIX_8', '' ); +$GM_PRE_POST_MODE[8]=get_module_setting('googlemap', 'GM_PRE_POST_MODE_8', '0' ); + +$GM_MARKER_COLOR [9]=get_module_setting('googlemap', 'GM_MARKER_COLOR_9', 'Red' ); +$GM_MARKER_SIZE [9]=get_module_setting('googlemap', 'GM_MARKER_SIZE_9', 'Large'); +$GM_PREFIX [9]=get_module_setting('googlemap', 'GM_PREFIX_9', '' ); +$GM_POSTFIX [9]=get_module_setting('googlemap', 'GM_POSTFIX_9', '' ); +$GM_PRE_POST_MODE[9]=get_module_setting('googlemap', 'GM_PRE_POST_MODE_9', '0' ); diff --git a/modules_v2/googlemap/flags.php b/modules_v2/googlemap/flags.php new file mode 100644 index 0000000000..546e74d4ac --- /dev/null +++ b/modules_v2/googlemap/flags.php @@ -0,0 +1,253 @@ +<?php +/** + * Interface to edit place locations + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Edit + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; +require WT_ROOT.'includes/functions/functions_edit.php'; + +$countries=get_all_countries(); +$action=safe_REQUEST($_REQUEST, 'action'); + +if (isset($_REQUEST['countrySelected'])) $countrySelected = $_REQUEST['countrySelected']; +if (!isset($countrySelected)) $countrySelected="Countries"; +if (isset($_REQUEST['stateSelected'])) $stateSelected = $_REQUEST['stateSelected']; +if (!isset($stateSelected)) $stateSelected="States"; + +print_simple_header(WT_I18N::translate('Select flag')); + +$country = array(); +$rep = opendir(WT_ROOT.WT_MODULES_DIR.'googlemap/places/flags/'); +while ($file = readdir($rep)) { + if (stristr($file, ".png")) { + $country[] = substr($file, 0, strlen($file)-4); + } +} +closedir($rep); +sort($country); + +if ($countrySelected == "Countries") { + $flags = $country; +} +else { + $flags = array(); + $rep = opendir(WT_ROOT.WT_MODULES_DIR.'googlemap/places/'.$countrySelected.'/flags/'); + while ($file = readdir($rep)) { + if (stristr($file, ".png")) { + $flags[] = substr($file, 0, strlen($file)-4); + } + } + closedir($rep); + sort($flags); +} +$flags_s = array(); +if ($stateSelected != "States" && is_dir(WT_ROOT.WT_MODULES_DIR.'googlemap/places/'.$countrySelected.'/flags/'.$stateSelected.'/')) { + $rep = opendir(WT_ROOT.WT_MODULES_DIR.'googlemap/places/'.$countrySelected.'/flags/'.$stateSelected.'/'); + while ($file = readdir($rep)) { + if (stristr($file, ".png")) { + $flags_s[] = substr($file, 0, strlen($file)-4); + } + } + closedir($rep); + sort($flags_s); +} + +if ($action == "ChangeFlag") { +?> + <script type="text/javascript"> + <!-- + function edit_close() { +<?php if ($_POST["selcountry"] == "Countries") { ?> + window.opener.document.editplaces.icon.value = "places/flags/<?php echo $flags[$_POST["FLAGS"]]; ?>.png"; + window.opener.document.getElementById('flagsDiv').innerHTML = "<img src=\"<?php echo WT_MODULES_DIR; ?>googlemap/places/flags/<?php echo $country[$_POST["FLAGS"]]; ?>.png\"> <a href=\"javascript:;\" onclick=\"change_icon();return false;\"><?php echo WT_I18N::translate('Change flag'); ?></a> <a href=\"javascript:;\" onclick=\"remove_icon();return false;\"><?php echo WT_I18N::translate('Remove flag'); ?></a>"; +<?php } else if ($_POST["selstate"] != "States"){ ?> + window.opener.document.editplaces.icon.value = "places/<?php echo $countrySelected, "/flags/", $_POST["selstate"], "/", $flags_s[$_POST["FLAGS"]]; ?>.png"; + window.opener.document.getElementById('flagsDiv').innerHTML = "<img src=\"<?php echo WT_MODULES_DIR; ?>googlemap/places/<?php echo $countrySelected, "/flags/", $_POST["selstate"], "/", $flags_s[$_POST["FLAGS"]]; ?>.png\"> <a href=\"javascript:;\" onclick=\"change_icon();return false;\"><?php echo WT_I18N::translate('Change flag'); ?></a> <a href=\"javascript:;\" onclick=\"remove_icon();return false;\"><?php echo WT_I18N::translate('Remove flag'); ?></a>"; +<?php } else { ?> + window.opener.document.editplaces.icon.value = "places/<?php echo $countrySelected, "/flags/", $flags[$_POST["FLAGS"]]; ?>.png"; + window.opener.document.getElementById('flagsDiv').innerHTML = "<img src=\"<?php echo WT_MODULES_DIR; ?>googlemap/places/<?php echo $countrySelected, "/flags/", $flags[$_POST["FLAGS"]]; ?>.png\"> <a href=\"javascript:;\" onclick=\"change_icon();return false;\"><?php echo WT_I18N::translate('Change flag'); ?></a> <a href=\"javascript:;\" onclick=\"remove_icon();return false;\"><?php echo WT_I18N::translate('Remove flag'); ?></a>"; +<?php } ?> + window.close(); + } + //--> + </script> +<?php + // autoclose window when update successful unless debug on + if (!WT_DEBUG) { + echo "\n<script type=\"text/javascript\">\n<!--\nedit_close();\n//-->\n</script>"; + } + echo "<div class=\"center\"><a href=\"javascript:;\" onclick=\"edit_close();\">", WT_I18N::translate('Close Window'), "</a></div><br />\n"; + print_simple_footer(); + exit; +} +else { +?> +<script type="text/javascript"> +<!-- + function enableButtons() { + document.flags.save1.disabled = ""; + document.flags.save2.disabled = ""; + } + + function selectCountry() { + if (document.flags.COUNTRYSELECT.value == "Countries") { + window.location="module.php?mod=googlemap&mod_action=flags"; + } + else if (document.flags.STATESELECT.value != "States") { + window.location="module.php?mod=googlemap&mod_action=flags&countrySelected=" + document.flags.COUNTRYSELECT.value + "&stateSelected=" + document.flags.STATESELECT.value; + } + else { + window.location="module.php?mod=googlemap&mod_action=flags&countrySelected=" + document.flags.COUNTRYSELECT.value; + } + } + + function edit_close() { + window.close(); + } + +//--> +</script> +<?php +} + if (!isset($_SESSION['flags_countrylist'])) { + $countryList = array(); + $placesDir = scandir(WT_MODULES_DIR.'googlemap/places/'); + for ($i = 0; $i < count($country); $i++) { + if (count(preg_grep('/'.$country[$i].'/', $placesDir)) != 0) { + $rep = opendir(WT_MODULES_DIR.'googlemap/places/'.$country[$i].'/'); + while ($file = readdir($rep)) { + if (stristr($file, "flags")) { + $countryList[$country[$i]] = $countries[$country[$i]]; + } + } + closedir($rep); + } + } + asort($countryList); + $_SESSION['flags_countrylist'] = serialize($countryList); + } else { + $countryList = unserialize($_SESSION['flags_countrylist']); + } + $stateList = array(); + if ($countrySelected != "Countries") { + $placesDir = scandir(WT_MODULES_DIR.'googlemap/places/'.$countrySelected.'/flags/'); + for ($i = 0; $i < count($flags); $i++) { + if (in_array($flags[$i], $placesDir)) { + $rep = opendir(WT_MODULES_DIR.'googlemap/places/'.$countrySelected.'/flags/'.$flags[$i].'/'); + while ($file = readdir($rep)) { + $stateList[$flags[$i]] = $flags[$i]; + } + closedir($rep); + } + } + asort($stateList); + } +?> + +<form method="post" id="flags" name="flags" action="module.php?mod=googlemap&mod_action=flags&countrySelected=<?php echo $countrySelected; ?>&stateSelected=<?php echo $stateSelected; ?>"> + <input type="hidden" name="action" value="ChangeFlag" /> + <input type="hidden" name="selcountry" value="<?php echo $countrySelected; ?>" /> + <input type="hidden" name="selstate" value="<?php echo $stateSelected; ?>" /> + <input id="savebutton" name="save1" type="submit" disabled="true" value="<?php echo WT_I18N::translate('Save'); ?>" /><br /> + <table class="facts_table"> + <tr> + <td class="optionbox" colspan="4"> + <?php echo help_link('PLE_FLAGS','googlemap'); ?> + <select name="COUNTRYSELECT" dir="ltr" onchange="selectCountry()"> + <option value="Countries"><?php echo WT_I18N::translate('Countries'); ?></option> + <?php foreach ($countryList as $country_key=>$country_name) { + echo "<option value=\"", $country_key, "\""; + if ($countrySelected == $country_key) echo " selected=\"selected\" "; + echo ">", $country_name, "</option>\n"; + } ?> + </select> + </td> + </tr> + <tr> +<?php + $j = 1; + for ($i = 0; $i < count($flags); $i++) { + if ($countrySelected == "Countries") { + $tempstr = "<td><input type=\"radio\" dir=\"ltr\" name=\"FLAGS\" value=\"".$i."\" onchange=\"enableButtons();\"><img src=\"".WT_MODULES_DIR."googlemap/places/flags/".$flags[$i].".png\" alt=\"".$flags[$i]."\" title=\""; + if ($flags[$i]!='blank') $tempstr.=$countries[$flags[$i]]; + else $tempstr.=$countries['???']; + echo $tempstr, "\"> ", $flags[$i], "</input></td>\n"; + } + else { + echo "<td><input type=\"radio\" dir=\"ltr\" name=\"FLAGS\" value=\"", $i, "\" onchange=\"enableButtons();\"><img src=\"".WT_MODULES_DIR."googlemap/places/", $countrySelected, "/flags/", $flags[$i], ".png\"> ", $flags[$i], "</input></td>\n"; + } + if ($j == 4) { + echo "</tr><tr>\n"; + $j = 0; + } + $j++; + } + echo "</tr><tr"; + if ($countrySelected == "Countries" || count($stateList)==0) { + echo ' style=" visibility: hidden"'; + } + echo ">"; +?> + <td class="optionbox" colspan="4"> + <?php echo help_link('PLE_FLAGS','googlemap'); ?> + <select name="STATESELECT" dir="ltr" onchange="selectCountry()"> + <option value="States"><?php echo /* I18N: Part of a country, state/region/county */ WT_I18N::translate('Subdivision'); ?></option> + <?php foreach ($stateList as $state_key=>$state_name) { + echo "<option value=\"", $state_key, "\""; + if ($stateSelected == $state_key) echo " selected=\"selected\" "; + echo ">", $state_name, "</option>\n"; + } ?> + </select> + </td> + </tr> + <tr> +<?php + $j = 1; + for ($i = 0; $i < count($flags_s); $i++) { + if ($stateSelected != "States") { + echo "<td><input type=\"radio\" dir=\"ltr\" name=\"FLAGS\" value=\"", $i, "\" onchange=\"enableButtons();\"><img src=\"".WT_MODULES_DIR."googlemap/places/", $countrySelected, "/flags/", $stateSelected, "/", $flags_s[$i], ".png\"> ", $flags_s[$i], "</input></td>\n"; + } + if ($j == 4) { + echo "</tr><tr>\n"; + $j = 0; + } + $j++; + } +?> + </tr> + </table> + <input id="savebutton" name="save2" type="submit" disabled="true" value="<?php echo WT_I18N::translate('Save'); ?>" /><br /> +</form> +<?php +echo "<div class=\"center\"><a href=\"javascript:;\" onclick=\"edit_close();\">", WT_I18N::translate('Close Window'), "</a></div><br />\n"; + +print_simple_footer(); diff --git a/modules_v2/googlemap/googlemap.php b/modules_v2/googlemap/googlemap.php new file mode 100644 index 0000000000..dd08d18f88 --- /dev/null +++ b/modules_v2/googlemap/googlemap.php @@ -0,0 +1,661 @@ +<?php +/** + * Google map module for phpGedView + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * Modifications Copyright (c) 2010 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * $Id$ + * + * @author Brian Holland + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +// functions copied from print_fact_place +function print_fact_place_map($factrec) { + $ct = preg_match("/2 PLAC (.*)/", $factrec, $match); + if ($ct>0) { + $retStr = ' '; + $levels = explode(',', $match[1]); + $place = trim($match[1]); + // reverse the array so that we get the top level first + $levels = array_reverse($levels); + $retStr .= '<a href="placelist.php?action=show&'; + foreach ($levels as $pindex=>$ppart) { + // routine for replacing ampersands + $ppart = preg_replace("/amp\%3B/", "", trim($ppart)); + $retStr .= "parent[$pindex]=".PrintReady($ppart)."&"; + } + $retStr .= 'level='.count($levels); + $retStr .= '"> '.PrintReady($place).'</a>'; + return $retStr; + } + return ''; +} + + +function print_address_structure_map($factrec, $level) { + global $WORD_WRAPPED_NOTES; + global $POSTAL_CODE; + + // $POSTAL_CODE = 'false' - before city, 'true' - after city and/or state + //-- define per gedcom till can do per address countries in address languages + //-- then this will be the default when country not recognized or does not exist + //-- both Finland and Suomi are valid for Finland etc. + //-- see http://www.bitboost.com/ref/international-address-formats.html + + $nlevel = $level+1; + $ct = preg_match_all("/$level ADDR(.*)/", $factrec, $omatch, PREG_SET_ORDER); + for ($i=0; $i<$ct; $i++) { + $arec = get_sub_record($level, "$level ADDR", $factrec, $i+1); + $resultText = ''; + $cn = preg_match("/$nlevel _NAME (.*)/", $arec, $cmatch); + if ($cn>0) $resultText .= str_replace("/", "", $cmatch[1]).'<br />'; + $resultText .= PrintReady(trim($omatch[$i][1])); + $cont = get_cont($nlevel, $arec); + if (!empty($cont)) $resultText .= str_replace(array(' ', "<br "), array(" ", "<br "), PrintReady($cont)); + else { + if (strlen(trim($omatch[$i][1])) > 0) echo '<br />'; + $cs = preg_match("/$nlevel ADR1 (.*)/", $arec, $cmatch); + if ($cs>0) { + if ($cn==0) { + $resultText .= '<br />'; + $cn=0; + } + $resultText .= PrintReady($cmatch[1]); + } + $cs = preg_match("/$nlevel ADR2 (.*)/", $arec, $cmatch); + if ($cs>0) { + if ($cn==0) { + $resultText .= '<br />'; + $cn=0; + } + $resultText .= PrintReady($cmatch[1]); + } + + if ($POSTAL_CODE) { + if (preg_match("/$nlevel CITY (.*)/", $arec, $cmatch)) + $resultText.=' '.PrintReady($cmatch[1]); + if (preg_match("/$nlevel STAE (.*)/", $arec, $cmatch)) + $resultText.=', '.PrintReady($cmatch[1]); + if (preg_match("/$nlevel POST (.*)/", $arec, $cmatch)) + $resultText.='<br />'.PrintReady($cmatch[1]); + } else { + if (preg_match("/$nlevel POST (.*)/", $arec, $cmatch)) + $resultText.='<br />'.PrintReady($cmatch[1]); + if (preg_match("/$nlevel CITY (.*)/", $arec, $cmatch)) + $resultText.=' '.PrintReady($cmatch[1]); + if (preg_match("/$nlevel STAE (.*)/", $arec, $cmatch)) + $resultText.=', '.PrintReady($cmatch[1]); + } + } + if (preg_match("/$nlevel CTRY (.*)/", $arec, $cmatch)) + $resultText.='<br />'.PrintReady($cmatch[1]); + $resultText.= '<br />'; + // Here we can examine the resultant text and remove empty tags + echo str_replace(chr(10), ' ' , $resultText); + } + $resultText = "<table>"; + $ct = preg_match_all("/$level PHON (.*)/", $factrec, $omatch, PREG_SET_ORDER); + for ($i=0; $i<$ct; $i++) { + $resultText .= '<tr><td><span class="label"><b>'.translate_fact('PHON').': </b></span></td><td><span class="field">'; + $resultText .= getLRM() . $omatch[$i][1]. getLRM(); + $resultText .= '</span></td></tr>'; + } + $ct = preg_match_all("/$level FAX (.*)/", $factrec, $omatch, PREG_SET_ORDER); + for ($i=0; $i<$ct; $i++) { + $resultText .= '<tr><td><span class="label"><b>'.translate_fact('FAX').': </b></span></td><td><span class="field">'; + $resultText .= getLRM() . $omatch[$i][1] . getLRM(); + $resultText .= '</span></td></tr>'; + } + $ct = preg_match_all("/$level EMAIL (.*)/", $factrec, $omatch, PREG_SET_ORDER); + for ($i=0; $i<$ct; $i++) { + $resultText .= '<tr><td><span class="label"><b>'.translate_fact('EMAIL').': </b></span></td><td><span class="field">'; + $resultText .= '<a href="mailto:'.$omatch[$i][1].'">'.$omatch[$i][1].'</a>'; + $resultText .= '</span></td></tr>'; + } + $ct = preg_match_all("/$level (WWW|URL) (.*)/", $factrec, $omatch, PREG_SET_ORDER); + for ($i=0; $i<$ct; $i++) { + $resultText .= '<tr><td><span class="label"><b>'.translate_fact('URL').': </b></span></td><td><span class="field">'; + $resultText .= '<a href="'.$omatch[$i][2].'" target="_blank">'.$omatch[$i][2].'</a>'; + $resultText .= '</span></td></tr>'; + } + $resultText .= '</table>'; + if ($resultText!='<table></table>') echo str_replace(chr(10), ' ' , $resultText); +} + +function rem_prefix_from_placename($prefix_list, $place, $placelist) { + $prefix_split = explode(';', $prefix_list); + foreach ($prefix_split as $prefix) { + if (!empty($prefix)) { + if (preg_match('/^'.$prefix.' (.*)/', $place, $matches) != 0) { + $placelist[] = $matches[1]; + } + } + } + return $placelist; +} + +function rem_postfix_from_placename($postfix_list, $place, $placelist) { + $postfix_split = explode (';', $postfix_list); + foreach ($postfix_split as $postfix) { + if (!empty($postfix)) { + if (preg_match('/^(.*) '.$postfix.'$/', $place, $matches) != 0) { + $placelist[] = $matches[1]; + } + } + } + return $placelist; +} + +function rem_prefix_postfix_from_placename($prefix_list, $postfix_list, $place, $placelist) { + $prefix_split = explode (";", $prefix_list); + $postfix_split = explode (";", $postfix_list); + foreach ($prefix_split as $prefix) { + if (!empty($prefix)) { + foreach ($postfix_split as $postfix) { + if (!empty($postfix)) { + if (preg_match('/^'.$prefix.' (.*) '.$postfix.'$/', $place, $matches) != 0) { + $placelist[] = $matches[1]; + } + } + } + } + } + return $placelist; +} + +function create_possible_place_names ($placename, $level) { + global $GM_PREFIX, $GM_POSTFIX, $GM_PRE_POST_MODE; + + $retlist = array(); + + switch (@$GM_PRE_POST_MODE[$level]) { + case 0: // 0: no pre/postfix + $retlist[] = $placename; + break; + case 1: // 1 = Normal name, Prefix, Postfix, Both + $retlist[] = $placename; + $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); + $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); + $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); + break; + case 2: // 2 = Normal name, Postfix, Prefix, Both + $retlist[] = $placename; + $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); + $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); + $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); + break; + case 3: // 3 = Prefix, Postfix, Both, Normal name + $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); + $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); + $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); + $retlist[] = $placename; + break; + case 4: // 4 = Postfix, Prefix, Both, Normal name + $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); + $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); + $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); + $retlist[] = $placename; + break; + case 5: // 5 = Prefix, Postfix, Normal name, Both + $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); + $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); + $retlist[] = $placename; + $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); + break; + case 6: // 6 = Postfix, Prefix, Normal name, Both + $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); + $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); + $retlist[] = $placename; + $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); + break; + } + return $retlist; +} + +function abbreviate($text) { + if (utf8_strlen($text)>13) { + if (trim(utf8_substr($text, 10, 1))!='') { + $desc = utf8_substr($text, 0, 11).'.'; + } else { + $desc = trim(utf8_substr($text, 0, 11)); + } + } + else $desc = $text; + return $desc; +} + +function get_lati_long_placelocation ($place) { + $parent = explode (',', $place); + $parent = array_reverse($parent); + $place_id = 0; + for ($i=0; $i<count($parent); $i++) { + $parent[$i] = trim($parent[$i]); + if (empty($parent[$i])) $parent[$i]='unknown';// GoogleMap module uses "unknown" while GEDCOM uses , , + $placelist = create_possible_place_names($parent[$i], $i+1); + foreach ($placelist as $key => $placename) { + $pl_id= + WT_DB::prepare("SELECT pl_id FROM `##placelocation` WHERE pl_level=? AND pl_parent_id=? AND pl_place LIKE ? ORDER BY pl_place") + ->execute(array($i, $place_id, $placename)) + ->fetchOne(); + if (!empty($pl_id)) break; + } + if (empty($pl_id)) break; + $place_id = $pl_id; + } + + $row= + // WT_DB::prepare("SELECT pl_lati, pl_long, pl_zoom, pl_icon, pl_level FROM `##placelocation` WHERE pl_id=? ORDER BY pl_place") + WT_DB::prepare("SELECT pl_media, sv_lati, sv_long, sv_bearing, sv_elevation, sv_zoom, pl_lati, pl_long, pl_zoom, pl_icon, pl_level FROM `##placelocation` WHERE pl_id=? ORDER BY pl_place") + ->execute(array($place_id)) + ->fetchOneRow(); + if ($row) { + return array('media'=>$row->pl_media, 'sv_lati'=>$row->sv_lati, 'sv_long'=>$row->sv_long, 'sv_bearing'=>$row->sv_bearing, 'sv_elevation'=>$row->sv_elevation, 'sv_zoom'=>$row->sv_zoom, 'lati'=>$row->pl_lati, 'long'=>$row->pl_long, 'zoom'=>$row->pl_zoom, 'icon'=>$row->pl_icon, 'level'=>$row->pl_level); + } else { + return array(); + } +} + +function setup_map() { + global $GOOGLEMAP_ENABLED, $GOOGLEMAP_MAP_TYPE, $GOOGLEMAP_MIN_ZOOM, $GOOGLEMAP_MAX_ZOOM; + if (!$GOOGLEMAP_ENABLED) { + return; + } + ?> + <!-- V3 ============ --> + <script src="http://maps.google.com/maps/api/js?v=3.2&sensor=false" type="text/javascript"></script> + <!-- V3 ============ --> + <script type="text/javascript"> + var minZoomLevel = <?php echo $GOOGLEMAP_MIN_ZOOM;?>; + var maxZoomLevel = <?php echo $GOOGLEMAP_MAX_ZOOM;?>; + var startZoomLevel = <?php echo $GOOGLEMAP_MAX_ZOOM;?>; + </script> + <?php +} + +function build_indiv_map($indifacts, $famids) { + global $GOOGLEMAP_MAP_TYPE, $GOOGLEMAP_MIN_ZOOM, $GOOGLEMAP_MAX_ZOOM, $GEDCOM; + global $GOOGLEMAP_XSIZE, $GOOGLEMAP_YSIZE, $SHOW_LIVING_NAMES; + global $TEXT_DIRECTION, $GM_DEFAULT_TOP_VALUE, $GOOGLEMAP_COORD; + + $zoomLevel = $GOOGLEMAP_MAX_ZOOM; + // Create the markers list array =============================================================== + $markers=array(); + // Add the events to the markers list array===================================================== + $placelocation=WT_DB::table_exists("##placelocation"); + //-- sort the facts into date order + sort_facts($indifacts); + $i = 0; + foreach ($indifacts as $key => $value) { + $fact = $value->getTag(); + $fact_data=$value->getDetail(); + $factrec = $value->getGedComRecord(); + $placerec = null; + + if ($value->getPlace()!=null) { + $placerec = get_sub_record(2, '2 PLAC', $factrec); + $addrFound = false; + } else { + if (preg_match("/\d ADDR (.*)/", $factrec, $match)) { + $placerec = get_sub_record(1, "\d ADDR", $factrec); + $addrFound = true; + } + } + if (!empty($placerec)) { + $ctla = preg_match("/\d LATI (.*)/", $placerec, $match1); + $ctlo = preg_match("/\d LONG (.*)/", $placerec, $match2); + $spouserec = get_sub_record(2, '2 _WTS', $factrec); + $ctlp = preg_match("/\d _WTS @(.*)@/", $spouserec, $spouseid); + if ($ctlp>0) { + $useThisItem = canDisplayRecord(WT_GED_ID, find_family_record($spouseid[1], WT_GED_ID)); + } else { + $useThisItem = true; + } + if (($ctla>0) && ($ctlo>0) && ($useThisItem==true)) { + $i = $i + 1; + $markers[$i]=array('class'=>'optionbox', 'index'=>'', 'tabindex'=>'', 'placed'=>'no'); + if ($fact == "EVEN" || $fact=="FACT") { + $eventrec = get_sub_record(1, '2 TYPE', $factrec); + if (preg_match("/\d TYPE (.*)/", $eventrec, $match3)) { + $markers[$i]['fact']=$match3[1]; + } else { + $markers[$i]['fact']=translate_fact($fact); + } + } else { + $markers[$i]['fact']=translate_fact($fact); + } + if (!empty($fact_data) && $fact_data!='Y') { + $markers[$i]['info'] = $fact_data; + } + $markers[$i]['placerec'] = $placerec; + $match1[1] = trim($match1[1]); + $match2[1] = trim($match2[1]); + $markers[$i]['lati'] = str_replace(array('N', 'S', ','), array('', '-', '.') , $match1[1]); + $markers[$i]['lng'] = str_replace(array('E', 'W', ','), array('', '-', '.') , $match2[1]); + $ctd = preg_match("/2 DATE (.+)/", $factrec, $match); + if ($ctd>0) { + $markers[$i]['date'] = $match[1]; + } + if ($ctlp>0) { + $markers[$i]['name']=$spouseid[1]; + } + } else { + if (($placelocation == true) && ($useThisItem==true) && ($addrFound==false)) { + $ctpl = preg_match("/\d PLAC (.*)/", $placerec, $match1); + $latlongval = get_lati_long_placelocation($match1[1]); + if ((count($latlongval) == 0) && (!empty($GM_DEFAULT_TOP_VALUE))) { + $latlongval = get_lati_long_placelocation($match1[1].', '.$GM_DEFAULT_TOP_VALUE); + if ((count($latlongval) != 0) && ($latlongval['level'] == 0)) { + $latlongval['lati'] = NULL; + $latlongval['long'] = NULL; + } + } + if ((count($latlongval) != 0) && ($latlongval['lati'] != NULL) && ($latlongval['long'] != NULL)) { + $i = $i + 1; + $markers[$i]=array('class'=>'optionbox', 'index'=>'', 'tabindex'=>'', 'placed'=>'no'); + if ($fact == "EVEN" || $fact=="FACT") { + $eventrec = get_sub_record(1, '2 TYPE', $factrec); + if (preg_match("/\d TYPE (.*)/", $eventrec, $match3)) { + $markers[$i]['fact']=$match3[1]; + } else { + $markers[$i]['fact']=translate_fact($fact); + } + } else { + $markers[$i]['fact']=translate_fact($fact); + } + if (!empty($fact_data) && $fact_data!='Y') { + $markers[$i]['info'] = $fact_data; + } + $markers[$i]['icon'] = $latlongval['icon']; + $markers[$i]['placerec'] = $placerec; + if ($zoomLevel > $latlongval['zoom']) { + $zoomLevel = $latlongval['zoom']; + } + $markers[$i]['lati'] = str_replace(array('N', 'S', ','), array('', '-', '.') , $latlongval['lati']); + $markers[$i]['lng'] = str_replace(array('E', 'W', ','), array('', '-', '.') , $latlongval['long']); + $markers[$i]['media'] = $latlongval['media']; + $markers[$i]['sv_lati'] = $latlongval['sv_lati']; + $markers[$i]['sv_long'] = $latlongval['sv_long']; + $markers[$i]['sv_bearing'] = $latlongval['sv_bearing']; + $markers[$i]['sv_elevation'] = $latlongval['sv_elevation']; + $markers[$i]['sv_zoom'] = $latlongval['sv_zoom']; + $ctd = preg_match("/2 DATE (.+)/", $factrec, $match); + if ($ctd>0) { + $markers[$i]['date'] = $match[1]; + } + if ($ctlp>0) { + $markers[$i]['name']=$spouseid[1]; + } + } + } + } + } + } + + // Add children to the markers list array ====================================================== + if (count($famids)>0) { + $hparents=false; + for ($f=0; $f<count($famids); $f++) { + if (!empty($famids[$f])) { + $famrec = find_gedcom_record($famids[$f], WT_GED_ID, true); + if ($famrec) { + $num = preg_match_all("/1\s*CHIL\s*@(.*)@/", $famrec, $smatch, PREG_SET_ORDER); + for ($j=0; $j<$num; $j++) { + $person=WT_Person::getInstance($smatch[$j][1]); + if ($person->canDisplayDetails()) { + $srec = find_person_record($smatch[$j][1], WT_GED_ID); + $birthrec = ''; + $placerec = ''; + foreach ($person->getAllFactsByType('BIRT') as $sEvent) { + $birthrec = $sEvent->getGedcomRecord(); + $placerec = get_sub_record(2, '2 PLAC', $birthrec); + if (!empty($placerec)) { + $ctd = preg_match("/\d DATE (.*)/", $birthrec, $matchd); + $ctla = preg_match("/\d LATI (.*)/", $placerec, $match1); + $ctlo = preg_match("/\d LONG (.*)/", $placerec, $match2); + if (($ctla>0) && ($ctlo>0)) { + $i = $i + 1; + $markers[$i]=array('index'=>'', 'tabindex'=>'', 'placed'=>'no'); + if (strpos($srec, "\n1 SEX F")!==false) { + $markers[$i]['fact'] = WT_I18N::translate('Daughter'); + $markers[$i]['class'] = 'person_boxF'; + } else { + if (strpos($srec, "\n1 SEX M")!==false) { + $markers[$i]['fact'] = WT_I18N::translate('Son'); + $markers[$i]['class'] = 'person_box'; + } else { + $markers[$i]['fact'] = translate_fact('CHIL'); + $markers[$i]['class'] = 'person_boxNN'; + } + } + $markers[$i]['placerec'] = $placerec; + $match1[1] = trim($match1[1]); + $match2[1] = trim($match2[1]); + $markers[$i]['lati'] = str_replace(array('N', 'S', ','), array('', '-', '.'), $match1[1]); + $markers[$i]['lng'] = str_replace(array('E', 'W', ','), array('', '-', '.'), $match2[1]); + if ($ctd > 0) { + $markers[$i]['date'] = $matchd[1]; + } + $markers[$i]['name'] = $smatch[$j][1]; + } else { + if ($placelocation == true) { + $ctpl = preg_match("/\d PLAC (.*)/", $placerec, $match1); + $latlongval = get_lati_long_placelocation($match1[1]); + if ((count($latlongval) == 0) && (!empty($GM_DEFAULT_TOP_VALUE))) { + $latlongval = get_lati_long_placelocation($match1[1].', '.$GM_DEFAULT_TOP_VALUE); + if ((count($latlongval) != 0) && ($latlongval['level'] == 0)) { + $latlongval['lati'] = NULL; + $latlongval['long'] = NULL; + } + } + if ((count($latlongval) != 0) && ($latlongval['lati'] != NULL) && ($latlongval['long'] != NULL)) { + $i = $i + 1; + $markers[$i]=array('index'=>'', 'tabindex'=>'', 'placed'=>'no'); + $markers[$i]['fact'] = translate_fact('CHIL'); + $markers[$i]['class'] = 'option_boxNN'; + if (strpos($srec, "\n1 SEX F")!==false) { + $markers[$i]['fact'] = WT_I18N::translate('Daughter'); + $markers[$i]['class'] = 'person_boxF'; + } + if (strpos($srec, "\n1 SEX M")!==false) { + $markers[$i]['fact'] = WT_I18N::translate('Son'); + $markers[$i]['class'] = 'person_box'; + } + $markers[$i]['icon'] = $latlongval['icon']; + $markers[$i]['placerec'] = $placerec; + if ($zoomLevel > $latlongval['zoom']) { + $zoomLevel = $latlongval['zoom']; + } + $markers[$i]['lati'] = str_replace(array('N', 'S', ','), array('', '-', '.'), $latlongval['lati']); + $markers[$i]['lng'] = str_replace(array('E', 'W', ','), array('', '-', '.'), $latlongval['long']); + if ($ctd > 0) { + $markers[$i]['date'] = $matchd[1]; + } + $markers[$i]['name'] = $smatch[$j][1]; + $markers[$i]['media'] = $latlongval['media']; + $markers[$i]['sv_lati'] = $latlongval['sv_lati']; + $markers[$i]['sv_long'] = $latlongval['sv_long']; + $markers[$i]['sv_bearing'] = $latlongval['sv_bearing']; + $markers[$i]['sv_elevation'] = $latlongval['sv_elevation']; + $markers[$i]['sv_zoom'] = $latlongval['sv_zoom']; + } + } + } + } + } + } + } + } + } + } + } + + // Prepare the $markers array for use by the following "required" file/files =================== + if ($i == 0) { + echo '<table class="facts_table">'; + echo '<tr><td colspan="2" class="facts_value">', WT_I18N::translate('No map data for this person'); + echo '</td></tr>'; + if (WT_USER_IS_ADMIN) { + echo '<tr><td align="center" colspan="2">'; + echo '<a href="module.php?mod=googlemap&mod_action=admin_editconfig">', WT_I18N::translate('Google Maps configuration'), '</a>'; + echo '</td></tr>'; + } + } else { + $indexcounter = 0; + for ($j=1; $j<=$i; $j++) { + if ($markers[$j]['placed'] == 'no') { + $multimarker = -1; + // Count nr of locations where the long/lati is identical + for ($k=$j; $k<=$i; $k++) { + if (($markers[$j]['lati'] == $markers[$k]['lati']) && ($markers[$j]['lng'] == $markers[$k]['lng'])) { + $multimarker = $multimarker + 1; + } + } + // If only one location with this long/lati combination + if ($multimarker == 0) { + // --- NOTE for V3 api, following line is changed from "yes" to "no" ----------- + // --- This aids in identifying multi-event locations + $markers[$j]['placed'] = 'no'; + // ----------------------------------------------------------------------------- + $markers[$j]['index'] = $indexcounter; + $markers[$j]['tabindex'] = 0; + $indexcounter = $indexcounter + 1; + } else { + $tabcounter = 0; + $markersindex = 0; + $markers[$j]['placed'] = 'yes'; + $markers[$j]['index'] = $indexcounter; + $markers[$j]['tabindex'] = $tabcounter; + $tabcounter = $tabcounter + 1; + for ($k=$j+1; $k<=$i; $k++) { + if (($markers[$j]['lati'] == $markers[$k]['lati']) && ($markers[$j]['lng'] == $markers[$k]['lng'])) { + $markers[$k]['placed'] = 'yes'; + $markers[$k]['index'] = $indexcounter; + // if ($tabcounter == 4) { + // V3 ============================== + if ($tabcounter == 30) { + // V3 ============================== + $indexcounter = $indexcounter + 1; + $tabcounter = 0; + $markersindex = $markersindex + 1; + } + $markers[$k]['index'] = $indexcounter; + $markers[$k]['tabindex'] = $tabcounter; + $tabcounter = $tabcounter + 1; + } + } + $indexcounter = $indexcounter + 1; + } + } + } + + // === add $gmarks array to the required wt_v3_googlemap.js.php ============================ + $gmarks = $markers; + + global $controller; + $pid=$controller->indi->getXref(); + + // === Include css and js files ============================================================ + echo '<link type="text/css" href="', WT_MODULES_DIR, 'googlemap/css/wt_v3_googlemap.css" rel="stylesheet" />'; + require_once WT_ROOT.WT_MODULES_DIR.'googlemap/wt_v3_googlemap.js.php'; + + // === Create the normal googlemap sidebar of events and children ========================== + echo '<div style="overflow: auto; overflow-x: hidden; overflow-y: auto; height:', $GOOGLEMAP_YSIZE, 'px;"><table class="facts_table">'; + $z=0; + + foreach($markers as $marker) { + echo '<tr>'; + echo '<td class="facts_label">'; + echo '<a href="javascript:myclick(', $z, ', ', $marker['index'], ', ', $marker['tabindex'], ')">', $marker['fact'], '</a></td>'; + $z++; + echo '<td class="', $marker['class'], '" style="white-space: normal">'; + if (!empty($marker['info'])) { + echo '<span class="field">', $marker['info'], '</span><br />'; + } + if (!empty($marker['name'])) { + $person=WT_Person::getInstance($marker['name']); + if ($person) { + echo '<a href="', $person->getHtmlUrl(), '">', $person->canDisplayName() ? PrintReady($person->getFullName()) : WT_I18N::translate('Private'), '</a>'; + } + echo '<br />'; + } + if (preg_match("/2 PLAC (.*)/", $marker['placerec']) == 0) { + print_address_structure_map($marker['placerec'], 1); + } else { + echo print_fact_place_map($marker['placerec']), '<br />'; + } + if (!empty($marker['date'])) { + $date=new WT_Date($marker['date']); + echo $date->Display(true), '<br />'; + } + echo '</td>'; + echo '</tr>'; + } + echo '</table></div><br />'; + } // end prepare markers array ================================================================= + + // ======= More V3 api stuff (not displayed now) but will be sorted later ========== + ?> + <table id="s_bar" style="display:none;"> + <tr> + <td valign="top" style="padding-left:5px; width:360px; text-decoration:none; color:#4444ff; background:#aabbd8;"> + <div id="side_bar"></div> + </td> + </tr> + </table> + <table style="display:none;"> + <tr> + <td style="width: 360px; text-align:center;"> + <form style="width: 360px;" id="form1" action="#"> + <!-- Event Map:<input name= "radio1" type="checkbox" id="theatrebox" onclick="boxclick(this,'theatre')" checked /> --> + Street View Only:<input name= "radio2" type="checkbox" id="golfbox" onclick="boxclick(this,'golf')" /> + <!-- Other Map:<input type="checkbox" id="infobox" onclick="boxclick(this,'info')" /> --> + + <?php + // --------- Maybe for later use --------------- + /* + Other Map:<input type="checkbox" id="infobox" onclick="boxclick(this,'info')" /> + <b>Pedigree Map:</b><input id="sel2" name="select" type=radio /> + + Parents: <input type="checkbox" id="parentsbox" onclick="boxclick(this,'gen1')" /> + Grandparents: <input type="checkbox" id="gparentsbox" onclick="boxclick(this,'gen2')" /> + Great Grandparents: <input type="checkbox" id="ggparentsbox" onclick="boxclick(this,'gen3')" /><br /> + */ + ?> + </form> + </td> + <td style="width: 200px;"> + </td> + </tr> + </table> + <?php + // ================================================================================= + echo '<br />'; + return $i; +} // end build_indiv_map function diff --git a/modules_v2/googlemap/googlemap_readme.txt b/modules_v2/googlemap/googlemap_readme.txt new file mode 100644 index 0000000000..29e83c5dcb --- /dev/null +++ b/modules_v2/googlemap/googlemap_readme.txt @@ -0,0 +1,73 @@ +README file for the Googlemap module for webtrees + +The files in this archive should be extracted into your modules directory. + +These are the instruction on getting your Googlemap interface to work: + +1. Get your personal Google Map API key from + http://www.google.com/apis/maps/signup.html +2. Go to the Googlemap configuration page. You can find this page under the + Administration page. +3. Set Enable Googlemap to ‘Yes’. +4. Enter the key in the input field, and click save. + +The map will only be shown if at least one fact has a place with coordinates +attached to it. Attaching a coordinate can be done through the generic +place-location interface (located at the Googlamp configuration page) or by +specifying a MAP record with an event. + +Adding places one by one to your GEDCOM file (not recommended): + +This method is included so that you may have an idea of how a GEDCOM stores +place data. You do not need the Googlemap module to use this procedure. +The co-ordinates for an event can only be added directly to a GEDCOM file. +The correct way to do this is for a PLAC record: +2 PLAC <Placename> +3 MAP +4 LONG <Longitude> +4 LATI <Latitude> +(Make sure you use the "3 MAP" record after a PLAC record.) +The MAP, LONG and LATI lines should be added directly after the PLAC line. +In the ‘edit’ function pop-up window, there is a ‘+’ (plus sign) under ‘Place’ +where you can select a country, state, county, and city that exists in your +webtrees ‘place’ file. This can help avoid duplications by various spellings +or versions of the same place. The webtrees configuration allows for ‘expanded’ +editing if that option is selected. + +It is also possible to define a MAP record within a ADDR record, even though +this is not according to the standard (these records are created by Legacy). + +Add a place using webtrees Googlemap module (recommended method): + +Forenote: the Google Map module is designed to work with locations in tree-like +fashion. If we were to consider a suburb of London, the tree would take the +order 'England, London, Hackney'. This is not how we enter place names in our +family data, but it is how we manage the Google Map module. This will give +access to useful place lookup features as we build up map information. It will +help you find groups of people from the same locale. And it conforms to the +GEDCOM specification, a feature of webtrees. + +And, BEFORE you start with any mapping endeavours, review your data. Make sure +spelling is consistent, there are no 'almost' duplicates, places are in their +right country, and the places you describe are in true tree fashion. Only then +will the module make it easy for you to connect family data with Google Maps. + +This feature uses new database tables to store place text and location +information. Existing places can be imported and location information can be +added using graphic tools (zoom/click on map) or specific location data. + +The location information is held outside the GEDCOM (and can be shared between +GEDCOMs in webtrees) and location data is entered only once for each place. Backup +of location data is available by export of each new place database table to a +text file (separated with ";"). Bulk additions can be performed by text file +import (with reservations for specific place structure and spelling). + +Using the tree structure mentioned above, we start to build location data +from the top down – which, in 99% of cases, will mean starting by entering +a country. When that is done, we move to the next layer (state, county, +whatever is appropriate for your locale.) + +To make the flags work make sure that ./places/flags directory exists. + +More information: +http://wiki.webtrees.net/en/index.php?title=How_to:Add_Google_maps
\ No newline at end of file diff --git a/modules_v2/googlemap/help_text.php b/modules_v2/googlemap/help_text.php new file mode 100644 index 0000000000..6bcb218442 --- /dev/null +++ b/modules_v2/googlemap/help_text.php @@ -0,0 +1,293 @@ +<?php +/** + * Googlemap Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { + +case 'GOOGLEMAP_CONFIG': + $title=WT_I18N::translate('Configure Google-map'); + $text=WT_I18N::translate('Configure all aspects of the Google Map module here.'); + break; + +case 'GOOGLEMAP_ENABLE': + $title=WT_I18N::translate('Enable Google-map'); + $text=WT_I18N::translate('Using this option the functionality of the Googlemap can be enabled or disabled.<br />When disabled the Map-tab on the individual page is still shown, but will be left empty. The configuration link for administrators is still available. When disabled the Place Hierarchy has standard show.'); + break; + +case 'GOOGLEMAP_MAP_TYPE': + $title=WT_I18N::translate('Google-map type'); + $text=WT_I18N::translate('The type of map that will be shown by default. This can be Map, Satellite, Hybrid or Terrain.'); + break; + +case 'GOOGLEMAP_MAP_SIZE': + $title=WT_I18N::translate('Google-map size'); + $text=WT_I18N::translate('The size of the map (in pixels) as shown on the Individual pages.'); + break; + +case 'GOOGLEMAP_MAP_ZOOM': + $title=WT_I18N::translate('Google-map zoom factor'); + $text=WT_I18N::translate('Minimum and maximum zoom factor for the Google map. 1 is the full map, 15 is single house. Note that 15 is only available in certain areas.'); + break; + +case 'GOOGLEMAP_PRECISION': + $title=WT_I18N::translate('Precision of the latitude and longitude'); + $text=WT_I18N::translate('This specifies the precision of the different levels when entering new geographic locations. For example a country will be specified with precision 0 (=0 digits after the decimal point), while a town needs 3 or 4 digits.'); + break; + +case 'GM_DEFAULT_LEVEL_0': + $title=WT_I18N::translate('Default value for top-level'); + $text=WT_I18N::translate('Here the default level for the highest level in the place-hierarchy can be defined. If a place cannot be found this name is added as the highest level (country) and the database is searched again.'); + break; + +case 'GM_NOF_LEVELS': + $title=WT_I18N::translate('This indicates the number of levels used within Googlemap'); + $text=WT_I18N::translate('This field indicates the number of levels in the places-hierarchy that is being used by the Googlemap modules.<br />The default value is 4 (Country, State, County, Place), which is usually good enough. If you want to add an extra level (for example to add specific location like cemeteries or schools) change this value. If you want to remove a level (for example county) you can also change this value, but keep in mind that the files containing the place-locations contain a 4-level structure.'); + break; + +case 'GM_NAME_PREFIX': + $title=WT_I18N::translate('Prefix for names used on this level'); + $text=WT_I18N::translate('This value will be added to the front of the names on this level. Multiple values can be used, seperated by semicolons.'); + break; + +case 'GM_NAME_POSTFIX': + $title=WT_I18N::translate('Postfix for names used on this level'); + $text=WT_I18N::translate('This value will be added to the back of the names on this level. Multiple values can be used, seperated by semilcolons.'); + break; + +case 'GM_NAME_PRE_POST': + $title=WT_I18N::translate('Order of the pre/postfix to use'); + $text=WT_I18N::translate('This field indicates the order in which names are tried using the prefix and postfix. The possible values are:<br /><ul><li>No pre/postfix</li><li>Normal name, Prefix, Postfix, both</li><li>Normal name, Postfix, Prefix, both</li><li>Prefix, Postfix, both, Normal name</li><li>Postfix, Prefix, both, Normal name</li><li>Prefix, Postfix, Normal name, both</li><li>Postfix, Prefix, Normal name, both</li></ul>'); + break; + +case 'PL_EDIT_LOCATION': + $title=WT_I18N::translate('Edit or delete location'); + $text=WT_I18N::translate('Here you can edit the location or delete the location. When you click on Edit a new window will open where you can change the values of the geographic location.<br />If you click on the delete-icon the record will be deleted. This can only be done if there are no records connected to this location. If no records are connected the delete-icon is active, otherwise it is inactive.'); + break; + +case 'PL_ADD_LOCATION': + $title=WT_I18N::translate('Add geographic location'); + $text=WT_I18N::translate('Use this to add a place to the location table. The location will be added at this level.'); + break; + +case 'PL_IMPORT_GEDCOM': + $title=WT_I18N::translate('Import geographic locations from GEDCOM'); + $text=WT_I18N::translate('Import geographic location-data from current GEDCOM. The current GEDCOM will be scanned and all places will be added to the table. If latitude and longitude are available these will also be imported.'); + break; + +case 'PL_IMPORT_ALL_GEDCOM': + $title=WT_I18N::translate('Import geographic locations from all GEDCOMs'); + $text=WT_I18N::translate('Import geographic location-data from all GEDCOMs. All GEDCOMs will be scanned and all places will be added to the table. If latitude and longitude are available these will also be imported.'); + break; + +case 'PL_IMPORT_FILE': + $title=WT_I18N::translate('Import geographic locations from file'); + $text=WT_I18N::translate('Import geographic location data from a file. The file should be formatted as CSV file on the local computer. The record separator used within the lines is \';\'.'); + break; + +case 'PL_EXPORT_FILE': + $title=WT_I18N::translate('Export locations to file'); + $text=WT_I18N::translate('Export location data to a file. This option will save the data from the current view and all dependant data to a file. This means that if a country is selected and the states are shown, this option will save the data of the states, all the counties that are defined in those states and all places within those counties.'); + break; + +case 'PL_EXPORT_ALL_FILE': + $title=WT_I18N::translate('Export all locations to file'); + $text=WT_I18N::translate('Export all location data to a file. This option will save all location data and transfer it to the local computer.'); + break; + +case 'GOOGLEMAP_COORD': + $title=WT_I18N::translate('Display Map Coordinates'); + $text=WT_I18N::translate('This options sets whether Latitude and Longitude are displayed on the pop-up window attached to map markers.'); + break; + +// Help texts for places_edit.php + +case 'PLE_EDIT': + $title=WT_I18N::translate('Edit Google Map Places'); + $text=WT_I18N::translate('Here you can add, edit or delete Google Map place details.'); + break; + +case 'PLE_PLACES': + $title=WT_I18N::translate('Enter place name'); + $text=WT_I18N::translate('Here you can enter or change the name of the place.<br />The \'Search on this level\' option allow to search the latitude and longitude of entered place name only among the places with that level.<br />The \'Search on this level\' option allow to search the latitude and longitude of all places having entered name. Some the lower levels places can not be displayed with this method of search.'); + break; + +case 'PLE_PRECISION': + $title=WT_I18N::translate('Enter precision'); + $text=WT_I18N::translate('Here you can enter the precision. Based on this setting the number of digits that will be used in the latitude and longitude is determined.'); + break; + +case 'PLE_LATLON_CTRL': + $title=WT_I18N::translate('Enter latitude or Longitude'); + $text=WT_I18N::translate('Here the latitude and longitude can be entered. First select the area you want to set (E/W or N/S). Next enter the value for latitude or longitude. This should be a decimal value.<br />The decimal value can be determined by converting the minutes and seconds using the following formula:<br />degrees_decimal = ((seconds / 60) + minutes) / 60 + degrees.'); + break; + +case 'PLE_ZOOM': + $title=WT_I18N::translate('Enter zoom level'); + $text=WT_I18N::translate('Here the zoom level can be entered. This value will be used as the minimal value when displaying this geographic location on a map.'); + break; + +case 'PLE_ICON': + $title=WT_I18N::translate('Select an icon'); + $text=WT_I18N::translate('Here an icon can be set or removed. Using this link a flag can be selected. When this geographic location is shown, this flag will be displayed.'); + break; + +case 'PLE_FLAGS': + $title=WT_I18N::translate('Select flag'); + $text=WT_I18N::translate('Using the pull down menu it is possible to select a country, of which a flag can be selected. If no flags are shown, then there are no flags defined for this country.'); + break; + +case 'PLIF_FILENAME': + $title=WT_I18N::translate('Enter filename'); + $text=WT_I18N::translate('Browse for the file on your computer which contains the place locations in CSV format.'); + break; + +case 'PLIF_LOCALFILE': + $title=WT_I18N::translate('Enter filename'); + $text=WT_I18N::translate('Select a file from the list of files already on the server which contains the place locations in CSV format.'); + break; + +case 'PLIF_CLEAN': + $title=WT_I18N::translate('Clean placelocation database'); + $text=WT_I18N::translate('When this option is selected the placelocation database will be cleared. This means that only the location stored in this table will be deleted. This will not change anything in the GEDCOM.'); + break; + +case 'PLIF_UPDATE': + $title=WT_I18N::translate('Update existing records'); + $text=WT_I18N::translate('Only update existing records.<br />When this option is selected only existing records will be updated. This can be used to fill in latitude and longitude of places that have been imported from a GEDCOM. No new places will be added to the database.'); + break; + +case 'PLIF_OVERWRITE': + $title=WT_I18N::translate('Overwrite location data'); + $text=WT_I18N::translate('Overwrite location data in the database with data from the file.<br />When this option is selected, the location data in the database (latitude, longitude, zoomlevel and flag) are overwritten with the data in the file, if available. If the record is not already in the database a new record will be created, unless the Update-only option is also selected.'); + break; + +case 'PLE_ACTIVE': + $title=WT_I18N::translate('List inactive places'); + $text=WT_I18N::translate('<strong>List places in the GoogleMaps table that are not used by any current GEDCOM(s).</strong><br /><br />The display is set, by default, to only display for editing here those places that exist on BOTH your GEDCOM files and your GoogleMap tables.<br /><br />When this option is checked, and \"View\" clicked, the list of places will display ALL places at this level.<br /><br />This is designed to speed up the display of the list when large place lists have been imported, but not all used.<br /><br />NOTE - if the option is checked the full list may take a few minutes to display.'); + break; + +// Help text for placecheck.php + +case 'GOOGLEMAP_PLACECHECK': + $title=WT_I18N::translate('Place Checking Tool'); + $text=WT_I18N::translate('<strong>This tool</strong> provides a way to compare places in your gedcom file with the matching entries in the googlemaps \'placelocations\' table.<br /><br /><strong>The display</strong> can be structured for a specific gedcom file; for a specific country within that file; and for a particular area (e.g. state or county) within that country.<br /><br /><strong>Places</strong>are listed alphabetically so that minor spelling differences can be easily spotted, and corrected.<br /><br /><strong>From</strong> the results of the comparison you can click on place names for one of these three options:<br /><br /><strong>1 - </strong>For gedcom file places you will be taken to the Place Heirarchy view. Here you will see all records that are linked to that place.<br /><br /><strong>2 - </strong>For places that exist in the gedcom file, but not in the googlemap table (highlighted in red), you will get the googlemap \"Add place\" screen.<br /><br /><strong>3 - </strong>For places that exist in both the gedcom file and the googlemap table (perhaps without coordinates) you will get the googlemap \"edit place\" screen. Here you can edit any aspect of the place record for the googlemap display.<br /><br /><strong>Hovering</strong> over any place in the googlemap table columns will display the zoom level curently set for that place.'); + break; + +case 'PLACECHECK_FILTER': + $title=WT_I18N::translate('Place Check - List Filtering Optons'); + $text=WT_I18N::translate('This section includes options to limit or extend the scope of the listed places.<br /><br />It is hoped to add more options in the future.'); + break; + +case 'PLACECHECK_MATCH': + $title=WT_I18N::translate('Include matched places'); + $text=WT_I18N::translate('By default the list does NOT INCLUDE places that are fully matched between the GEDCOM file and the GoogleMap tables.<br />Fully matched means all levels exist in both the gedcom file and the GoogleMap tables; and the GoogleMap places have coordinates for every level.<br /><br />Check this block to include those matched places.'); + break; + +case 'PLACECHECK_KEY': + $title=WT_I18N::translate('Key to colors used below'); + $text= + '<table border="1" cellspacing="0" cellpadding="3"><tr><td style="color:red;">'. + translate_fact('PLAC'). + '</td><td style="color:red;" align="center"><strong>X</strong></td><td align="center" style="color:red;"><strong>X</strong></td><td style="font-size:85%; white-space:normal;">'. + WT_I18N::translate('This place and its coordinates do not exist in the GoogleMap tables.'). + '</td></tr><tr><td style="color:blue;">'. + translate_fact('PLAC'). + '</td><td style="color:red;" align="center"><strong>X</strong></td><td align="center" style="color:red;"><strong>X</strong></td><td style="font-size:85%; white-space:normal;">'. + WT_I18N::translate('This place exists in the GoogleMap tables, but has no coordinates.'). + '</td></tr><tr><td><strong>'. + WT_I18N::translate('unknown'). + '</td><td style="color:red;" align="center"><strong>X</strong></td><td align="center" style="color:red;"><strong>X</strong></td><td style="font-size:85%; white-space:normal;">'. + WT_I18N::translate('This place level is blank in your GEDCOM file. It should be added to GoogleMap places as "unknown" with coordinates from its parent level before you add any place to the next level.'). + '</td></tr><tr><td style="color:blue;">'. + WT_I18N::translate('unknown'). + '</td><td align="center">N55.0</td><td align="center">W85.0</td><td style="font-size:85%; white-space:normal;">'. + WT_I18N::translate('This place level is blank in your GEDCOM file, but exists as "unknown" in the GoogleMap places table with coordinates. No action required until the missing level can be entered.'). + '</td></tr></table>'; + + + + + break; + +//wooc Options for Place Hierarchy display + +case 'GOOGLEMAP_PH': + $title=WT_I18N::translate('Use Googlemap for Place Hierarchy'); + $text=WT_I18N::translate('Use this option to enable (Yes) or disable (No) the ability to substitute Googlemap for <strong>webtrees</strong> usual Place Hierarchy. To be able to set this option to YES, the Googlemap module must be also be enabled. CAUTION: Before using this option, it is recommended that you insert all places currently existing in your GED into the Googlemap tables.'); + break; + +case 'GOOGLEMAP_PH_MAP_SIZE': + $title=WT_I18N::translate('Size of Place Hierarchy map (in pixels)'); + $text=WT_I18N::translate('The size of the map (in pixels) as shown on the Place Hierarchy pages.'); + break; + +case 'GOOGLEMAP_PH_MARKER': + $title=WT_I18N::translate('Type of place markers in Place Hierarchy'); + $text=WT_I18N::translate('Here you can specify what type of marker be able to use (standard or flag). If place has no flag, use standard marker.'); + break; + +case 'GM_DISP_SHORT_PLACE': + $title=WT_I18N::translate('Display short placenames'); + $text=WT_I18N::translate('Here you can choose between two types of displaying places names in hierarchy. If set Yes the place has short name or actual level name, if No - full name.<br /><b>Examples:<br />Full name: </b>Chicago, Illinois, USA<br /><b>Short name: </b>Chicago<br /><b>Full name: </b>Illinois, USA<br /><b>Short name: </b>Illinois'); + break; + +case 'GM_DISP_COUNT': + $title=WT_I18N::translate('Display indis and families counts'); + $text=WT_I18N::translate('Here you can specify if the counts of indis and families connected to the place is displayed. Now if GEDCOM file contains many people is recomended to turn it off.'); + break; + +case 'GOOGLEMAP_PH_WHEEL': + $title=WT_I18N::translate('Use mouse wheel for zoom'); + $text=WT_I18N::translate('Here you can specify if the mouse wheel is enebled for zooming.'); + break; + +case 'GOOGLEMAP_PH_CONTROLS': + $title=WT_I18N::translate('Hide map controls'); + $text=WT_I18N::translate('This option allow to hide map controls (i.e. the map type choice) if mouse is outside the map.'); + break; + +// Pedigree map + +case 'PEDIGREE_MAP_clustersize': + $title=WT_I18N::translate('Cluster size'); + $text=WT_I18N::translate('The number of markers to be placed at one point before a trail of pins is started in a north east line behind the younger generations. The \'trail\' is usually only visable at high zoom values.'); + break; + +case 'PEDIGREE_MAP_hidelines': + $title=WT_I18N::translate('Hide lines'); + $text=WT_I18N::translate('Hide the lines connecting the child to each parent if they exist on the map.'); + break; + +case 'PEDIGREE_MAP_hideflags': + $title=WT_I18N::translate('Hide flags'); + $text=WT_I18N::translate('Hide the flags that are configured in the googlemap module. Usually these are for countries and states. This serves as a visual cue that the markers around the flag are from the general area, and not the specific spot.'); + break; +} diff --git a/modules_v2/googlemap/images/css_sprite_facts.png b/modules_v2/googlemap/images/css_sprite_facts.png Binary files differnew file mode 100644 index 0000000000..3aeb42d635 --- /dev/null +++ b/modules_v2/googlemap/images/css_sprite_facts.png diff --git a/modules_v2/googlemap/images/flag_shadow.png b/modules_v2/googlemap/images/flag_shadow.png Binary files differnew file mode 100644 index 0000000000..340046a162 --- /dev/null +++ b/modules_v2/googlemap/images/flag_shadow.png diff --git a/modules_v2/googlemap/images/icon1.png b/modules_v2/googlemap/images/icon1.png Binary files differnew file mode 100644 index 0000000000..50b53ce822 --- /dev/null +++ b/modules_v2/googlemap/images/icon1.png diff --git a/modules_v2/googlemap/images/icon2.png b/modules_v2/googlemap/images/icon2.png Binary files differnew file mode 100644 index 0000000000..3de6378410 --- /dev/null +++ b/modules_v2/googlemap/images/icon2.png diff --git a/modules_v2/googlemap/images/icon2L.png b/modules_v2/googlemap/images/icon2L.png Binary files differnew file mode 100644 index 0000000000..52b0d4e3e0 --- /dev/null +++ b/modules_v2/googlemap/images/icon2L.png diff --git a/modules_v2/googlemap/images/icon2Ls.png b/modules_v2/googlemap/images/icon2Ls.png Binary files differnew file mode 100644 index 0000000000..b15e6706b1 --- /dev/null +++ b/modules_v2/googlemap/images/icon2Ls.png diff --git a/modules_v2/googlemap/images/icon2R.png b/modules_v2/googlemap/images/icon2R.png Binary files differnew file mode 100644 index 0000000000..29e3f57724 --- /dev/null +++ b/modules_v2/googlemap/images/icon2R.png diff --git a/modules_v2/googlemap/images/icon2Rs.png b/modules_v2/googlemap/images/icon2Rs.png Binary files differnew file mode 100644 index 0000000000..594f97a4e8 --- /dev/null +++ b/modules_v2/googlemap/images/icon2Rs.png diff --git a/modules_v2/googlemap/images/icon3.png b/modules_v2/googlemap/images/icon3.png Binary files differnew file mode 100644 index 0000000000..b3d2f094af --- /dev/null +++ b/modules_v2/googlemap/images/icon3.png diff --git a/modules_v2/googlemap/images/icon3L.png b/modules_v2/googlemap/images/icon3L.png Binary files differnew file mode 100644 index 0000000000..f5c4545c0d --- /dev/null +++ b/modules_v2/googlemap/images/icon3L.png diff --git a/modules_v2/googlemap/images/icon3Ls.png b/modules_v2/googlemap/images/icon3Ls.png Binary files differnew file mode 100644 index 0000000000..58ab0a08ce --- /dev/null +++ b/modules_v2/googlemap/images/icon3Ls.png diff --git a/modules_v2/googlemap/images/icon3R.png b/modules_v2/googlemap/images/icon3R.png Binary files differnew file mode 100644 index 0000000000..3648b84ca4 --- /dev/null +++ b/modules_v2/googlemap/images/icon3R.png diff --git a/modules_v2/googlemap/images/icon3Rs.png b/modules_v2/googlemap/images/icon3Rs.png Binary files differnew file mode 100644 index 0000000000..5fa53c2d72 --- /dev/null +++ b/modules_v2/googlemap/images/icon3Rs.png diff --git a/modules_v2/googlemap/images/icon4.png b/modules_v2/googlemap/images/icon4.png Binary files differnew file mode 100644 index 0000000000..01c3771375 --- /dev/null +++ b/modules_v2/googlemap/images/icon4.png diff --git a/modules_v2/googlemap/images/icon4L.png b/modules_v2/googlemap/images/icon4L.png Binary files differnew file mode 100644 index 0000000000..f765bdce70 --- /dev/null +++ b/modules_v2/googlemap/images/icon4L.png diff --git a/modules_v2/googlemap/images/icon4Ls.png b/modules_v2/googlemap/images/icon4Ls.png Binary files differnew file mode 100644 index 0000000000..7a22aa6f87 --- /dev/null +++ b/modules_v2/googlemap/images/icon4Ls.png diff --git a/modules_v2/googlemap/images/icon4R.png b/modules_v2/googlemap/images/icon4R.png Binary files differnew file mode 100644 index 0000000000..8258234e2d --- /dev/null +++ b/modules_v2/googlemap/images/icon4R.png diff --git a/modules_v2/googlemap/images/icon4Rs.png b/modules_v2/googlemap/images/icon4Rs.png Binary files differnew file mode 100644 index 0000000000..efd252fb69 --- /dev/null +++ b/modules_v2/googlemap/images/icon4Rs.png diff --git a/modules_v2/googlemap/images/icon5.png b/modules_v2/googlemap/images/icon5.png Binary files differnew file mode 100644 index 0000000000..50c3eb4aa1 --- /dev/null +++ b/modules_v2/googlemap/images/icon5.png diff --git a/modules_v2/googlemap/images/icon5L.png b/modules_v2/googlemap/images/icon5L.png Binary files differnew file mode 100644 index 0000000000..3c7d171e7c --- /dev/null +++ b/modules_v2/googlemap/images/icon5L.png diff --git a/modules_v2/googlemap/images/icon5Ls.png b/modules_v2/googlemap/images/icon5Ls.png Binary files differnew file mode 100644 index 0000000000..0f31e5eb20 --- /dev/null +++ b/modules_v2/googlemap/images/icon5Ls.png diff --git a/modules_v2/googlemap/images/icon5R.png b/modules_v2/googlemap/images/icon5R.png Binary files differnew file mode 100644 index 0000000000..1c02b3fb80 --- /dev/null +++ b/modules_v2/googlemap/images/icon5R.png diff --git a/modules_v2/googlemap/images/icon5Rs.png b/modules_v2/googlemap/images/icon5Rs.png Binary files differnew file mode 100644 index 0000000000..c824449d9f --- /dev/null +++ b/modules_v2/googlemap/images/icon5Rs.png diff --git a/modules_v2/googlemap/images/icon6.png b/modules_v2/googlemap/images/icon6.png Binary files differnew file mode 100644 index 0000000000..c6d804fb05 --- /dev/null +++ b/modules_v2/googlemap/images/icon6.png diff --git a/modules_v2/googlemap/images/icon6L.png b/modules_v2/googlemap/images/icon6L.png Binary files differnew file mode 100644 index 0000000000..23b5219459 --- /dev/null +++ b/modules_v2/googlemap/images/icon6L.png diff --git a/modules_v2/googlemap/images/icon6Ls.png b/modules_v2/googlemap/images/icon6Ls.png Binary files differnew file mode 100644 index 0000000000..197d77bdcf --- /dev/null +++ b/modules_v2/googlemap/images/icon6Ls.png diff --git a/modules_v2/googlemap/images/icon6R.png b/modules_v2/googlemap/images/icon6R.png Binary files differnew file mode 100644 index 0000000000..016b631cee --- /dev/null +++ b/modules_v2/googlemap/images/icon6R.png diff --git a/modules_v2/googlemap/images/icon6Rs.png b/modules_v2/googlemap/images/icon6Rs.png Binary files differnew file mode 100644 index 0000000000..352363403a --- /dev/null +++ b/modules_v2/googlemap/images/icon6Rs.png diff --git a/modules_v2/googlemap/images/icon7.png b/modules_v2/googlemap/images/icon7.png Binary files differnew file mode 100644 index 0000000000..b5654c0aaa --- /dev/null +++ b/modules_v2/googlemap/images/icon7.png diff --git a/modules_v2/googlemap/images/icon7L.png b/modules_v2/googlemap/images/icon7L.png Binary files differnew file mode 100644 index 0000000000..b888b88b27 --- /dev/null +++ b/modules_v2/googlemap/images/icon7L.png diff --git a/modules_v2/googlemap/images/icon7Ls.png b/modules_v2/googlemap/images/icon7Ls.png Binary files differnew file mode 100644 index 0000000000..f762c83555 --- /dev/null +++ b/modules_v2/googlemap/images/icon7Ls.png diff --git a/modules_v2/googlemap/images/icon7R.png b/modules_v2/googlemap/images/icon7R.png Binary files differnew file mode 100644 index 0000000000..a49b672802 --- /dev/null +++ b/modules_v2/googlemap/images/icon7R.png diff --git a/modules_v2/googlemap/images/icon7Rs.png b/modules_v2/googlemap/images/icon7Rs.png Binary files differnew file mode 100644 index 0000000000..8d84594086 --- /dev/null +++ b/modules_v2/googlemap/images/icon7Rs.png diff --git a/modules_v2/googlemap/images/icon8.png b/modules_v2/googlemap/images/icon8.png Binary files differnew file mode 100644 index 0000000000..9c5458370c --- /dev/null +++ b/modules_v2/googlemap/images/icon8.png diff --git a/modules_v2/googlemap/images/icon8L.png b/modules_v2/googlemap/images/icon8L.png Binary files differnew file mode 100644 index 0000000000..c9631bfdfa --- /dev/null +++ b/modules_v2/googlemap/images/icon8L.png diff --git a/modules_v2/googlemap/images/icon8Ls.png b/modules_v2/googlemap/images/icon8Ls.png Binary files differnew file mode 100644 index 0000000000..ec1008d7ad --- /dev/null +++ b/modules_v2/googlemap/images/icon8Ls.png diff --git a/modules_v2/googlemap/images/icon8R.png b/modules_v2/googlemap/images/icon8R.png Binary files differnew file mode 100644 index 0000000000..bc0d304231 --- /dev/null +++ b/modules_v2/googlemap/images/icon8R.png diff --git a/modules_v2/googlemap/images/icon8Rs.png b/modules_v2/googlemap/images/icon8Rs.png Binary files differnew file mode 100644 index 0000000000..8c1bb53bf7 --- /dev/null +++ b/modules_v2/googlemap/images/icon8Rs.png diff --git a/modules_v2/googlemap/images/marker_green.png b/modules_v2/googlemap/images/marker_green.png Binary files differnew file mode 100644 index 0000000000..4a0c14c74c --- /dev/null +++ b/modules_v2/googlemap/images/marker_green.png diff --git a/modules_v2/googlemap/images/marker_yellow.png b/modules_v2/googlemap/images/marker_yellow.png Binary files differnew file mode 100644 index 0000000000..67ce5c0c45 --- /dev/null +++ b/modules_v2/googlemap/images/marker_yellow.png diff --git a/modules_v2/googlemap/images/pedigree_map.gif b/modules_v2/googlemap/images/pedigree_map.gif Binary files differnew file mode 100644 index 0000000000..9aa4139fe9 --- /dev/null +++ b/modules_v2/googlemap/images/pedigree_map.gif diff --git a/modules_v2/googlemap/images/shadow-left-large.png b/modules_v2/googlemap/images/shadow-left-large.png Binary files differnew file mode 100644 index 0000000000..ad45ef8f90 --- /dev/null +++ b/modules_v2/googlemap/images/shadow-left-large.png diff --git a/modules_v2/googlemap/images/shadow-left-small.png b/modules_v2/googlemap/images/shadow-left-small.png Binary files differnew file mode 100644 index 0000000000..219a8a7ae5 --- /dev/null +++ b/modules_v2/googlemap/images/shadow-left-small.png diff --git a/modules_v2/googlemap/images/shadow-right-large.png b/modules_v2/googlemap/images/shadow-right-large.png Binary files differnew file mode 100644 index 0000000000..6454cd6b69 --- /dev/null +++ b/modules_v2/googlemap/images/shadow-right-large.png diff --git a/modules_v2/googlemap/images/shadow-right-small.png b/modules_v2/googlemap/images/shadow-right-small.png Binary files differnew file mode 100644 index 0000000000..15e58b979e --- /dev/null +++ b/modules_v2/googlemap/images/shadow-right-small.png diff --git a/modules_v2/googlemap/images/shadow50.png b/modules_v2/googlemap/images/shadow50.png Binary files differnew file mode 100644 index 0000000000..cc0e630cb9 --- /dev/null +++ b/modules_v2/googlemap/images/shadow50.png diff --git a/modules_v2/googlemap/images/sq1.png b/modules_v2/googlemap/images/sq1.png Binary files differnew file mode 100644 index 0000000000..74c8463e3b --- /dev/null +++ b/modules_v2/googlemap/images/sq1.png diff --git a/modules_v2/googlemap/images/sq2.png b/modules_v2/googlemap/images/sq2.png Binary files differnew file mode 100644 index 0000000000..263a3b5cd3 --- /dev/null +++ b/modules_v2/googlemap/images/sq2.png diff --git a/modules_v2/googlemap/images/sq3.png b/modules_v2/googlemap/images/sq3.png Binary files differnew file mode 100644 index 0000000000..60a43243af --- /dev/null +++ b/modules_v2/googlemap/images/sq3.png diff --git a/modules_v2/googlemap/images/sq4.png b/modules_v2/googlemap/images/sq4.png Binary files differnew file mode 100644 index 0000000000..4d8f977e42 --- /dev/null +++ b/modules_v2/googlemap/images/sq4.png diff --git a/modules_v2/googlemap/images/sq5.png b/modules_v2/googlemap/images/sq5.png Binary files differnew file mode 100644 index 0000000000..ce3891db66 --- /dev/null +++ b/modules_v2/googlemap/images/sq5.png diff --git a/modules_v2/googlemap/images/sq6.png b/modules_v2/googlemap/images/sq6.png Binary files differnew file mode 100644 index 0000000000..7633df6f18 --- /dev/null +++ b/modules_v2/googlemap/images/sq6.png diff --git a/modules_v2/googlemap/images/sq7.png b/modules_v2/googlemap/images/sq7.png Binary files differnew file mode 100644 index 0000000000..480e5edc0f --- /dev/null +++ b/modules_v2/googlemap/images/sq7.png diff --git a/modules_v2/googlemap/images/sq8.png b/modules_v2/googlemap/images/sq8.png Binary files differnew file mode 100644 index 0000000000..b7c5497ece --- /dev/null +++ b/modules_v2/googlemap/images/sq8.png diff --git a/modules_v2/googlemap/images/transparent-left-large.png b/modules_v2/googlemap/images/transparent-left-large.png Binary files differnew file mode 100644 index 0000000000..aeb07694ea --- /dev/null +++ b/modules_v2/googlemap/images/transparent-left-large.png diff --git a/modules_v2/googlemap/images/transparent-left-small.png b/modules_v2/googlemap/images/transparent-left-small.png Binary files differnew file mode 100644 index 0000000000..9bdddc48e7 --- /dev/null +++ b/modules_v2/googlemap/images/transparent-left-small.png diff --git a/modules_v2/googlemap/images/transparent-right-large.png b/modules_v2/googlemap/images/transparent-right-large.png Binary files differnew file mode 100644 index 0000000000..f483d86724 --- /dev/null +++ b/modules_v2/googlemap/images/transparent-right-large.png diff --git a/modules_v2/googlemap/images/transparent-right-small.png b/modules_v2/googlemap/images/transparent-right-small.png Binary files differnew file mode 100644 index 0000000000..8a53069f73 --- /dev/null +++ b/modules_v2/googlemap/images/transparent-right-small.png diff --git a/modules_v2/googlemap/index.php b/modules_v2/googlemap/index.php new file mode 100644 index 0000000000..82232675e1 --- /dev/null +++ b/modules_v2/googlemap/index.php @@ -0,0 +1,34 @@ +<?php +/** + * Entry point for Google map module + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage GoogleMap + * @author Johan Borkhuis + * $Id$ + */ + +header("Location: ../../index.php"); +exit; + +?>
\ No newline at end of file diff --git a/modules_v2/googlemap/module.php b/modules_v2/googlemap/module.php new file mode 100644 index 0000000000..622e34605b --- /dev/null +++ b/modules_v2/googlemap/module.php @@ -0,0 +1,195 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class googlemap_WT_Module extends WT_Module implements WT_Module_Config, WT_Module_Tab { + // Extend WT_Module + public function getTitle() { + return /* I18N: http://en.wikipedia.org/wiki/Google_maps */ WT_I18N::translate('Google Maps'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab to the individual page which maps the events of an individual and their close relatives on a Google map.'); + } + + // Extend WT_Module + public function modAction($mod_action) { + switch($mod_action) { + case 'admin_config': + case 'admin_editconfig': + case 'flags': + case 'pedigree_map': + case 'admin_placecheck': + case 'admin_places': + case 'places_edit': + // TODO: these files should be methods in this class + require_once WT_ROOT.WT_MODULES_DIR.'googlemap/googlemap.php'; + require_once WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; + require WT_ROOT.WT_MODULES_DIR.$this->getName().'/'.$mod_action.'.php'; + break; + } + } + + // Implement WT_Module_Config + public function getConfigLink() { + return 'module.php?mod='.$this->getName().'&mod_action=admin_config'; + } + + // Implement WT_Module_Tab + public function defaultTabOrder() { + return 80; + } + + // Implement WT_Module_Tab + public function getPreLoadContent() { + ob_start(); + require_once WT_ROOT.WT_MODULES_DIR.'googlemap/googlemap.php'; + require_once WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; + setup_map(); + return ob_get_clean(); + } + + // Implement WT_Module_Tab + public function canLoadAjax() { + return true; + } + + // Implement WT_Module_Tab + public function getTabContent() { + global $SEARCH_SPIDER, $WT_IMAGES; + global $GOOGLEMAP_ENABLED, $GOOGLEMAP_MAP_TYPE, $GOOGLEMAP_MIN_ZOOM, $GOOGLEMAP_MAX_ZOOM, $GEDCOM; + global $GOOGLEMAP_XSIZE, $GOOGLEMAP_YSIZE, $SHOW_LIVING_NAMES; + global $TEXT_DIRECTION, $GM_DEFAULT_TOP_VALUE, $GOOGLEMAP_COORD, $GOOGLEMAP_PH_CONTROLS; + global $GM_MARKER_COLOR, $GM_MARKER_SIZE, $GM_PREFIX, $GM_POSTFIX, $GM_PRE_POST_MODE; + + ob_start(); + require_once WT_ROOT.WT_MODULES_DIR.'googlemap/googlemap.php'; + require_once WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; + + ?> +<table border="0" width="100%"> + <tr> + <td><?php + if (!array_key_exists('googlemap', WT_Module::getActiveModules())) { + echo "<table class=\"facts_table\">"; + echo "<tr><td id=\"no_tab8\" colspan=\"2\" class=\"facts_value\">".WT_I18N::translate('GoogleMap module disabled')."</td></tr>"; + if (WT_USER_IS_ADMIN) { + echo "<tr><td align=\"center\" colspan=\"2\">"; + echo "<a href=\"module.php?mod=".$this->getName()."&mod_action=admin_editconfig\">".WT_I18N::translate('Google Maps configuration')."</a>"; + echo "</td>"; + echo "</tr>"; + } + echo "</table><br />"; + ?> <script type="text/javascript"> + <!-- + function ResizeMap () {} + function SetMarkersAndBounds () {} + //--> + </script> <?php + } else { + if (!$this->controller->indi->canDisplayName()) { + echo "<table class=\"facts_table\">"; + echo "<tr><td class=\"facts_value\">"; + print_privacy_error(); + echo "</td></tr>"; + echo "</table><br />"; + echo "<script type=\"text/javascript\">"; + echo "function ResizeMap () {}</script>"; + } else { + echo "<table width=\"100%\" border=\"0\" class=\"facts_table\">"; + echo "<tr><td valign=\"top\">"; + echo "<div id=\"googlemap_left\">"; + echo "<img src=\"images/hline.gif\" width=\"".$GOOGLEMAP_XSIZE."\" height=\"0\" alt=\"\" />"; + echo "<div id=\"map_pane\" style=\"border: 1px solid gray; color:black; width: 100%; height: ".$GOOGLEMAP_YSIZE."px\"></div>"; + if (WT_USER_IS_ADMIN) { + echo "<table style=\"font-size:13px; \" width=\"100%\"><tr>"; + echo "<td width=\"40%\" align=\"left\">"; + echo "<a href=\"module.php?mod=".$this->getName()."&mod_action=admin_editconfig\">".WT_I18N::translate('Google Maps configuration')."</a>"; + echo "</td>"; + echo "<td width=\"35%\" align=\"center\">"; + echo "<a href=\"module.php?mod=".$this->getName()."&mod_action=admin_places\">".WT_I18N::translate('Edit geographic place locations')."</a>"; + echo "</td>"; + echo "<td width=\"25%\" align=\"right\">"; + echo "<a href=\"module.php?mod=".$this->getName()."&mod_action=admin_placecheck\">".WT_I18N::translate('Place Check')."</a>"; + echo "</td>"; + echo "</tr></table>"; + } + echo "</div>"; + echo "</td>"; + echo "<td valign=\"top\" width=\"30%\">"; + echo "<div id=\"map_content\">"; + $famids = array(); + $families = $this->controller->indi->getSpouseFamilies(); + foreach ($families as $family) { + $famids[] = $family->getXref(); + } + $this->controller->indi->add_family_facts(false); +// create_indiv_buttons(); + build_indiv_map($this->controller->indi->getIndiFacts(), $famids); + echo "</div>"; + echo "</td>"; + echo "</tr></table>"; + + + } + } + // start + echo "<img src=\"".$WT_IMAGES["spacer"]."\" id=\"marker6\" width=\"1\" height=\"1\" alt=\"\" />"; + // end + ?> + </td> + </tr> +</table> + + + <?php + return '<div id="'.$this->getName().'_content">'.ob_get_clean().'</div>'; + } + + // Implement WT_Module_Tab + public function hasTabContent() { + global $GOOGLEMAP_ENABLED, $SEARCH_SPIDER; + + return !$SEARCH_SPIDER && (array_key_exists('googlemap', WT_Module::getActiveModules()) || WT_USER_IS_ADMIN); + } + + + // Implement WT_Module_Tab + public function getJSCallback() { + global $GOOGLEMAP_PH_CONTROLS; + $out= + 'if (jQuery("#tabs li:eq("+jQuery("#tabs").tabs("option", "selected")+") a").attr("title")=="'.$this->getName().'") {'. + 'loadMap();'. + '}'. + ''; + return $out; + } + +} diff --git a/modules_v2/googlemap/pedigree_map.php b/modules_v2/googlemap/pedigree_map.php new file mode 100644 index 0000000000..c66bbc86dc --- /dev/null +++ b/modules_v2/googlemap/pedigree_map.php @@ -0,0 +1,308 @@ +<?php +// Print pedigree map using Googlemaps. +// It requires that your place coordinates are stored on the Google Map +// 'place_locations' table. It will NOT find coordinates stored only as tags in +// your GEDCOM file. As in the Google Maps module, it can only display place +// markers where the location exists with identical spelling in both your +// GEDCOM '2 PLAC' tag (within the '1 BIRT' event) and the place_locations table. +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License or, +// at your discretion, 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; + +global $PEDIGREE_GENERATIONS, $MAX_PEDIGREE_GENERATIONS, $ENABLE_AUTOCOMPLETE, $MULTI_MEDIA, $SHOW_HIGHLIGHT_IMAGES, $WT_IMAGES; + +// Default is show for both of these. +$hideflags = safe_GET('hideflags'); +$hidelines = safe_GET('hidelines'); + +$controller = new WT_Controller_Pedigree(); +$controller->init(); + +// Default of 5 +$clustersize = 5; +if (!empty($_REQUEST['clustersize'])) { + if ($_REQUEST['clustersize'] == '3') + $clustersize = 3; + else if ($_REQUEST['clustersize'] == '1') + $clustersize = 1; +} + +// Start of internal configuration variables + +// Limit this to match available number of icons. +// 8 generations equals 255 individuals +$MAX_PEDIGREE_GENERATIONS = min($MAX_PEDIGREE_GENERATIONS, 8); + +// End of internal configuration variables + +global $TEXT_DIRECTION; + +// -- print html header information +print_header($controller->getPersonName().' - '.WT_I18N::translate('Pedigree Map')); + +if (!$GOOGLEMAP_ENABLED) { + echo "<table class=\"facts_table\">\n"; + echo "<tr><td class=\"facts_value\">", WT_I18N::translate('GoogleMap module disabled'), "</td></tr>\n"; + if (WT_USER_IS_ADMIN) { + echo "<tr><td align=\"center\">\n"; + echo "<a href=\"module.php?mod=googlemap&mod_action=admin_editconfig\">", WT_I18N::translate('Google Maps configuration'), "</a>"; + echo "</td></tr>\n"; + } + echo "</table><br />"; + print_footer(); + return; +} + +echo '<link type="text/css" href ="', WT_MODULES_DIR, 'googlemap/css/googlemap_style.css" rel="stylesheet" />'; + +if ($ENABLE_AUTOCOMPLETE) require WT_ROOT.'js/autocomplete.js.htm'; +echo '<div><table><tr><td valign="middle">'; +echo "<h2>" . WT_I18N::translate('Pedigree Map') . " " . WT_I18N::translate('for') . " "; +echo PrintReady($controller->getPersonName())."</h2>"; + +// -- print the form to change the number of displayed generations +?> +<script type="text/javascript"> + <!-- + var pastefield; + function paste_id(value) { + pastefield.value=value; + } + //--> +</script> +</td><td width="50px"> </td><td> + <form name="people" method="get" action="module.php?ged=<?php echo WT_GEDURL; ?>&mod=googlemap&mod_action=pedigree_map"> + <input type="hidden" name="mod" value="googlemap" /> + <input type="hidden" name="mod_action" value="pedigree_map" /> + <table class="pedigree_table <?php echo $TEXT_DIRECTION; ?>" width="555"> + <tr> + <td colspan="5" class="topbottombar" style="text-align:center; "> + <?php echo WT_I18N::translate('Pedigree Map Options'); ?> + </td> + </tr> + <tr> + <td class="descriptionbox wrap"> + <?php echo WT_I18N::translate('Root Person ID'), help_link('rootid'); ?> + </td> + <td class="descriptionbox wrap"> + <?php echo WT_I18N::translate('Generations'), help_link('PEDIGREE_GENERATIONS'); ?> + </td> + <td class="descriptionbox wrap"> + <?php echo WT_I18N::translate('Cluster size'), help_link('PEDIGREE_MAP_clustersize','googlemap'); ?> + </td> + <td class="descriptionbox wrap"> + <?php + echo WT_I18N::translate('Hide flags'), help_link('PEDIGREE_MAP_hideflags','googlemap'); + ?> + </td> + <td class="descriptionbox wrap"> + <?php + echo WT_I18N::translate('Hide lines'), help_link('PEDIGREE_MAP_hidelines','googlemap'); + ?> + </td> + </tr> + <tr> + <td class="optionbox"> + <input class="pedigree_form" type="text" id="rootid" name="rootid" size="3" value="<?php echo $controller->rootid; ?>" /> + <?php print_findindi_link("rootid",""); ?> + </td> + <td class="optionbox"> + <select name="PEDIGREE_GENERATIONS"> + <?php + for ($p=3; $p<=$MAX_PEDIGREE_GENERATIONS; $p++) { + echo "<option value=\"".$p."\" " ; + if ($p == $controller->PEDIGREE_GENERATIONS) echo "selected=\"selected\" "; + echo ">".$p."</option>"; + } + ?> + </select> + </td> + <td class="optionbox"> + <select name="clustersize"> + <?php + for ($p=1; $p<6; $p = $p+2) { + echo "<option value=\"".$p."\" " ; + if ($p == $clustersize) echo "selected=\"selected\" "; + echo ">".$p."</option>"; + } + ?> + </select> + </td> + <td class="optionbox"> + <?php + echo "<input name=\"hideflags\" type=\"checkbox\""; + if ($hideflags) {echo " checked=\"checked\"";} + echo " />"; + ?> + </td> + <td class="optionbox"> + <?php + echo "<input name=\"hidelines\" type=\"checkbox\""; + if ($hidelines) {echo " checked=\"checked\"";} + echo " />"; + ?> + </td> + </tr> + <tr> + <td class="topbottombar" colspan="5"> + <input type="submit" value="<?php echo WT_I18N::translate('View'); ?>" /> + </td> + </tr> + </table> + </form> + </td></tr> +</table> + +<!-- end of form --> + +<!-- count records by type --> +<?php +$curgen=1; +$priv=0; +$count=0; +$miscount=0; +$missing = ""; + +for ($i=0; $i<($controller->treesize); $i++) { + // -- check to see if we have moved to the next generation + if ($i+1 >= pow(2, $curgen)) {$curgen++;} + $person = WT_Person::getInstance($controller->treeid[$i]); + if (!empty($person)) { + $pid = $controller->treeid[$i]; + $name = $person->getFullName(); + if ($name == WT_I18N::translate('Private')) $priv++; + $place = $person->getBirthPlace(); + if (empty($place)) { + $latlongval[$i] = NULL; + } else { + $latlongval[$i] = get_lati_long_placelocation($person->getBirthPlace()); + if ($latlongval[$i] != NULL && $latlongval[$i]["lati"]=='0' && $latlongval[$i]["long"]=='0') { + $latlongval[$i] = NULL; + } + } + if ($latlongval[$i] != NULL) { + $lat[$i] = str_replace(array('N', 'S', ','), array('', '-', '.'), $latlongval[$i]["lati"]); + $lon[$i] = str_replace(array('E', 'W', ','), array('', '-', '.'), $latlongval[$i]["long"]); + if (($lat[$i] != NULL) && ($lon[$i] != NULL)) { + $count++; + } + else { // The place is in the table but has empty values + if (!empty($name)) { + if (!empty($missing)) $missing .= ",\n "; + $addlist = '<a href="'.$person->getHtmlUrl().'">'. $name . '</a>'; + $missing .= $addlist; + $miscount++; + } + } + } + else { // There was no place, or not listed in the map table + if (!empty($name)) { + if (!empty($missing)) $missing .= ",\n "; + $addlist = '<a href="'.$person->getHtmlUrl().'">'. $name . '</a>'; + $missing .= $addlist; + $miscount++; + } + } + } +} +//<!-- end of count records by type --> + +//<!-- start of map display --> +echo '<table class="tabs_table" cellspacing="0" cellpadding="0" border="0" width="100%">'; +echo "<tr>\n"; +echo "<td valign=\"top\">\n"; +echo "<img src=\"images/spacer.gif\" width=\"".$GOOGLEMAP_XSIZE."\" height=\"0\" alt=\"\" border=\"0\"/>\n"; +echo "<div id=\"pm_map\" style=\"border: 1px solid gray; height: ".$GOOGLEMAP_YSIZE."px; font-size: 0.9em;"; +echo " background-image: url('images/loading.gif'); background-position: center; background-repeat: no-repeat; overflow: hidden;\"></div>\n"; +if (WT_USER_IS_ADMIN) { + echo "<table width=\"100%\">"; + echo "<tr><td align=\"left\">\n"; + echo "<a href=\"module.php?mod=googlemap&mod_action=admin_editconfig\">", WT_I18N::translate('Google Maps configuration'), "</a>"; + echo "</td>\n"; + echo "<td align=\"center\">\n"; + echo "<a href=\"module.php?mod=googlemap&mod_action=admin_places\">", WT_I18N::translate('Edit geographic place locations'), "</a>"; + echo "</td>\n"; + echo "<td align=\"right\">\n"; + echo "<a href=\"module.php?mod=googlemap&mod_action=admin_placecheck\">", WT_I18N::translate('Place Check'), "</a>"; + echo "</td></tr>\n"; + echo "</table>\n"; +} +echo "</td><td width=\"15px\"> </td>\n"; +echo "<td width=\"310px\" valign=\"top\">\n"; +echo "<div id=\"side_bar\" style=\"width: 300px; font-size: 0.9em; overflow: auto; overflow-x: hidden; overflow-y: auto; height: ".$GOOGLEMAP_YSIZE."px; \"></div></td>\n"; +echo "</tr>\n"; +echo "</table>\n"; +// display info under map +echo "<hr />"; +echo "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">"; +echo " <tr>"; +echo " <td valign=\"top\">"; +// print summary statistics +if (isset($curgen)) { + $total=pow(2,$curgen)-1; + $miss=$total-$count-$priv; + echo WT_I18N::plural( + '%1$d individual displayed, out of the normal total of %2$d, from %3$d generations.', + '%1$d individuals displayed, out of the normal total of %2$d, from %3$d generations.', + $count, + $count, $total, $curgen + ), '<br/>'; + echo "</td>\n"; + echo " </tr>\n"; + echo " <tr>\n"; + echo " <td valign=\"top\">\n"; + if ($priv) { + echo WT_I18N::plural('%s individual is private.', '%s individuals are private.', $priv, $priv), '<br/>'; + } + if ($count+$priv != $total) { + if ($miscount == 0) { + echo WT_I18N::translate('No ancestors in the database.'), "<br />\n"; + } else { + // I18N: %1$d is a count of individuals, %2$s is a list of their names + echo " ".WT_I18N::plural( + '%1$d individual is missing birthplace map coordinates: %2$s.', + '%1$d individuals are missing birthplace map coordinates: %2$s.', + $miscount, $miscount, $missing), + '<br />'; + } + } +} +echo " </td>\n"; +echo " </tr>\n"; +echo "</table>\n"; +echo "</div>"; +?> +<!-- end of map display --> + +<!-- Start of map scripts --> +<?php +echo '<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>'; +require_once WT_ROOT.WT_MODULES_DIR.'googlemap/wt_v3_pedigree_map.js.php'; + +print_footer(); diff --git a/modules_v2/googlemap/placehierarchy.php b/modules_v2/googlemap/placehierarchy.php new file mode 100644 index 0000000000..636907e442 --- /dev/null +++ b/modules_v2/googlemap/placehierarchy.php @@ -0,0 +1,703 @@ +<?php +/** + * Displays a place hierachy + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Googlemap + * @author Brian Holland (for v3 googlemaps version at webtrees) + * + * $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require WT_ROOT.WT_MODULES_DIR.'googlemap/googlemap.php'; +if (file_exists(WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php')) { + require WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; +} + +$stats = new WT_Stats($GEDCOM); + +function check_exist_table() { + return WT_DB::table_exists("##placelocation"); +} + +function place_id_to_hierarchy($id) { + $statement= + WT_DB::prepare("SELECT pl_parent_id, pl_place FROM `##placelocation` WHERE pl_id=?"); + $arr=array(); + while ($id!=0) { + $row=$statement->execute(array($id))->fetchOneRow(); + $arr=array($id=>$row->pl_place)+$arr; + $id=$row->pl_parent_id; + } + return $arr; +} + +function get_placeid($place) { + $par = explode (",", $place); + $par = array_reverse($par); + $place_id = 0; + if (check_exist_table()) { + for ($i=0; $i<count($par); $i++) { + $par[$i] = trim($par[$i]); + if (empty($par[$i])) $par[$i]="unknown"; + $placelist = create_possible_place_names($par[$i], $i+1); + foreach ($placelist as $key => $placename) { + $pl_id= + WT_DB::prepare("SELECT pl_id FROM `##placelocation` WHERE pl_level=? AND pl_parent_id=? AND pl_place LIKE ? ORDER BY pl_place") + ->execute(array($i, $place_id, $placename)) + ->fetchOne(); + if (!empty($pl_id)) break; + } + if (empty($pl_id)) break; + $place_id = $pl_id; + } + } + return $place_id; +} + +function get_p_id($place) { + $par = explode (",", $place); + $par = array_reverse($par); + $place_id = 0; + for ($i=0; $i<count($par); $i++) { + $par[$i] = trim($par[$i]); + $placelist = create_possible_place_names($par[$i], $i+1); + foreach ($placelist as $key => $placename) { + $pl_id= + WT_DB::prepare("SELECT p_id FROM `##places` WHERE p_level=? AND p_parent_id=? AND p_file=? AND p_place LIKE ? ORDER BY p_place") + ->execute(array($i, $place_id, WT_GED_ID, $placename)) + ->fetchOne(); + if (!empty($pl_id)) break; + } + if (empty($pl_id)) break; + $place_id = $pl_id; + } + return $place_id; +} + +function set_placeid_map($level, $parent) { + if (!isset($levelm)) { + $levelm=0; + } + $fullplace = ""; + if ($level==0) + $levelm=0; + else { + for ($i=1; $i<=$level; $i++) { + $fullplace .= $parent[$level-$i].", "; + } + $fullplace = substr($fullplace, 0, -2); + $levelm = get_p_id($fullplace); + } + return $levelm; +} + +function set_levelm($level, $parent) { + if (!isset($levelm)) { + $levelm=0; + } + $fullplace = ""; + if ($level==0) + $levelm=0; + else { + for ($i=1; $i<=$level; $i++) { + if ($parent[$level-$i]!="") + $fullplace .= $parent[$level-$i].", "; + else + $fullplace .= "Unknown, "; + } + $fullplace = substr($fullplace, 0, -2); + $levelm = get_placeid($fullplace); + } + return $levelm; +} + +function create_map($placelevels) { + $level = safe_GET('level'); + global $GOOGLEMAP_PH_XSIZE, $GOOGLEMAP_PH_YSIZE, $GOOGLEMAP_MAP_TYPE, $TEXT_DIRECTION, $levelm; + + // *** ENABLE STREETVIEW *** (boolean) ========================================================= + $STREETVIEW = get_module_setting('googlemap', 'GM_USE_STREETVIEW'); + // ============================================================================================= + $parent = safe_GET('parent'); + + // create the map + echo '<table class="center" style="margin-top:20px;"><tr valign="top"><td>'; + //<!-- start of map display --> + echo '<table><tr valign="top">'; + echo '<td class="center" width="200px">'; + + $levelm = set_levelm($level, $parent); + $latlng = + WT_DB::prepare("SELECT pl_place, pl_id, pl_lati, pl_long, pl_zoom, sv_long, sv_lati, sv_bearing, sv_elevation, sv_zoom FROM `##placelocation` WHERE pl_id=?") + ->execute(array($levelm)) + ->fetch(PDO::FETCH_ASSOC); + if ($STREETVIEW && $level!=0 ) { + echo '<div id="place_map" style=" margin-top: 20px; border:1px solid gray; width: ', $GOOGLEMAP_PH_XSIZE, 'px; height: ', $GOOGLEMAP_PH_YSIZE, 'px;" '; + } else { + echo '<div id="place_map" style="border:1px solid gray; width: ', $GOOGLEMAP_PH_XSIZE, 'px; height: ', $GOOGLEMAP_PH_YSIZE, 'px;" '; + } + echo "background-image: url('images/loading.gif'); background-position: center; background-repeat: no-repeat; overflow: hidden;\"></div>"; + echo '<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>'; + echo '</td>'; + + if (WT_USER_IS_ADMIN) { + + $placecheck_url = 'module.php?mod=googlemap&mod_action=admin_placecheck'; + if ($parent && isset($parent[0]) ) { + $placecheck_url .= '&country='.$parent[0]; + if (isset($parent[1])) { + $placecheck_url .= '&state='.$parent[1]; + } + } + + $adminplaces_url = 'module.php?mod=googlemap&mod_action=admin_places'; + if ($latlng && isset($latlng['pl_id'])) { + $adminplaces_url .= '&parent='.$latlng['pl_id']; + } + + echo '</tr><tr><td>'; + echo '<table style="width:', $GOOGLEMAP_PH_XSIZE, 'px; margin-top:0px; background:none;" >'; + echo '<tr><td align="left" style="margin-top:0px; ">'; + echo '<a href="module.php?mod=googlemap&mod_action=admin_editconfig">', WT_I18N::translate('Google Maps configuration'), '</a>'; + echo '</td>'; + echo '<td align="center">'; + echo '<a href="'.$adminplaces_url.'">', WT_I18N::translate('Edit geographic place locations'), '</a>'; + echo '</td>'; + echo '<td align="right">'; + echo '<a href="'.$placecheck_url.'">', WT_I18N::translate('Place Check'), '</a>'; + echo '</td>'; + if (array_key_exists('batch_update', WT_Module::getActiveModules())) { + $placelevels=preg_replace('/, '.WT_I18N::translate('unknown').'/', ', ', $placelevels); // replace ", unknown" with ", " + $placelevels=substr($placelevels, 2); // remove the leading ", " + if ($placelevels) { + $batchupdate_url='module.php?mod=batch_update&mod_action=admin_batch_update&plugin=search_replace_bu_plugin&method=exact&GEDCOM='.WT_GEDCOM.'&search='.urlencode('PLAC '.$placelevels).'&replace='.urlencode('PLAC '.$placelevels); // exact match + // $batchupdate_url='module.php?mod=batch_update&mod_action=admin_batch_update&plugin=search_replace_bu_plugin&method=regex&GEDCOM='.WT_GEDCOM.'&search='.urlencode('PLAC (.*)'.$placelevels); // regex + echo '<td align="right">'; + echo '<a href="'.$batchupdate_url.'">', WT_I18N::translate('Batch Update'), '</a>'; + echo '</td>'; + } + } + echo '</tr>'; + echo '</table>'; + } + echo '</tr></table>'; + echo '</td>'; + echo '<td style="margin-left:15px; float:right; ">'; + + if ($STREETVIEW) { + ?> + <script> + function update_sv_params(placeid) { + var svlati = document.getElementById('sv_latiText').value.slice(0, -1); + var svlong = document.getElementById('sv_longText').value.slice(0, -1); + var svbear = document.getElementById('sv_bearText').value.slice(0, -1); + var svelev = document.getElementById('sv_elevText').value.slice(0, -1); + var svzoom = document.getElementById('sv_zoomText').value; + win03 = window.open('module.php?mod=googlemap&mod_action=places_edit&action=update_sv_params&placeid='+placeid+"&"+sessionname+"="+sessionid+ + '&svlati='+svlati+ + '&svlong='+svlong+ + '&svbear='+svbear+ + '&svelev='+svelev+ + '&svzoom='+svzoom, + 'win03', 'top=50, left=50, width=680, height=550, resizable=1, scrollbars=1' ); + if (window.focus) {win03.focus();} + } + </script> + <?php + + $parent = safe_GET('parent'); + global $TBLPREFIX, $pl_lati, $pl_long; + if ($level>=1) { + if (!isset($latlng)) { + echo '<br /><br />'; + echo '<br /><br /><br />'; + echo '<div class="warning">'; + echo '<b>', WT_I18N::translate('This place has no coordinates'), '</b><br /><br />'; + if (WT_USER_IS_ADMIN) { + echo WT_I18N::translate('Click Edit geographic place locations and set coordinates.'), '<br /><br />'; + echo WT_I18N::translate('Then, if you are using Google Street View, return here to position Street View afterwards.'); + } else { + echo contact_links(); + } + echo '</div>'; + } else { + $pl_lati = str_replace(array('N', 'S', ','), array('', '-', '.'), $latlng['pl_lati']); // WT_placelocation lati + $pl_long = str_replace(array('E', 'W', ','), array('', '-', '.'), $latlng['pl_long']); // WT_placelocation long + + // Check if Streetview location parameters are stored in database + $placeid = $latlng['pl_id']; // Placelocation place id + $sv_lat = $latlng['sv_lati']; // StreetView Point of View Latitude + $sv_lng = $latlng['sv_long']; // StreetView Point of View Longitude + $sv_dir = $latlng['sv_bearing']; // StreetView Point of View Direction (degrees from North) + $sv_pitch = $latlng['sv_elevation']; // StreetView Point of View Elevation (+90 to -90 degrees (+=down, -=up) + $sv_zoom = $latlng['sv_zoom']; // StreetView Point of View Zoom (0, 1, 2 or 3) + + // Check if Street View Lati/Long are the default of 0 or null, if so use regular Place Lati/Long to set an initial location for the panda ------------ + if (($latlng['sv_lati']==null && $latlng['sv_long']==null) || ($latlng['sv_lati']==0 && $latlng['sv_long']==0)) { + $sv_lat = $pl_lati; + $sv_lng = $pl_long; + } + // Set Street View parameters to numeric value if NULL (avoids problem with Google Street View Pane not rendering) + if ($sv_dir==null) { + $sv_dir=0; + } + if ($sv_pitch==null) { + $sv_pitch=0; + } + if ($sv_zoom==null) { + $sv_zoom=1; + } + + $_map = WT_I18N::translate('Google Maps'); + $_reset = WT_I18N::translate('Reset'); + $_streetview = /* I18N: http://en.wikipedia.org/wiki/Google_street_view */ WT_I18N::translate('Google Street View'); + ?> + <div> + <iframe style="background:transparent; margin-top:-3px; margin-left:2px; width:530px;height:405px;padding:0;border:solid 0px black" src="<?php echo WT_MODULES_DIR; ?>googlemap/wt_v3_street_view.php?x=<?php echo $sv_lng; ?>&y=<?php echo $sv_lat; ?>&z=18&t=2&c=1&s=1&b=<?php echo $sv_dir; ?>&p=<?php echo $sv_pitch; ?>&m=<?php echo $sv_zoom; ?>&j=1&k=1&v=1&map=<?php echo $_map; ?>&reset=<?php echo $_reset; ?>&streetview=<?php echo $_streetview; ?>" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe> + </div> + + <?php + $list_latlon = ( + translate_fact('LATI')."<input name='sv_latiText' id='sv_latiText' type='text' style='width:42px; background:none; border:none;' value='".$sv_lat."' />". + translate_fact('LONG')."<input name='sv_longText' id='sv_longText' type='text' style='width:42px; background:none; border:none;' value='".$sv_lng."' />". + WT_I18N::translate('Bearing')."<input name='sv_bearText' id='sv_bearText' type='text' style='width:46px; background:none; border:none;' value='".$sv_dir."' />". + WT_I18N::translate('Elevation')."<input name='sv_elevText' id='sv_elevText' type='text' style='width:30px; background:none; border:none;' value='".$sv_pitch."' />". + WT_I18N::translate('Zoom')."<input name='sv_zoomText' id='sv_zoomText' type='text' style='width:30px; background:none; border:none;' value='".$sv_zoom."' /> + "); + if (WT_USER_IS_ADMIN) { + echo "<table align=\"center\" style=\"margin-left:6px; border:solid 1px black; width:522px; margin-top:-28px; background:#cccccc; \">"; + } else { + echo "<table align=\"center\" style=\"display:none; \">"; + } + echo "<tr><td>\n"; + echo "<form style=\"text-align:left; margin-left:5px; font:11px verdana; color:blue;\" method=\"post\" action=\"\">"; + echo $list_latlon; + echo "<input type=\"submit\" name=\"Submit\" onClick=\"update_sv_params($placeid);\" value=\"", WT_I18N::translate('Save'), "\">"; + echo "</form>"; + echo "</td></tr>\n"; + echo "</table>\n"; + } + } + // Next line puts Place hierarchy on new row ----- + echo '</td></tr><tr>'; + } // End Streetview window =================================================================== +} + +function check_were_am_i($numls, $levelm) { + $where_am_i=place_id_to_hierarchy($levelm); + $i=$numls+1; + if (!isset($levelo)) { + $levelo[0]=0; + } + foreach (array_reverse($where_am_i, true) as $id=>$place2) { + $levelo[$i]=$id; + $i--; + } + return $levelo; +} + +function check_place($place_names, $place) { + if ($place == "Unknown") $place=""; + if (in_array($place, $place_names)) { + return true; + } +} + +function print_how_many_people($level, $parent) { + global $GEDCOM, $stats; + + $place_count_indi = 0; + $place_count_fam = 0; + if (!isset($parent[$level-1])) $parent[$level-1]=""; + $p_id = set_placeid_map($level, $parent); + $indi = $stats->_statsPlaces('INDI', false, $p_id); + $fam = $stats->_statsPlaces('FAM', false, $p_id); + if (!empty($indi)) { + foreach ($indi as $place) { + $place_count_indi=$place['tot']; + } + } + if (!empty($fam)) { + foreach ($fam as $place) { + $place_count_fam=$place['tot']; + } + } + echo "<br /><br />", WT_I18N::translate('Individuals'), ": ", $place_count_indi, ", ", WT_I18N::translate('Families'), ": ", $place_count_fam; +} + +function print_gm_markers($place2, $level, $parent, $levelm, $linklevels, $placelevels, $lastlevel=false) { + global $GOOGLEMAP_COORD, $GOOGLEMAP_PH_MARKER, $GM_DISP_SHORT_PLACE, $GM_DISP_COUNT; + + if (($place2['lati'] == NULL) || ($place2['long'] == NULL) || (($place2['lati'] == "0") && ($place2['long'] == "0"))) { + echo "var icon_type = new google.maps.MarkerImage();\n"; + echo ' icon_type.image = "', WT_MODULES_DIR, 'googlemap/images/marker_yellow.png";'; + echo ' icon_type.shadow = "', WT_MODULES_DIR, 'googlemap/images/shadow50.png";'; + echo " icon_type.iconSize = google.maps.Size(20, 34);\n"; + echo " icon_type.shadowSize = google.maps.Size(37, 34);\n"; + echo "var point = new google.maps.LatLng(0, 0);\n"; + if ($lastlevel) + echo "var marker = createMarker(point, \"<div class='iwstyle' style='width: 250px;'><a href='?level=", $level, $linklevels, "'><br />"; + else { + echo "var marker = createMarker(point, \"<div class='iwstyle' style='width: 250px;'><a href='?level=", ($level+1), $linklevels, "&parent[{$level}]="; + if ($place2['place'] == "Unknown") echo "'><br />"; + else echo addslashes($place2['place']), "'><br />"; + } + if (($place2["icon"] != NULL) && ($place2['icon'] != "")) { + echo '<img src=\"', WT_MODULES_DIR, 'googlemap/', $place2['icon'], '\"> '; + } + if ($lastlevel) { + $placename = substr($placelevels, 2); + if ($place2['place'] == "Unknown") { + if (!$GM_DISP_SHORT_PLACE) { + echo addslashes(substr($placelevels, 2)); + } else { + echo WT_I18N::translate('unknown'); + } + } else { + if (!$GM_DISP_SHORT_PLACE) { + echo addslashes(substr($placelevels, 2)); + } else { + echo addslashes($place2['place']); + } + } + } else { + $placename = $place2['place'].$placelevels; + if ($place2['place'] == "Unknown") { + if (!$GM_DISP_SHORT_PLACE) { + echo addslashes(WT_I18N::translate('unknown').$placelevels); + } else { + echo WT_I18N::translate('unknown'); + } + } else { + if (!$GM_DISP_SHORT_PLACE) { + echo addslashes($place2['place'].$placelevels); + } else { + echo addslashes($place2['place']); + } + } + } + echo "</a>"; + if ($GM_DISP_COUNT) { + if ($lastlevel) { + print_how_many_people($level, $parent); + } else { + $parent[$level]=$place2['place']; + print_how_many_people($level+1, $parent); + } + } + echo "<br />", WT_I18N::translate('This place has no coordinates'); + if (WT_USER_IS_ADMIN) + echo "<br /><a href='module.php?mod=googlemap&mod_action=admin_places&parent=", $levelm, "&display=inactive'>", WT_I18N::translate('Edit geographic location'), "</a>"; + echo "</div>\", icon_type, \"", str_replace(array('‎', '‏'), array(WT_UTF8_LRM, WT_UTF8_RLM), addslashes($place2['place'])), "\");\n"; + } else { + $lati = str_replace(array('N', 'S', ','), array('', '-', '.'), $place2['lati']); + $long = str_replace(array('E', 'W', ','), array('', '-', '.'), $place2['long']); + //delete leading zero + if ($lati >= 0) { + $lati = abs($lati); + } elseif ($lati < 0) { + $lati = "-".abs($lati); + } + if ($long >= 0) { + $long = abs($long); + } elseif ($long < 0) { + $long = "-".abs($long); + } + + // flags by kiwi3685 --- + if (($place2["icon"] == NULL) || ($place2['icon'] == "") || ($GOOGLEMAP_PH_MARKER != "G_FLAG")) { + echo "var icon_type = new google.maps.MarkerImage();\n"; + } else { + echo "var icon_type = new google.maps.MarkerImage();\n"; + echo ' icon_type.image = "', WT_MODULES_DIR, 'googlemap/', $place2['icon'], '";'; + echo ' icon_type.shadow = "', WT_MODULES_DIR, 'googlemap/images/flag_shadow.png";'; + echo " icon_type.iconSize = new google.maps.Size(25, 15);\n"; + echo " icon_type.shadowSize = new google.maps.Size(35, 45);\n"; + } + echo "var point = new google.maps.LatLng({$lati}, {$long});\n"; + if ($lastlevel) { + echo "var marker = createMarker(point, \"<div class='iwstyle' style='width: 250px;'><a href='?level=", $level, $linklevels, "'><br />"; + } else { + echo "var marker = createMarker(point, \"<div class='iwstyle' style='width: 250px;'><a href='?level=", ($level+1), $linklevels, "&parent[{$level}]="; + if ($place2['place'] == "Unknown") { + echo "'><br />"; + } else { + echo addslashes($place2['place']), "'><br />"; + } + } + if (($place2['icon'] != NULL) && ($place2['icon'] != "")) { + echo '<img src=\"', WT_MODULES_DIR, 'googlemap/', $place2['icon'], '\"> '; + } + if ($lastlevel) { + $placename = substr($placelevels, 2); + if ($place2['place'] == "Unknown") { + if (!$GM_DISP_SHORT_PLACE) { + echo addslashes(substr($placelevels, 2)); + } else { + echo WT_I18N::translate('unknown'); + } + } else { + if (!$GM_DISP_SHORT_PLACE) { + echo addslashes(substr($placelevels, 2)); + } else { + echo addslashes($place2['place']); + } + } + } else { + $placename = $place2['place'].$placelevels; + if ($place2['place'] == "Unknown") { + if (!$GM_DISP_SHORT_PLACE) { + echo addslashes(WT_I18N::translate('unknown').$placelevels); + } else { + echo WT_I18N::translate('unknown'); + } + } else { + if (!$GM_DISP_SHORT_PLACE) { + echo addslashes($place2['place'].$placelevels); + } else { + echo addslashes($place2['place']); + } + } + } + echo "</a>"; + if ($GM_DISP_COUNT) { + if ($lastlevel) { + print_how_many_people($level, $parent); + } else { + $parent[$level]=$place2['place']; + print_how_many_people($level+1, $parent); + } + } + $temp=addslashes($place2['place']); + $temp=str_replace(array('‎', '‏'), array(WT_UTF8_LRM, WT_UTF8_RLM), $temp); + if (!$GOOGLEMAP_COORD) { + echo "<br /><br /></div>\", icon_type, \"", $temp, "\");\n"; + } else { + echo "<br /><br />", $place2['lati'], ", ", $place2['long'], "</div>\", icon_type, \"", $temp, "\");\n"; + } + } +} + +function map_scripts($numfound, $level, $parent, $linklevels, $placelevels, $place_names) { + global $GOOGLEMAP_MAP_TYPE, $GM_MAX_NOF_LEVELS, $GOOGLEMAP_PH_WHEEL, $GOOGLEMAP_PH_CONTROLS, $GOOGLEMAP_PH_MARKER; + + echo '<link type="text/css" href ="', WT_MODULES_DIR, 'googlemap/css/googlemap_style.css" rel="stylesheet" />'; + ?> + <script type="text/javascript"> + // <![CDATA[ + + var infowindow = new google.maps.InfoWindow( { + // size: new google.maps.Size(150,50), + // maxWidth: 600 + }); + + var map_center = new google.maps.LatLng(0,0); + var map = ""; + var bounds = new google.maps.LatLngBounds (); + var markers = []; + var gmarkers = []; + var i = 0; + + // Create the map and mapOptions + var mapOptions = { + zoom: 8, + center: map_center, + mapTypeId: google.maps.MapTypeId.TERRAIN, // ROADMAP, SATELLITE, HYBRID, TERRAIN + mapTypeControlOptions: { + style: google.maps.MapTypeControlStyle.DROPDOWN_MENU // DEFAULT, DROPDOWN_MENU, HORIZONTAL_BAR + }, + navigationControl: true, + navigationControlOptions: { + position: google.maps.ControlPosition.TOP_RIGHT, // BOTTOM, BOTTOM_LEFT, LEFT, TOP, etc + style: google.maps.NavigationControlStyle.SMALL // ANDROID, DEFAULT, SMALL, ZOOM_PAN + }, + streetViewControl: false, // Show Pegman or not + scrollwheel: false + }; + map = new google.maps.Map(document.getElementById("place_map"), mapOptions); + + // Close any infowindow when map is clicked + google.maps.event.addListener(map, 'click', function() { + infowindow.close(); + }); + + // Creates a marker whose info window displays the given name + function createMarker(point, html, icon, name) { + // Choose icon and shadow ============ + <?php + echo "if (icon.image && ($level==0 || $level==1 || $level==2)) {"; + echo 'var iconImage = new google.maps.MarkerImage(icon.image,'; + echo 'new google.maps.Size(25, 15),'; + echo 'new google.maps.Point(0,0),'; + echo 'new google.maps.Point(1, 45));'; + echo 'var iconShadow = new google.maps.MarkerImage("', WT_MODULES_DIR, 'googlemap/images/flag_shadow.png",'; + echo 'new google.maps.Size(35, 45),'; + echo 'new google.maps.Point(0,0),'; + echo 'new google.maps.Point(1, 45));'; + // *** Clickable area of icon - To be refined later *** =================================== + // echo 'var iconShape = {'; + // echo 'coord: [9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0],'; + // echo 'type: "poly"'; + // echo '};'; + echo " } else { "; + echo 'var iconImage = new google.maps.MarkerImage("http://maps.google.com/mapfiles/marker.png",'; + echo 'new google.maps.Size(20, 34),'; + echo 'new google.maps.Point(0,0),'; + echo 'new google.maps.Point(9, 34));'; + echo 'var iconShadow = new google.maps.MarkerImage("http://www.google.com/mapfiles/shadow50.png",'; + echo 'new google.maps.Size(37, 34),'; + echo 'new google.maps.Point(0,0),'; + echo 'new google.maps.Point(9, 34));'; + // *** Clickable area of icon - To be refined later *** =================================== + // echo 'var iconShape = {'; + // echo 'coord: [9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0],'; + // echo 'type: "poly"'; + // echo '};'; + echo "}"; + ?> + var posn = new google.maps.LatLng(0,0); + var marker = new google.maps.Marker({ + position: point, + icon: iconImage, + shadow: iconShadow, + map: map, + title: name, + }); + // Show this markers name in the info window when it is clicked + google.maps.event.addListener(marker, 'click', function() { + infowindow.close(); + infowindow.setContent(html); + infowindow.open(map, marker); + }); + // === Store the tab, category and event info as marker properties === + marker.mypoint = point; + marker.mytitle = name; + marker.myposn = posn; + gmarkers.push(marker); + bounds.extend(marker.position); + map.fitBounds(bounds); + return marker; + } + + <?php + if (check_exist_table()) { + $levelm = set_levelm($level, $parent); + if (isset($levelo[0])) $levelo[0]=0; + $numls = count($parent)-1; + $levelo=check_were_am_i($numls, $levelm); + if ($numfound<2 && ($level==1 || !(isset($levelo[($level-1)])))) { + echo "map.maxZoom=6;"; + // echo "zoomlevel = map.getBoundsZoomLevel(bounds);\n"; + // echo " map.setCenter(new google.maps.LatLng(0, 0), zoomlevel+5);\n"; + } else if ($numfound<2 && !isset($levelo[($level-2)])) { + // echo "zoomlevel = map.getBoundsZoomLevel(bounds);\n"; + // echo " map.setCenter(new google.maps.LatLng(0, 0), zoomlevel+6);\n"; + } else if ($level==2) { + echo "map.maxZoom=10;"; + // echo "zoomlevel = map.getBoundsZoomLevel(bounds);\n"; + // echo " map.setCenter(new google.maps.LatLng(0, 0), zoomlevel+8);\n"; + } else if ($numfound<2 && $level>1) { + // echo "zoomlevel = map.getBoundsZoomLevel(bounds);\n"; + // echo " map.setCenter(new google.maps.LatLng(0, 0), zoomlevel+18);\n"; + } + //create markers + if ($numfound==0 && $level>0) { + if (isset($levelo[($level-1)])) { // ** BH not sure yet what this if statement is for ... TODO ** + // show the current place on the map + + $place = WT_DB::prepare("SELECT pl_id as place_id, pl_place as place, pl_lati as lati, pl_long as `long`, pl_zoom as zoom, pl_icon as icon FROM ##placelocation WHERE pl_id=?") + ->execute(array($levelm)) + ->fetch(PDO::FETCH_ASSOC); + + if ($place) { + // re-calculate the hierarchy information required to display the current place + $thisloc = $parent; + $xx = array_pop($thisloc); + $thislevel = $level-1 ; + $thislinklevels = substr($linklevels,0,strrpos($linklevels,'&')); + if (strpos($placelevels,',',1)) { + $thisplacelevels = substr($placelevels,strpos($placelevels,',',1)); + } else { + // this is the top level, remove everything + $thisplacelevels = ''; + } + + print_gm_markers($place, $thislevel, $thisloc, $place['place_id'], $thislinklevels, $thisplacelevels); + } + } + } + + // display any sub-places + $placeidlist=array(); + foreach ($place_names as $placename) { + $thisloc = $parent; + $thisloc[] = $placename; + $this_levelm = set_levelm($level+1, $thisloc); + if ($this_levelm) $placeidlist[] = $this_levelm; + } + + if ($placeidlist) { + // flip the array (thus removing duplicates) + $placeidlist=array_flip($placeidlist); + // remove entry for parent location + unset($placeidlist[$levelm]); + } + if ($placeidlist) { + // the keys are all we care about (this reverses the earlier array_flip, and ensures there are no "holes" in the array) + $placeidlist=array_keys($placeidlist); + // note: this implode/array_fill code generates one '?' for each entry in the $placeidlist array + $placelist = + WT_DB::prepare('SELECT pl_id as place_id, pl_place as place, pl_lati as lati, pl_long as `long`, pl_zoom as zoom, pl_icon as icon FROM `##placelocation` WHERE pl_id IN ('.implode(',', array_fill(0, count($placeidlist), '?')).')') + ->execute($placeidlist) + ->fetchAll(PDO::FETCH_ASSOC); + + foreach ($placelist as $place) { + print_gm_markers($place, $level, $parent, $place['place_id'], $linklevels, $placelevels); + } + } + } else { + // The following is called when no coordinates exist for a place location at all + echo "var icon_type = new google.maps.MarkerImage();\n"; + echo 'icon_type.image = "', WT_MODULES_DIR, 'googlemap/images/marker_yellow.png";'; + echo "var point = new google.maps.LatLng(0, 0);\n"; + echo "var marker = createMarker(point, \"<div class='iwstyle' style='width: 250px;'>"; + echo "<br />", WT_I18N::translate('This place has no coordinates'); + if (WT_USER_IS_ADMIN) + echo "<br /><a href='module.php?mod=googlemap&mod_action=admin_places&parent=0&display=inactive'>", WT_I18N::translate('Edit geographic location'), "</a>"; + echo "<br /></div>\", icon_type, \"", WT_I18N::translate('Edit geographic location'), "\");\n"; + } + + //end markers + ?> + + //]]> + </script> + <?php +} +?> diff --git a/modules_v2/googlemap/places_edit.php b/modules_v2/googlemap/places_edit.php new file mode 100644 index 0000000000..5f3b2f4607 --- /dev/null +++ b/modules_v2/googlemap/places_edit.php @@ -0,0 +1,371 @@ +<?php +/** + * Interface to edit place locations + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Edit + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require WT_ROOT.WT_MODULES_DIR.'googlemap/defaultconfig.php'; +require WT_ROOT.'includes/functions/functions_edit.php'; + +$action=safe_REQUEST($_REQUEST, 'action'); +if (isset($_REQUEST['placeid'])) $placeid = $_REQUEST['placeid']; +if (isset($_REQUEST['place_name'])) $place_name = $_REQUEST['place_name']; + +print_simple_header(WT_I18N::translate('Edit geographic place locations')); + +if (!WT_USER_IS_ADMIN) { + echo "<table class=\"facts_table\">\n"; + echo "<tr><td colspan=\"2\" class=\"facts_value\">", WT_I18N::translate('Page only for Administrators'); + echo "</td></tr></table>\n"; + echo "<br /><br /><br />\n"; + print_simple_footer(); + exit; +} +echo '<link type="text/css" href="', WT_MODULES_DIR, 'googlemap/css/googlemap_style.css" rel="stylesheet" />'; +?> +<script type="text/javascript"> +<!-- +function edit_close(newurl) { + if (newurl) window.opener.location=newurl; + else if (window.opener.showchanges) window.opener.showchanges(); + window.close(); +} +function showchanges() { + updateMap(); +} +//--> +</script> +<?php + +// Take a place id and find its place in the hierarchy +// Input: place ID +// Output: ordered array of id=>name values, starting with the Top Level +// e.g. array(0=>"Top Level", 16=>"England", 19=>"London", 217=>"Westminster"); +// NB This function exists in both places.php and places_edit.php +function place_id_to_hierarchy($id) { + $statement= + WT_DB::prepare("SELECT pl_parent_id, pl_place FROM `##placelocation` WHERE pl_id=?"); + $arr=array(); + while ($id!=0) { + $row=$statement->execute(array($id))->fetchOneRow(); + $arr=array($id=>$row->pl_place)+$arr; + $id=$row->pl_parent_id; + } + return $arr; +} + +// NB This function exists in both admin_places.php and places_edit.php +function getHighestIndex() { + return (int)WT_DB::prepare("SELECT MAX(pl_id) FROM `##placelocation`")->fetchOne(); +} + +$where_am_i=place_id_to_hierarchy($placeid); +$level=count($where_am_i); +$link = 'module.php?mod=googlemap&mod_action=admin_places&parent='.$placeid; + +if ($action=='addrecord' && WT_USER_IS_ADMIN) { + $statement= + WT_DB::prepare("INSERT INTO `##placelocation` (pl_id, pl_parent_id, pl_level, pl_place, pl_long, pl_lati, pl_zoom, pl_icon) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); + + if (($_POST['LONG_CONTROL'] == '') || ($_POST['NEW_PLACE_LONG'] == '') || ($_POST['NEW_PLACE_LATI'] == '')) { + $statement->execute(array(getHighestIndex()+1, $placeid, $level, stripLRMRLM($_POST['NEW_PLACE_NAME']), null, null, $_POST['NEW_ZOOM_FACTOR'], $_POST['icon'])); + } else { + $statement->execute(array(getHighestIndex()+1, $placeid, $level, stripLRMRLM($_POST['NEW_PLACE_NAME']), $_POST['LONG_CONTROL'][3].$_POST['NEW_PLACE_LONG'], $_POST['LATI_CONTROL'][3].$_POST['NEW_PLACE_LATI'], $_POST['NEW_ZOOM_FACTOR'], $_POST['icon'])); + } + + // autoclose window when update successful unless debug on + if (!WT_DEBUG) { + echo "\n<script type=\"text/javascript\">\n<!--\nedit_close('');\n//-->\n</script>"; + } + echo "<div class=\"center\"><a href=\"javascript:;\" onclick=\"edit_close('');return false;\">", WT_I18N::translate('Close Window'), "</a></div><br />\n"; + print_simple_footer(); + exit; +} + +if ($action=='updaterecord' && WT_USER_IS_ADMIN) { + $statement= + WT_DB::prepare("UPDATE `##placelocation` SET pl_place=?, pl_lati=?, pl_long=?, pl_zoom=?, pl_icon=? WHERE pl_id=?"); + + if (($_POST['LONG_CONTROL'] == '') || ($_POST['NEW_PLACE_LONG'] == '') || ($_POST['NEW_PLACE_LATI'] == '')) { + $statement->execute(array(stripLRMRLM($_POST['NEW_PLACE_NAME']), null, null, $_POST['NEW_ZOOM_FACTOR'], $_POST['icon'], $placeid)); + } else { + $statement->execute(array(stripLRMRLM($_POST['NEW_PLACE_NAME']), $_POST['LATI_CONTROL'][3].$_POST['NEW_PLACE_LATI'], $_POST['LONG_CONTROL'][3].$_POST['NEW_PLACE_LONG'], $_POST['NEW_ZOOM_FACTOR'], $_POST['icon'], $placeid)); + } + + // autoclose window when update successful unless debug on + if (!WT_DEBUG) { + echo "\n<script type=\"text/javascript\">\n<!--\nedit_close('');\n//-->\n</script>"; + } + echo "<div class=\"center\"><a href=\"javascript:;\" onclick=\"edit_close('');return false;\">", WT_I18N::translate('Close Window'), "</a></div><br />\n"; + print_simple_footer(); + exit; +} + +// Update placelocation STREETVIEW fields ---------------------------------------------------------- +if ($action=='update_sv_params' && WT_USER_IS_ADMIN) { + echo "Google Street View parameters updated"; + echo "<br /><br />"; + echo "LATI = ".$_REQUEST['svlati']."<br />"; + echo "LONG = ".$_REQUEST['svlong']."<br />"; + echo "BEAR = ".$_REQUEST['svbear']."<br />"; + echo "ELEV = ".$_REQUEST['svelev']."<br />"; + echo "ZOOM = ".$_REQUEST['svzoom']."<br />"; + echo "<br /><br />"; + $statement= + WT_DB::prepare("UPDATE ##placelocation SET sv_lati=?, sv_long=?, sv_bearing=?, sv_elevation=?, sv_zoom=? WHERE pl_id=?"); + $statement->execute(array(stripLRMRLM($_REQUEST['svlati']), $_REQUEST['svlong'], $_REQUEST['svbear'], $_REQUEST['svelev'], $_REQUEST['svzoom'], $placeid)); + if (!WT_DEBUG) { + echo "\n<script type=\"text/javascript\">\n<!--\nedit_close();\n//-->\n</script>"; + } + echo "<div class=\"center\"><a href=\"javascript:;\" onclick=\"edit_close();return false;\">", WT_I18N::translate('Close Window'), "</a></div><br />\n"; + print_simple_footer(); + exit; +} + +if ($action=="update") { + // --- find the place in the file + $row= + WT_DB::prepare("SELECT pl_place, pl_lati, pl_long, pl_icon, pl_parent_id, pl_level, pl_zoom FROM `##placelocation` WHERE pl_id=?") + ->execute(array($placeid)) + ->fetchOneRow(); + $place_name = $row->pl_place; + $place_icon = $row->pl_icon; + $selected_country = explode("/", $place_icon); + if (isset($selected_country[1]) && $selected_country[1]!="flags") + $selected_country = $selected_country[1]; + else + $selected_country = "Countries"; + $parent_id = $row->pl_parent_id; + $level = $row->pl_level; + $zoomfactor = $row->pl_zoom; + $parent_lati = "0.0"; + $parent_long = "0.0"; + if ($row->pl_lati!==null && $row->pl_long!==null) { + $place_lati = (float)(str_replace(array('N', 'S', ','), array('', '-', '.') , $row->pl_lati)); + $place_long = (float)(str_replace(array('E', 'W', ','), array('', '-', '.') , $row->pl_long)); + $show_marker = true; + } else { + $place_lati = null; + $place_long = null; + $zoomfactor = 1; + $show_marker = false; + } + + do { + $row= + WT_DB::prepare("SELECT pl_lati, pl_long, pl_parent_id, pl_zoom FROM `##placelocation` WHERE pl_id=?") + ->execute(array($parent_id)) + ->fetchOneRow(); + if (!$row) { + break; + } + if ($row->pl_lati!==null && $row->pl_long!==null) { + $parent_lati = (float)(str_replace(array('N', 'S', ','), array('', '-', '.') , $row->pl_lati)); + $parent_long = (float)(str_replace(array('E', 'W', ','), array('', '-', '.') , $row->pl_long)); + if ($zoomfactor == 1) { + $zoomfactor = $row->pl_zoom; + } + } + $parent_id = $row->pl_parent_id; + } + while ($row->pl_parent_id!=0 && $row->pl_lati===null && $row->pl_long===null); + + $success = false; + + echo "<b>", str_replace("Unknown", WT_I18N::translate('unknown'), PrintReady(implode(', ', array_reverse($where_am_i, true)))), "</b><br />\n"; +} + +if ($action=="add") { + // --- find the parent place in the file + if ($placeid != 0) { + if (!isset($place_name)) $place_name = ""; + $place_lati = null; + $place_long = null; + $zoomfactor = 1; + $parent_lati = "0.0"; + $parent_long = "0.0"; + $place_icon = ""; + $parent_id=$placeid; + do { + $row= + WT_DB::prepare("SELECT pl_lati, pl_long, pl_parent_id, pl_zoom, pl_level FROM `##placelocation` WHERE pl_id=?") + ->execute(array($parent_id)) + ->fetchOneRow(); + if ($row->pl_lati!==null && $row->pl_long!==null) { + $parent_lati=str_replace(array('N', 'S', ','), array('', '-', '.') , $row->pl_lati); + $parent_long=str_replace(array('E', 'W', ','), array('', '-', '.') , $row->pl_long); + $zoomfactor=$row->pl_zoom+2; + if ($zoomfactor>$GOOGLEMAP_MAX_ZOOM) { + $zoomfactor=$GOOGLEMAP_MAX_ZOOM; + } + $level=$row->pl_level+1; + } + $parent_id = $row->pl_parent_id; + } while ($row->pl_parent_id!=0 && $row->pl_lati===null && $row->pl_long===null); + } + else { + if (!isset($place_name)) $place_name = ""; + $place_lati = null; + $place_long = null; + $parent_lati = "0.0"; + $parent_long = "0.0"; + $place_icon = ""; + $parent_id = 0; + $level = 0; + $zoomfactor = $GOOGLEMAP_MIN_ZOOM; + } + $selected_country = "Countries"; + $show_marker = false; + $success = false; + + if (!isset($place_name) || $place_name=="") echo "<b>", WT_I18N::translate('unknown'); + else echo "<b>", $place_name; + if (count($where_am_i)>0) + echo ", ", str_replace("Unknown", WT_I18N::translate('unknown'), PrintReady(implode(', ', array_reverse($where_am_i, true)))), "</b><br />\n"; + echo "</b><br />"; +} + +echo '<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>'; +include_once 'wt_v3_places_edit.js.php'; +$api="v3"; + +?> + +<form method="post" id="editplaces" name="editplaces" action="module.php?mod=googlemap&mod_action=places_edit"> + <input type="hidden" name="action" value="<?php echo $action; ?>record" /> + <input type="hidden" name="placeid" value="<?php echo $placeid; ?>" /> + <input type="hidden" name="level" value="<?php echo $level; ?>" /> + <input type="hidden" name="icon" value="<?php echo $place_icon; ?>" /> + <input type="hidden" name="parent_id" value="<?php echo $parent_id; ?>" /> + <input type="hidden" name="place_long" value="<?php echo $place_long; ?>" /> + <input type="hidden" name="place_lati" value="<?php echo $place_lati; ?>" /> + <input type="hidden" name="parent_long" value="<?php echo $parent_long; ?>" /> + <input type="hidden" name="parent_lati" value="<?php echo $parent_lati; ?>" /> + <input name="save1" type="submit" value="<?php echo WT_I18N::translate('Save'); ?>" /><br /> + + <table class="facts_table"> + <tr> + <td class="optionbox" colspan="2"> + <center><div id="map_pane" style="width: 100%; height: 300px"></div></center> + </td> + </tr> + <tr> + <td class="descriptionbox"><?php echo translate_fact('PLAC'), help_link('PLE_PLACES','googlemap'); ?></td> + <td class="optionbox"><input type="text" id="new_pl_name" name="NEW_PLACE_NAME" value="<?php echo htmlspecialchars($place_name); ?>" size="25" class="address_input" /> + <div id="INDI_PLAC_pop" style="display: inline;"> + <?php print_specialchar_link("NEW_PLACE_NAME", false); ?></div> + <label for="new_pl_name"><a href="javascript:;" onclick="showLocation_level(document.getElementById('new_pl_name').value); return false"> <?php echo WT_I18N::translate('Search on this level'); ?></a></label> | + <label for="new_pl_name"><a href="javascript:;" onclick="showLocation_all(document.getElementById('new_pl_name').value); return false"> <?php echo WT_I18N::translate('Search all'); ?></a></label> + </td> + </tr> + <tr> + <td class="descriptionbox"><?php echo WT_I18N::translate('Precision'), help_link('PLE_PRECISION','googlemap'); ?></td> + <?php + $exp = explode(".", $place_lati); + if (isset($exp[1])) { + $precision1 = strlen($exp[1]); + } else { + $precision1 = -1; + } + $exp = explode(".", $place_long); + if (isset($exp[1])) { + $precision2 = strlen($exp[1]); + } else { + $precision2 = -1; + } + ($precision1 > $precision2) ? ($precision = $precision1) : ($precision = $precision2); + if ($precision == -1 ) ($level > 3) ? ($precision = 3) : ($precision = $level); + elseif ($precision > 5) { + $precision = 5; + } + ?> + <td class="optionbox"> + <input type="radio" id="new_prec_0" name="NEW_PRECISION" onchange="updateMap();" <?php if ($precision==$GOOGLEMAP_PRECISION_0) echo "checked=\"checked\""; ?> value="<?php echo $GOOGLEMAP_PRECISION_0; ?>" /> + <label for="new_prec_0"><?php echo WT_I18N::translate('Country'); ?></label> + <input type="radio" id="new_prec_1" name="NEW_PRECISION" onchange="updateMap();" <?php if ($precision==$GOOGLEMAP_PRECISION_1) echo "checked=\"checked\""; ?> value="<?php echo $GOOGLEMAP_PRECISION_1; ?>" /> + <label for="new_prec_1"><?php echo WT_I18N::translate('State'); ?></label> + <input type="radio" id="new_prec_2" name="NEW_PRECISION" onchange="updateMap();" <?php if ($precision==$GOOGLEMAP_PRECISION_2) echo "checked=\"checked\""; ?> value="<?php echo $GOOGLEMAP_PRECISION_2; ?>" /> + <label for="new_prec_2"><?php echo WT_I18N::translate('City'); ?></label> + <input type="radio" id="new_prec_3" name="NEW_PRECISION" onchange="updateMap();" <?php if ($precision==$GOOGLEMAP_PRECISION_3) echo "checked=\"checked\""; ?> value="<?php echo $GOOGLEMAP_PRECISION_3; ?>" /> + <label for="new_prec_3"><?php echo WT_I18N::translate('Neighborhood'); ?></label> + <input type="radio" id="new_prec_4" name="NEW_PRECISION" onchange="updateMap();"<?php if ($precision==$GOOGLEMAP_PRECISION_4) echo "checked=\"checked\""; ?> value="<?php echo $GOOGLEMAP_PRECISION_4; ?>" /> + <label for="new_prec_4"><?php echo WT_I18N::translate('House'); ?></label> + <input type="radio" id="new_prec_5" name="NEW_PRECISION" onchange="updateMap();"<?php if ($precision>$GOOGLEMAP_PRECISION_4) echo "checked=\"checked\""; ?> value="<?php echo $GOOGLEMAP_PRECISION_5; ?>" /> + <label for="new_prec_5"><?php echo WT_I18N::translate('Max'); ?></label> + </td> + </tr> + <tr> + <td class="descriptionbox"><?php echo translate_fact('LATI'), help_link('PLE_LATLON_CTRL','googlemap'); ?></td> + <td class="optionbox"> + <select name="LATI_CONTROL" onchange="updateMap();"> + <option value="" <?php if ($place_lati == null) echo " selected=\"selected\""; ?>></option> + <option value="PL_N" <?php if ($place_lati > 0) echo " selected=\"selected\""; echo ">", WT_I18N::translate_c('North', 'N'); ?></option> + <option value="PL_S" <?php if ($place_lati < 0) echo " selected=\"selected\""; echo ">", WT_I18N::translate_c('South', 'S'); ?></option> + </select> + <input type="text" id="NEW_PLACE_LATI" name="NEW_PLACE_LATI" value="<?php if ($place_lati != null) echo abs($place_lati); ?>" size="20" onchange="updateMap();" /></td> + </tr> + <tr> + <td class="descriptionbox"><?php echo translate_fact('LONG'), help_link('PLE_LATLON_CTRL','googlemap'); ?></td> + <td class="optionbox"> + <select name="LONG_CONTROL" onchange="updateMap();"> + <option value="" <?php if ($place_long == null) echo " selected=\"selected\""; ?>></option> + <option value="PL_E" <?php if ($place_long > 0) echo " selected=\"selected\""; echo ">", WT_I18N::translate_c('East', 'E'); ?></option> + <option value="PL_W" <?php if ($place_long < 0) echo " selected=\"selected\""; echo ">", WT_I18N::translate_c('West', 'W'); ?></option> + </select> + <input type="text" id="NEW_PLACE_LONG" name="NEW_PLACE_LONG" value="<?php if ($place_long != null) echo abs($place_long); ?>" size="20" onchange="updateMap();" /></td> + </tr> + <tr> + <td class="descriptionbox"><?php echo WT_I18N::translate('Zoom factor'), help_link('PLE_ZOOM','googlemap'); ?></td> + <td class="optionbox"> + <input type="text" name="NEW_ZOOM_FACTOR" value="<?php echo $zoomfactor; ?>" size="20" onchange="updateMap();" /></td> + </tr> + <tr> + <td class="descriptionbox"><?php echo WT_I18N::translate('Flag'), help_link('PLE_ICON','googlemap'); ?></td> + <td class="optionbox"> + <div id="flagsDiv"> +<?php + if (($place_icon == NULL) || ($place_icon == "")) { ?> + <a href="javascript:;" onclick="change_icon();return false;"><?php echo WT_I18N::translate('Change flag'); ?></a> +<?php } + else { ?> + <img alt="<?php echo /* I18N: The emblem of a country or region */ WT_I18N::translate('Flag'); ?>" src="<?php echo WT_MODULES_DIR, 'googlemap/', $place_icon; ?>"/> + <a href="javascript:;" onclick="change_icon();return false;"><?php echo WT_I18N::translate('Change flag'); ?></a> + <a href="javascript:;" onclick="remove_icon();return false;"><?php echo WT_I18N::translate('Remove flag'); ?></a> +<?php } ?> + </div></td> + </tr> + </table> + <input name="save2" type="submit" value="<?php echo WT_I18N::translate('Save'); ?>" /><br /> +</form> +<?php +echo "<center><a href=\"javascript:;\" onclick=\"edit_close('')\">", WT_I18N::translate('Close Window'), "</a><br /></center>\n"; + +print_simple_footer(); diff --git a/modules_v2/googlemap/util.js b/modules_v2/googlemap/util.js new file mode 100644 index 0000000000..0e642fd6c0 --- /dev/null +++ b/modules_v2/googlemap/util.js @@ -0,0 +1,84 @@ +/** +* Returns an XMLHttp instance to use for asynchronous +* downloading. This method will never throw an exception, but will +* return NULL if the browser does not support XmlHttp for any reason. +* @return {XMLHttpRequest|Null} +*/ +function createXmlHttpRequest() { + try { + if (typeof ActiveXObject != 'undefined') { + return new ActiveXObject('Microsoft.XMLHTTP'); + } else if (window["XMLHttpRequest"]) { + return new XMLHttpRequest(); + } + } catch (e) { + changeStatus(e); + } + return null; +}; + +/** +* This functions wraps XMLHttpRequest open/send function. +* It lets you specify a URL and will call the callback if +* it gets a status code of 200. +* @param {String} url The URL to retrieve +* @param {Function} callback The function to call once retrieved. +*/ +function downloadUrl(url, callback) { + var status = -1; + var request = createXmlHttpRequest(); + if (!request) { + return false; + } + + request.onreadystatechange = function() { + if (request.readyState == 4) { + try { + status = request.status; + } catch (e) { + // Usually indicates request timed out in FF. + } + if (status == 200) { + callback(request.responseXML, request.status); + request.onreadystatechange = function() {}; + } + } + } + request.open('GET', url, true); + try { + request.send(null); + } catch (e) { + changeStatus(e); + } +}; + +/** + * Parses the given XML string and returns the parsed document in a + * DOM data structure. This function will return an empty DOM node if + * XML parsing is not supported in this browser. + * @param {string} str XML string. + * @return {Element|Document} DOM. + */ +function xmlParse(str) { + if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') { + var doc = new ActiveXObject('Microsoft.XMLDOM'); + doc.loadXML(str); + return doc; + } + + if (typeof DOMParser != 'undefined') { + return (new DOMParser()).parseFromString(str, 'text/xml'); + } + + return createElement('div', null); +} + +/** + * Appends a JavaScript file to the page. + * @param {string} url + */ +function downloadScript(url) { + var script = document.createElement('script'); + script.src = url; + document.body.appendChild(script); +} diff --git a/modules_v2/googlemap/wt_v3_googlemap.js.php b/modules_v2/googlemap/wt_v3_googlemap.js.php new file mode 100644 index 0000000000..783acc408c --- /dev/null +++ b/modules_v2/googlemap/wt_v3_googlemap.js.php @@ -0,0 +1,693 @@ +<?php +/** + * Google map module for phpGedView + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Modifications Copyright (c) 2010 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Googlemaps v3 + * $Id$ + * + * @author Brian Holland + */ + +// *** ENABLE STREETVIEW *** +$STREETVIEW=get_module_setting('googlemap', 'GM_USE_STREETVIEW'); + +?> + +<script type="text/javascript">var ie = 0;</script> +<!--[if IE]> +<script type="text/javascript">ie = 1;</script> +<![endif]--> +<script type="text/javascript"> + +//<![CDATA[ + + // this variable will collect the html which will eventually be placed in the side_bar + var side_bar_html = ''; + var map_center = new google.maps.LatLng(53.8403,-2.0377); + var gmarkers = []; + var gicons = []; + var map = null; + var head = ''; + var dir = ''; + var svzoom = ''; + + var infowindow = new google.maps.InfoWindow( { + // size: new google.maps.Size(150,50), + // maxWidth: 600 + }); + + <?php + echo 'gicons["red"] = new google.maps.MarkerImage("http://maps.google.com/mapfiles/marker.png",'; + echo 'new google.maps.Size(20, 34),'; + echo 'new google.maps.Point(0,0),'; + echo 'new google.maps.Point(9, 34));'; + + echo 'var iconImage = new google.maps.MarkerImage("http://maps.google.com/mapfiles/marker.png",'; + echo 'new google.maps.Size(20, 34),'; + echo 'new google.maps.Point(0,0),'; + echo 'new google.maps.Point(9, 34));'; + + echo 'var iconShadow = new google.maps.MarkerImage("http://www.google.com/mapfiles/shadow50.png",'; + echo 'new google.maps.Size(37, 34),'; + echo 'new google.maps.Point(0,0),'; + echo 'new google.maps.Point(9, 34));'; + + echo 'var iconShape = {'; + echo 'coord: [9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0],'; + echo 'type: "poly"'; + echo '};'; + ?> + + function getMarkerImage(iconColor) { + if ((typeof(iconColor)=="undefined") || (iconColor==null)) { + iconColor = "red"; + } + if (!gicons[iconColor]) { + gicons[iconColor] = new google.maps.MarkerImage("http://maps.google.com/mapfiles/marker"+ iconColor +".png", + new google.maps.Size(20, 34), + new google.maps.Point(0,0), + new google.maps.Point(9, 34)); + } + return gicons[iconColor]; + } + + function category2color(category) { + var color = "red"; + switch(category) { + case "theatre": color = ""; + break; + case "golf": color = "_green"; + break; + case "info": color = "_yellow"; + break; + default: color = ""; + break; + } + return color; + } + + gicons["theatre"] = getMarkerImage(category2color("theatre")); + gicons["golf"] = getMarkerImage(category2color("golf")); + gicons["info"] = getMarkerImage(category2color("info")); + + var sv2_bear = null; + var sv2_elev = null; + var sv2_zoom = null; + var placer = null; + + // A function to create the marker and set up the event window + function createMarker(i, latlng, event, html, category, placed, index, tab, address, media, sv_lati, sv_long, sv_bearing, sv_elevation, sv_zoom, sv_point) { + var contentString = '<div id="iwcontent">'+html+'<\/div>'; + + // === Decide if marker point is Regular (latlng) or StreetView (sv_point) derived === + if (sv_point == "(0, 0)") { + placer = latlng; + } else { + placer = sv_point; + } + + // === Define the marker === + var marker = new google.maps.Marker({ + position: placer, + icon: gicons[category], + shadow: iconShadow, + map: map, + title: address, + zIndex: Math.round(latlng.lat()*-100000)<<5 + }); + + // === Store the tab, category and event info as marker properties === + marker.myindex = index; + marker.mytab = tab; + marker.myplaced = placed; + marker.mycategory = category; + marker.myevent = event; + marker.myaddress = address; + marker.mymedia = media; + marker.sv_lati = sv_lati; + marker.sv_long = sv_long; + marker.sv_point = sv_point; + + if (sv_bearing == '') { + marker.sv_bearing = 0; + } else { + marker.sv_bearing = sv_bearing; + } + if (sv_elevation == '') { + marker.sv_elevation = 5; + } else { + marker.sv_elevation = sv_elevation; + // marker.sv_elevation = 5; + } + if (sv_zoom == '' || sv_zoom == 0 || sv_zoom == 1) { + marker.sv_zoom = 1.2; + } else { + marker.sv_zoom = sv_zoom; + } + + marker.sv_latlng = new google.maps.LatLng(sv_lati, sv_long); + gmarkers.push(marker); + + var sv_dir = []; + sv_dir[i] = parseFloat(gmarkers[i].sv_bearing); + var sv_elev = []; + sv_elev[i] = parseFloat(gmarkers[i].sv_elevation); + var sv_zoom = []; + sv_zoom[i] = parseFloat(gmarkers[i].sv_zoom); + + // == Open infowindow when marker is clicked == + google.maps.event.addListener(marker, 'click', function() { + infowindow.close(); + infowindow.setContent(contentString); + infowindow.open(map, marker); + var panoramaOptions = { + position: marker.position, + mode: 'html5', + // mode: 'webgl', + navigationControl: false, + linksControl: false, + addressControl: false, + pov: { + heading: sv_dir[i], + pitch: sv_elev[i], + // pitch: 5, + zoom: sv_zoom[i] + } + }; + + // === Use jquery for tabs === + // var $fred = jQuery("#gmtabs").tabs("div.panes > div"); + // jQuery("#gmtabs").tabs('select', '#SV'); + + jQuery('#EV').click(function() { + document.tabLayerEV = eval('document.getElementById("EV")'); + document.tabLayerEV.style.background = "#ffffff"; + document.tabLayerEV.style.paddingBottom = "1px"; + <?php if ($STREETVIEW) { ?> + document.tabLayerSV = eval('document.getElementById("SV")'); + document.tabLayerSV.style.background = "#cccccc"; + document.tabLayerSV.style.paddingBottom = "0px"; + <?php } ?> + // document.tabLayerPH = eval('document.getElementById("PH")'); + // document.tabLayerPH.style.background = "#cccccc"; + // document.tabLayerPH.style.paddingBottom = "0px"; + document.panelLayer1 = eval('document.getElementById("pane1")'); + document.panelLayer1.style.display = "block"; + <?php if ($STREETVIEW) { ?> + document.panelLayer2 = eval('document.getElementById("pane2")'); + document.panelLayer2.style.display = "none"; + <?php } ?> + // document.panelLayer3 = eval('document.getElementById("pane3")'); + // document.panelLayer3.style.display = "none"; + + }); + + jQuery('#SV').click(function() { + document.tabLayerEV = eval('document.getElementById("EV")'); + document.tabLayerEV.style.background = "#cccccc"; + document.tabLayerEV.style.paddingBottom = "0px"; + <?php if ($STREETVIEW) { ?> + document.tabLayerSV = eval('document.getElementById("SV")'); + document.tabLayerSV.style.background = "#ffffff"; + document.tabLayerSV.style.paddingBottom = "1px"; + <?php } ?> + // document.tabLayerPH = eval('document.getElementById("PH")'); + // document.tabLayerPH.style.background = "#cccccc"; + // document.tabLayerPH.style.paddingBottom = "0px"; + document.panelLayer1 = eval('document.getElementById("pane1")'); + document.panelLayer1.style.display = "none"; + <?php if ($STREETVIEW) { ?> + document.panelLayer2 = eval('document.getElementById("pane2")'); + document.panelLayer2.style.display = "block"; + <?php } ?> + // document.panelLayer3 = eval('document.getElementById("pane3")'); + // document.panelLayer3.style.display = "none"; + var panorama = new google.maps.StreetViewPanorama(document.getElementById("pano"), panoramaOptions); + // map.setStreetView(panorama); // **** If you uncomment this, the pegman will appear **** + }); + + jQuery('#PH').click(function() { + document.tabLayerEV = eval('document.getElementById("EV")'); + document.tabLayerEV.style.background = "#cccccc"; + document.tabLayerEV.style.paddingBottom = "0px"; + <?php if ($STREETVIEW) { ?> + document.tabLayerSV = eval('document.getElementById("SV")'); + document.tabLayerSV.style.background = "#cccccc"; + document.tabLayerSV.style.paddingBottom = "0px"; + <?php } ?> + // document.tabLayerPH = eval('document.getElementById("PH")'); + // document.tabLayerPH.style.background = "#ffffff"; + // document.tabLayerPH.style.paddingBottom = "1px"; + document.panelLayer1 = eval('document.getElementById("pane1")'); + document.panelLayer1.style.display = "none"; + <?php if ($STREETVIEW) { ?> + document.panelLayer2 = eval('document.getElementById("pane2")'); + document.panelLayer2.style.display = "none"; + <?php } ?> + // document.panelLayer3 = eval('document.getElementById("pane3")'); + // document.panelLayer3.style.display = "block"; + }); + }); + } + + // == shows all markers of a particular category, and ensures the checkbox is checked == + function show(category) { + for (var i=0; i<gmarkers.length; i++) { + if (gmarkers[i].mycategory == category) { + gmarkers[i].setVisible(true); + } + } + // == close any info window for clarity + infowindow.close(); + } + + // == hides all markers of a particular category, and ensures the checkbox is cleared == + function hide(category) { + for (var i=0; i<gmarkers.length; i++) { + if (gmarkers[i].mycategory == category) { + gmarkers[i].setVisible(false); + } + } + // == close the info window, in case its open on a marker that we just hid + infowindow.close(); + } + + // == a checkbox has been clicked == + function boxclick(box,category) { + if (box.checked) { + show(category); + } else { + hide(category); + } + // == rebuild the side bar == + makeSidebar(); + loadMap(); + } + + // == Opens Marker infowindow when corresponding Sidebar item is clicked == + function myclick(i, index, tab) { + infowindow.close(); + google.maps.event.trigger(gmarkers[i], "click"); + } + + // == rebuild sidebar (hidden item) when any marker's infowindow is closed == + google.maps.event.addListener(infowindow, 'closeclick', function() { + makeSidebar(); + }); + + // == rebuilds the sidebar (hidden item) to match the markers currently displayed == + function makeSidebar(x) { + var html = ""; + //var tab = gmarkers.mytab; + for (var i=0; i<gmarkers.length; i++) { + if (gmarkers[i].getVisible()) { + // if (x==gmarkers[i].myindex) { + if (x==i ) { + html += '<a style="text-decoration:none; color:black; background:white; " href="javascript:myclick('+i+', '+gmarkers[i].mytab+')">' + gmarkers[i].myevent + '<\/a><br>'; + } else if (gmarkers[i].mycategory=='theatre') { + html += '<a style="text-decoration:none; color:red;" href="javascript:myclick('+i+', '+gmarkers[i].mytab+')">' + gmarkers[i].myevent + '<\/a><br>'; + } else if (gmarkers[i].mycategory=='golf') { + html += '<a style="text-decoration:none; color:green;" href="javascript:myclick('+i+', '+gmarkers[i].mytab+')">' + gmarkers[i].myevent + '<\/a><br>'; + } else if (gmarkers[i].mycategory=='info') { + html += '<a style="text-decoration:none; color:yellow;" href="javascript:myclick('+i+', '+gmarkers[i].mytab+')">' + gmarkers[i].myevent + '<\/a><br>'; + } else { + html += '<a style="text-decoration:none; color:black;" href="javascript:myclick('+i+', '+gmarkers[i].mytab+')">'+ gmarkers[i].myevent + '<\/a><br>'; + } + } + } + document.getElementById("side_bar").innerHTML = html; + x=null; + } + + // Home control ---------------------------------------------------------------- + /* returns the user to the original map position ... loadMap() function + * This constructor takes the control DIV as an argument. + */ + function HomeControl(controlDiv, map) { + // Set CSS styles for the DIV containing the control + // Setting padding to 5 px will offset the control + // from the edge of the map + controlDiv.style.paddingTop = '5px'; + controlDiv.style.paddingRight = '0px'; + + // Set CSS for the control border + var controlUI = document.createElement('DIV'); + controlUI.style.backgroundColor = 'white'; + controlUI.style.borderStyle = 'solid'; + controlUI.style.borderWidth = '2px'; + controlUI.style.cursor = 'pointer'; + controlUI.style.textAlign = 'center'; + controlUI.title = ''; + controlDiv.appendChild(controlUI); + + // Set CSS for the control interior + var controlText = document.createElement('DIV'); + controlText.style.fontFamily = 'Arial,sans-serif'; + controlText.style.fontSize = '12px'; + controlText.style.paddingLeft = '15px'; + controlText.style.paddingRight = '15px'; + controlText.innerHTML = '<b><?php echo WT_I18N::translate('Redraw map')?><\/b>'; + controlUI.appendChild(controlText); + + // Setup the click event listeners: simply set the map to original LatLng + google.maps.event.addDomListener(controlUI, 'click', function() { + loadMap(); + }); + } + + function loadMap() { + <?php + global $PEDIGREE_GENERATIONS, $MAX_PEDIGREE_GENERATIONS, $ENABLE_AUTOCOMPLETE, $MULTI_MEDIA, $SHOW_HIGHLIGHT_IMAGES, $WT_IMAGES, $GEDCOM; + ?> + + // Create the map and mapOptions + var mapOptions = { + zoom: 7, + center: map_center, + mapTypeId: google.maps.MapTypeId.TERRAIN, // ROADMAP, SATELLITE, HYBRID, TERRAIN + mapTypeControlOptions: { + style: google.maps.MapTypeControlStyle.DROPDOWN_MENU // DEFAULT, DROPDOWN_MENU, HORIZONTAL_BAR + }, + navigationControl: true, + navigationControlOptions: { + position: google.maps.ControlPosition.TOP_RIGHT, // BOTTOM, BOTTOM_LEFT, LEFT, TOP, etc + style: google.maps.NavigationControlStyle.SMALL // ANDROID, DEFAULT, SMALL, ZOOM_PAN + }, + streetViewControl: false, // Show Pegman or not + scrollwheel: false + }; + map = new google.maps.Map(document.getElementById("map_pane"), mapOptions); + + // Close any infowindow when map is clicked + google.maps.event.addListener(map, 'click', function() { + infowindow.close(); + // == rebuild sidebar (hidden item) == + makeSidebar(); + }); + + // Create the Home DIV and call the HomeControl() constructor in this DIV. + var homeControlDiv = document.createElement('DIV'); + var homeControl = new HomeControl(homeControlDiv, map); + homeControlDiv.index = 1; + map.controls[google.maps.ControlPosition.TOP_RIGHT].push(homeControlDiv); + + // Add the markers to the map from the $gmarks array + var locations = [ + <?php + foreach($gmarks as $gmark) { + + // create thumbnail images of highlighted images =========================== + if (!empty($pid)) { + $this_person = WT_Person::getInstance($pid); + } + if (!empty($gmark['name'])) { + $person = WT_Person::getInstance($gmark['name']); + } + + // The current indi ----------------------------- + if (!empty($this_person)) { + $class = "pedigree_image_portrait"; + if ($gmark['fact'] == 'Census') { + $image = "<img class='icon_cens' src='././images/pix1.gif' />"; + } else if ($gmark['fact'] == 'Birth') { + $image = "<img class='icon_birt' src='././images/pix1.gif' />"; + } else if ($gmark['fact'] == 'Baptism' || $gmark['fact'] == 'Christening') { + $image = "<img class='icon_bapm' src='././images/pix1.gif' />"; + } else if ($gmark['fact'] == 'Military') { + $image = "<img class='icon_mili' src='././images/pix1.gif' />"; + } else if ($gmark['fact'] == 'Occupation') { + $image = "<img class='icon_occu' src='././images/pix1.gif' />"; + } else if ($gmark['fact'] == 'Residence') { + $image = "<img class='icon_resi' src='././images/pix1.gif' />"; + } else if ($gmark['fact'] == 'Death') { + $image = "<img class='icon_deat' src='././images/pix1.gif' />"; + } else if ($gmark['fact'] == 'Burial' || $gmark['fact'] == 'Cremation') { + $image = "<img class='icon_buri' src='././images/pix1.gif' />"; + } else if ($gmark['fact'] == 'Retirement' ) { + $image = "<img class='icon_reti' src='././images/pix1.gif' />"; + } else { + $indirec = $this_person->getGedcomRecord(); + $image = ""; + if ($MULTI_MEDIA && $SHOW_HIGHLIGHT_IMAGES) { + if (!empty($pid)) { + $object = find_highlighted_object($pid, WT_GED_ID, $indirec); + } else { + $object = ""; + } + if (!empty($object["thumb"])) { + $size = findImageSize($object["thumb"]); + $class = "pedigree_image_portrait"; + if ($size[0]>$size[1]) $class = "pedigree_image_landscape"; + if ($TEXT_DIRECTION=="rtl") $class .= "_rtl"; + $image = "<img src='{$object["thumb"]}' vspace='0' hspace='0' class='{$class}' alt ='' title='' >"; + } else { + $class = "pedigree_image_portrait"; + if ($TEXT_DIRECTION == "rtl") $class .= "_rtl"; + $sex = $this_person->getSex(); + $image = "<img src=\'./"; + if ($sex == 'F') { $image .= $WT_IMAGES["default_image_F"]; } + elseif ($sex == 'M') { $image .= $WT_IMAGES["default_image_M"]; } + else { $image .= $WT_IMAGES["default_image_U"]; } + $image .="\' align=\'left\' class=\'".$class."\' border=\'none\' alt=\'\' />"; + } + } // end of add image + } + } + + // Other people ---------------------------- + if (!empty($person)) { + $indirec2 = $person->getGedcomRecord(); + $image2 = ""; + if ($MULTI_MEDIA && $SHOW_HIGHLIGHT_IMAGES) { + if (!empty($gmark['name'])) { + $object2 = find_highlighted_object($gmark['name'], WT_GED_ID, $indirec2); + } else { + $object2 = ""; + } + + if (!empty($object2["thumb"])) { + $size = findImageSize($object2["thumb"]); + $class = "pedigree_image_portrait"; + if ($size[0]>$size[1]) $class = "pedigree_image_landscape"; + if ($TEXT_DIRECTION=="rtl") $class .= "_rtl"; + $image2 = "<img src='{$object2["thumb"]}' vspace='0' hspace='0' class='{$class}' alt ='' title='' >"; + } else { + $class = "pedigree_image_portrait"; + if ($TEXT_DIRECTION == "rtl") $class .= "_rtl"; + $sex = $person->getSex(); + $image2 = "<img src=\'./"; + if ($sex == 'F') { $image2 .= $WT_IMAGES["default_image_F"]; } + elseif ($sex == 'M') { $image2 .= $WT_IMAGES["default_image_M"]; } + else { $image2 .= $WT_IMAGES["default_image_U"]; } + $image2 .="\' align=\'left\' class=\'".$class."\' border=\'none\' alt=\'\' />"; + } + } // end of add image + } + ?> + [ + // Elements 0-9. Basic parameters + "<?php echo $gmark['fact'].''; ?>", + "<?php echo $gmark['lati']; ?>", + "<?php echo $gmark['lng']; ?>", + "<?php if (!empty($gmark['date'])) { $date=new WT_Date($gmark['date']); echo addslashes($date->Display(true)); } else { echo WT_I18N::translate('Date not known'); } ?>", + "<?php if (!empty($gmark['info'])) { echo $gmark['info']; } else { echo NULL; } ?>", + "<?php if (!empty($gmark['name'])) { $person=WT_Person::getInstance($gmark['name']); if ($person) { echo '<a href=\"', $person->getHtmlUrl(), '\">', $person->canDisplayName() ? PrintReady(addcslashes($person->getFullName(), '"')) : WT_I18N::translate('Private'), '<\/a>'; } } ?>", + "<?php if (preg_match('/2 PLAC (.*)/', $gmark['placerec']) == 0) { print_address_structure_map($gmark['placerec'], 1); } else { echo preg_replace('/\"/', '\\\"', print_fact_place_map($gmark['placerec'])); } ?>", + "<?php echo $gmark['index'].''; ?>", + "<?php echo $gmark['tabindex'].''; ?>", + "<?php echo $gmark['placed'].''; ?>", + + // Element 10. location marker tooltip - extra printable item for marker title. + "<?php echo strip_tags(preg_replace('/\"/', '\\\"', print_fact_place_map($gmark['placerec']))); ?>", + + // Element 11. persons Name + "<?php if (!empty($gmark['name'])) { $person=WT_Person::getInstance($gmark['name']); if ($person) { echo $person->canDisplayName() ? PrintReady(addcslashes($person->getFullName(), '"')) : WT_I18N::translate('Private'); } } ?>", + + // Element 12. Other people's Highlighted image. + "<?php if (!empty($gmark['name'])) { echo $image2; } else { echo ''; } ?>", + + // Element 13. This Individual's Highlighted image. + "<?php if (!empty($pid)) { echo $image; } else { echo ''; } ?>", + + // Elements 14-19 Streetview parameters + "<?php if (!empty($gmark['media'])) { echo $gmark['media']; } ?>", + "<?php if (!empty($gmark['sv_lati'])) { echo $gmark['sv_lati']; } ?>", + "<?php if (!empty($gmark['sv_long'])) { echo $gmark['sv_long']; } ?>", + "<?php if (!empty($gmark['sv_bearing'])) { echo $gmark['sv_bearing']; } ?>", + "<?php if (!empty($gmark['sv_elevation'])) { echo $gmark['sv_elevation']; } ?>", + "<?php if (!empty($gmark['sv_zoom'])) { echo $gmark['sv_zoom']; } ?>" + // "<?php if (!empty($gmark['sv_point'])) { echo $gmark['sv_point']; } ?>" + ], + + <?php } ?> + ]; + // Fix IE bug reporting one too many in locations.length statement ----- + if (ie==1) { + locations.length=locations.length - 1; + } + + // Set the Marker bounds ----------------------------------------------- + var bounds = new google.maps.LatLngBounds (); + + // Calculate tabs to be placed for each marker ------------------------- + var np = new Array(); + var numtabs = new Array(); + var npo = new Array(); + + for (var p = 0; p < locations.length; p++) { + np[p] = ''+p+''; + numtabs[p] = 0; + npo[p] = new Array(); + for (var q = 0; q < locations.length; q++) { + if (jQuery.inArray(np[p], locations[q][7])==0) { + npo[p][numtabs[p]] = q; + numtabs[p]++; + } + } + } + + // Loop through all location markers ----------------------------------- + for (var i = 0; i < locations.length; i++) { + // obtain the attributes of each marker + var event = locations[i][0]; // Event or Fact + var lat = locations[i][1]; // Latitude + var lng = locations[i][2]; // Longitude + var date = locations[i][3]; // Date of event or fact + var info = ''//locations[i][4]; // info on occupation, or + var name = locations[i][5]; // Persons name + var address = locations[i][6]; // Address of event or fact + var index = locations[i][7]; // index + var tab = locations[i][8]; // tab index + var placed = locations[i][9]; // Yes indicates multitab item + var name2 = locations[i][11]; // printable name for marker title + var point = new google.maps.LatLng(lat,lng); // Latitude, Longitude + + var media = locations[i][14]; // media item + var sv_lati = locations[i][15]; // Street View latitude + var sv_long = locations[i][16]; // Street View longitude + var sv_bearing = locations[i][17]; // Street View bearing + var sv_elevation = locations[i][18]; // Street View elevation + var sv_zoom = locations[i][19]; // Street View zoom + + // Employ of image tab function using an information image ----- + if (media == null || media == "") { + media = WT_MODULES_DIR+'googlemap/images/facts/v3_image_info.png'; + } else { + media = media; + } + // ------------------------------------------------------------- + + var sv_point = new google.maps.LatLng(sv_lati,sv_long); // StreetView Latitude and Longitide + if (document.getElementById("golfbox").checked == false) { + var category = "theatre"; // Category for future pedigree map use etc + var addr2 = locations[i][10]; // printable address for marker title + } else { + var category = "golf"; + var addr2 = locations[i][10]; // printable address for marker title + } + + // === Use this variable if a multitab marker === + // If a fact with info or a persons name --- + var event_item =""; + var event_tab =""; + var tabcontid = ""; + var divhead = '<h4 id="iwhead" >'+address+'<\/h4>'; + + for (var n = 0; n < locations.length; n++) { + //if (i==npo[n][i]) { + if (i==npo[n][0] || i==npo[n][1] || i==npo[n][2] || i==npo[n][3] || i==npo[n][4] || i==npo[n][5] || i==npo[n][6] || i==npo[n][7] || i==npo[n][8] || i==npo[n][9] || i==npo[n][10] || i==npo[n][11] || i==npo[n][12] || i==npo[n][13] || i==npo[n][14] || i==npo[n][15] || i==npo[n][16] || i==npo[n][17] || i==npo[n][18] || i==npo[n][19] || i==npo[n][20] || i==npo[n][21] || i==npo[n][22] || i==npo[n][23] || i==npo[n][24] || i==npo[n][25]) { + for (var x=0; x<numtabs[n]; x++) { + tabcontid=npo[n][x]; + // If a fact with a persons name and extra info--- + if (locations[tabcontid][4] && locations[tabcontid][5]) { + event_tab+= [ '<table><tr><td class="highlt_img">'+locations[tabcontid][12]+'<\/td><td><p><span id="sp1">'+locations[tabcontid][0]+'<\/span><br />'+locations[tabcontid][4]+'<br /><b>'+locations[tabcontid][5]+'<\/b><br />'+locations[tabcontid][3]+'<br /><\/p><\/td><\/tr><\/table>' ]; + // or if a fact with a persons name --- + } else if (locations[tabcontid][5]) { + event_tab+= [ '<table><tr><td class="highlt_img">'+locations[tabcontid][12]+'<\/td><td><p><span id="sp1">'+locations[tabcontid][0]+'<\/span><br /><b>'+locations[tabcontid][5]+'<\/b><br />'+locations[tabcontid][3]+'<br /><\/p><\/td><\/tr><\/table>' ]; + // or if a fact with extra info --- + } else if (locations[tabcontid][4]) { + event_tab+= [ '<table><tr><td class="highlt_img">'+locations[tabcontid][13]+'<\/td><td><p><span id="sp1">'+locations[tabcontid][0]+'<\/span><br />'+locations[tabcontid][4]+'<br />'+locations[tabcontid][3]+'<br /><\/p><\/td><\/tr><\/table>' ]; + // or just a simple fact --- + } else { + event_tab+= [ '<table><tr><td class="highlt_img">'+locations[tabcontid][13]+'<\/td><td><p><span id="sp1">'+locations[tabcontid][0]+'<\/span><br />'+locations[tabcontid][3]+'<br /><\/p><\/td><\/tr><\/table>' ]; + } + } + } + } + var multitabs = [ + '<div class="infowindow">', + '<div id = "gmtabs">', + + '<ul class="tabs" >', + '<li><a href="#event" id="EV"><?php echo WT_I18N::translate('Events'); ?><\/a><\/li>', + <?php if ($STREETVIEW) { ?> + '<li><a href="#sview" id="SV"><?php echo WT_I18N::translate('Google Street View'); ?><\/a><\/li>', + <?php } ?> + // '<li><a href="#image" id="PH">Image<\/a><\/li>', + // '<li><a href="#" id="SP">Aerial<\/a><\/li>', + '<\/ul>', + + '<div class="panes">', + '<div id = "pane1">', + divhead, + event_tab, + '<\/div>', + <?php if ($STREETVIEW) { ?> + '<div id = "pane2">', + divhead, + '<div id="pano"><\/div>', + '<\/div>', + <?php } ?> + /* + '<div id = "pane3">', + divhead, + '<div id = "pane3_text">', + '<img style="margin-left: -10px; margin-top: 1px;" src="'+media+'" height= "216px" width= "298px" />', + '<\/div>', + '<\/div>', + */ + /* + '<div id = "pane4">', + divhead, + '<div id = "pane4_text">', + '<br />', + '<br /> Spare Tab Content', + '<br />', + '<\/div>', + '<\/div>', + */ + '<\/div>', + '<\/div>', + '<\/div>' + ].join(''); + + // create the marker ----------------------------------------------- + var html = multitabs; + var marker = createMarker(i, point, event, html, category, placed, index, tab, addr2, media, sv_lati, sv_long, sv_bearing, sv_elevation, sv_zoom, sv_point); + var myLatLng = new google.maps.LatLng(locations[i][1], locations[i][2]); + bounds.extend(myLatLng); + map.fitBounds(bounds); + } // end loop through location markers + } // end loadMap() +//]]> +</script> diff --git a/modules_v2/googlemap/wt_v3_pedigree_map.js.php b/modules_v2/googlemap/wt_v3_pedigree_map.js.php new file mode 100644 index 0000000000..7f3c4fc41b --- /dev/null +++ b/modules_v2/googlemap/wt_v3_pedigree_map.js.php @@ -0,0 +1,706 @@ +<?php +// +// Script file for pedigree_map.php +// +// Print pedigree map using Googlemaps. +// It requires that your place coordinates are stored on the Google Map +// 'place_locations' table. It will NOT find coordinates stored only as tags in +// your GEDCOM file. As in the Google Maps module, it can only display place +// markers where the location exists with identical spelling in both your +// GEDCOM '2 PLAC' tag (within the '1 BIRT' event) and the place_locations table. +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License or, +// at your discretion, 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} +?> + + +<script type="text/javascript"> + +//<![CDATA[ + +// The HomeControl returns the map to the original position and style ============== +function HomeControl(controlDiv, pm_map) { + // Set CSS styles for the DIV containing the control + // Setting padding to 5 px will offset the control from the edge of the map + controlDiv.style.paddingTop = '5px'; + controlDiv.style.paddingRight = '0px'; + + // Set CSS for the control border + var controlUI = document.createElement('DIV'); + controlUI.style.backgroundColor = 'white'; + controlUI.style.color = 'black'; + controlUI.style.borderColor = 'black'; + controlUI.style.borderColor = 'black'; + controlUI.style.borderStyle = 'solid'; + controlUI.style.borderWidth = '2px'; + controlUI.style.cursor = 'pointer'; + controlUI.style.textAlign = 'center'; + controlUI.title = ''; + controlDiv.appendChild(controlUI); + + // Set CSS for the control interior + var controlText = document.createElement('DIV'); + controlText.style.fontFamily = 'Arial,sans-serif'; + controlText.style.fontSize = '12px'; + controlText.style.paddingLeft = '15px'; + controlText.style.paddingRight = '15px'; + controlText.innerHTML = '<b><?php echo WT_I18N::translate('Redraw map')?><\/b>'; + controlUI.appendChild(controlText); + + // Setup the click event listeners: simply set the map to original LatLng + google.maps.event.addDomListener(controlUI, 'click', function() { + pm_map.setMapTypeId(google.maps.MapTypeId.TERRAIN), + pm_map.fitBounds(bounds), + pm_map.setCenter(bounds.getCenter()), + infowindow.close() + if (document.getElementById(lastlinkid) != null) { + document.getElementById(lastlinkid).className = 'person_box:target'; + } + }); +} + +// This function picks up the click and opens the corresponding info window +function myclick(i) { + if (document.getElementById(lastlinkid) != null) { + document.getElementById(lastlinkid).className = 'person_box:target'; + } + google.maps.event.trigger(gmarkers[i], "click"); +} + + + +// this variable will collect the html which will eventually be placed in the side_bar +var side_bar_html = ""; + +// arrays to hold copies of the markers and html used by the side_bar +// because the function closure trick doesnt work there +var gmarkers = []; +var i = 0; +var lastlinkid; + +var infowindow = new google.maps.InfoWindow({ + // +}); + + +// === Create an associative array of GIcons() ===================================================== +var gicons = []; + +// ------------------------------------------------------------------------------------------------- +gicons["1"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon1.png") +gicons["1"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow50.png", + new google.maps.Size(37, 34), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(10, 34) // Shadow anchor is base of image + ); +// ------------------------------------------------------------------------------------------------- +gicons["2"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon2.png") +gicons["2"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow50.png", + new google.maps.Size(37, 34), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(10, 34) // Shadow anchor is base of image + ); +gicons["2L"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon2L.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(28, 28) // Image anchor + ); +gicons["2L"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-left-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(32, 27) // Shadow anchor is base of image + ); +gicons["2R"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon2R.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(4, 28) // Image anchor + ); +gicons["2R"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-right-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(15, 27) // Shadow anchor is base of image + ); +gicons["2Ls"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon2Ls.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(22, 22) // Image anchor + ); +gicons["2Rs"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon2Rs.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(2, 22) // Image anchor + ); +// ------------------------------------------------------------------------------------------------- +gicons["3"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon3.png") +gicons["3"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow50.png", + new google.maps.Size(37, 34), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(10, 34) // Shadow anchor is base of image + ); +gicons["3L"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon3L.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(28, 28) // Image anchor + ); +gicons["3L"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-left-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(32, 27) // Shadow anchor is base of image + ); +gicons["3R"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon3R.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(4, 28) // Image anchor + ); +gicons["3R"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-right-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(15, 27) // Shadow anchor is base of image + ); +gicons["3Ls"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon3Ls.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(22, 22) // Image anchor + ); +gicons["3Rs"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon3Rs.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(2, 22) // Image anchor + ); +// ------------------------------------------------------------------------------------------------- +gicons["4"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon4.png") +gicons["4"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow50.png", + new google.maps.Size(37, 34), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(10, 34) // Shadow anchor is base of image + ); +gicons["4L"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon4L.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(28, 28) // Image anchor + ); +gicons["4L"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-left-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(32, 27) // Shadow anchor is base of image + ); +gicons["4R"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon4R.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(4, 28) // Image anchor + ); +gicons["4R"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-right-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(15, 27) // Shadow anchor is base of image + ); +gicons["4Ls"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon4Ls.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(22, 22) // Image anchor + ); +gicons["4Rs"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon4Rs.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(2, 22) // Image anchor + ); +// ------------------------------------------------------------------------------------------------- +gicons["5"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon5.png") +gicons["5"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow50.png", + new google.maps.Size(37, 34), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(10, 34) // Shadow anchor is base of image + ); +gicons["5L"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon5L.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(28, 28) // Image anchor + ); +gicons["5L"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-left-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(32, 27) // Shadow anchor is base of image + ); +gicons["5R"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon5R.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(4, 28) // Image anchor + ); +gicons["5R"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-right-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(15, 27) // Shadow anchor is base of image + ); +gicons["5Ls"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon5Ls.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(22, 22) // Image anchor + ); +gicons["5Rs"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon5Rs.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(2, 22) // Image anchor + ); +// ------------------------------------------------------------------------------------------------- +gicons["6"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon6.png") +gicons["6"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow50.png", + new google.maps.Size(37, 34), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(10, 34) // Shadow anchor is base of image + ); +gicons["6L"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon6L.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(28, 28) // Image anchor + ); +gicons["6L"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-left-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(32, 27) // Shadow anchor is base of image + ); +gicons["6R"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon6R.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(4, 28) // Image anchor + ); +gicons["6R"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-right-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(15, 27) // Shadow anchor is base of image + ); +gicons["6Ls"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon6Ls.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(22, 22) // Image anchor + ); +gicons["6Rs"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon6Rs.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(2, 22) // Image anchor + ); +// ------------------------------------------------------------------------------------------------- +gicons["7"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon7.png") +gicons["7"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow50.png", + new google.maps.Size(37, 34), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(10, 34) // Shadow anchor is base of image + ); +gicons["7L"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon7L.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(28, 28) // Image anchor + ); +gicons["7L"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-left-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(32, 27) // Shadow anchor is base of image + ); +gicons["7R"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon7R.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(4, 28) // Image anchor + ); +gicons["7R"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-right-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(15, 27) // Shadow anchor is base of image + ); +gicons["7Ls"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon7Ls.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(22, 22) // Image anchor + ); +gicons["7Rs"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon7Rs.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(2, 22) // Image anchor + ); +// ------------------------------------------------------------------------------------------------- +gicons["8"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon8.png") +gicons["8"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow50.png", + new google.maps.Size(37, 34), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(10, 34) // Shadow anchor is base of image + ); +gicons["8L"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon8L.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(28, 28) // Image anchor + ); +gicons["8L"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-left-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(32, 27) // Shadow anchor is base of image + ); +gicons["8R"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon8R.png", + new google.maps.Size(32, 32), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(4, 28) // Image anchor + ); +gicons["8R"].shadow = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/shadow-right-large.png", + new google.maps.Size(49, 32), // Shadow size + new google.maps.Point(0, 0), // Shadow origin + new google.maps.Point(15, 27) // Shadow anchor is base of image + ); +gicons["8Ls"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon8Ls.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(22, 22) // Image anchor + ); +gicons["8Rs"] = new google.maps.MarkerImage(WT_MODULES_DIR+"googlemap/images/icon8Rs.png", + new google.maps.Size(24, 24), // Image size + new google.maps.Point(0, 0), // Image origin + new google.maps.Point(2, 22) // Image anchor + ); +// ------------------------------------------------------------------------------------------------- + +// / A function to create the marker and set up the event window +function createMarker(point, name, html, mhtml, icontype) { + // alert(i+'. '+name+', '+icontype); + var contentString = '<div id="iwcontent">'+mhtml+'<\/div>'; + + // === create a marker with the requested icon === + var marker = new google.maps.Marker({ + icon: gicons[icontype], + shadow: gicons[icontype].shadow, + map: pm_map, + position: point, + zIndex: 0 + }); + var linkid = "link"+i; + google.maps.event.addListener(marker, 'click', function() { + infowindow.close(); + infowindow.setContent(contentString); + infowindow.open(pm_map, marker); + document.getElementById(linkid).className = 'person_box'; + if (document.getElementById(lastlinkid) != null) { + document.getElementById(lastlinkid).className = 'person_box:target'; + } + lastlinkid=linkid; + }); + + // save the info we need to use later for the side_bar + gmarkers[i] = marker; + // add a line to the side_bar html + side_bar_html += '<br /><div id="'+linkid+'"><a href="javascript:myclick(' + i + ')">' + html +'</a><br></div>'; + i++; + return marker; +}; + + + + +// create the map +var myOptions = { + zoom: 6, + center: new google.maps.LatLng(0, 0), + mapTypeId: google.maps.MapTypeId.TERRAIN, // ROADMAP, SATELLITE, HYBRID, TERRAIN + mapTypeControlOptions: { + style: google.maps.MapTypeControlStyle.DROPDOWN_MENU // DEFAULT, DROPDOWN_MENU, HORIZONTAL_BAR + }, + navigationControlOptions: { + position: google.maps.ControlPosition.TOP_RIGHT, // BOTTOM, BOTTOM_LEFT, LEFT, TOP, etc + style: google.maps.NavigationControlStyle.SMALL // ANDROID, DEFAULT, SMALL, ZOOM_PAN + }, + streetViewControl: false, // Show Pegman or not + scrollwheel: true +}; + +var pm_map = new google.maps.Map(document.getElementById("pm_map"), myOptions); + +google.maps.event.addListener(pm_map, 'maptypechanged', function() { + map_type.refresh(); +}); + +google.maps.event.addListener(pm_map, 'click', function() { + if (document.getElementById(lastlinkid) != null) { + document.getElementById(lastlinkid).className = 'person_box:target'; + } +infowindow.close(); +}); + +// Create the DIV to hold the control and call HomeControl() passing in this DIV. -- +var homeControlDiv = document.createElement('DIV'); +var homeControl = new HomeControl(homeControlDiv, pm_map); +homeControlDiv.index = 1; +pm_map.controls[google.maps.ControlPosition.TOP_RIGHT].push(homeControlDiv); +// --------------------------------------------------------------------------------- + + +// create the map bounds +var bounds = new google.maps.LatLngBounds(); + + +<?php +// add the points +$curgen=1; +$priv=0; +$count=0; +$event = '<img src="'.WT_MODULES_DIR.'googlemap/images/sq1.png" width="10" height="10">' . + "<strong> ".WT_I18N::translate('Root').": </strong>"; +$colored_line = array("1"=>"#FF0000","2"=>"#0000FF","3"=>"#00FF00", + "4"=>"#FFFF00","5"=>"#00FFFF","6"=>"#FF00FF", + "7"=>"#C0C0FF","8"=>"#808000"); + +for ($i=0; $i<($controller->treesize); $i++) { + // moved up to grab the sex of the individuals + $person = WT_Person::getInstance($controller->treeid[$i]); + if (!empty($person)) { + $pid = $controller->treeid[$i]; + $indirec = $person->getGedcomRecord(); + $sex = $person->getSex(); + $bplace = trim($person->getBirthPlace()); + $bdate = $person->getBirthDate(); + $name = $person->getFullName(); + + // -- check to see if we have moved to the next generation + if ($i+1 >= pow(2, $curgen)) { + $curgen++; + } + $relationship=get_relationship_name(get_relationship($controller->rootid, $pid, false, 0, true)); + if (empty($relationship)) $relationship=WT_I18N::translate('self'); + $event = '<img src=\"'.WT_MODULES_DIR.'googlemap/images/sq'.$curgen.'.png\" width=\"10\" height=\"10\">'. + "<strong> ".$relationship.": </strong>"; + + // add thumbnail image + $image = ""; + if ($MULTI_MEDIA && $SHOW_HIGHLIGHT_IMAGES) { + $object = find_highlighted_object($pid, WT_GED_ID, $indirec); + if (!empty($object["thumb"])) { + $size = findImageSize($object["thumb"]); + $class = "pedigree_image_portrait"; + if ($size[0]>$size[1]) $class = "pedigree_image_landscape"; + if ($TEXT_DIRECTION=="rtl") $class .= "_rtl"; + $image = "<img src='{$object["thumb"]}' vspace='0' hspace='0' class='{$class}' alt ='' title='' >"; + } else { + $class = "pedigree_image_portrait"; + if ($TEXT_DIRECTION == "rtl") $class .= "_rtl"; + $sex = $person->getSex(); + $image = "<img src=\'./"; + if ($sex == 'F') { $image .= $WT_IMAGES["default_image_F"]; } + elseif ($sex == 'M') { $image .= $WT_IMAGES["default_image_M"]; } + else { $image .= $WT_IMAGES["default_image_U"]; } + $image .="\' align=\'left\' class=\'".$class."\' border=\'none\' alt=\'\' />"; + } + } + // end of add image + + $dataleft = $image . $event . addslashes($name); + $datamid = " <span><a href='".$person->getHtmlUrl()."' id='alturl' title='" . WT_I18N::translate('Individual information') . "'>"; + + if ($TEXT_DIRECTION == "rtl") $datamid .= PrintReady("(".WT_I18N::translate('View Person').")"); + else $datamid .= "(".WT_I18N::translate('View Person').")"; + $datamid .= "</a></span>"; + $dataright = "<br /><strong>". WT_I18N::translate('Birth:') . " </strong>" . + addslashes($bdate->Display(false))."<br />".$bplace; + + $latlongval[$i] = get_lati_long_placelocation($person->getBirthPlace()); + if ($latlongval[$i] != NULL) { + $lat[$i] = str_replace(array('N', 'S', ','), array('', '-', '.'), $latlongval[$i]["lati"]); + $lon[$i] = str_replace(array('E', 'W', ','), array('', '-', '.'), $latlongval[$i]["long"]); + if (!($lat[$i] == NULL && $lon[$i] == NULL) && !($lat[$i] == 0 && $lon[$i] == 0)) { + if ((!$hideflags) && ($latlongval[$i]["icon"] != NULL)) { + $flags[$i] = $latlongval[$i]["icon"]; + $ffile = strrchr($latlongval[$i]["icon"], '/'); + $ffile = substr($ffile,1, strpos($ffile, '.')-1); + if (empty($flags[$ffile])) { + $flags[$ffile] = $i; // Only generate the flag once + if (($lat[$i] != NULL) && ($lon[$i] != NULL)) { + echo "var point = new google.maps.LatLng(" . $lat[$i] . "," . $lon[$i]. ");\n"; + echo "var Marker1_0_flag = new google.maps.MarkerImage();\n"; + echo 'Marker1_0_flag.image = "', WT_MODULES_DIR, 'googlemap/', $flags[$i], '";'; + echo 'Marker1_0_flag.shadow = "', WT_MODULES_DIR, 'googlemap/images/flag_shadow.png";'; + echo "Marker1_0_flag.iconSize = new google.maps.Size(25, 15);\n"; + echo "Marker1_0_flag.shadowSize = new google.maps.Size(35, 45);\n"; + echo "Marker1_0_flag.iconAnchor = new google.maps.Point(1, 45);\n"; + //BH echo "Marker1_0_flag.infoWindowAnchor = new google.maps.Point(5, 1);\n"; + echo "var Marker1_0 = new google.maps.LatLng(point, {icon:Marker1_0_flag});\n"; + //BH echo "pm_map.addOverlay(Marker1_0);\n\n"; + } + } + } + $marker_number = "$curgen"; + $dups=0; + for ($k=0; $k<$i; $k++) { + if ($latlongval[$i] == $latlongval[$k]) { + if ($clustersize == 1) { + $lon[$i] = $lon[$i]+0.0025; + $lat[$i] = $lat[$i]+0.0025; + } else { + $dups++; + switch($dups) { + case 1: $marker_number = "$curgen" . "L"; break; + case 2: $marker_number = "$curgen" . "R"; break; + case 3: if ($clustersize==5) { + $marker_number = "$curgen" . "Ls"; break; + } + case 4: if ($clustersize==5) { + $marker_number = "$curgen" . "Rs"; break; + } + case 5: //adjust position where markers have same coodinates + default: $marker_number = "$curgen"; + $lon[$i] = $lon[$i]+0.0025; + $lat[$i] = $lat[$i]+0.0025; + break; + } + } + } + } + echo "var point = new google.maps.LatLng(" . $lat[$i] . "," . $lon[$i]. ");\n"; + echo "var marker = createMarker(point, \"" . addslashes($name). "\",\n\t\"<div>".$dataleft.$datamid.$dataright."</div>\", \""; + echo "<div class='iwstyle'>"; + echo "<a href='module.php?ged=".WT_GEDURL."&mod=googlemap&mod_action=pedigree_map&rootid={$pid}&PEDIGREE_GENERATIONS={$PEDIGREE_GENERATIONS}"; + if ($hideflags) echo "&hideflags=1"; + if ($hidelines) echo "&hidelines=1"; + if ($clustersize != 5) echo "&clustersize=". $clustersize; // ignoring the default of 5 + echo "' title='" . WT_I18N::translate('Pedigree Map') . "'>" . $dataleft . "</a>" . $datamid . $dataright . "</div>\", \"".$marker_number."\");\n"; + //BH echo "pm_map.addOverlay(marker);\n"; + + // Construct the polygon lines --------------------------------- + if (!$hidelines) { + $to_child = (intval(($i-1)/2)); // Draw a line from parent to child + ?> + var linecolor; + var plines; + var lines = [ + <?php + echo "new google.maps.LatLng(".$lat[$i].",".$lon[$i]."), "; + echo "new google.maps.LatLng(".$lat[$to_child].",".$lon[$to_child].")"; + ?> + ]; + linecolor = <?php echo "'$colored_line[$curgen]'"; ?>; + plines = new google.maps.Polygon({ + paths: lines, + strokeColor: linecolor, + // strokeColor: <?php echo $colored_line[$curgen]; ?>, + strokeOpacity: 0.8, + strokeWeight: 3, + fillColor: "#FF0000", + //fillOpacity: 0.35 + fillOpacity: 0.1 + }); + plines.setMap(pm_map); + <?php + } + + // Extend and fit marker bounds--------------------------------- + echo "bounds.extend(point);\n"; + echo "pm_map.fitBounds(bounds);"; + echo "\n"; + $count++; + } + } + + } else { + $latlongval[$i] = NULL; + } +} +?> + +pm_map.setCenter(bounds.getCenter()); + + + +// Close the sidebar highlight when the infowindow is closed ------ +google.maps.event.addListener(infowindow, "closeclick", function() { + document.getElementById(lastlinkid).className = 'person_box:target'; +}); + +// put the assembled side_bar_html contents into the side_bar div +document.getElementById("side_bar").innerHTML = side_bar_html; + + + +// === create the context menu div === +var contextmenu = document.createElement("div"); + contextmenu.style.visibility="hidden"; + contextmenu.innerHTML = '<a href="javascript:zoomIn()"><div class="optionbox"> <?php echo WT_I18N::translate('Zoom in'); ?> </div></a>' + + '<a href="javascript:zoomOut()"><div class="optionbox"> <?php echo WT_I18N::translate('Zoom out'); ?> </div></a>' + + '<a href="javascript:zoomInHere()"><div class="optionbox"> <?php echo WT_I18N::translate('Zoom in here'); ?> </div></a>' + + '<a href="javascript:zoomOutHere()"><div class="optionbox"> <?php echo WT_I18N::translate('Zoom out here'); ?> </div></a>' + + '<a href="javascript:centreMapHere()"><div class="optionbox"> <?php echo WT_I18N::translate('Center map here'); ?> </div></a>'; +//BH pm_map.getContainer().appendChild(contextmenu); + +// === listen for singlerightclick === +google.maps.event.addListener(pm_map,"singlerightclick",function(pixel,tile) { + // store the "pixel" info in case we need it later + // adjust the context menu location if near an egde + // create a GControlPosition + // apply it to the context menu, and make the context menu visible + clickedPixel = pixel; + var x=pixel.x; + var y=pixel.y; + if (x > pm_map.getSize().width - 120) { x = pm_map.getSize().width - 120 } + if (y > pm_map.getSize().height - 100) { y = pm_map.getSize().height - 100 } + var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(x,y)); + pos.apply(contextmenu); + contextmenu.style.visibility = "visible"; +}); + +// === functions that perform the context menu options === +function zoomIn() { + // perform the requested operation + pm_map.zoomIn(); + // hide the context menu now that it has been used + contextmenu.style.visibility="hidden"; +} +function zoomOut() { + // perform the requested operation + pm_map.zoomOut(); + // hide the context menu now that it has been used + contextmenu.style.visibility="hidden"; +} +function zoomInHere() { + // perform the requested operation + var point = pm_map.fromContainerPixelToLatLng(clickedPixel) + pm_map.zoomIn(point,true); + // hide the context menu now that it has been used + contextmenu.style.visibility="hidden"; +} +function zoomOutHere() { + // perform the requested operation + var point = pm_map.fromContainerPixelToLatLng(clickedPixel) + pm_map.setCenter(point,pm_map.getZoom()-1); // There is no pm_map.zoomOut() equivalent + // hide the context menu now that it has been used + contextmenu.style.visibility="hidden"; +} +function centreMapHere() { + // perform the requested operation + var point = pm_map.fromContainerPixelToLatLng(clickedPixel) + pm_map.setCenter(point); + // hide the context menu now that it has been used + contextmenu.style.visibility="hidden"; +} + +// === If the user clicks on the map, close the context menu === +google.maps.event.addListener(pm_map, "click", function() { + contextmenu.style.visibility="hidden"; +}); + + +//]]> +</script> diff --git a/modules_v2/googlemap/wt_v3_places_edit.js.php b/modules_v2/googlemap/wt_v3_places_edit.js.php new file mode 100644 index 0000000000..c3d58d20d1 --- /dev/null +++ b/modules_v2/googlemap/wt_v3_places_edit.js.php @@ -0,0 +1,423 @@ +<?php +/** + * Included script file for Interface to edit place locations + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Edit + * @version $Id$ + * + * @author Brian Holland (windmillway) + */ +?> + +<head> + + <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> + <script type="text/javascript" src="<?php echo WT_MODULES_DIR; ?>googlemap/wt_v3_places_edit_overlays.js.php"></script> + <link type="text/css" href="<?php echo WT_MODULES_DIR; ?>googlemap/css/wt_v3_places_edit.css" rel="stylesheet" /> + + <script type="text/javascript"> + + var map; + var marker; + var zoom; + var pl_name = "<?php echo htmlspecialchars($place_name); ?>"; + var pl_lati = "<?php echo $place_lati; ?>"; + var pl_long = "<?php echo $place_long; ?>"; + var pl_zoom = <?php echo $zoomfactor; ?>; + var latlng = new google.maps.LatLng(pl_lati, pl_long); + var polygon1; + var geocoder; + + var infowindow = new google.maps.InfoWindow({ + // + }); + + function geocodePosition(pos) { + geocoder.geocode({ + latLng: pos + }, function(responses) { + if (responses && responses.length > 0) { + updateMarkerAddress(responses[0].formatted_address); + } else { + updateMarkerAddress('Cannot determine address at this location.'); + } + }); + } + + function updateMap(event) { + var point; + var zoom; + var latitude; + var longitude; + var i; + + document.editplaces.save1.disabled = ""; + document.editplaces.save2.disabled = ""; + zoom = parseInt(document.editplaces.NEW_ZOOM_FACTOR.value); + + prec = 20; + for (i=0;i<document.editplaces.NEW_PRECISION.length;i++) { + if (document.editplaces.NEW_PRECISION[i].checked) { + prec = document.editplaces.NEW_PRECISION[i].value; + } + } + if ((document.editplaces.NEW_PLACE_LATI.value == "") || + (document.editplaces.NEW_PLACE_LONG.value == "")) { + latitude = parseFloat(document.editplaces.parent_lati.value).toFixed(prec); + longitude = parseFloat(document.editplaces.parent_long.value).toFixed(prec); + point = new google.maps.LatLng(latitude, longitude); + } else { + latitude = parseFloat(document.editplaces.NEW_PLACE_LATI.value).toFixed(prec); + longitude = parseFloat(document.editplaces.NEW_PLACE_LONG.value).toFixed(prec); + document.editplaces.NEW_PLACE_LATI.value = latitude; + document.editplaces.NEW_PLACE_LONG.value = longitude; + + if (event == 'flag_drag') { + if (longitude < 0.0 ) { + longitude = longitude * -1; + document.editplaces.NEW_PLACE_LONG.value = longitude; + document.editplaces.LONG_CONTROL.value = "PL_W"; + } else { + longitude = longitude ; + document.editplaces.NEW_PLACE_LONG.value = longitude; + document.editplaces.LONG_CONTROL.value = "PL_E"; + } + if (latitude < 0.0 ) { + latitude = latitude * -1; + document.editplaces.NEW_PLACE_LATI.value = latitude; + document.editplaces.LATI_CONTROL.value = "PL_S"; + } else { + latitude = latitude ; + document.editplaces.NEW_PLACE_LATI.value = latitude; + document.editplaces.LATI_CONTROL.value = "PL_N"; + } + + if (document.editplaces.LATI_CONTROL.value == "PL_S") { + latitude = latitude * -1; + } + if (document.editplaces.LONG_CONTROL.value == "PL_W") { + longitude = longitude * -1; + } + point = new google.maps.LatLng(latitude, longitude); + } else { + if (latitude < 0.0) { + latitude = latitude * -1; + document.editplaces.NEW_PLACE_LATI.value = latitude; + } + if (longitude < 0.0) { + longitude = longitude * -1; + document.editplaces.NEW_PLACE_LONG.value = longitude; + } + if (document.editplaces.LATI_CONTROL.value == "PL_S") { + latitude = latitude * -1; + } + if (document.editplaces.LONG_CONTROL.value == "PL_W") { + longitude = longitude * -1; + } + point = new google.maps.LatLng(latitude, longitude); + } + } + + map.setCenter(point); + map.setZoom(zoom); + marker.setPosition(point); + + } + + // The HomeControl returns user to original position and style ================= + function HomeControl(controlDiv, map) { + // Set CSS styles for the DIV containing the control + // Setting padding to 5 px will offset the control from the edge of the map + controlDiv.style.paddingTop = '5px'; + controlDiv.style.paddingRight = '0px'; + + // Set CSS for the control border + var controlUI = document.createElement('DIV'); + controlUI.style.backgroundColor = 'white'; + controlUI.style.color = 'black'; + controlUI.style.borderColor = 'black'; + controlUI.style.borderColor = 'black'; + controlUI.style.borderStyle = 'solid'; + controlUI.style.borderWidth = '2px'; + controlUI.style.cursor = 'pointer'; + controlUI.style.textAlign = 'center'; + controlUI.title = 'Click to set the map to Home'; + controlDiv.appendChild(controlUI); + + // Set CSS for the control interior + var controlText = document.createElement('DIV'); + controlText.style.fontFamily = 'Arial,sans-serif'; + controlText.style.fontSize = '12px'; + controlText.style.paddingLeft = '15px'; + controlText.style.paddingRight = '15px'; + controlText.innerHTML = '<b>Home<\/b>'; + controlUI.appendChild(controlText); + + // Setup the click event listeners: simply set the map to original LatLng + google.maps.event.addDomListener(controlUI, 'click', function() { + map.setCenter(latlng), + map.setZoom(pl_zoom), + map.setMapTypeId(google.maps.MapTypeId.ROADMAP) + }); + } + + function loadMap() { + geocoder = new google.maps.Geocoder(); + // Define map + var myOptions = { + zoom: pl_zoom, + center: latlng, + mapTypeId: google.maps.MapTypeId.ROADMAP, // ROADMAP, SATELLITE, HYBRID, TERRAIN + mapTypeControlOptions: { + style: google.maps.MapTypeControlStyle.DROPDOWN_MENU// DEFAULT, DROPDOWN_MENU, HORIZONTAL_BAR + }, + navigationControlOptions: { + position: google.maps.ControlPosition.TOP_RIGHT, // BOTTOM, BOTTOM_LEFT, LEFT, TOP, etc + style: google.maps.NavigationControlStyle.SMALL // ANDROID, DEFAULT, SMALL, ZOOM_PAN + }, + streetViewControl: false, // Show Pegman or not + scrollwheel: false + }; + + map = new google.maps.Map(document.getElementById("map_pane"), myOptions); + + // *** === NOTE *** This function creates the UK country overlays ================== + overlays(); + // === Above function is located in WT_MODULES_DIR/googlemap/wt_v3_placeOverlays.js.php === + + + // Close any infowindow when map is clicked + google.maps.event.addListener(map, 'click', function() { + infowindow.close(); + }); + + // Create the DIV to hold the control and call HomeControl() passing in this DIV. -- + var homeControlDiv = document.createElement('DIV'); + var homeControl = new HomeControl(homeControlDiv, map); + homeControlDiv.index = 1; + map.controls[google.maps.ControlPosition.TOP_RIGHT].push(homeControlDiv); + // --------------------------------------------------------------------------------- + + google.maps.event.addListener(map, 'zoom_changed', function() { + document.editplaces.NEW_ZOOM_FACTOR.value = map.zoom; + }); + + // Create the Main Location Marker + <?php + if ($level < 2 && $place_icon != '') { + echo 'var image = new google.maps.MarkerImage("', WT_MODULES_DIR, 'googlemap/',$place_icon,'",'; + echo 'new google.maps.Size(25, 15),'; // Image size + echo 'new google.maps.Point(0, 0),'; // Image origin + echo 'new google.maps.Point(0, 44)'; // Image anchor + echo ');'; + echo 'var iconShadow = new google.maps.MarkerImage("', WT_MODULES_DIR, 'googlemap/images/flag_shadow.png",'; + echo 'new google.maps.Size(35, 45),'; // Shadow size + echo 'new google.maps.Point(0,0),'; // Shadow origin + echo 'new google.maps.Point(1, 45)'; // Shadow anchor is base of flagpole + echo ');'; + echo 'marker = new google.maps.Marker({'; + echo 'icon: image,'; + echo 'shadow: iconShadow,'; + echo 'position: latlng,'; + echo 'map: map,'; + echo 'title: pl_name,'; + echo 'draggable: true,'; + echo 'zIndex:1'; + echo '});'; + } else { + echo 'marker = new google.maps.Marker({'; + echo 'position: latlng,'; + echo 'map: map,'; + echo 'title: pl_name,'; + echo 'draggable: true,'; + echo 'zIndex: 1'; + echo '});'; + } + ?> + + prec = 20; + for (i=0;i<document.editplaces.NEW_PRECISION.length;i++) { + if (document.editplaces.NEW_PRECISION[i].checked) { + prec = document.editplaces.NEW_PRECISION[i].value; + } + } + google.maps.event.addListener(marker, 'drag', function() { + pos1 = marker.getPosition(); + document.getElementById('NEW_PLACE_LATI').value = parseFloat(pos1.lat()).toFixed(prec); + document.getElementById('NEW_PLACE_LONG').value = parseFloat(pos1.lng()).toFixed(prec); + }); + google.maps.event.addListener(marker, 'dragend', function() { + // geocodePosition(marker.getPosition()); + pos2 = marker.getPosition(); + old_lati = document.getElementById('NEW_PLACE_LATI').value; + old_long = document.getElementById('NEW_PLACE_LONG').value; + document.getElementById('NEW_PLACE_LATI').value = parseFloat(pos2.lat()).toFixed(prec); + document.getElementById('NEW_PLACE_LONG').value = parseFloat(pos2.lng()).toFixed(prec); + updateMap('flag_drag'); + }); + + } + + function edit_close() { + if (window.opener.showchanges) window.opener.showchanges(); + window.close(); + } + + function setLoc(lat, lng) { + prec = 20; + for (i=0;i<document.editplaces.NEW_PRECISION.length;i++) { + if (document.editplaces.NEW_PRECISION[i].checked) { + prec = document.editplaces.NEW_PRECISION[i].value; + } + } + if (lat < 0.0) { + document.editplaces.NEW_PLACE_LATI.value = (lat.toFixed(prec) * -1); + document.editplaces.LATI_CONTROL.value = "PL_S"; + } else { + document.editplaces.NEW_PLACE_LATI.value = lat.toFixed(prec); + document.editplaces.LATI_CONTROL.value = "PL_N"; + } + if (lng < 0.0) { + document.editplaces.NEW_PLACE_LONG.value = (lng.toFixed(prec) * -1); + document.editplaces.LONG_CONTROL.value = "PL_W"; + } else { + document.editplaces.NEW_PLACE_LONG.value = lng.toFixed(prec); + document.editplaces.LONG_CONTROL.value = "PL_E"; + } + newval = new google.maps.LatLng (lat.toFixed(prec), lng.toFixed(prec)); + updateMap(); + } + + function createMarker(i, point, name) { + var contentString = '<div id="iwcontent">'+name+'<\/div>'; + <?php + echo 'var image = new google.maps.MarkerImage("', WT_MODULES_DIR, 'googlemap/images/marker_yellow.png",'; + echo 'new google.maps.Size(20, 34),'; // Image size + echo 'new google.maps.Point(0, 0),'; // Image origin + echo 'new google.maps.Point(10, 34)'; // Image anchor + echo ');'; + echo 'var iconShadow = new google.maps.MarkerImage("', WT_MODULES_DIR, 'googlemap/images/shadow50.png",'; + echo 'new google.maps.Size(37, 34),'; // Shadow size + echo 'new google.maps.Point(0, 0),'; // Shadow origin + echo 'new google.maps.Point(10, 34)'; // Shadow anchor is base of image + echo ');'; + ?> + var marker = new google.maps.Marker({ + icon: image, + shadow: iconShadow, + map: map, + position: point, + zIndex: 0 + }); + + google.maps.event.addListener(marker, 'click', function() { + infowindow.close(); + infowindow.setContent(contentString); + infowindow.open(map, marker); + }); + + google.maps.event.addListener(map, 'click', function() { + infowindow.close(); + }); + + return marker; + } + + + function change_icon() { + window.open('module.php?mod=googlemap&mod_action=flags&countrySelected=<?php echo $selected_country; ?>', '_blank', 'top=50, left=50, width=600, height=500, resizable=1, scrollbars=1'); + return false; + } + + function remove_icon() { + document.editplaces.icon.value = ""; + document.getElementById('flagsDiv').innerHTML = "<a href=\"javascript:;\" onclick=\"change_icon();return false;\"><?php echo WT_I18N::translate('Change flag'); ?></a>"; + } + + + function addAddressToMap(response) { + var bounds = new google.maps.LatLngBounds(); + if (!response ) { + alert("<?php echo WT_I18N::translate('No places found'); ?>"); + } else { + if (response.length > 0) { + for (i=0; i<response.length; i++) { + var name = '<div id="gname" class="iwstyle">'+response[i].address_components[0].short_name+'<br /> '+response[i].geometry.location+'' + name += "<br /><a href=\"javascript:;\" onclick=\"setLoc(" + response[i].geometry.location.lat() + ", " + response[i].geometry.location.lng() + ");\"><div id=\"namelink\"><?php echo PrintReady(WT_I18N::translate('Use this value')); ?></div></a>" + name += "</div>" + var point = response[i].geometry.location; + var marker = createMarker(i, point, name); + bounds.extend(response[i].geometry.location); + } + + <?php if ($level > 0) { ?> + map.fitBounds(bounds); + <?php } ?> + zoomlevel = map.getZoom(); + + if (zoomlevel < <?php echo $GOOGLEMAP_MIN_ZOOM; ?>) { + zoomlevel = <?php echo $GOOGLEMAP_MIN_ZOOM; ?>; + } + if (zoomlevel > <?php echo $GOOGLEMAP_MAX_ZOOM; ?>) { + zoomlevel = <?php echo $GOOGLEMAP_MAX_ZOOM; ?>; + } + if (document.editplaces.NEW_ZOOM_FACTOR.value < zoomlevel) { + zoomlevel = document.editplaces.NEW_ZOOM_FACTOR.value; + if (zoomlevel < <?php echo $GOOGLEMAP_MIN_ZOOM; ?>) { + zoomlevel = <?php echo $GOOGLEMAP_MIN_ZOOM; ?>; + } + if (zoomlevel > <?php echo $GOOGLEMAP_MAX_ZOOM; ?>) { + zoomlevel = <?php echo $GOOGLEMAP_MAX_ZOOM; ?>; + } + } + map.setCenter(bounds.getCenter()); + map.setZoom(zoomlevel); + } + } + } + + function showLocation_level(address) { + address += '<?php if ($level>0) echo ", ", addslashes(PrintReady(implode(', ', array_reverse($where_am_i, true)))); ?>'; + geocoder.geocode({'address': address}, addAddressToMap); + } + + function showLocation_all(address) { + geocoder.geocode({'address': address}, addAddressToMap); + } + + function paste_char(value, lang, mag) { + document.editplaces.NEW_PLACE_NAME.value += value; + language_filter = lang; + magnify = mag; + } + +</script> + +</head> + +<body onload="loadMap()" > +<table><tr><td align="center"> +</td></tr></table> +</body> + diff --git a/modules_v2/googlemap/wt_v3_places_edit_overlays.js.php b/modules_v2/googlemap/wt_v3_places_edit_overlays.js.php new file mode 100644 index 0000000000..3b0323a6d7 --- /dev/null +++ b/modules_v2/googlemap/wt_v3_places_edit_overlays.js.php @@ -0,0 +1,125 @@ +<?php +/** + * Overlays file for Interface to edit place locations + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Edit + * @version $Id$ + * + * @author Brian Holland (windmillway) + */ +?> + + +// === Create Borders for the UK Countries ========================================================= +function overlays() { + + // Define place LatLng arrays + var polygon1; + var num_arrays = ""; + if (pl_name == 'Scotland') { + var returnGeom1 = '-2.02166,55.80611|-2.07972,55.86722|-2.13028,55.88583|-2.26028,55.91861|-2.37528,55.95694|-2.65722,56.05972|-2.82028,56.05694|-2.86618,56.02840|-2.89555,55.98861|-2.93500,55.96944|-3.01805,55.94944|-3.06750,55.94444|-3.25472,55.97166|-3.45472,55.99194|-3.66416,56.00652|-3.73722,56.05555|-3.57139,56.05360|-3.44111,56.01916|-3.39584,56.01083|-3.34403,56.02333|-3.13903,56.11084|-2.97611,56.19472|-2.91666,56.20499|-2.84695,56.18638|-2.78805,56.18749|-2.67937,56.21465|-2.58403,56.28264|-2.67208,56.32277|-2.76861,56.33180|-2.81528,56.37360|-2.81208,56.43958|-2.91653,56.45014|-2.99555,56.41416|-3.19042,56.35958|-3.27805,56.35750|-3.04055,56.45472|-2.95861,56.45611|-2.72084,56.48888|-2.64084,56.52250|-2.53126,56.57611|-2.48861,56.61416|-2.47805,56.71527|-2.39000,56.77166|-2.31986,56.79638|-2.21972,56.86777|-2.19708,56.94388|-2.16695,57.00055|-2.09334,57.07027|-2.05416,57.21861|-1.95889,57.33250|-1.85584,57.39889|-1.77334,57.45805|-1.78139,57.50555|-1.82195,57.57861|-1.86000,57.62138|-1.92972,57.67777|-2.02222,57.69388|-2.07555,57.69944|-2.14028,57.69056|-2.18611,57.66861|-2.39626,57.66638|-2.51000,57.67166|-2.78639,57.70222|-2.89806,57.70694|-2.96750,57.68027|-3.03847,57.66249|-3.12334,57.67166|-3.22334,57.69166|-3.28625,57.72499|-3.33972,57.72333|-3.48805,57.70945|-3.52222,57.66333|-3.59542,57.63666|-3.64063,57.63881|-3.75414,57.62504|-4.03986,57.55569|-4.19666,57.48584|-4.22889,57.51554|-4.17945,57.56249|-4.11139,57.59833|-4.08078,57.66533|-4.19139,57.67139|-4.25945,57.65527|-4.34361,57.60777|-4.41639,57.60166|-4.29666,57.67444|-4.08528,57.72611|-4.01908,57.70226|-3.96861,57.70250|-3.86556,57.76861|-3.81945,57.80458|-3.80681,57.85819|-3.85055,57.82000|-3.92639,57.80749|-4.04322,57.81438|-4.14973,57.82527|-4.29750,57.84638|-4.36250,57.89777|-4.24306,57.87028|-4.10666,57.85195|-4.01500,57.86777|-3.99166,57.90611|-3.99695,57.95056|-3.84500,58.02000|-3.56611,58.13916|-3.51319,58.16374|-3.45916,58.20305|-3.42028,58.24361|-3.33750,58.27694|-3.20555,58.30625|-3.10972,58.38166|-3.05792,58.45083|-3.02264,58.64653|-3.17639,58.64944|-3.35389,58.66055|-3.36931,58.59555|-3.57611,58.62194|-3.66028,58.61972|-3.71166,58.60374|-3.78264,58.56750|-3.84834,58.56000|-4.08056,58.55527|-4.27722,58.53361|-4.43653,58.54902|-4.50666,58.56777|-4.56055,58.57584|-4.59910,58.53027|-4.66805,58.48833|-4.76146,58.44604|-4.70195,58.50999|-4.70166,58.55861|-4.77014,58.60264|-5.00153,58.62416|-5.10945,58.50833|-5.16472,58.32527|-5.12639,58.28750|-5.07166,58.26472|-5.20361,58.25083|-5.39764,58.25055|-5.27389,58.11722|-5.31514,58.06416|-5.38416,58.08361|-5.45285,58.07416|-5.39805,58.03111|-5.26278,57.97111|-5.19334,57.95069|-5.12750,57.86944|-5.21750,57.90084|-5.33861,57.92083|-5.42876,57.90104|-5.45750,57.85889|-5.64445,57.89972|-5.62555,57.85222|-5.58153,57.81945|-5.60674,57.76618|-5.66305,57.78889|-5.71695,57.86944|-5.76695,57.86472|-5.81708,57.81944|-5.81084,57.63958|-5.69555,57.55944|-5.64361,57.55222|-5.53084,57.52833|-5.65305,57.50875|-5.75000,57.54834|-5.81569,57.57923|-5.85042,57.54972|-5.86695,57.46777|-5.81806,57.36250|-5.75111,57.34333|-5.50334,57.40111|-5.45126,57.41805|-5.49250,57.37083|-5.59884,57.33049|-5.57116,57.28411|-5.51266,57.27745|-5.40514,57.23097|-5.44972,57.22138|-5.49472,57.23888|-5.56066,57.25477|-5.64611,57.23499|-5.64751,57.16161|-5.55028,57.11639|-5.48166,57.11222|-5.40305,57.11062|-5.55945,57.09250|-5.65111,57.11611|-5.72472,57.11306|-5.77361,57.04556|-5.63139,56.98499|-5.56916,56.98972|-5.52403,56.99735|-5.57916,56.98000|-5.64611,56.97222|-5.73374,57.00909|-5.82584,57.00346|-5.91958,56.88708|-5.86528,56.87944|-5.74278,56.89374|-5.66292,56.86924|-5.73306,56.83916|-5.78584,56.83955|-5.85590,56.81430|-5.80208,56.79180|-5.84958,56.74444|-5.90500,56.75666|-5.96694,56.78027|-6.14000,56.75777|-6.19208,56.74888|-6.23452,56.71673|-6.19139,56.67972|-5.91916,56.67388|-5.82622,56.69156|-5.73945,56.71166|-5.55240,56.68886|-5.64861,56.68027|-5.69916,56.68278|-5.88261,56.65666|-5.97472,56.65138|-5.99584,56.61138|-5.93056,56.56972|-5.88416,56.55333|-5.79056,56.53805|-5.67695,56.49389|-5.56389,56.54056|-5.36334,56.66195|-5.23416,56.74333|-5.13236,56.79403|-5.31473,56.65666|-5.37405,56.55925|-5.31826,56.55633|-5.25080,56.55753|-5.37718,56.52112|-5.39866,56.47866|-5.19111,56.46194|-5.11556,56.51277|-5.07014,56.56069|-5.13555,56.48499|-5.22084,56.43583|-5.32764,56.43574|-5.42439,56.43091|-5.52611,56.37360|-5.57139,56.32833|-5.59653,56.25695|-5.57389,56.16000|-5.52000,56.16485|-5.56334,56.11333|-5.60139,56.07638|-5.64222,56.04305|-5.66039,55.98263|-5.62555,56.02055|-5.58014,56.01319|-5.63361,55.96611|-5.67697,55.88844|-5.64750,55.78139|-5.60986,55.75930|-5.66916,55.66166|-5.70166,55.58861|-5.71805,55.51500|-5.75916,55.41750|-5.79528,55.36027|-5.78166,55.29902|-5.73778,55.29222|-5.56694,55.31666|-5.51528,55.36347|-5.55520,55.41440|-5.48639,55.64306|-5.44597,55.70680|-5.38000,55.75027|-5.41889,55.90666|-5.39924,55.99972|-5.33895,56.03456|-5.30594,56.06922|-5.23889,56.11889|-5.03222,56.23250|-4.92229,56.27111|-4.97416,56.23333|-5.07222,56.18695|-5.20069,56.11861|-5.30906,56.00570|-5.34000,55.90201|-5.29250,55.84750|-5.20805,55.84444|-5.22458,55.90175|-5.17334,55.92916|-5.11000,55.90306|-5.01222,55.86694|-4.96195,55.88000|-4.89824,55.98145|-4.84623,56.08632|-4.86636,56.03178|-4.85461,55.98648|-4.77659,55.97977|-4.62723,55.94555|-4.52305,55.91861|-4.70972,55.93403|-4.75166,55.94611|-4.82406,55.94950|-4.87826,55.93653|-4.91639,55.70083|-4.87584,55.68194|-4.81361,55.64555|-4.68722,55.59750|-4.61361,55.49069|-4.63958,55.44264|-4.68250,55.43388|-4.74847,55.41055|-4.83715,55.31882|-4.84778,55.26944|-4.86542,55.22340|-4.93500,55.17860|-5.01250,55.13347|-5.05361,55.04902|-5.17834,54.98888|-5.18563,54.93622|-5.17000,54.89111|-5.11666,54.83180|-5.00500,54.76333|-4.96229,54.68125|-4.92250,54.64055|-4.85723,54.62958|-4.96076,54.79687|-4.92431,54.83708|-4.85222,54.86861|-4.80125,54.85556|-4.74055,54.82166|-4.68084,54.79972|-4.59861,54.78027|-4.55792,54.73903|-4.49639,54.69888|-4.37584,54.67666|-4.34569,54.70916|-4.35973,54.77111|-4.41111,54.82583|-4.42445,54.88152|-4.38479,54.90555|-4.35056,54.85903|-4.09555,54.76777|-3.95361,54.76749|-3.86972,54.80527|-3.81222,54.84888|-3.69250,54.88110|-3.61584,54.87527|-3.57111,54.99083|-3.44528,54.98638|-3.36056,54.97138|-3.14695,54.96500|-3.05103,54.97986|-3.01500,55.05222|-2.96278,55.03889|-2.69945,55.17722|-2.63055,55.25500|-2.46305,55.36111|-2.21236,55.42777|-2.18278,55.45985|-2.21528,55.50583|-2.27416,55.57527|-2.27916,55.64472|-2.22000,55.66499|-2.08361,55.78054|-2.02166,55.80611'; + num_arrays = 1; + } else if (pl_name == 'England') { + var returnGeom1 = '-4.74361,50.66750|-4.78361,50.59361|-4.91584,50.57722|-5.01750,50.54264|-5.02569,50.47271|-5.04729,50.42750|-5.15208,50.34374|-5.26805,50.27389|-5.43194,50.19326|-5.49584,50.21695|-5.54639,50.20527|-5.71000,50.12916|-5.71681,50.06083|-5.66174,50.03631|-5.58278,50.04777|-5.54166,50.07055|-5.53416,50.11569|-5.47055,50.12499|-5.33361,50.09138|-5.27666,50.05972|-5.25674,50.00514|-5.19306,49.95527|-5.16070,50.00319|-5.06555,50.03750|-5.07090,50.08166|-5.04806,50.17111|-4.95278,50.19333|-4.85750,50.23166|-4.76250,50.31138|-4.67861,50.32583|-4.54334,50.32222|-4.48278,50.32583|-4.42972,50.35139|-4.38000,50.36388|-4.16555,50.37028|-4.11139,50.33027|-4.05708,50.29791|-3.94389,50.31346|-3.87764,50.28139|-3.83653,50.22972|-3.78944,50.21222|-3.70666,50.20972|-3.65195,50.23111|-3.55139,50.43833|-3.49416,50.54639|-3.46181,50.58792|-3.41139,50.61610|-3.24416,50.67444|-3.17347,50.68833|-3.09445,50.69222|-2.97806,50.70638|-2.92750,50.73125|-2.88278,50.73111|-2.82305,50.72027|-2.77139,50.70861|-2.66195,50.67334|-2.56305,50.63222|-2.45861,50.57500|-2.44666,50.62639|-2.39097,50.64166|-2.19722,50.62611|-2.12195,50.60722|-2.05445,50.58569|-1.96437,50.59674|-1.95441,50.66536|-2.06681,50.71430|-1.93416,50.71277|-1.81639,50.72306|-1.68445,50.73888|-1.59278,50.72416|-1.33139,50.79138|-1.11695,50.80694|-1.15889,50.84083|-1.09445,50.84584|-0.92842,50.83966|-0.86584,50.79965|-0.90826,50.77396|-0.78187,50.72722|-0.74611,50.76583|-0.67528,50.78111|-0.57722,50.79527|-0.25500,50.82638|-0.19084,50.82583|-0.13805,50.81833|0.05695,50.78083|0.12334,50.75944|0.22778,50.73944|0.28695,50.76500|0.37195,50.81638|0.43084,50.83111|0.56722,50.84777|0.67889,50.87681|0.71639,50.90500|0.79334,50.93610|0.85666,50.92556|0.97125,50.98111|0.99778,51.01903|1.04555,51.04944|1.10028,51.07361|1.26250,51.10166|1.36889,51.13583|1.41111,51.20111|1.42750,51.33111|1.38556,51.38777|1.19195,51.37861|1.05278,51.36722|0.99916,51.34777|0.90806,51.34069|0.70416,51.37749|0.61972,51.38304|0.55945,51.40596|0.64236,51.44042|0.69750,51.47084|0.59195,51.48777|0.53611,51.48806|0.48916,51.48445|0.45215,51.45562|0.38894,51.44822|0.46500,51.50306|0.65195,51.53680|0.76695,51.52138|0.82084,51.53556|0.87528,51.56110|0.95250,51.60923|0.94695,51.72556|0.90257,51.73465|0.86306,51.71166|0.76140,51.69164|0.70111,51.71847|0.86211,51.77361|0.93236,51.80583|0.98278,51.82527|1.03569,51.77416|1.08834,51.77056|1.13222,51.77694|1.18139,51.78972|1.22361,51.80888|1.26611,51.83916|1.28097,51.88096|1.20834,51.95083|1.16347,52.02361|1.27750,51.98555|1.33125,51.92875|1.39028,51.96999|1.58736,52.08388|1.63000,52.19527|1.68576,52.32630|1.73028,52.41138|1.74945,52.45583|1.74590,52.62021|1.70250,52.71583|1.64528,52.77111|1.50361,52.83749|1.43222,52.87472|1.35250,52.90972|1.28222,52.92750|1.18389,52.93889|0.99472,52.95111|0.94222,52.95083|0.88472,52.96638|0.66722,52.97611|0.54778,52.96618|0.49139,52.93430|0.44431,52.86569|0.42903,52.82403|0.36334,52.78027|0.21778,52.80694|0.16125,52.86250|0.05778,52.88916|0.00211,52.87985|0.03222,52.91722|0.20389,53.02805|0.27666,53.06694|0.33916,53.09236|0.35389,53.18722|0.33958,53.23472|0.23555,53.39944|0.14347,53.47527|0.08528,53.48638|0.02694,53.50972|-0.10084,53.57306|-0.20722,53.63083|-0.26445,53.69083|-0.30166,53.71319|-0.39022,53.70794|-0.51972,53.68527|-0.71653,53.69638|-0.65445,53.72527|-0.60584,53.72972|-0.54916,53.70611|-0.42261,53.71755|-0.35728,53.73056|-0.29389,53.73666|-0.23139,53.72166|-0.10584,53.63166|-0.03472,53.62555|0.04416,53.63916|0.08916,53.62666|0.14945,53.58847|0.12639,53.64527|0.06264,53.70389|-0.12750,53.86388|-0.16916,53.91847|-0.21222,54.00833|-0.20569,54.05153|-0.16111,54.08806|-0.11694,54.13222|-0.20053,54.15171|-0.26250,54.17444|-0.39334,54.27277|-0.42166,54.33222|-0.45750,54.37694|-0.51847,54.44749|-0.56472,54.48000|-0.87584,54.57027|-1.06139,54.61722|-1.16528,54.64972|-1.30445,54.77138|-1.34556,54.87138|-1.41278,54.99944|-1.48292,55.08625|-1.51500,55.14972|-1.56584,55.28722|-1.58097,55.48361|-1.63597,55.58194|-1.69000,55.60556|-1.74695,55.62499|-1.81764,55.63306|-1.97681,55.75416|-2.02166,55.80611|-2.08361,55.78054|-2.22000,55.66499|-2.27916,55.64472|-2.27416,55.57527|-2.21528,55.50583|-2.18278,55.45985|-2.21236,55.42777|-2.46305,55.36111|-2.63055,55.25500|-2.69945,55.17722|-2.96278,55.03889|-3.01500,55.05222|-3.05103,54.97986|-3.13292,54.93139|-3.20861,54.94944|-3.28931,54.93792|-3.39166,54.87639|-3.42916,54.81555|-3.56916,54.64249|-3.61306,54.48861|-3.49305,54.40333|-3.43389,54.34806|-3.41056,54.28014|-3.38055,54.24444|-3.21472,54.09555|-3.15222,54.08194|-2.93097,54.15333|-2.81361,54.22277|-2.81750,54.14277|-2.83361,54.08500|-2.93250,53.95055|-3.05264,53.90764|-3.03708,53.74944|-2.99278,53.73277|-2.89979,53.72499|-2.97729,53.69382|-3.07306,53.59805|-3.10563,53.55993|-3.00678,53.41738|-2.95389,53.36027|-2.85736,53.32083|-2.70493,53.35062|-2.77639,53.29250|-2.89972,53.28916|-2.94250,53.31056|-3.02889,53.38191|-3.07248,53.40936|-3.16695,53.35708|-3.12611,53.32500|-3.08860,53.26001|-3.02000,53.24722|-2.95528,53.21555|-2.91069,53.17014|-2.89389,53.10416|-2.85695,53.03249|-2.77792,52.98514|-2.73109,52.96873|-2.71945,52.91902|-2.79278,52.90207|-2.85069,52.93875|-2.99389,52.95361|-3.08639,52.91611|-3.13014,52.88486|-3.13708,52.79312|-3.06806,52.77027|-3.01111,52.71166|-3.06666,52.63527|-3.11750,52.58666|-3.07089,52.55702|-3.00792,52.56902|-2.98028,52.53083|-3.02736,52.49792|-3.11916,52.49194|-3.19514,52.46722|-3.19611,52.41027|-3.02195,52.34027|-2.95486,52.33117|-2.99750,52.28139|-3.05125,52.23347|-3.07555,52.14804|-3.12222,52.11805|-3.11250,52.06945|-3.08500,52.01930|-3.04528,51.97639|-2.98889,51.92555|-2.91757,51.91569|-2.86639,51.92889|-2.77861,51.88583|-2.65944,51.81806|-2.68334,51.76957|-2.68666,51.71889|-2.66500,51.61500|-2.62916,51.64416|-2.57889,51.67777|-2.46056,51.74666|-2.40389,51.74041|-2.47166,51.72445|-2.55305,51.65722|-2.65334,51.56389|-2.77055,51.48916|-2.85278,51.44472|-2.96000,51.37499|-3.00695,51.30722|-3.01278,51.25632|-3.02834,51.20611|-3.30139,51.18111|-3.39361,51.18138|-3.43729,51.20638|-3.50722,51.22333|-3.57014,51.23027|-3.63222,51.21805|-3.70028,51.23000|-3.79250,51.23916|-3.88389,51.22416|-3.98472,51.21695|-4.11666,51.21222|-4.22805,51.18777|-4.22028,51.11054|-4.23702,51.04659|-4.30361,51.00416|-4.37639,50.99110|-4.42736,51.00958|-4.47445,51.01416|-4.52132,51.01424|-4.54334,50.92694|-4.56139,50.77625|-4.65139,50.71527|-4.74361,50.66750'; //|-3.08860,53.26001|-3.33639,53.34722|-3.38806,53.34361|-3.60986,53.27944|-3.73014,53.28944|-3.85445,53.28444|-4.01861,53.23750|-4.06639,53.22639|-4.15334,53.22556|-4.19639,53.20611|-4.33028,53.11222|-4.36097,53.02888|-4.55278,52.92889|-4.61889,52.90916|-4.72195,52.83611|-4.72778,52.78139|-4.53945,52.79306|-4.47722,52.85500|-4.41416,52.88472|-4.31292,52.90499|-4.23334,52.91499|-4.13569,52.87888|-4.13056,52.77777|-4.05334,52.71666|-4.10639,52.65084|-4.12597,52.60375|-4.08056,52.55333|-4.05972,52.48584|-4.09666,52.38583|-4.14305,52.32027|-4.19361,52.27638|-4.23166,52.24888|-4.52722,52.13083|-4.66945,52.13027|-4.73695,52.10361|-4.76778,52.06444|-4.84445,52.01388|-5.09945,51.96056|-5.23916,51.91638|-5.25889,51.87056|-5.18500,51.86958|-5.11528,51.83333|-5.10257,51.77895|-5.16111,51.76222|-5.24694,51.73027|-5.19111,51.70888|-5.00739,51.70349|-4.90875,51.71249|-4.86111,51.71334|-4.97061,51.67577|-5.02128,51.66861|-5.05139,51.62028|-5.00528,51.60638|-4.94139,51.59416|-4.89028,51.62694|-4.83569,51.64534|-4.79063,51.63340|-4.69028,51.66666|-4.64584,51.72666|-4.57445,51.73416|-4.43611,51.73722|-4.26222,51.67694|-4.19750,51.67916|-4.06614,51.66804|-4.11639,51.63416|-4.17750,51.62235|-4.25055,51.62861|-4.29208,51.60743|-4.27778,51.55666|-4.20486,51.53527|-3.94972,51.61278|-3.83792,51.61999|-3.78166,51.56750|-3.75160,51.52931|-3.67194,51.47388|-3.54250,51.39777|-3.40334,51.37972|-3.27097,51.38014|-3.16458,51.40909|-3.15166,51.45305|-3.11875,51.48750|-3.02111,51.52527|-2.95472,51.53972|-2.89278,51.53861|-2.84778,51.54500|-2.71472,51.58083|-2.66500,51.61500|-2.68666,51.71889|-2.68334,51.76957|-2.65944,51.81806|-2.77861,51.88583|-2.86639,51.92889|-2.91757,51.91569|-2.98889,51.92555|-3.04528,51.97639|-3.08500,52.01930|-3.11250,52.06945|-3.12222,52.11805|-3.07555,52.14804|-3.05125,52.23347|-2.99750,52.28139|-2.95486,52.33117|-3.02195,52.34027|-3.19611,52.41027|-3.19514,52.46722|-3.11916,52.49194|-3.02736,52.49792|-2.98028,52.53083|-3.00792,52.56902|-3.07089,52.55702|-3.11750,52.58666|-3.06666,52.63527|-3.01111,52.71166|-3.06806,52.77027|-3.13708,52.79312|-3.13014,52.88486|-3.08639,52.91611|-2.99389,52.95361|-2.85069,52.93875|-2.79278,52.90207|-2.71945,52.91902|-2.73109,52.96873|-2.77792,52.98514|-2.85695,53.03249|-2.89389,53.10416|-2.91069,53.17014|-2.95528,53.21555|-3.02000,53.24722|-3.08860,53.26001'; + var returnGeom2 = '-3.08860,53.26001|-3.33639,53.34722|-3.38806,53.34361|-3.60986,53.27944|-3.73014,53.28944|-3.85445,53.28444|-4.01861,53.23750|-4.06639,53.22639|-4.15334,53.22556|-4.19639,53.20611|-4.33028,53.11222|-4.36097,53.02888|-4.55278,52.92889|-4.61889,52.90916|-4.72195,52.83611|-4.72778,52.78139|-4.53945,52.79306|-4.47722,52.85500|-4.41416,52.88472|-4.31292,52.90499|-4.23334,52.91499|-4.13569,52.87888|-4.13056,52.77777|-4.05334,52.71666|-4.10639,52.65084|-4.12597,52.60375|-4.08056,52.55333|-4.05972,52.48584|-4.09666,52.38583|-4.14305,52.32027|-4.19361,52.27638|-4.23166,52.24888|-4.52722,52.13083|-4.66945,52.13027|-4.73695,52.10361|-4.76778,52.06444|-4.84445,52.01388|-5.09945,51.96056|-5.23916,51.91638|-5.25889,51.87056|-5.18500,51.86958|-5.11528,51.83333|-5.10257,51.77895|-5.16111,51.76222|-5.24694,51.73027|-5.19111,51.70888|-5.00739,51.70349|-4.90875,51.71249|-4.86111,51.71334|-4.97061,51.67577|-5.02128,51.66861|-5.05139,51.62028|-5.00528,51.60638|-4.94139,51.59416|-4.89028,51.62694|-4.83569,51.64534|-4.79063,51.63340|-4.69028,51.66666|-4.64584,51.72666|-4.57445,51.73416|-4.43611,51.73722|-4.26222,51.67694|-4.19750,51.67916|-4.06614,51.66804|-4.11639,51.63416|-4.17750,51.62235|-4.25055,51.62861|-4.29208,51.60743|-4.27778,51.55666|-4.20486,51.53527|-3.94972,51.61278|-3.83792,51.61999|-3.78166,51.56750|-3.75160,51.52931|-3.67194,51.47388|-3.54250,51.39777|-3.40334,51.37972|-3.27097,51.38014|-3.16458,51.40909|-3.15166,51.45305|-3.11875,51.48750|-3.02111,51.52527|-2.95472,51.53972|-2.89278,51.53861|-2.84778,51.54500|-2.71472,51.58083|-2.66500,51.61500|-2.68666,51.71889|-2.68334,51.76957|-2.65944,51.81806|-2.77861,51.88583|-2.86639,51.92889|-2.91757,51.91569|-2.98889,51.92555|-3.04528,51.97639|-3.08500,52.01930|-3.11250,52.06945|-3.12222,52.11805|-3.07555,52.14804|-3.05125,52.23347|-2.99750,52.28139|-2.95486,52.33117|-3.02195,52.34027|-3.19611,52.41027|-3.19514,52.46722|-3.11916,52.49194|-3.02736,52.49792|-2.98028,52.53083|-3.00792,52.56902|-3.07089,52.55702|-3.11750,52.58666|-3.06666,52.63527|-3.01111,52.71166|-3.06806,52.77027|-3.13708,52.79312|-3.13014,52.88486|-3.08639,52.91611|-2.99389,52.95361|-2.85069,52.93875|-2.79278,52.90207|-2.71945,52.91902|-2.73109,52.96873|-2.77792,52.98514|-2.85695,53.03249|-2.89389,53.10416|-2.91069,53.17014|-2.95528,53.21555|-3.02000,53.24722|-3.08860,53.26001'; + num_arrays = 1; + } else if (pl_name == 'Wales') { + var returnGeom1 = '-3.08860,53.26001|-3.33639,53.34722|-3.38806,53.34361|-3.60986,53.27944|-3.73014,53.28944|-3.85445,53.28444|-4.01861,53.23750|-4.06639,53.22639|-4.15334,53.22556|-4.19639,53.20611|-4.33028,53.11222|-4.36097,53.02888|-4.55278,52.92889|-4.61889,52.90916|-4.72195,52.83611|-4.72778,52.78139|-4.53945,52.79306|-4.47722,52.85500|-4.41416,52.88472|-4.31292,52.90499|-4.23334,52.91499|-4.13569,52.87888|-4.13056,52.77777|-4.05334,52.71666|-4.10639,52.65084|-4.12597,52.60375|-4.08056,52.55333|-4.05972,52.48584|-4.09666,52.38583|-4.14305,52.32027|-4.19361,52.27638|-4.23166,52.24888|-4.52722,52.13083|-4.66945,52.13027|-4.73695,52.10361|-4.76778,52.06444|-4.84445,52.01388|-5.09945,51.96056|-5.23916,51.91638|-5.25889,51.87056|-5.18500,51.86958|-5.11528,51.83333|-5.10257,51.77895|-5.16111,51.76222|-5.24694,51.73027|-5.19111,51.70888|-5.00739,51.70349|-4.90875,51.71249|-4.86111,51.71334|-4.97061,51.67577|-5.02128,51.66861|-5.05139,51.62028|-5.00528,51.60638|-4.94139,51.59416|-4.89028,51.62694|-4.83569,51.64534|-4.79063,51.63340|-4.69028,51.66666|-4.64584,51.72666|-4.57445,51.73416|-4.43611,51.73722|-4.26222,51.67694|-4.19750,51.67916|-4.06614,51.66804|-4.11639,51.63416|-4.17750,51.62235|-4.25055,51.62861|-4.29208,51.60743|-4.27778,51.55666|-4.20486,51.53527|-3.94972,51.61278|-3.83792,51.61999|-3.78166,51.56750|-3.75160,51.52931|-3.67194,51.47388|-3.54250,51.39777|-3.40334,51.37972|-3.27097,51.38014|-3.16458,51.40909|-3.15166,51.45305|-3.11875,51.48750|-3.02111,51.52527|-2.95472,51.53972|-2.89278,51.53861|-2.84778,51.54500|-2.71472,51.58083|-2.66500,51.61500|-2.68666,51.71889|-2.68334,51.76957|-2.65944,51.81806|-2.77861,51.88583|-2.86639,51.92889|-2.91757,51.91569|-2.98889,51.92555|-3.04528,51.97639|-3.08500,52.01930|-3.11250,52.06945|-3.12222,52.11805|-3.07555,52.14804|-3.05125,52.23347|-2.99750,52.28139|-2.95486,52.33117|-3.02195,52.34027|-3.19611,52.41027|-3.19514,52.46722|-3.11916,52.49194|-3.02736,52.49792|-2.98028,52.53083|-3.00792,52.56902|-3.07089,52.55702|-3.11750,52.58666|-3.06666,52.63527|-3.01111,52.71166|-3.06806,52.77027|-3.13708,52.79312|-3.13014,52.88486|-3.08639,52.91611|-2.99389,52.95361|-2.85069,52.93875|-2.79278,52.90207|-2.71945,52.91902|-2.73109,52.96873|-2.77792,52.98514|-2.85695,53.03249|-2.89389,53.10416|-2.91069,53.17014|-2.95528,53.21555|-3.02000,53.24722|-3.08860,53.26001'; + num_arrays = 1; + } else if (pl_name == 'Northern Ireland') { + var returnGeom1 = '-8.17166,54.46388|-8.06555,54.37277|-7.94139,54.29944|-7.87576,54.28499|-7.86834,54.22764|-7.81805,54.19916|-7.69972,54.20250|-7.55945,54.12694|-7.31334,54.11250|-7.14584,54.22527|-7.17555,54.28916|-7.16084,54.33666|-7.05834,54.41000|-6.97445,54.40166|-6.92695,54.37916|-6.87305,54.34208|-6.85111,54.28972|-6.73473,54.18361|-6.65556,54.06527|-6.60584,54.04444|-6.44750,54.05833|-6.33889,54.11555|-6.26697,54.09983|-6.17403,54.07222|-6.10834,54.03638|-6.04389,54.03139|-5.96834,54.06389|-5.88500,54.11639|-5.87347,54.20916|-5.82500,54.23958|-5.74611,54.24806|-5.65556,54.22701|-5.60834,54.24972|-5.55916,54.29084|-5.57334,54.37704|-5.64502,54.49267|-5.70472,54.53361|-5.68055,54.57306|-5.59972,54.54194|-5.55097,54.50083|-5.54216,54.44903|-5.54643,54.40527|-5.50672,54.36444|-5.46111,54.38555|-5.43132,54.48596|-5.47945,54.53638|-5.53521,54.65090|-5.57431,54.67722|-5.62916,54.67945|-5.73674,54.67383|-5.80305,54.66138|-5.88257,54.60652|-5.92445,54.63180|-5.86681,54.68972|-5.81903,54.70972|-5.74672,54.72452|-5.68775,54.76335|-5.70931,54.83166|-5.74694,54.85361|-5.79139,54.85139|-6.03611,55.05778|-6.04250,55.10277|-6.03444,55.15458|-6.10125,55.20945|-6.14584,55.22069|-6.25500,55.21194|-6.37639,55.23916|-6.51556,55.23305|-6.61334,55.20722|-6.73028,55.18027|-6.82472,55.16806|-6.88972,55.16777|-6.96695,55.15611|-6.99416,55.11027|-7.05139,55.04680|-7.09500,55.03694|-7.25251,55.07059|-7.32639,55.04527|-7.40639,54.95333|-7.45805,54.85777|-7.55334,54.76277|-7.73916,54.71054|-7.82576,54.73416|-7.92639,54.70054|-7.85236,54.63388|-7.77750,54.62694|-7.83361,54.55389|-7.95084,54.53222|-8.04695,54.50722|-8.17166,54.46388'; + num_arrays = 1; + } else if (pl_name == 'NC') { + var returnGeom1 = '-81.65876,36.60938|-81.70390,36.55513|-81.70639,36.50804|-81.74665,36.39777|-81.90723,36.30804|-82.03195,36.12694|-82.08416,36.10146|-82.12826,36.11020|-82.21500,36.15833|-82.36375,36.11347|-82.43472,36.06013|-82.46236,36.01708|-82.56006,35.96263|-82.60042,35.99638|-82.62308,36.06121|-82.73500,36.01833|-82.84612,35.94944|-82.90451,35.88819|-82.93555,35.83846|-83.16000,35.76236|-83.24222,35.71944|-83.49222,35.57111|-83.56847,35.55861|-83.64416,35.56471|-83.73499,35.56638|-83.88222,35.51791|-83.98361,35.44944|-84.03639,35.35444|-84.04964,35.29117|-84.09042,35.25986|-84.15084,35.25388|-84.20521,35.25722|-84.29284,35.22596|-84.32471,34.98701|-83.09778,35.00027|-82.77722,35.09138|-82.59639,35.14972|-82.37999,35.21500|-82.27362,35.20583|-81.41306,35.17416|-81.05915,35.15333|-80.92666,35.10695|-80.78751,34.95610|-80.79334,34.82555|-79.66777,34.80694|-79.11555,34.34527|-78.57222,33.88166|-78.51806,33.87999|-78.43721,33.89804|-78.23735,33.91986|-78.15389,33.91471|-78.06974,33.89500|-78.02597,33.88936|-77.97611,33.94276|-77.95299,33.99243|-77.94499,34.06499|-77.92728,34.11756|-77.92250,33.99194|-77.92264,33.93715|-77.88215,34.06166|-77.86222,34.15083|-77.83501,34.19194|-77.75724,34.28527|-77.68222,34.36555|-77.63667,34.39805|-77.57363,34.43694|-77.45527,34.50403|-77.38173,34.51646|-77.37905,34.56294|-77.38572,34.61260|-77.40944,34.68916|-77.38847,34.73304|-77.33097,34.63992|-77.35024,34.60099|-77.30958,34.55972|-77.09424,34.67742|-76.75994,34.76659|-76.68325,34.79749|-76.66097,34.75781|-76.62611,34.71014|-76.50063,34.73617|-76.48138,34.77638|-76.38305,34.86423|-76.34326,34.88194|-76.27181,34.96263|-76.35125,35.02221|-76.32354,34.97429|-76.45319,34.93524|-76.43395,34.98782|-76.45356,35.06676|-76.52917,35.00444|-76.63382,34.98242|-76.69722,34.94887|-76.75306,34.90526|-76.81636,34.93944|-76.89000,34.95388|-76.93180,34.96957|-76.96501,34.99777|-77.06816,35.14978|-76.97639,35.06806|-76.86722,35.00000|-76.80531,34.98559|-76.72708,35.00152|-76.60402,35.07416|-76.56555,35.11486|-76.57305,35.16013|-76.66489,35.16694|-76.56361,35.23361|-76.48750,35.22582|-76.46889,35.27166|-76.50298,35.30791|-76.83251,35.39222|-77.02305,35.48694|-77.04958,35.52694|-76.91292,35.46166|-76.65250,35.41499|-76.61611,35.45888|-76.63195,35.52249|-76.58820,35.55104|-76.51556,35.53194|-76.56711,35.48494|-76.52251,35.40416|-76.46195,35.37221|-76.13319,35.35986|-76.04111,35.42416|-76.00223,35.46610|-75.97958,35.51666|-75.89362,35.57555|-75.83834,35.56694|-75.78944,35.57138|-75.74076,35.61846|-75.72084,35.69263|-75.72084,35.81451|-75.74917,35.87791|-75.78333,35.91972|-75.85083,35.97527|-75.94333,35.91777|-75.98944,35.88054|-75.98854,35.79110|-75.99388,35.71027|-76.02875,35.65409|-76.10320,35.66041|-76.13563,35.69239|-76.04475,35.68436|-76.04167,35.74916|-76.05305,35.79361|-76.05305,35.87375|-76.02653,35.96222|-76.07751,35.99319|-76.17472,35.99596|-76.27917,35.91915|-76.37986,35.95763|-76.42014,35.97874|-76.55375,35.93971|-76.66222,35.93305|-76.72952,35.93984|-76.73392,36.04760|-76.75384,36.09477|-76.76028,36.14513|-76.74610,36.22818|-76.70458,36.24673|-76.72764,36.16736|-76.71021,36.11752|-76.69117,36.07165|-76.65979,36.03312|-76.49527,36.00958|-76.37138,36.07694|-76.37084,36.14999|-76.21417,36.09471|-76.07591,36.17910|-76.18361,36.26915|-76.19965,36.31739|-76.13986,36.28805|-76.04274,36.21974|-76.00465,36.18110|-75.95287,36.19241|-75.97604,36.31138|-75.93895,36.28381|-75.85271,36.11069|-75.79315,36.07385|-75.79639,36.11804|-75.88333,36.29554|-75.94665,36.37194|-75.98694,36.41166|-76.03473,36.49666|-76.02899,36.55000|-78.44234,36.54986|-78.56594,36.55799|-80.27556,36.55110|-81.15361,36.56499|-81.38722,36.57695|-81.65876,36.60938'; + num_arrays = 1; + } else { + // show nothing + } + +/* + // Set borders and fill parameters ------- Not finished yet. --------------- + if (map.mapTypeId == 'roadmap') { + var colorStroke = "#444444"; + var weightStroke = 1.2; + var opacityFill = 0.1; + } else if (map.mapTypeId == 'satellite') { + var colorStroke = "#000000"; + var weightStroke = 0.1; + var opacityFill = 0; + } else if (map.mapTypeId == 'hybrid') { + var colorStroke = "#ffffff"; + var weightStroke = 1.2; + var opacityFill = 0; + } else if (map.mapTypeId == 'terrain') { + var colorStroke = "#ffffff"; + var weightStroke = 1.2; + var opacityFill = 0; + } + // ------------------------------------------------------------------------- +*/ + + // Calculate polygon + if (num_arrays > 0) { + var geomAry1 = new Array(); + geomAry1 = returnGeom1.split('|'); + var XY1 = new Array(); + var points1 = []; + for (var i = 0; i < geomAry1.length; i++) { + XY1 = geomAry1[i].split(','); + points1.push( new google.maps.LatLng(parseFloat(XY1[1]),parseFloat(XY1[0]))) ; + } + // Construct the polygon + polygon1 = new google.maps.Polygon({ + paths: points1, + strokeColor: "#888888", + strokeOpacity: 0.8, + strokeWeight: 1, + fillColor: "#ff0000", + fillOpacity: 0.15 + }); + polygon1.setMap(map); + } + + // If showing two countries at the same time (num_arrays > 1) -------------- + if (num_arrays > 1) { + // Calculate polygon + var geomAry2 = new Array(); + geomAry2 = returnGeom2.split('|'); + var XY2 = new Array(); + var points2 = []; + for (var i = 0; i < geomAry2.length; i++) { + XY2 = geomAry2[i].split(','); + points2.push( new google.maps.LatLng(parseFloat(XY2[1]),parseFloat(XY2[0]))) ; + } + // Construct the polygon + polygon2 = new google.maps.Polygon({ + paths: points2, + strokeColor: "#888888", + strokeOpacity: 0.8, + strokeWeight: 1, + fillColor: "#ff0000", + fillOpacity: 0.15 + }); + polygon2.setMap(map); + } + +} + diff --git a/modules_v2/googlemap/wt_v3_street_view.php b/modules_v2/googlemap/wt_v3_street_view.php new file mode 100644 index 0000000000..f4e837865a --- /dev/null +++ b/modules_v2/googlemap/wt_v3_street_view.php @@ -0,0 +1,424 @@ +<?php +/** + * Displays a streetview map + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Googlemaps v3 + * @version $Id$ + * + * @author Brian Holland (windmillway) + */ + ?> + +<html> +<head> +<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> +<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> + +<script type="text/javascript"> + + // Following function creates an array of the google map parameters passed --------------------- + var qsParm = new Array(); + function qs() { + var query = window.location.search.substring(1); + var parms = query.split('&'); + for (var i=0; i<parms.length; i++) { + var pos = parms[i].indexOf('='); + if (pos > 0) { + var key = parms[i].substring(0,pos); + var val = parms[i].substring(pos+1); + qsParm[key] = val; + } + } + } + qsParm['x'] = null; + qsParm['y'] = null; + qs(); + // --------------------------------------------------------------------------------------------- + + + // --------------------------------------------------------------------------------------------- + +var geocoder = new google.maps.Geocoder(); + +function geocodePosition(pos) { + geocoder.geocode({ + latLng: pos + }, function(responses) { + if (responses && responses.length > 0) { + updateMarkerAddress(responses[0].formatted_address); + } else { + updateMarkerAddress('Cannot determine address at this location.'); + } + }); +} + +function updateMarkerStatus(str) { + document.getElementById('markerStatus').innerHTML = str; +} + + + +//function updateMarkerBearing(bearing) { +// document.getElementById('sv_bearText').value; = str; +//} + +// var bearing = document.getElementById('sv_bearText').value; + +function updateMarkerPosition(latLng) { + // document.getElementById('sv_latiText').value = pos.lat()+"\u00B0"; + // document.getElementById('sv_longText').value = pos.lng()+"\u00B0"; + document.getElementById('info').innerHTML = [ + latLng.lat(), + latLng.lng() + ].join(', '); +} + +function updateMarkerAddress(str) { + document.getElementById('address').innerHTML = str; +} + +function roundNumber(num, dec) { + var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec); + return result; +} + +function initialize() { + + var x = qsParm['x']; + var y = qsParm['y']; + var b = parseFloat(qsParm['b']); + var p = parseFloat(qsParm['p']); + var m = parseFloat(qsParm['m']); + + var latLng = new google.maps.LatLng(y, x); + + // Create the map and mapOptions + var mapOptions = { + zoom: 16, + center: latLng, + mapTypeId: google.maps.MapTypeId.ROADMAP, // ROADMAP, SATELLITE, HYBRID, TERRAIN + mapTypeControlOptions: { + style: google.maps.MapTypeControlStyle.DROPDOWN_MENU // DEFAULT, DROPDOWN_MENU, HORIZONTAL_BAR + }, + navigationControl: true, + navigationControlOptions: { + position: google.maps.ControlPosition.TOP_RIGHT, // BOTTOM, BOTTOM_LEFT, LEFT, TOP, etc + style: google.maps.NavigationControlStyle.SMALL // ANDROID, DEFAULT, SMALL, ZOOM_PAN + }, + streetViewControl: false, // Show Pegman or not + scrollwheel: true + }; + + var map = new google.maps.Map(document.getElementById('mapCanvas'), mapOptions); + + var bearing = b; + if (bearing < 0) { + bearing=bearing+360; + } + var pitch = p; + var svzoom = m; + + var imageNum = Math.round(bearing/22.5) % 16; + + var image = new google.maps.MarkerImage("http://mk.mapchannels.com/panda-" + imageNum + ".png", + // This marker is 50 pixels wide by 50 pixels tall. + new google.maps.Size(50, 50), + // The origin for this image is 0,0. + new google.maps.Point(0, 0), + // The anchor for this image is the base of the flagpole at 0,32. + new google.maps.Point(26, 36) + ); + + var shape = { + coord: [1, 1, 1, 20, 18, 20, 18 , 1], + type: 'poly' + }; + + var marker = new google.maps.Marker({ + icon: image, + // shape: shape, + position: latLng, + title: 'Drag me to a Blue Street', + map: map, + draggable: true + }); + + + // ===Next, get the map's default panorama and set up some defaults. =========================== + + // --- First check if Browser supports html5 --- + var browserName=navigator.appName; + if (browserName=="Microsoft Internet Explorer") { + var render_type = ''; + } else { + var render_type = 'html5'; + } + + // --- Create the panorama --- + var panoramaOptions = { + navigationControl: false, + navigationControlOptions: { + position: google.maps.ControlPosition.TOP_RIGHT, // BOTTOM, BOTTOM_LEFT, LEFT, TOP, etc + style: google.maps.NavigationControlStyle.SMALL // ANDROID, DEFAULT, SMALL, ZOOM_PAN + }, + linksControl: false, + addressControl: false, + addressControlOptions: { + style: { + // display: 'none', // USE CSS notation here + // backgroundColor: 'red' + } + }, + position: latLng, + mode: render_type, + pov: { + heading: bearing, + pitch: pitch, + zoom: svzoom + } + }; + panorama = new google.maps.StreetViewPanorama(document.getElementById("mapCanvas"), panoramaOptions); + panorama.setPosition(latLng); + + + // Enable navigator contol and address control to be toggled with right mouse button ------- + var aLink = document.createElement('a'); + aLink.href = "javascript:void(0)"; onmousedown=function(e) { + if (parseInt(navigator.appVersion)>3) { + var clickType=1; + if (navigator.appName=="Netscape") { + clickType=e.which; + } else { + clickType=event.button; + } + if (clickType==1) { + self.status='Left button!'; + } + if (clickType!=1) { + if (panorama.get('addressControl') == false) { + panorama.set('navigationControl', false); + panorama.set('addressControl', true); + panorama.set('linksControl', true); + } else { + panorama.set('navigationControl', false); + panorama.set('addressControl', false); + panorama.set('linksControl', false); + } + } + } + return true; + if (parseInt(navigator.appVersion)>3) { + document.onmousedown = mouseDown; + if (navigator.appName=="Netscape") + document.captureEvents(Event.MOUSEDOWN); + } + }; + panorama.controls[google.maps.ControlPosition.TOP_RIGHT].push(aLink); + // ----------------------------------------------------------------------------------------- + + + // Update current position info. + updateMarkerPosition(latLng); + geocodePosition(latLng); + + // Add dragging event listeners. + google.maps.event.addListener(marker, 'dragstart', function() { + updateMarkerAddress('Dragging...'); + }); + + google.maps.event.addListener(marker, 'drag', function() { + updateMarkerStatus('Dragging...'); + updateMarkerPosition(marker.getPosition()); + panorama.setPosition(marker.getPosition()); + }); + + google.maps.event.addListener(marker, 'dragend', function() { + updateMarkerStatus('Drag ended'); + geocodePosition(marker.getPosition()); + }); + + google.maps.event.addListener(panorama, 'pov_changed', function() { + povLevel = panorama.getPov(); + parent.document.getElementById('sv_bearText').value = roundNumber(povLevel.heading, 2)+"\u00B0"; + parent.document.getElementById('sv_elevText').value = roundNumber(povLevel.pitch, 2)+"\u00B0"; + parent.document.getElementById('sv_zoomText').value = roundNumber(povLevel.zoom, 2); + }); + + google.maps.event.addListener(panorama, 'position_changed', function() { + pos = panorama.getPosition(); + marker.setPosition(pos); + parent.document.getElementById('sv_latiText').value = pos.lat()+"\u00B0"; + parent.document.getElementById('sv_longText').value = pos.lng()+"\u00B0"; + }); + + + //============================================================================================== + // CREATE THE MAP PANE STREETVIEW BLUE STREETS + //====================================================================================== + // First lets create the Traffic ImageMap + //-------------------------------------------------------------------------------------- + var traffic = new google.maps.ImageMapType({ + getTileUrl: function(coord, zoom) { + var X = coord.x % (1 << zoom); // wrap + return "http://mt3.google.com/mapstt?" + + "zoom=" + zoom + "&x=" + X + "&y=" + coord.y + "&client=api"; + }, + tileSize: new google.maps.Size(256, 256), + isPng: true + }); + //====================================================================================== + // Now add the ImageMapType overlay to the map + //-------------------------------------------------------------------------------------- + map.overlayMapTypes.push(traffic); + map.overlayMapTypes.push(null); + //====================================================================================== + // Now create the StreetView ImageMap + //-------------------------------------------------------------------------------------- + // http://cbk0.google.com/cbk?output=overlay&zoom=12&x=2045&y=1361&cb_client=api + var street = new google.maps.ImageMapType({ + getTileUrl: function(coord, zoom) { + var X = coord.x % (1 << zoom); // wrap + return "http://cbk0.google.com/cbk?output=overlay&" + + "zoom=" + zoom + "&x=" + X + "&y=" + coord.y + "&cb_client=api"; + }, + tileSize: new google.maps.Size(256, 256), + isPng: true + }); + //====================================================================================== + // Add the Street view Image Map + //-------------------------------------------------------------------------------------- + map.overlayMapTypes.setAt(1, street); + //============================================================================================== + + +} // end init + +var mapbutt = "<?php echo $_GET['map']; ?>"; +var svbutt = "<?php echo $_GET['streetview']; ?>"; +function toggleStreetView() { + var toggle = panorama.getVisible(); + if (toggle == false) { + panorama.setVisible(true); + document.myForm.butt1.value=mapbutt; + } else { + panorama.setVisible(false); + document.myForm.butt1.value=svbutt; + } +} + +function toggleStreetViewControls() { + if (panorama.get('addressControl') == false) { + panorama.set('navigationControl', true); + panorama.set('addressControl', true); + panorama.set('linksControl', true); + document.myForm.butt0.value="SV controls OFF"; + } else { + panorama.set('navigationControl', false); + panorama.set('addressControl', false); + panorama.set('linksControl', false); + document.myForm.butt0.value="SV controls ON "; + } +} + + + +function resetview() { + initialize(); + document.myForm.butt0.value="SV controls ON "; +} + +// Onload handler to fire off the app. +google.maps.event.addDomListener(window, 'load', initialize); + +</script> +</head> + +<body> + + <style> +/* Fixed widths don't work well with different DPI settings or some translations + #butt0 { + width:105px; + } + #butt1{ + width:120px; + } + #butt2 { + width:90px; + } +*/ + #mapCanvas { + width: 520px; + height: 350px; + margin: 0 auto; + margin-top: -10px; + border:1px solid black; + // float: left; + } + #infoPanel { + display: none; + margin: 0 auto; + margin-top: 5px; + //float: left; + //margin-left: 10px; + } + #infoPanel div { + display: none; + margin-bottom: 5px; + background: #ffffff; + } + div { + text-align: center; + } + </style> + + <div id="toggle"> + <form name="myForm" title="myForm"> +<!-- + <input type="button" value="street" name="sv_btn" onClick="addStreetViewOverlay()"></input> +--> + + <?php + $map = $_GET["map"]; + $reset = $_GET["reset"]; + echo "<input id=\"butt0\" name =\"butt0\" type=\"button\" value=\"SV controls ON \" onclick=\"toggleStreetViewControls();\"></input>"; + echo "<input id=\"butt1\" name =\"butt1\" type=\"button\" value=\"$map\" onclick=\"toggleStreetView();\"></input>"; + echo "<input id=\"butt2\" name =\"butt2\" type=\"button\" value=\"$reset\" onclick=\"resetview();\"></input>"; + ?> + + </form> + </div> + + <div id="mapCanvas"> + + </div> + + <div id="infoPanel"> + <!-- <b>Marker status:</b> --> + <div id="markerStatus"><i>Click and drag the marker.</i></div> +<!-- <b>Current position:</b> --> + <div id="info" ></div> +<!-- <b>Closest matching address:</b> --> + <div id="address"></div> + </div> + +</body> +</html> diff --git a/modules_v2/html/module.php b/modules_v2/html/module.php new file mode 100644 index 0000000000..7b2ac05343 --- /dev/null +++ b/modules_v2/html/module.php @@ -0,0 +1,360 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class html_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('HTML'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('This is an HTML block that you can place on your page to add any sort of message you may want. You can insert references to information from your GEDCOM into the HTML text.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $GEDCOM, $WT_IMAGES, $TEXT_DIRECTION, $MULTI_MEDIA; + + // Only show this block for certain languages + $languages=get_block_setting($block_id, 'languages'); + if ($languages && !in_array(WT_LOCALE, explode(',', $languages))) { + return; + } + + /* + * Select GEDCOM + */ + $gedcom=get_block_setting($block_id, 'gedcom'); + switch($gedcom) { + case '__current__': + break; + case '': + break; + case '__default__': + $GEDCOM=get_site_setting('DEFAULT_GEDCOM'); + if (!$GEDCOM) { + foreach (get_all_gedcoms() as $gedcom) { + $GEDCOM=$gedcom; + break; + } + } + break; + default: + if (get_gedcom_setting(get_gedcom_from_id($gedcom), 'imported')) { + $GEDCOM = $gedcom; + } + break; + } + + /* + * Retrieve text, process embedded variables + */ + $title_tmp = get_block_setting($block_id, 'title'); + $html = get_block_setting($block_id, 'html'); + + if ( (strpos($title_tmp, '#')!==false) || (strpos($html, '#')!==false) ) { + $stats = new WT_Stats($GEDCOM); + $title_tmp = $stats->embedTags($title_tmp); + $html = $stats->embedTags($html); + } + + /* + * Restore Current GEDCOM + */ + $GEDCOM = WT_GEDCOM; + + /* + * Start Of Output + */ + $id=$this->getName().$block_id; + $title=''; + if ($ctype=='gedcom' && WT_USER_GEDCOM_ADMIN || $ctype=='user' && WT_USER_ID) { + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">" + ."<img class=\"adminicon\" src=\"{$WT_IMAGES['admin']}\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure').'" /></a>'; + $title .= help_link('index_htmlplus'); + } + $title.=$title_tmp; + + $content = $html; + + if (get_block_setting($block_id, 'show_timestamp', false)) { + $content.='<br/>'.format_timestamp(get_block_setting($block_id, 'timestamp', time())); + } + + if ($template) { + if (get_block_setting($block_id, 'block', false)) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'gedcom', safe_POST('gedcom')); + set_block_setting($block_id, 'title', $_POST['title']); + set_block_setting($block_id, 'html', $_POST['html']); + set_block_setting($block_id, 'show_timestamp', safe_POST_bool('show_timestamp')); + set_block_setting($block_id, 'timestamp', safe_POST('timestamp')); + $languages=array(); + foreach (WT_I18N::installed_languages() as $code=>$name) { + if (safe_POST_bool('lang_'.$code)) { + $languages[]=$code; + } + } + set_block_setting($block_id, 'languages', implode(',', $languages)); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $templates=array( + WT_I18N::translate('Keyword examples')=> + '#getAllTagsTable#', + + WT_I18N::translate('Narrative description')=> + /* I18N: do not translate the #keywords# */ WT_I18N::translate('This GEDCOM (family tree) was last updated on #gedcomUpdated#. There are #totalSurnames# surnames in this family tree. The earliest recorded event is the #firstEventType# of #firstEventName# in #firstEventYear#. The most recent event is the #lastEventType# of #lastEventName# in #lastEventYear#.<br /><br />If you have any comments or feedback please contact #contactWebmaster#.'), + + WT_I18N::translate('GEDCOM statistics')=> + '<div class="gedcom_stats"> + <span style="font-weight: bold"><a href="index.php?command=gedcom">#gedcomTitle#</a></span><br /> + '.WT_I18N::translate('This GEDCOM was created using <b>%1$s</b> on <b>%2$s</b>.', '#gedcomCreatedSoftware#', '#gedcomDate#').' + <table id="keywords"> + <tr> + <td valign="top" class="width20"> + <table cellspacing="1" cellpadding="0"> + <tr> + <td class="facts_label">'.WT_I18N::translate('Individuals').'</td> + <td class="facts_value"> <a href="indilist.php?surname_sublist=no">#totalIndividuals#</a></td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Total surnames').'</td> + <td class="facts_value"> <a href="indilist.php?surname_sublist=yes">#totalSurnames#</a></td> + </tr> + <tr> + <td class="facts_label">'. WT_I18N::translate('Families').'</td> + <td class="facts_value"> <a href="famlist.php">#totalFamilies#</a></td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Sources').'</td> + <td class="facts_value"> <a href="sourcelist.php">#totalSources#</a></td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Media objects').'</td> + <td class="facts_value"> #totalMedia#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Repositories').'</td> + <td class="facts_value"> #totalRepositories#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Other records').'</td> + <td class="facts_value"> #totalOtherRecords#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Total events').'</td> + <td class="facts_value"> #totalEvents#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Males').'</td> + <td class="facts_value"> #totalSexMales# [#totalSexMalesPercentage#%]</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Females').'</td> + <td class="facts_value"> #totalSexFemales# [#totalSexFemalesPercentage#%]</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Total users').'</td> + <td class="facts_value"> #totalUsers#</td> + </tr> + </table> + </td> + <td><br /></td> + <td valign="top"> + <table cellspacing="1" cellpadding="0" border="0"> + <tr> + <td class="facts_label">'.WT_I18N::translate('Earliest birth year').'</td> + <td class="facts_value"> #firstBirthYear# </td> + <td class="facts_value">#firstBirth#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Latest birth year').'</td> + <td class="facts_value"> #lastBirthYear# </td> + <td class="facts_value">#lastBirth#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Earliest death year').'</td> + <td class="facts_value"> #firstDeathYear# </td> + <td class="facts_value">#firstDeath#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Latest death year').'</td> + <td class="facts_value"> #lastDeathYear# </td> + <td class="facts_value">#lastDeath#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Person who lived the longest').'</td> + <td class="facts_value"> #longestLifeAge# </td> + <td class="facts_value">#longestLife#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Average age at death').'</td> + <td class="facts_value"> #averageLifespan# </td> + <td class="facts_value"></td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Family with the most children').'</td> + <td class="facts_value"> #largestFamilySize# </td> + <td class="facts_value">#largestFamily#</td> + </tr> + <tr> + <td class="facts_label">'.WT_I18N::translate('Average number of children per family').'</td> + <td class="facts_value"> #averageChildren#</td> + <td class="facts_value"></td> + </tr> + </table> + </td> + </tr> + </table><br /> + <span style="font-weight: bold">'.WT_I18N::translate('Most Common Surnames').'</span><br /> + #commonSurnames# + </div>' + ); + + $title=get_block_setting($block_id, 'title'); + $html=get_block_setting($block_id, 'html'); + // title + echo '<tr><td class="descriptionbox wrap width33">', + translate_fact('TITL'), + help_link('index_htmlplus_title'), + '</td><td class="optionbox"><input type="text" name="title" size="30" value="', htmlspecialchars($title), '" /></td></tr>'; + + // templates + echo '<tr><td class="descriptionbox wrap width33">', + WT_I18N::translate('Templates'), + help_link('index_htmlplus_template'), + '</td><td class="optionbox">' + ; + if (array_key_exists('ckeditor', WT_Module::getActiveModules())) { + echo WT_JS_START, + 'function loadTemplate(html) {', + ' var oEditor = CKEDITOR.instances["html"];', + ' oEditor.setData(html);', + '}', + WT_JS_END, + '<select name="template" onchange="loadTemplate(document.block.template.options[document.block.template.selectedIndex].value);">'; + } else { + echo '<select name="template" onchange="document.block.html.value=document.block.template.options[document.block.template.selectedIndex].value;">'; + } + echo '<option value="', htmlspecialchars($html), '">', WT_I18N::translate('Custom'), '</option>'; + foreach ($templates as $title=>$template) { + echo '<option value="', htmlspecialchars($template), '">', $title, '</option>'; + } + echo '</select></td></tr>'; + + // gedcom + $gedcoms = get_all_gedcoms(); + $gedcom=get_block_setting($block_id, 'gedcom'); + if (count($gedcoms) > 1) { + if ($gedcom == '__current__') {$sel_current = ' selected="selected"';} else {$sel_current = '';} + if ($gedcom == '__default__') {$sel_default = ' selected="selected"';} else {$sel_default = '';} + echo '<tr><td class="descriptionbox wrap width33">', + WT_I18N::translate('Family tree'), + help_link('index_htmlplus_gedcom'), + '</td><td class="optionbox">', + '<select name="gedcom">', + '<option value="__current__"', $sel_current, '>', WT_I18N::translate('Current'), '</option>', + '<option value="__default__"', $sel_default, '>', WT_I18N::translate('Default'), '</option>'; + foreach ($gedcoms as $ged_id=>$ged_name) { + if ($ged_name == $gedcom) {$sel = ' selected="selected"';} else {$sel = '';} + echo '<option value="', $ged_name, '"', $sel, '>', PrintReady(get_gedcom_setting($ged_id, 'title')), '</option>'; + } + echo '</select></td></tr>'; + } + + // html + echo '<tr><td class="descriptionbox wrap width33">', + WT_I18N::translate('Content'), + help_link('index_htmlplus_content'), + '<br /><br /></td>', + '<td class="optionbox">'; + if (array_key_exists('ckeditor', WT_Module::getActiveModules())) { + // use CKeditor module + require_once WT_ROOT.WT_MODULES_DIR.'ckeditor/ckeditor.php'; + $oCKeditor = new CKEditor(); + $oCKeditor->basePath = WT_MODULES_DIR.'ckeditor/'; + $oCKeditor->config['width'] = 700; + $oCKeditor->config['height'] = 400; + $oCKeditor->config['AutoDetectLanguage'] = false ; + $oCKeditor->config['DefaultLanguage'] = 'en'; + $oCKeditor->editor('html', $html); + } else { + //use standard textarea + echo '<textarea name="html" rows="10" cols="80">', htmlspecialchars($html), '</textarea>'; + } + echo '</td></tr>'; + + $show_timestamp=get_block_setting($block_id, 'show_timestamp', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show the date and time of update'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('show_timestamp', $show_timestamp); + echo '<input type="hidden" name="timestamp" value="'.time().'">'; + echo '</td></tr>'; + + $languages=get_block_setting($block_id, 'languages'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show this block for which languages?'); + echo '</td><td class="optionbox">'; + echo edit_language_checkboxes('lang_', $languages); + echo '</td></tr>'; + } +} diff --git a/modules_v2/individual_ext_report/module.php b/modules_v2/individual_ext_report/module.php new file mode 100644 index 0000000000..09d5698d1b --- /dev/null +++ b/modules_v2/individual_ext_report/module.php @@ -0,0 +1,69 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class individual_ext_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Close Relatives Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of a person and their close relatives.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_USER; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + global $controller; + + if ($controller && isset($controller->pid)) { + $pid='&pid='.$controller->pid; + } elseif ($controller && isset($controller->rootid)) { + $pid='&pid='.$controller->rootid; + } else { + $pid=''; + } + + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'.$pid); + $menu->addIcon('indis'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/individual_ext_report/report.xml b/modules_v2/individual_ext_report/report.xml new file mode 100644 index 0000000000..c650f0b6e0 --- /dev/null +++ b/modules_v2/individual_ext_report/report.xml @@ -0,0 +1,644 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Close Relatives Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of a person and their close relatives.')" /></Description> + <Input name="pid" type="text" default="" lookup="INDI"><var var="WT_I18N::translate('Enter Individual ID')"/></Input> + <Input name="relatives" type="select" options="child-family=>WT_I18N::translate('Parents and siblings')|spouse-family=>WT_I18N::translate('Spouses and children')|direct-ancestors=>WT_I18N::translate('Direct line ancestors')|ancestors=>WT_I18N::translate('Direct line ancestors and their families')|descendants=>WT_I18N::translate('Descendants')|all=>WT_I18N::translate('All')"><var var="WT_I18N::translate('Choose relatives')"/></Input> + <Input name="maxgen" type="select" default="4" options="*=>*|1=>1|2=>2|3=>3|4=>4|5=>5|6=>6|7=>7|8=>8|9=>9|10=>10"><var var="WT_I18N::translate('Generations')"/></Input> + <Input name="sortby" type="select" default="BIRT:DATE" options="none=>WT_I18N::translate('None')|BIRT:DATE=>WT_I18N::translate('Date of birth')|NAME=>WT_I18N::translate('Name')"><var var="WT_I18N::translate('Sort by')"/></Input> + <Input name="sources" type="checkbox" default="1"><var var="WT_I18N::translate('Show sources?')"/></Input> + <Input name="notes" type="checkbox" default="1"><var var="WT_I18N::translate('Show notes?')"/></Input> + <Input name="photos" type="select" default="highlighted" options="none=>WT_I18N::translate('None')|all=>WT_I18N::translate('All')|highlighted=>WT_I18N::translate('Highlighted image')"><var var="WT_I18N::translate('Show photos?')"/></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + <Input name="colors" type="checkbox" default="1"><var var="WT_I18N::translate('Use colors')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="18"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8"/> + <!-- Links to sources - required style name by the generator --> + <Style name="footnotenum" font="$fonts" size="6"/> + <!-- Source text - FootnoteTexts - required style name by the generator --> + <Style name="footnote" font="$fonts" size="8"/> + <!-- Section title --> + <Style name="title" font="$fonts" size="9" style="B"/> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Page Header text --> + <Style name="pageheader" font="$fonts" size="14"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9"/> + <!-- Facts text --> + <Style name="fact" font="$fonts" size="8"/> + <!-- Individual names in text boxes --> + <Style name="name" font="$fonts" size="10"/> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + + <SetVar name="ignore" value="CHAN,CHIL,FAMC,FAMS,HUSB,NAME,NOTE,OBJE,RESN,SEX,SOUR,TITL,WIFE,_UID,_WT_OBJE_SORT"/> + <!-- Setup colors --> + <!-- Section title background color --> + <SetVar name="stbgcolor" value="#AAAAAA"/> + <SetVar name="mbgcolor" value=""/> + <SetVar name="fbgcolor" value=""/> + <SetVar name="ugbgcolor" value=""/> + <SetVar name="fbbgcolor" value=""/> + <SetVar name="tcolor" value=""/> + <!-- Use colors --> + <if condition="$colors==1"> + <!-- Section title background color --> + <SetVar name="stbgcolor" value="#9CA3D4"/> + <!-- Male background color --> + <SetVar name="mbgcolor" value="#D6E0EA"/> + <!-- Female background color --> + <SetVar name="fbgcolor" value="#E9DAF1"/> + <!-- Unknown gender --> + <SetVar name="ugbgcolor" value="#FFFFFF"/> + <!-- Fact boxes --> + <SetVar name="fbbgcolor" value="#D1D9FF"/> + <!-- Text color - black --> + <SetVar name="tcolor" value="#000000"/> + </if> + + <!-- New Page controller --> + <SetVar name="newpage" value="0"/> + <!-- New Page for Sources controller if SOUR exist --> + <SetVar name="source_exist" value="0"/> + + <!-- set the default widths --> + <SetVar name="dwidth" value="200"/> + <SetVar name="pwidth" value="436"/> + <!-- space height --> + <SetVar name="sheight" value="15"/> + + <SetVar name="width" value="433"/> + <SetVar name="width1" value="418"/> + <SetVar name="width2" value="233"/> + + <!-- change the widths for no pictures --> + <if condition="$photos=='none'"> + <SetVar name="width" value="0"/> + <SetVar name="width1" value="0"/> + <SetVar name="width2" value="0"/> + </if> + + <Doc pageSize="$pageSize"> + <Header> + <Cell align="center" newline="1" style="header"><var var="WT_I18N::translate('Close Relatives Report')"/></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')"/> <PageNum/> / <TotalPages/></Cell> + </Header> + + <Body> + <!-- set the gedcom context for this individual --> + <Relatives id="$pid" group="$relatives" maxgen="$maxgen" sortby="$sortby"> + <if condition="$newpage==1"> + <NewPage/> + </if> + <SetVar name="newpage" value="1"/> + <SetVar name="sex" value="@SEX"/> + <SetVar name="mid" value="@ID"/> + <!-- Individual name --> + <TextBox newline="1"> + <Text style="pageheader"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + <!-- show the persons images --> + <if condition="$photos=='all'"> + <!-- This is an image not a text, so don't use text padding + Reset also the last height after all the images has been printed + set pagecheck to 0, the image function check is too + and "trick" the X-position back to the margin with a newline --> + <TextBox left="$pwidth" newline="1" pagecheck="0" padding="0" reseth="1" width="80"> + <RepeatTag tag="OBJE"> + <Image file="@FILE" width="80" ln="N"/> + </RepeatTag> + </TextBox> + </if> + <!-- show the person's Highlighted Image --> + <if condition="$photos=='highlighted'"> + <HighlightedImage left="$pwidth" width="80"/> + </if> + <!-- Print the individuals facts --> + <Cell tcolor="$tcolor" bgcolor="$stbgcolor" border="1" newline="1" style="title" width="$width"><var var="WT_I18N::translate('Personal Facts and Details')"/></Cell> + <Facts ignore="$ignore" families="1"> + <TextBox bgcolor="$fbbgcolor" border="1" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="@fact"/> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="@fact:DATE"/> </Text> + <!-- look for fact level 2 sources --> + <if condition="$sources==1"> + <RepeatTag tag="@fact:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + <!-- print a different layout for facts with descriptions --> + <if condition="@desc!=''"> + <TextBox bgcolor="$fbbgcolor" border="1" newline="1" width="$width2"> + <Text color="$tcolor" style="text"> + <if condition="@desc=='Y'"> + <var var="WT_I18N::translate('Yes')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc=='N'"> + <var var="WT_I18N::translate('No')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc!='Y' and @desc!='N'"> + <GedcomValue tag="@desc"/> <GedcomValue tag="@fact:PLAC"/> + </if> + </Text> + <Gedcom id="@_PGVS"> + <if condition="@SEX=='M'"> + <Text color="$tcolor" style="fact"> <var var="WT_I18N::translate('Husband')"/></Text> + </if> + <if condition="@SEX=='F'"> + <Text color="$tcolor" style="fact"> <var var="WT_I18N::translate('Wife')"/></Text> + </if> + <Text color="$tcolor" style="text"> <GetPersonName id=""/></Text> + </Gedcom> + </TextBox> + </if> + <!-- facts without descriptions --> + <if condition="@desc==''"> + <TextBox bgcolor="$fbbgcolor" border="1" newline="1" width="$width2"> + <Text color="$tcolor" style="text"> + <GedcomValue tag="@fact:PLAC"/> + <!-- Print only when exist to reduce some spaces in the text, might avoid a line break --> + <if condition="@fact:TEMP!=''"> <GedcomValue tag="@fact:TEMP"/></if> + </Text> + <Gedcom id="@_PGVS"> + <if condition="@SEX=='M'"> + <Text color="$tcolor" style="fact"> <var var="WT_I18N::translate('Husband')"/></Text> + </if> + <if condition="@SEX=='F'"> + <Text color="$tcolor" style="fact"> <var var="WT_I18N::translate('Wife')"/></Text> + </if> + <Text color="$tcolor" style="text"> <GetPersonName id=""/></Text> + </Gedcom> + </TextBox> + </if> + </Facts> + <!-- print any level 1 notes, but only if exist --> + <if condition="($notes==1) and (@NOTE!='')"> + <TextBox height="$sheight" newline="1" padding="0" width="15"/> + <Cell bgcolor="$stbgcolor" border="1" newline="1" style="title" tcolor="$tcolor" width="$width"><var var="WT_I18N::translate('Notes')"/></Cell> + <RepeatTag tag="NOTE"> + <Cell bgcolor="$fbbgcolor" border="1" newline="1" style="text" tcolor="$tcolor" width="$width"><GedcomValue tag="NOTE"/></Cell> + </RepeatTag> + </if> + + <!-- print family with parents and siblings --> + <TextBox height="$sheight" newline="1" padding="0" width="15"/> + <Cell bgcolor="$stbgcolor" border="1" newline="1" style="title" tcolor="$tcolor" width="$width"><var var="WT_I18N::translate('Family with parents')"/></Cell> + <RepeatTag tag="FAMC"> + <Gedcom id="@FAMC"> + <!-- father --> + <Gedcom id="@HUSB"> + <TextBox bgcolor="$mbgcolor" border="1" newline="1" width="$width"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Father')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </Gedcom> + <!-- mother --> + <Gedcom id="@WIFE"> + <TextBox bgcolor="$fbgcolor" border="1" newline="1" width="$width"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Mother')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </Gedcom> + <!-- siblings --> + <RepeatTag tag="CHIL"> + <if condition="@CHIL!=$mid"> + <Gedcom id="@CHIL"> + <!-- Brother --> + <if condition="@SEX=='M'"> + <TextBox bgcolor="$mbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Brother')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- Sister --> + <if condition="@SEX=='F'"> + <TextBox bgcolor="$fbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Sister')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- Unknown gender for Sibling --> + <if condition="(@SEX=='U') or (@SEX=='')"> + <TextBox bgcolor="$ugbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Gender')"/> <var var="WT_I18N::translate_c('unknown gender', 'Unknown')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + </Gedcom> + </if> + </RepeatTag> + </Gedcom> + </RepeatTag> + <!-- print family with spouse and children --> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS"> + <!-- print wife if person is husband --> + <if condition="$sex=='M'"> + <TextBox height="$sheight" newline="1" padding="0" width="15"/> + <Cell bgcolor="$stbgcolor" border="1" newline="1" style="title" tcolor="$tcolor" width="$width"><var var="WT_I18N::translate('Family with wife')"/></Cell> + <SetVar name="spid" value="@WIFE"/> + </if> + <!-- print husband if person is wife --> + <if condition="$sex=='F'"> + <TextBox height="$sheight" newline="1" padding="0" width="15"/> + <Cell bgcolor="$stbgcolor" border="1" newline="1" style="title" tcolor="$tcolor" width="$width"><var var="WT_I18N::translate('Family with husband')"/></Cell> + <SetVar name="spid" value="@HUSB"/> + </if> + <!-- print information for spouse --> + <Gedcom id="$spid"> + <!-- husband --> + <if condition="@SEX=='M'"> + <TextBox bgcolor="$mbgcolor" border="1" newline="1" width="$width"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Husband')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- wife --> + <if condition="@SEX=='F'"> + <TextBox bgcolor="$fbgcolor" border="1" newline="1" width="$width"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Wife')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + </Gedcom> + <!-- print children with spouse --> + <RepeatTag tag="CHIL"> + <if condition="@CHIL!=$mid"> + <Gedcom id="@CHIL"> + <!-- Son --> + <if condition="@SEX=='M'"> + <TextBox bgcolor="$mbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Son')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- Daughter --> + <if condition="@SEX=='F'"> + <TextBox bgcolor="$fbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Daughter')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- Unknown gender for Child --> + <if condition="(@SEX=='U') or (@SEX=='')"> + <TextBox bgcolor="$ugbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Gender')"/> <var var="WT_I18N::translate_c('unknown gender', 'Unknown')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + </Gedcom> + </if> + </RepeatTag> + </Gedcom> + </RepeatTag> + </Relatives> + </Body> + <!-- if the sources were on, print the source citations as footnotes --> + <if condition="$source_exist==1"> + <!-- add a new page --> + <NewPage/> + <Body> + <TextBox newline="1"> + <Text style="pageheader"><var var="WT_I18N::translate('Sources')"/><br /><br /></Text> + <FootnoteTexts/> + </TextBox> + </Body> + </if> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now/></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/individual_report/module.php b/modules_v2/individual_report/module.php new file mode 100644 index 0000000000..95c93f04f8 --- /dev/null +++ b/modules_v2/individual_report/module.php @@ -0,0 +1,69 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class individual_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Individual Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of the details of a person.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + global $controller; + + if ($controller && isset($controller->pid)) { + $pid='&pid='.$controller->pid; + } elseif ($controller && isset($controller->rootid)) { + $pid='&pid='.$controller->rootid; + } else { + $pid=''; + } + + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'.$pid); + $menu->addIcon('indis'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/individual_report/report.xml b/modules_v2/individual_report/report.xml new file mode 100644 index 0000000000..50154c904e --- /dev/null +++ b/modules_v2/individual_report/report.xml @@ -0,0 +1,637 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Individual Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of the details of a person.')" /></Description> + <Input name="pid" lookup="INDI" type="text" default=""><var var="WT_I18N::translate('Enter Individual ID')" /></Input> + <Input name="sources" type="checkbox" default="1"><var var="WT_I18N::translate('Show sources?')" /></Input> + <Input name="notes" type="checkbox" default="1"><var var="WT_I18N::translate('Show notes?')" /></Input> + <Input name="photos" type="select" default="highlighted" options="none=>WT_I18N::translate('None')|all=>WT_I18N::translate('All')|highlighted=>WT_I18N::translate('Highlighted image')"><var var="WT_I18N::translate('Show photos?')"/></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="18"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8"/> + <!-- Links to sources - required style name by the generator --> + <Style name="footnotenum" font="$fonts" size="6"/> + <!-- Source text - FootnoteTexts - required style name by the generator --> + <Style name="footnote" font="$fonts" size="8"/> + <!-- Section title --> + <Style name="title" font="$fonts" size="9" style="B"/> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Page Header text --> + <Style name="pageheader" font="$fonts" size="14"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="9"/> + <!-- Facts text --> + <Style name="fact" font="$fonts" size="8"/> + <!-- Individual names in text boxes --> + <Style name="name" font="$fonts" size="10"/> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + + <SetVar name="ignore" value="CHAN,CHIL,FAMC,FAMS,HUSB,NAME,NOTE,OBJE,RESN,SEX,SOUR,TITL,WIFE,_UID,_WT_OBJE_SORT"/> + <!-- Setup colors --> + <!-- Section title background color --> + <SetVar name="stbgcolor" value="#AAAAAA"/> + <SetVar name="mbgcolor" value=""/> + <SetVar name="fbgcolor" value=""/> + <SetVar name="ugbgcolor" value=""/> + <SetVar name="fbbgcolor" value=""/> + <SetVar name="tcolor" value=""/> + <!-- Use colors --> + <if condition="$colors==1"> + <!-- Section title background color --> + <SetVar name="stbgcolor" value="#9CA3D4"/> + <!-- Male background color --> + <SetVar name="mbgcolor" value="#D6E0EA"/> + <!-- Female background color --> + <SetVar name="fbgcolor" value="#E9DAF1"/> + <!-- Unknown gender --> + <SetVar name="ugbgcolor" value="#FFFFFF"/> + <!-- Fact boxes --> + <SetVar name="fbbgcolor" value="#D1D9FF"/> + <!-- Text color - black --> + <SetVar name="tcolor" value="#000000"/> + </if> + + <!-- New Page controller --> + <SetVar name="newpage" value="0"/> + <!-- New Page for Sources controller if SOUR exist --> + <SetVar name="source_exist" value="0"/> + + <!-- set the default widths --> + <SetVar name="dwidth" value="200"/> + <SetVar name="pwidth" value="436"/> + <!-- space height --> + <SetVar name="sheight" value="15"/> + + <SetVar name="width" value="433"/> + <SetVar name="width1" value="418"/> + <SetVar name="width2" value="233"/> + + <!-- change the widths for no pictures --> + <if condition="$photos=='none'"> + <SetVar name="width" value="0"/> + <SetVar name="width1" value="0"/> + <SetVar name="width2" value="0"/> + </if> + + <Doc pageSize="$pageSize" > + <Header> + <Cell align="center" newline="1" style="header"><var var="WT_I18N::translate('Individual Report')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + </Header> + <Body> + <!-- set the gedcom context for this individual --> + <Gedcom id="$pid"> + <if condition="$newpage==1"> + <NewPage/> + </if> + <SetVar name="newpage" value="1"/> + <SetVar name="sex" value="@SEX"/> + <SetVar name="mid" value="@ID"/> + <!-- Individual name --> + <TextBox newline="1"> + <Text style="pageheader"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + <!-- show the persons images --> + <if condition="$photos=='all'"> + <!-- This is an image not a text, so don't use text padding + Reset also the last height after all the images has been printed + set pagecheck to 0, the image function check is too + and "trick" the X-position back to the margin with a newline --> + <TextBox left="$pwidth" newline="1" pagecheck="0" padding="0" reseth="1" width="80"> + <RepeatTag tag="OBJE"> + <Image file="@FILE" width="80" ln="N"/> + </RepeatTag> + </TextBox> + </if> + <!-- show the person's Highlighted Image --> + <if condition="$photos=='highlighted'"> + <HighlightedImage left="$pwidth" width="80"/> + </if> + <!-- Print the individuals facts --> + <Cell tcolor="$tcolor" bgcolor="$stbgcolor" border="1" newline="1" style="title" width="$width"><var var="WT_I18N::translate('Personal Facts and Details')"/></Cell> + <Facts ignore="$ignore" families="1"> + <TextBox bgcolor="$fbbgcolor" border="1" width="$dwidth"> + <Text color="$tcolor" style="fact"><var var="@fact"/> </Text> + <Text color="$tcolor" style="text"><GedcomValue tag="@fact:DATE"/> </Text> + <!-- look for fact level 2 sources --> + <if condition="$sources==1"> + <RepeatTag tag="@fact:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + </TextBox> + <!-- print a different layout for facts with descriptions --> + <if condition="@desc!=''"> + <TextBox bgcolor="$fbbgcolor" border="1" newline="1" width="$width2"> + <Text color="$tcolor" style="text"> + <if condition="@desc=='Y'"> + <var var="WT_I18N::translate('Yes')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc=='N'"> + <var var="WT_I18N::translate('No')" /> <GedcomValue tag="@fact:PLAC"/> + </if> + <if condition="@desc!='Y' and @desc!='N'"> + <GedcomValue tag="@desc"/> <GedcomValue tag="@fact:PLAC"/> + </if> + </Text> + <Gedcom id="@_PGVS"> + <if condition="@SEX=='M'"> + <Text color="$tcolor" style="fact"> <var var="WT_I18N::translate('Husband')"/></Text> + </if> + <if condition="@SEX=='F'"> + <Text color="$tcolor" style="fact"> <var var="WT_I18N::translate('Wife')"/></Text> + </if> + <Text color="$tcolor" style="text"> <GetPersonName id=""/></Text> + </Gedcom> + </TextBox> + </if> + <!-- facts without descriptions --> + <if condition="@desc==''"> + <TextBox bgcolor="$fbbgcolor" border="1" newline="1" width="$width2"> + <Text color="$tcolor" style="text"> + <GedcomValue tag="@fact:PLAC"/> + <!-- Print only when exist to reduce some spaces in the text, might avoid a line break --> + <if condition="@fact:TEMP!=''"> <GedcomValue tag="@fact:TEMP"/></if> + </Text> + <Gedcom id="@_PGVS"> + <if condition="@SEX=='M'"> + <Text color="$tcolor" style="fact"> <var var="WT_I18N::translate('Husband')"/></Text> + </if> + <if condition="@SEX=='F'"> + <Text color="$tcolor" style="fact"> <var var="WT_I18N::translate('Wife')"/></Text> + </if> + <Text color="$tcolor" style="text"> <GetPersonName id=""/></Text> + </Gedcom> + </TextBox> + </if> + </Facts> + <!-- print any level 1 notes, but only if exist --> + <if condition="($notes==1) and (@NOTE!='')"> + <TextBox height="$sheight" newline="1" padding="0" width="15"/> + <Cell bgcolor="$stbgcolor" border="1" newline="1" style="title" tcolor="$tcolor" width="$width"><var var="WT_I18N::translate('Notes')"/></Cell> + <RepeatTag tag="NOTE"> + <Cell bgcolor="$fbbgcolor" border="1" newline="1" style="text" tcolor="$tcolor" width="$width"><GedcomValue tag="NOTE"/></Cell> + </RepeatTag> + </if> + + <!-- print family with parents and siblings --> + <TextBox height="$sheight" newline="1" padding="0" width="15"/> + <Cell bgcolor="$stbgcolor" border="1" newline="1" style="title" tcolor="$tcolor" width="$width"><var var="WT_I18N::translate('Family with parents')"/></Cell> + <RepeatTag tag="FAMC"> + <Gedcom id="@FAMC"> + <!-- father --> + <Gedcom id="@HUSB"> + <TextBox bgcolor="$mbgcolor" border="1" newline="1" width="$width"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Father')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </Gedcom> + <!-- mother --> + <Gedcom id="@WIFE"> + <TextBox bgcolor="$fbgcolor" border="1" newline="1" width="$width"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Mother')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </Gedcom> + <!-- siblings --> + <RepeatTag tag="CHIL"> + <if condition="@CHIL!=$mid"> + <Gedcom id="@CHIL"> + <!-- Brother --> + <if condition="@SEX=='M'"> + <TextBox bgcolor="$mbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Brother')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- Sister --> + <if condition="@SEX=='F'"> + <TextBox bgcolor="$fbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Sister')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- Unknown gender for Sibling --> + <if condition="(@SEX=='U') or (@SEX=='')"> + <TextBox bgcolor="$ugbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Gender')"/> <var var="WT_I18N::translate_c('unknown gender', 'Unknown')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + </Gedcom> + </if> + </RepeatTag> + </Gedcom> + </RepeatTag> + <!-- print family with spouse and children --> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS"> + <!-- print wife if person is husband --> + <if condition="$sex=='M'"> + <TextBox height="$sheight" newline="1" padding="0" width="15"/> + <Cell bgcolor="$stbgcolor" border="1" newline="1" style="title" tcolor="$tcolor" width="$width"><var var="WT_I18N::translate('Family with wife')"/></Cell> + <SetVar name="spid" value="@WIFE"/> + </if> + <!-- print husband if person is wife --> + <if condition="$sex=='F'"> + <TextBox height="$sheight" newline="1" padding="0" width="15"/> + <Cell bgcolor="$stbgcolor" border="1" newline="1" style="title" tcolor="$tcolor" width="$width"><var var="WT_I18N::translate('Family with husband')"/></Cell> + <SetVar name="spid" value="@HUSB"/> + </if> + <!-- print information for spouse --> + <Gedcom id="$spid"> + <!-- husband --> + <if condition="@SEX=='M'"> + <TextBox bgcolor="$mbgcolor" border="1" newline="1" width="$width"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Husband')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- wife --> + <if condition="@SEX=='F'"> + <TextBox bgcolor="$fbgcolor" border="1" newline="1" width="$width"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Wife')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + </Gedcom> + <!-- print children with spouse --> + <RepeatTag tag="CHIL"> + <if condition="@CHIL!=$mid"> + <Gedcom id="@CHIL"> + <!-- Son --> + <if condition="@SEX=='M'"> + <TextBox bgcolor="$mbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Son')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- Daughter --> + <if condition="@SEX=='F'"> + <TextBox bgcolor="$fbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Daughter')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + <!-- Unknown gender for Child --> + <if condition="(@SEX=='U') or (@SEX=='')"> + <TextBox bgcolor="$ugbgcolor" border="1" left="15" newline="1" width="$width1"> + <Text color="$tcolor" style="text"><var var="WT_I18N::translate('Gender')"/> <var var="WT_I18N::translate_c('unknown gender', 'Unknown')"/> </Text> + <Text color="$tcolor" style="name"><GetPersonName id=""/> </Text> + <if condition="$sources==1"> + <!-- print level 1 sources --> + <RepeatTag tag="SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1"/> + </RepeatTag> + <!-- print level 2 sources attached to NAME --> + <RepeatTag tag="NAME:SOUR"> + <Footnote> + <Gedcom id="@SOUR"> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + </Footnote> + <SetVar name="source_exist" value="1" /> + </RepeatTag> + </if> + <Text color="$tcolor" style="text"> (<var var="WT_I18N::translate('Birth')"/>: <GedcomValue tag="BIRT:DATE"/> <GedcomValue tag="BIRT:PLAC"/><Gedcom id="DEAT"> - <var var="WT_I18N::translate('Death')"/>: <GedcomValue tag="DEAT:DATE"/> <GedcomValue tag="DEAT:PLAC"/></Gedcom>)</Text> + </TextBox> + </if> + </Gedcom> + </if> + </RepeatTag> + </Gedcom> + </RepeatTag> + </Gedcom> + </Body> + <!-- if the sources were on, print the source citations as footnotes --> + <if condition="$source_exist==1"> + <Body> + <TextBox newline="1"> + <Text style="pageheader"><var var="WT_I18N::translate('Sources')"/><br /><br /></Text> + <FootnoteTexts/> + </TextBox> + </Body> + </if> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now/></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/individuals/module.php b/modules_v2/individuals/module.php new file mode 100644 index 0000000000..d02b46114c --- /dev/null +++ b/modules_v2/individuals/module.php @@ -0,0 +1,237 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class individuals_WT_Module extends WT_Module implements WT_Module_Sidebar { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Individuals'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a sidebar which allows for easy navigation of individuals in a list format.'); + } + + // Implement WT_Module_Sidebar + public function defaultSidebarOrder() { + return 30; + } + + // Implement WT_Module_Sidebar + public function hasSidebarContent() { + return true; + } + + // Implement WT_Module_Sidebar + public function getSidebarAjaxContent() { + $alpha =safe_GET('alpha'); // All surnames beginning with this letter where "@"=unknown and ","=none + $surname =safe_GET('surname', '[^<>&%{};]*'); // All indis with this surname. NB - allow ' and " + $search =safe_GET('search'); + + $last = array('alpha'=>$alpha, 'surname'=>$surname, 'search'=>$search); + $_SESSION['sb_individuals_last'] = $last; + + if (!empty($search)) return $this->search($search); + else if (empty($surname)) return $this->getAlphaSurnames($alpha, $surname); + else return $this->getSurnameIndis($alpha, $surname); + } + + // Implement WT_Module_Sidebar + public function getSidebarContent() { + global $SHOW_MARRIED_NAMES, $WT_IMAGES; + + // Fetch a list of the initial letters of all surnames in the database + $initials=get_indilist_salpha($SHOW_MARRIED_NAMES, false, WT_GED_ID); + + $out = '<script type="text/javascript"> + <!-- + var loadedNames = new Array(); + + function searchQ() { + var query = jQuery("#sb_indi_name").attr("value"); + if (query.length>1) { + jQuery("#sb_indi_content").load("sidebar.php?sb_action=individuals&search="+query); + } + } + + jQuery(document).ready(function() { + jQuery("#sb_indi_name").focus(function() {this.select();}); + jQuery("#sb_indi_name").blur(function() {if (this.value=="") this.value="'.WT_I18N::translate('Search').'";}); + var timerid = null; + jQuery("#sb_indi_name").keyup(function(e) { + if (timerid) window.clearTimeout(timerid); + timerid = window.setTimeout("searchQ()", 500); + }); + jQuery(".sb_indi_letter").live("click", function() { + jQuery("#sb_indi_content").load(this.href); + return false; + }); + jQuery(".sb_indi_surname").live("click", function() { + var surname = jQuery(this).attr("title"); + var alpha = jQuery(this).attr("alt"); + + if (!loadedNames[surname]) { + jQuery.ajax({ + url: "sidebar.php?sb_action=individuals&alpha="+alpha+"&surname="+surname, + cache: false, + success: function(html) { + jQuery("#sb_indi_"+surname+" div").html(html); + jQuery("#sb_indi_"+surname+" div").show(); + jQuery("#sb_indi_"+surname).css("list-style-image", "url('.$WT_IMAGES['minus'].')"); + loadedNames[surname]=2; + } + }); + } + else if (loadedNames[surname]==1) { + loadedNames[surname]=2; + jQuery("#sb_indi_"+surname+" div").show(); + jQuery("#sb_indi_"+surname).css("list-style-image", "url('.$WT_IMAGES['minus'].')"); + } + else { + loadedNames[surname]=1; + jQuery("#sb_indi_"+surname+" div").hide(); + jQuery("#sb_indi_"+surname).css("list-style-image", "url('.$WT_IMAGES['plus'].')"); + } + return false; + }); + }); + //--> + </script> + <form method="post" action="sidebar.php" onsubmit="return false;"> + <input type="text" name="sb_indi_name" id="sb_indi_name" value="'.WT_I18N::translate('Search').'" /> + <p>'; + foreach ($initials as $letter=>$count) { + switch ($letter) { + case '@': + $html=WT_I18N::translate('(unknown)'); + break; + case ',': + $html=WT_I18N::translate('None'); + break; + default: + $html=$letter; + break; + } + $html='<a href="sidebar.php?sb_action=individuals&alpha='.urlencode($letter).'" class="sb_indi_letter">'.PrintReady($html).'</a>'; + $out .= $html." "; + } + + $out .= '</p>'; + $out .= '<div id="sb_indi_content">'; + + if (isset($_SESSION['sb_individuals_last'])) { + $last = $_SESSION['sb_individuals_last']; + $alpha = $last['alpha']; + $search = $last['search']; + $surname = $last['surname']; + if (!empty($search)) $out.= $this->search($search); + else if (!empty($alpha)) $out.= $this->getAlphaSurnames($alpha, $surname); + } + + $out .= '</div></form>'; + return $out; + } + + public function getAlphaSurnames($alpha, $surname1='') { + global $SHOW_MARRIED_NAMES; + $surns=get_indilist_surns('', $alpha, $SHOW_MARRIED_NAMES, false, WT_GED_ID); + $out = '<ul>'; + foreach ($surns as $surname=>$surns) { + $out .= '<li id="sb_indi_'.$surname.'" class="sb_indi_surname_li"><a href="'.$surname.'" title="'.$surname.'" alt="'.$alpha.'" class="sb_indi_surname">'.$surname.'</a>'; + if (!empty($surname1) && $surname1==$surname) { + $out .= '<div class="name_tree_div_visible">'; + $out .= $this->getSurnameIndis($alpha, $surname1); + $out .= '</div>'; + } + else + $out .= '<div class="name_tree_div"></div>'; + $out .= '</li>'; + } + $out .= '</ul>'; + return $out; + } + + public function getSurnameIndis($alpha, $surname) { + global $SHOW_MARRIED_NAMES; + $indis=get_indilist_indis($surname, $alpha, '', $SHOW_MARRIED_NAMES, false, WT_GED_ID); + $out = '<ul>'; + $private_count = 0; + foreach ($indis as $person) { + if ($person->canDisplayName()) { + $out .= '<li><a href="'.$person->getHtmlUrl().'">'.$person->getSexImage().' '.$person->getListName().' '; + if ($person->canDisplayDetails()) { + $bd = $person->getBirthDeathYears(false,''); + if (!empty($bd)) $out .= PrintReady(' ('.$bd.')'); + } + $out .= '</a></li>'; + } + else $private_count++; + } + if ($private_count>0) $out .= '<li>'.WT_I18N::translate('Private').' ('.$private_count.')</li>'; + $out .= '</ul>'; + return $out; + } + + public function search($query) { + if (strlen($query)<2) { + return ''; + } + $rows= + WT_DB::prepare( + "SELECT ? AS type, i_id AS xref, i_file AS ged_id, i_gedcom AS gedrec, i_isdead, i_sex". + " FROM `##individuals`, `##name`". + " WHERE (i_id LIKE ? OR n_sort LIKE ?)". + " AND i_id=n_id AND i_file=n_file AND i_file=?". + " ORDER BY n_sort COLLATE '".WT_I18N::$collation."'". + " LIMIT 50" + ) + ->execute(array('INDI', "%{$query}%", "%{$query}%", WT_GED_ID)) + ->fetchAll(PDO::FETCH_ASSOC); + + $out = '<ul>'; + $private_count = 0; + foreach ($rows as $row) { + $person=WT_Person::getInstance($row); + if ($person->canDisplayName()) { + $out .= '<li><a href="'.$person->getHtmlUrl().'">'.$person->getSexImage().' '.$person->getListName().' '; + if ($person->canDisplayDetails()) { + $bd = $person->getBirthDeathYears(false,''); + if (!empty($bd)) $out .= PrintReady(' ('.$bd.')'); + } + $out .= '</a></li>'; + } + else $private_count++; + } + if ($private_count>0) $out .= '<li>'.PrintReady(WT_I18N::translate('Private').' ('.$private_count.')').'</li>'; + $out .= '</ul>'; + return $out; + } + +} diff --git a/modules_v2/lightbox/admin_config.php b/modules_v2/lightbox/admin_config.php new file mode 100644 index 0000000000..6181b3bf2a --- /dev/null +++ b/modules_v2/lightbox/admin_config.php @@ -0,0 +1,170 @@ +<?php +/** + * Online UI for editing site configuration variables + * + * webtrees: Web based Family History software + * Copyright (C) 2011 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2007 PGV Development Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * This Page Is Valid XHTML 1.0 Transitional! > 17 September 2005 + * + * @package webtrees + * @subpackage Lightbox + * $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +global $pid, $GEDCOM ; + +$pid=safe_get('pid'); +$action = safe_POST("action"); + +print_header(WT_I18N::translate('Lightbox-Album Configuration')); + +require WT_ROOT.WT_MODULES_DIR.'lightbox/lb_defaultconfig.php'; + +if (!WT_USER_IS_ADMIN) { + echo'<div class="warning">', WT_I18N::translate('Page only for Administrators'), '</div>'; + print_footer(); + exit; +} + +if ($action=='update' && !isset($security_user)) { + set_module_setting('lightbox', 'LB_AL_HEAD_LINKS', $_POST['NEW_LB_AL_HEAD_LINKS']); + set_module_setting('lightbox', 'LB_AL_THUMB_LINKS', $_POST['NEW_LB_AL_THUMB_LINKS']); + set_module_setting('lightbox', 'LB_TT_BALLOON', $_POST['NEW_LB_TT_BALLOON']); + set_module_setting('lightbox', 'LB_ML_THUMB_LINKS', $_POST['NEW_LB_ML_THUMB_LINKS']); + set_module_setting('lightbox', 'LB_MUSIC_FILE', $_POST['NEW_LB_MUSIC_FILE']); + set_module_setting('lightbox', 'LB_SS_SPEED', $_POST['NEW_LB_SS_SPEED']); + set_module_setting('lightbox', 'LB_TRANSITION', $_POST['NEW_LB_TRANSITION']); + set_module_setting('lightbox', 'LB_URL_WIDTH', $_POST['NEW_LB_URL_WIDTH']); + set_module_setting('lightbox', 'LB_URL_HEIGHT', $_POST['NEW_LB_URL_HEIGHT']); + + AddToLog('Lightbox config updated', 'config'); + // read the config file again, to set the vars + require WT_ROOT.WT_MODULES_DIR.'lightbox/lb_defaultconfig.php'; +} + +?> +<form method="post" name="configform" action="module.php?mod=lightbox&mod_action=admin_config&pid=<?php echo $pid; ?>"> +<input type="hidden" name="action" value="update" /> + <table id="album_config"> + <tr> + <td><?php echo WT_I18N::translate('Individual Page - Album Tab Header'); ?><?php echo help_link('lb_al_head_links', $this->getName()); ?><p><?php echo WT_I18N::translate('Link appearance'); ?></p></td> + <td> + <select name="NEW_LB_AL_HEAD_LINKS"> + <option value="icon" <?php if ($LB_AL_HEAD_LINKS=="icon") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Icon'); ?></option> + <option value="text" <?php if ($LB_AL_HEAD_LINKS=="text") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Text'); ?></option> + <option value="both" <?php if ($LB_AL_HEAD_LINKS=="both") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Both'); ?></option> + </select> + </td> + </tr> + <tr> + <td><?php echo WT_I18N::translate('Individual Page - Album Tab Thumbnail - Notes Tooltip'); ?><?php echo help_link('lb_tt_balloon', $this->getName()); ?><p><?php echo WT_I18N::translate('Notes - Tooltip appearance'); ?></p></td> + <td><select name="NEW_LB_TT_BALLOON"> + <option value="true" <?php if ($LB_TT_BALLOON=="true") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Balloon'); ?></option> + <option value="false" <?php if ($LB_TT_BALLOON=="false") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Normal'); ?></option> + </select> + </td> + </tr> + <tr> + <td><?php echo WT_I18N::translate('Individual Page - Album Tab Thumbnails'); ?><?php echo help_link('lb_al_thumb_links', $this->getName()); ?><p><?php echo WT_I18N::translate('Link appearance'); ?></p></td> + <td><select name="NEW_LB_AL_THUMB_LINKS"> + <option value="icon" <?php if ($LB_AL_THUMB_LINKS=="icon") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Icon'); ?></option> + <option value="text" <?php if ($LB_AL_THUMB_LINKS=="text") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Text'); ?></option> + </select> + </td> + </tr> + <tr> + <td><?php echo WT_I18N::translate('Slide Show speed'); ?><?php echo help_link('lb_ss_speed', $this->getName()); ?></td> + <td> + <select name="NEW_LB_SS_SPEED"> + <option value= "2" <?php if ($LB_SS_SPEED == 2) echo 'selected="selected"'; ?>><?php echo "2"; ?></option> + <option value= "3" <?php if ($LB_SS_SPEED == 3) echo 'selected="selected"'; ?>><?php echo "3"; ?></option> + <option value= "4" <?php if ($LB_SS_SPEED == 4) echo 'selected="selected"'; ?>><?php echo "4"; ?></option> + <option value= "5" <?php if ($LB_SS_SPEED == 5) echo 'selected="selected"'; ?>><?php echo "5"; ?></option> + <option value= "6" <?php if ($LB_SS_SPEED == 6) echo 'selected="selected"'; ?>><?php echo "6"; ?></option> + <option value= "7" <?php if ($LB_SS_SPEED == 7) echo 'selected="selected"'; ?>><?php echo "7"; ?></option> + <option value= "8" <?php if ($LB_SS_SPEED == 8) echo 'selected="selected"'; ?>><?php echo "8"; ?></option> + <option value= "9" <?php if ($LB_SS_SPEED == 9) echo 'selected="selected"'; ?>><?php echo "9"; ?></option> + <option value="10" <?php if ($LB_SS_SPEED ==10) echo 'selected="selected"'; ?>><?php echo "10"; ?></option> + <option value="12" <?php if ($LB_SS_SPEED ==12) echo 'selected="selected"'; ?>><?php echo "12"; ?></option> + <option value="15" <?php if ($LB_SS_SPEED ==15) echo 'selected="selected"'; ?>><?php echo "15"; ?></option> + <option value="20" <?php if ($LB_SS_SPEED ==20) echo 'selected="selected"'; ?>><?php echo "20"; ?></option> + <option value="25" <?php if ($LB_SS_SPEED ==25) echo 'selected="selected"'; ?>><?php echo "25"; ?></option> + </select> + <?php echo WT_I18N::translate('Slide show timing in seconds'); ?> + </td> + </tr> + <tr> + <td><?php echo WT_I18N::translate('Slideshow sound track'); ?><?php echo help_link('lb_music_file', $this->getName()); ?><p><?php echo WT_I18N::translate('(mp3 only)'); ?></p></td> + <td> + <input type="text" name="NEW_LB_MUSIC_FILE" value="<?php echo $LB_MUSIC_FILE; ?>" size="60" /><br /> + <?php echo WT_I18N::translate('Location of sound track file (Leave blank for no sound track)'); ?> + </td> + </tr> + <tr> + <td><?php echo WT_I18N::translate('Image Transition speed'); ?><?php echo help_link('lb_transition', $this->getName()); ?></td> + <td> + <select name="NEW_LB_TRANSITION"> + <option value="none" <?php if ($LB_TRANSITION=="none") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('None'); ?></option> + <option value="normal" <?php if ($LB_TRANSITION=="normal") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Normal'); ?></option> + <option value="double" <?php if ($LB_TRANSITION=="double") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Double'); ?></option> + <option value="warp" <?php if ($LB_TRANSITION=="warp") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Warp'); ?></option> + </select> + </td> + </tr> + <tr> + <td><?php echo WT_I18N::translate('URL Window dimensions'); ?><b><?php echo help_link('lb_url_dimensions', $this->getName()); ?></td> + <td> + <input type="text" name="NEW_LB_URL_WIDTH" value="<?php echo $LB_URL_WIDTH; ?>" size="4" /> + <?php echo WT_I18N::translate('Width'); ?> + + <input type="text" name="NEW_LB_URL_HEIGHT" value="<?php echo $LB_URL_HEIGHT; ?>" size="4" /> + <?php echo WT_I18N::translate('Height'); ?><br /> + <?php echo WT_I18N::translate('Width and height of URL window in pixels'); ?> + </td> + </tr> + <tr> + <td><?php echo WT_I18N::translate('Multimedia Page - Thumbnails'); ?><?php echo help_link('lb_ml_thumb_links', $this->getName()); ?><p><?php echo WT_I18N::translate('Link appearance'); ?></p></td> + <td> + <select name="NEW_LB_ML_THUMB_LINKS"> + <option value= "none" <?php if ($LB_ML_THUMB_LINKS == "none") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('None'); ?></option> + <option value= "text" <?php if ($LB_ML_THUMB_LINKS == "text") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Text'); ?></option> + <option value= "icon" <?php if ($LB_ML_THUMB_LINKS == "icon") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Icon'); ?></option> + <option value= "both" <?php if ($LB_ML_THUMB_LINKS == "both") echo 'selected="selected"'; ?>><?php echo WT_I18N::translate('Both'); ?></option> + </select> + </td> + </tr> + </table> + <input type="submit" value="<?php echo WT_I18N::translate('Save configuration'); ?>" onclick="closeHelp();" /> + + <input type="reset" value="<?php echo WT_I18N::translate('Reset'); ?>" /> + + <?php if ($pid) { ?> + <INPUT TYPE="button" VALUE="<?php echo WT_I18N::translate('Return to Album page'); ?>" onclick="javascript:window.location='individual.php?pid=<?php echo $pid; ?>&gedcom=<?php echo $GEDCOM; ?>#lightbox'" /> + <?php } else { ?> + <INPUT TYPE="button" VALUE="<?php echo WT_I18N::translate('Return to Admin Page'); ?>" onclick="javascript:window.location='admin_modules.php'" /> + <?php } ?> +</form> +<?php print_footer(); diff --git a/modules_v2/lightbox/album.php b/modules_v2/lightbox/album.php new file mode 100644 index 0000000000..9f4d0edac9 --- /dev/null +++ b/modules_v2/lightbox/album.php @@ -0,0 +1,162 @@ +<?php +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2007 to 2009 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * @version $Id$ + * @author Brian Holland + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +global $edit, $controller, $tabno, $_REQUEST, $thumb_edit, $n, $LB_URL_WIDTH, $LB_URL_HEIGHT, $LB_TT_BALLOON ; +global $reorder, $rownum, $sort_i, $GEDCOM; + +$reorder=safe_get('reorder', '1', '0'); +$pid=$this->controller->indi->getXref(); + +// Get Javascript variables from lb_config.php --------------------------- +require_once WT_ROOT.WT_MODULES_DIR.'lightbox/lb_defaultconfig.php'; +// require_once WT_ROOT.WT_MODULES_DIR.'lightbox/functions/browser_detection_php_ar.php'; +require_once WT_ROOT.WT_MODULES_DIR.'lightbox/functions/lightbox_print_media.php'; +require_once WT_ROOT.WT_MODULES_DIR.'lightbox/functions/lightbox_print_media_row.php'; + +function cut_html($string) +{ + $a=$string; + + while ($a = strstr($a, '&')) + { + $b=strstr($a, ';'); + if (!$b) + { + $nb=strlen($a); + return substr($string, 0, strlen($string)-$nb); + } + $a=substr($a, 1, strlen($a)-1); + } + return $string; +} + +if (isset($edit)) { + $edit=$edit; +} else { + $edit=1; +} + +// Used when sorting media on album tab page =============================================== +if ($reorder==1) { + +$sort_i=0; // Used in sorting on lightbox_print_media_row.php page + +?> + <script type="text/javascript"> + <!-- + // This script saves the dranNdrop reordered info into a hidden form input element (name=order2) + function saveOrder() { + // var sections = document.getElementsByClassName('section'); + var sections = $$('.section'); + var order = ''; + sections.each(function(section) { + order += Sortable.sequence(section) + ','; + document.getElementById("ord2").value = order; + }); + //document.getElementById("ord2").value = order; + }; + //--> + </script> + + + <form name="reorder_form" method="post" action="edit_interface.php"> + <input type="hidden" name="action" value="al_reorder_media_update" /> + <input type="hidden" name="pid" value="<?php echo $pid; ?>" /> + <input type="hidden" id="ord2" name="order2" value="" /> + + <center> + <button type="submit" title="<?php echo WT_I18N::translate('Saves the sorted media to the database'); ?>" onclick="saveOrder();" ><?php echo WT_I18N::translate('Save'); ?></button> + <button type="submit" title="<?php echo WT_I18N::translate('Reset to the original order'); ?>" onclick="document.reorder_form.action.value='al_reset_media_update'; document.reorder_form.submit();"><?php echo WT_I18N::translate('Reset'); ?></button> + <button type="button" title="<?php echo WT_I18N::translate('Quit and return'); ?>" onClick="location.href='<?php echo WT_SCRIPT_NAME, "?pid=", $pid, "&tab=", $tabno; ?>'"><?php echo WT_I18N::translate('Cancel'); ?></button> +<?php +/* + // Debug --------------------------------------------------------------------------- + + <input type="button" onClick="getGroupOrder()" value="Debug: Sorted"> + // ------------------------------------------------------------------------------------ +*/ +?> + </center> + </form> +<?php +} +// ===================================================================================== + +//------------------------------------------------------------------------------ +// Start Main Table +//------------------------------------------------------------------------------ +// echo "<table border='0' width='100%' cellpadding=\"0\" ><tr>"; + +//------------------------------------------------------------------------------ +// Build Thumbnail Rows +//------------------------------------------------------------------------------ +// echo "<td valign=\"top\">"; + echo "<table width=\"100%\" cellpadding=\"0\" border=\"0\"><tr>"; + echo "<td width=\"100%\" valign=\"top\" >"; + lightbox_print_media($pid, 0, true, 1); // map, painting, photo, tombstone) + lightbox_print_media($pid, 0, true, 2); // card, certificate, document, magazine, manuscript, newspaper + lightbox_print_media($pid, 0, true, 3); // electronic, fiche, film + lightbox_print_media($pid, 0, true, 4); // audio, book, coat, video, other + lightbox_print_media($pid, 0, true, 5); // footnotes + echo "</td>"; + echo "</tr></table>"; +// echo "</td>"; +//------------------------------------------------------------------------------ +// End Thumbnail Rows +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// Build Relatives navigator from individual controller +//------------------------------------------------------------------------------ +/* + echo '<td valign="top" align="center" width="220px">'; + echo "<table cellpadding=\"0\" style=\"margin-top:2px; margin-left:0px;\" ><tr><td width=\"220px\" class=\"optionbox\" align=\"center\">"; + echo "<b>", WT_I18N::translate('View Album of ...'), "</b><br /><br />"; + $controller->fam_nav(); + echo "<br />"; + echo "</td></tr></table>"; + echo "</td>"; +*/ +// ----------------------------------------------------------------------------- +// end Relatives navigator +// ----------------------------------------------------------------------------- + + +//------------------------------------------------------------------------------ +// End Main Table +//------------------------------------------------------------------------------ +//echo "</tr></table>"; diff --git a/modules_v2/lightbox/css/album_page.css b/modules_v2/lightbox/css/album_page.css new file mode 100644 index 0000000000..632302ab51 --- /dev/null +++ b/modules_v2/lightbox/css/album_page.css @@ -0,0 +1,195 @@ +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2007 John Finlay and Others + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Modules + * @version $Id$ + */ + +/* lightbox_plus.css version 3.00 29/06/2007 */ +/* +#lightbox { + background-color: #FFFFFF; + padding-left: 8px; + padding-right: 8px; + padding-top: 18px; + padding-bottom: 18px; +} + +#overlay { + background-color: #000000; + filter:alpha(opacity=60); + -moz-opacity: 0.6; + opacity: 0.6; +} + +#lightboxCaption { + padding-top: 3px; + padding-bottom: 3px; + color: #000080; + background-color: #FFFFFF; + font-size: 100%; + font-weight: bold; + font-family: tahoma, verdana, arial, helvetica, sans-serif; + text-align: center; +} + +#lightboxIndicator { + border: 0px solid #FFFFFF; +} + +#lightboxOverallView { + background-image: url(images/overlay.png); +} + +* html #lightboxOverallView, +* html #overlay { + background-color: #000000; + background-image: url(images/blank.gif); + filter: Alpha(opacity=50); +} +*/ +.lb_notes:target, .lb_notes:target a{ + color:#000000; + background-color: #ffffcc; +} + +.prvpic +{ +background-color: #999999; +height: 80px; +width: 60px; +border: 1px; +border-style: solid; +border-color: black; +margin-top: 0px; +} + +.prvpic img +{ +/* background-color: none; */ +border-style: dotted; +border: 0px; +/* border-color: none; */ +padding: 0px; +} + +.pic +{ +/* background-color: #777777; */ +/* background-color: none; */ +border-style: solid; +border: 0px; +border-color: #ffffff; +padding: 0px; +} + + +.thumbcontainer +{ +display: block; +width: 100%; +} + +#lb_icons +{ +/* text-align: center, justify; */ +text-align: justify; +} + +#thumblist_1, #thumblist_2, #thumblist_3, #thumblist_4, #thumblist_5, +#thumblist_1a, #thumblist_2a, #thumblist_3a, #thumblist_4a, #thumblist_5a +{ +display: block; +list-style-type: none; +float: left; +} + + +#thumblist_1 li, #thumblist_2 li, #thumblist_3 li, #thumblist_4 li, #thumblist_5 li, +#thumblist_1a li, #thumblist_2a li, #thumblist_3a li, #thumblist_4a li, #thumblist_5a li +{ +display: block; +/* +border-style: dotted; +border: 2px; +border-color: pink; +background-color:#BDB071; +*/ +margin-right: 5px; +list-style-type: none; +padding-bottom: 0px; +padding-left: 4px; +padding-right: 4px; +float: left; +} + +li.li_norm{ +border: 2px solid transparent; +/* border: 2px; */ +} + +li.li_new { + border: 2px solid #0000ff; +} + +li.li_old { + border: 2px solid #ff0000; +} + +#thumblist_1 a img, #thumblist_2 a img, #thumblist_3 a img, #thumblist_4 a img, #thumblist_5 a img, +#thumblist_1a a img, #thumblist_2a a img, #thumblist_3a a img, #thumblist_4a a img, #thumblist_5a a img +{ +border-style:none; +border:1px; +padding:1px; +} + + +#thumblist_1 a:hover img, #thumblist_2 a:hover img, #thumblist_3 a:hover img, #thumblist_4 a:hover img, #thumblist_5 a:hover img, +#thumblist_1a a:hover img, #thumblist_2a a:hover img, #thumblist_3a a:hover img, #thumblist_4a a:hover img, #thumblist_5a a:hover img +{ +border-style:none; +border:0px; +background-color:#BDB071; +padding:1px; +} + + +.clearlist:after +{ + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* #clearlist {display: inline-block;} */ + +/* Hides from IE-mac \*/ +* html .clearfix {height: 1%;} +#clearlist {display: block;} +/* End hide from IE-mac */
\ No newline at end of file diff --git a/modules_v2/lightbox/css/album_page_RTL.css b/modules_v2/lightbox/css/album_page_RTL.css new file mode 100644 index 0000000000..979226c12a --- /dev/null +++ b/modules_v2/lightbox/css/album_page_RTL.css @@ -0,0 +1,187 @@ +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2007 John Finlay and Others + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Modules + * @version $Id$ + */ + +/* lightbox_plus.css version 3.00 29/06/2007 */ +/* +#lightbox { + background-color: #FFFFFF; + padding-left: 8px; + padding-right: 8px; + padding-top: 18px; + padding-bottom: 18px; +} + +#overlay { + background-color: #000000; + filter:alpha(opacity=60); + -moz-opacity: 0.6; + opacity: 0.6; +} + +#lightboxCaption { + padding-top: 3px; + padding-bottom: 3px; + color: #000080; + background-color: #FFFFFF; + font-size: 100%; + font-weight: bold; + font-family: tahoma, verdana, arial, helvetica, sans-serif; + text-align: center; +} + +#lightboxIndicator { + border: 0px solid #FFFFFF; +} + +#lightboxOverallView { + background-image: url(images/overlay.png); +} + +* html #lightboxOverallView, +* html #overlay { + background-color: #000000; + background-image: url(images/blank.gif); + filter: Alpha(opacity=50); +} +*/ +.lb_notes:target { + color:#000000; + background-color: #ffffcc; +} + +.prvpic +{ +background-color: #999999; +height: 80px; +width: 60px; +border: 1px; +border-style: solid; +border-color: black; +margin-top: 0px; +} + +.prvpic img +{ +/* background-color: none; */ +border-style: dotted; +border: 0px; +/* border-color: none; */ +padding: 0px; +} + +.pic +{ +/* background-color: #777777; */ +/* background-color: none; */ +border-style: solid; +border: 0px; +border-color: #ffffff; +padding: 0px; +} + + +.thumbcontainer +{ +display: block; +width: 100%; +} + +#lb_icons +{ +text-align: center, justify; +} + +#thumblist_1, #thumblist_2, #thumblist_3, #thumblist_4, #thumblist_5, +#thumblist_1a, #thumblist_2a, #thumblist_3a, #thumblist_4a, #thumblist_5a +{ +display: block; +list-style-type: none; +float: left; +} + +#thumblist_1 li, #thumblist_2 li, #thumblist_3 li, #thumblist_4 li, #thumblist_5 li, +#thumblist_1a li, #thumblist_2a li, #thumblist_3a li, #thumblist_4a li, #thumblist_5a li +{ +display: block; +margin-right: 5px; +list-style-type: none; +padding-bottom: 0px; +padding-left: 4px; +padding-right: 4px; +float: right; +} + +li.li_norm{ +border: 2px solid transparent; +/* border: 2px; */ +} + +li.li_new { + border: 2px solid #0000ff; +} + +li.li_old { + border: 2px solid #ff0000; +} + +#thumblist_1 a img, #thumblist_2 a img, #thumblist_3 a img, #thumblist_4 a img, #thumblist_5 a img, +#thumblist_1a a img, #thumblist_2a a img, #thumblist_3a a img, #thumblist_4a a img, #thumblist_5a a img +{ +border-style:none; +border:1px; +padding:1px; +} + + +#thumblist_1 a:hover img, #thumblist_2 a:hover img, #thumblist_3 a:hover img, #thumblist_4 a:hover img, #thumblist_5 a:hover img, +#thumblist_1a a:hover img, #thumblist_2a a:hover img, #thumblist_3a a:hover img, #thumblist_4a a:hover img, #thumblist_5a a:hover img +{ +border-style:none; +border:0px; +background-color:#BDB071; +padding:1px; +} + + +.clearlist:after +{ + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* #clearlist {display: inline-block;} */ + +/* Hides from IE-mac \*/ +* html .clearfix {height: 1%;} +#clearlist {display: block;} +/* End hide from IE-mac */
\ No newline at end of file diff --git a/modules_v2/lightbox/css/album_page_RTL2.css b/modules_v2/lightbox/css/album_page_RTL2.css new file mode 100644 index 0000000000..979226c12a --- /dev/null +++ b/modules_v2/lightbox/css/album_page_RTL2.css @@ -0,0 +1,187 @@ +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2007 John Finlay and Others + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Modules + * @version $Id$ + */ + +/* lightbox_plus.css version 3.00 29/06/2007 */ +/* +#lightbox { + background-color: #FFFFFF; + padding-left: 8px; + padding-right: 8px; + padding-top: 18px; + padding-bottom: 18px; +} + +#overlay { + background-color: #000000; + filter:alpha(opacity=60); + -moz-opacity: 0.6; + opacity: 0.6; +} + +#lightboxCaption { + padding-top: 3px; + padding-bottom: 3px; + color: #000080; + background-color: #FFFFFF; + font-size: 100%; + font-weight: bold; + font-family: tahoma, verdana, arial, helvetica, sans-serif; + text-align: center; +} + +#lightboxIndicator { + border: 0px solid #FFFFFF; +} + +#lightboxOverallView { + background-image: url(images/overlay.png); +} + +* html #lightboxOverallView, +* html #overlay { + background-color: #000000; + background-image: url(images/blank.gif); + filter: Alpha(opacity=50); +} +*/ +.lb_notes:target { + color:#000000; + background-color: #ffffcc; +} + +.prvpic +{ +background-color: #999999; +height: 80px; +width: 60px; +border: 1px; +border-style: solid; +border-color: black; +margin-top: 0px; +} + +.prvpic img +{ +/* background-color: none; */ +border-style: dotted; +border: 0px; +/* border-color: none; */ +padding: 0px; +} + +.pic +{ +/* background-color: #777777; */ +/* background-color: none; */ +border-style: solid; +border: 0px; +border-color: #ffffff; +padding: 0px; +} + + +.thumbcontainer +{ +display: block; +width: 100%; +} + +#lb_icons +{ +text-align: center, justify; +} + +#thumblist_1, #thumblist_2, #thumblist_3, #thumblist_4, #thumblist_5, +#thumblist_1a, #thumblist_2a, #thumblist_3a, #thumblist_4a, #thumblist_5a +{ +display: block; +list-style-type: none; +float: left; +} + +#thumblist_1 li, #thumblist_2 li, #thumblist_3 li, #thumblist_4 li, #thumblist_5 li, +#thumblist_1a li, #thumblist_2a li, #thumblist_3a li, #thumblist_4a li, #thumblist_5a li +{ +display: block; +margin-right: 5px; +list-style-type: none; +padding-bottom: 0px; +padding-left: 4px; +padding-right: 4px; +float: right; +} + +li.li_norm{ +border: 2px solid transparent; +/* border: 2px; */ +} + +li.li_new { + border: 2px solid #0000ff; +} + +li.li_old { + border: 2px solid #ff0000; +} + +#thumblist_1 a img, #thumblist_2 a img, #thumblist_3 a img, #thumblist_4 a img, #thumblist_5 a img, +#thumblist_1a a img, #thumblist_2a a img, #thumblist_3a a img, #thumblist_4a a img, #thumblist_5a a img +{ +border-style:none; +border:1px; +padding:1px; +} + + +#thumblist_1 a:hover img, #thumblist_2 a:hover img, #thumblist_3 a:hover img, #thumblist_4 a:hover img, #thumblist_5 a:hover img, +#thumblist_1a a:hover img, #thumblist_2a a:hover img, #thumblist_3a a:hover img, #thumblist_4a a:hover img, #thumblist_5a a:hover img +{ +border-style:none; +border:0px; +background-color:#BDB071; +padding:1px; +} + + +.clearlist:after +{ + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* #clearlist {display: inline-block;} */ + +/* Hides from IE-mac \*/ +* html .clearfix {height: 1%;} +#clearlist {display: block;} +/* End hide from IE-mac */
\ No newline at end of file diff --git a/modules_v2/lightbox/css/album_page_RTL_ff.css b/modules_v2/lightbox/css/album_page_RTL_ff.css new file mode 100644 index 0000000000..a390e8b707 --- /dev/null +++ b/modules_v2/lightbox/css/album_page_RTL_ff.css @@ -0,0 +1,188 @@ +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2007 John Finlay and Others + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Modules + * @version $Id$ + */ + +/* lightbox_plus.css version 3.00 29/06/2007 */ +/* +#lightbox { + background-color: #FFFFFF; + padding-left: 8px; + padding-right: 8px; + padding-top: 18px; + padding-bottom: 18px; +} + +#overlay { + background-color: #000000; + filter:alpha(opacity=60); + -moz-opacity: 0.6; + opacity: 0.6; +} + +#lightboxCaption { + padding-top: 3px; + padding-bottom: 3px; + color: #000080; + background-color: #FFFFFF; + font-size: 100%; + font-weight: bold; + font-family: tahoma, verdana, arial, helvetica, sans-serif; + text-align: center; +} + +#lightboxIndicator { + border: 0px solid #FFFFFF; +} + +#lightboxOverallView { + background-image: url(images/overlay.png); +} + +* html #lightboxOverallView, +* html #overlay { + background-color: #000000; + background-image: url(images/blank.gif); + filter: Alpha(opacity=50); +} +*/ +.lb_notes:target { + color:#000000; + background-color: #ffffcc; +} + +.prvpic +{ +background-color: #999999; +height: 80px; +width: 60px; +border: 1px; +border-style: solid; +border-color: black; +margin-top: 0px; +} + +.prvpic img +{ +/* background-color: none; */ +border-style: dotted; +border: 0px; +/* border-color: none; */ +padding: 0px; +} + +.pic +{ +/* background-color: #777777; */ +/* background-color: none; */ +border-style: solid; +border: 0px; +border-color: #ffffff; +padding: 0px; +} + + +.thumbcontainer +{ +display: block; +width: 100%; +} + +#lb_icons +{ +text-align: center, justify; +} + + +#thumblist_1, #thumblist_2, #thumblist_3, #thumblist_4, #thumblist_5, +#thumblist_1a, #thumblist_2a, #thumblist_3a, #thumblist_4a, #thumblist_5a +{ +display: block; +list-style-type: none; +float: right; +} + +#thumblist_1 li, #thumblist_2 li, #thumblist_3 li, #thumblist_4 li, #thumblist_5 li, +#thumblist_1a li, #thumblist_2a li, #thumblist_3a li, #thumblist_4a li, #thumblist_5a li +{ +display: block; +margin-right: 5px; +list-style-type: none; +padding-bottom: 0px; +padding-left: 4px; +padding-right: 4px; +float: right; +} + +li.li_norm{ +border: 2px solid transparent; +/* border: 2px; */ +} + +li.li_new { + border: 2px solid #0000ff; +} + +li.li_old { + border: 2px solid #ff0000; +} + +#thumblist_1 a img, #thumblist_2 a img, #thumblist_3 a img, #thumblist_4 a img, #thumblist_5 a img, +#thumblist_1a a img, #thumblist_2a a img, #thumblist_3a a img, #thumblist_4a a img, #thumblist_5a a img +{ +border-style:none; +border:1px; +padding:1px; +} + + +#thumblist_1 a:hover img, #thumblist_2 a:hover img, #thumblist_3 a:hover img, #thumblist_4 a:hover img, #thumblist_5 a:hover img, +#thumblist_1a a:hover img, #thumblist_2a a:hover img, #thumblist_3a a:hover img, #thumblist_4a a:hover img, #thumblist_5a a:hover img +{ +border-style:none; +border:0px; +background-color:#BDB071; +padding:1px; +} + + +.clearlist:after +{ + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* #clearlist {display: inline-block;} */ + +/* Hides from IE-mac \*/ +* html .clearfix {height: 1%;} +#clearlist {display: block;} +/* End hide from IE-mac */
\ No newline at end of file diff --git a/modules_v2/lightbox/css/clearbox_music.css b/modules_v2/lightbox/css/clearbox_music.css new file mode 100644 index 0000000000..a5e26d7afc --- /dev/null +++ b/modules_v2/lightbox/css/clearbox_music.css @@ -0,0 +1,337 @@ + /* clearbox.css a ClearBox scripthez :: http://www.kreatura.hu/pyro/clearbox */ + +#CB_ShowTh, #CB_Thumbs2, #CB_Thumbs, .CB_RoundPixBugFix, #CB_Padding, #CB_ImgContainer, #CB_PrevNext, #CB_ContentHide, #CB_LoadingImage, #CB_Text, #CB_Window, #CB_Image, #CB_TopLeft, #CB_Top, #CB_TopRight, #CB_Left, #CB_Content, #CB_Right, #CB_BtmLeft, #CB_Btm, #CB_BtmRight, #CB_Prev, #CB_Next, #CB_Prev:hover, #CB_Next:hover, #CB_CloseWindow, #CB_SlideShowS, #CB_SlideShowP, #CB_SlideShowBar, #CB_Email { + margin: 0; + padding: 0; + background-color: transparent; + border: 0px; +} + +#CB_ImgHide { + position: absolute; + visibility: hidden; + z-index: 1098; + left: 0px; +} + +#CB_ShowTh { + width: 100%; + height: 15%; + visibility: hidden; + position: absolute; + z-index: 1097; + top: 0px; + left: 0px; +} + +#CB_ShowEtc { + width: 100%; + height: 15%; + visibility: hidden; + position: absolute; + z-index: 1097; + top: 15px; + left: 0px; +} + +#CB_Etc { + text-align: center; + display: none; + height: 60px; + padding-top: 10px; + background-color: #fff; + position: absolute; + z-index: 1100; + overflow: hidden; + top: 20px; + left: 0px; +} + +#CB_Thumbs { + display: none; + height: 60px; + padding-top: 10px; + background-color: #777; + position: absolute; + z-index: 1100; + overflow: hidden; + top: 10px; + left: 0px; +} + +#CB_Thumbs2 { + height: 50px; + position: absolute; +} + +.CB_ThumbsImg { + position: absolute; +} + +.CB_RoundPixBugFix { + display: block; + visibility: hidden; + font-family: arial; + font-size: 1pt; +} + +#CB_ImgContainer { + position: relative; + width: 100%; +} + +#CB_PrevNext { + position: absolute; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + z-index: 1002; +} + +#CB_ContentHide { + position: absolute; + z-index: 1000; + top: 0px; + left: 0px; +} + +#CB_LoadingImage { + position: absolute; + left: 50%; + top: 50%; + margin-left: -12px; + margin-top: -12px; + visibility: hidden; +} + +#CB_Text { + text-align: center; + color: #0000FF; + margin-top: 4px; +/* width: 150px; + overflow: auto; */ +} + +#CB_Text { + position: relative; + top: -6px; +} + +#CB_DetailText, #CB_NoteText { + width: 5px; + background-color: #FFFFFF; + text-align: center; + font-weight: 300; + color: #8800FF; + padding-bottom: 4px; + margin-top: -3px; + margin-bottom: 6px; +} +#CB_DetailText a, #CB_NoteText a, #CB_Txt2 a { + color: #888888; +} +#CB_DetailText a:hover, #CB_NoteText a:hover, #CB_Txt2 a:hover { + color: #AA0000; +} + +#CB_NavBar table { + background-color: #FFFFFF; + text-align: center; + font-weight: 300; + color: #8800FF; + padding-bottom: 4px; + margin-top: -4px; + margin-bottom: 3px; +} +#CB_NavBar table td img{ + border: 0px; +} + +#CB_Window { + left:50%; + position:absolute; + top:50%; + visibility:hidden; + z-index: 1100; +} + +#CB_Image { + position: relative; +} + +#CB_iFrame { + /* border: red solid 1px; */ + position: absolute; + width: 0px; + height: 0px; + z-index: 1003; +} + +#CB_UrlNotes { + position: absolute; + color: magenta; + width: 0px; + height: 0px; + background: #ffff88; + border: blue solid 1px; + z-index: 1010; +} + +#CB_TopLeft { + background-image:url(../pic/s_topleft.png); + background-position:right bottom; +} + +#CB_Top { + background-image:url(../pic/s_top.png); + background-position:left bottom; +} + +#CB_TopRight { + background-image:url(../pic/s_topright.png); + background-position:left bottom; +} + +#CB_Left { + background-image:url(../pic/s_left.png); + background-position:right top; +} + +#CB_Content { + background-color:#FFFFFF; +} + +#CB_Right { + background-image:url(../pic/s_right.png); + background-position:left top; +} + +#CB_BtmLeft { + background-image:url(../pic/s_btmleft.png); + background-position:right top; +} + +#CB_Btm { + background-image:url(../pic/s_btm.png); + background-position:left top; +} + +#CB_BtmRight { + background-image:url(../pic/s_btmright.png); + background-position:left top; +} + +#CB_Prev, #CB_Next { + background: transparent url(../pic/blank.gif) no-repeat scroll 0%; + display: block; + width: 49%; + cursor: pointer; + outline-style:none; + z-index: 1102; +} + +.CB_TextNav { + margin-left: 30px; + margin-right: 30px; + text-decoration: underline; + color: #aaaaaa; +} + +.CB_TextNav:hover { + margin-left: 30px; + margin-right: 30px; + text-decoration: none; + color: #ff7700; +} + +#CB_Prev { + float: left; + left: 0px; +} + +#CB_Next { + float: right; + left: 0px; +} + +#CB_Prev:hover { +background:transparent url(../pic/prev.gif) no-repeat scroll left 50%; +} + +#CB_Next:hover { +background:transparent url(../pic/next.gif) no-repeat scroll right 50%; +} + + +#CB_NavBar { + position: relative; + top: 10px; +} + +#CB_SlideShowS, #CB_SlideShowP { + position: absolute; +/* top: -4px; */ + top: 2px; + left: 2px; + z-index: 1104; + cursor: pointer; +} + +#CB_MusicOn, #CB_MusicOff { + position: absolute; +/* top: -6px; */ + top: 0px; + left: 28px; + z-index: 1104; + cursor: pointer; +} + +#CB_Speak, #CB_Speaker { + position: absolute; +/* top: -6px; */ + top: 0px; + left: 28px; + z-index: 1104; + cursor: pointer; +} + +#CB_ZoomOn { + position: absolute; + top: -1px; + right: 28px; + z-index: 1104; + cursor: pointer; +} + +#CB_ZoomOff { + position: absolute; + top: -1px; + right: 28px; + z-index: 1104; + cursor: pointer; +} + +#CB_CloseWindow { + position: absolute; + top: 1px; + right: 2px; + z-index: 1104; + cursor: pointer; +} + +#CB_SlideShowBar { + width: 0px; + position: absolute; + top: 5px; +/* left: 22px; */ + left: 2px; + height: 5px; + display: none; +} + +#CB_Email { + position: absolute; + right: 15px; +} +
\ No newline at end of file diff --git a/modules_v2/lightbox/css/clearbox_music_RTL.css b/modules_v2/lightbox/css/clearbox_music_RTL.css new file mode 100644 index 0000000000..e38918e6d8 --- /dev/null +++ b/modules_v2/lightbox/css/clearbox_music_RTL.css @@ -0,0 +1,341 @@ + /* clearbox.css a ClearBox scripthez :: http://www.kreatura.hu/pyro/clearbox */ + +#CB_ShowTh, #CB_Thumbs2, #CB_Thumbs, .CB_RoundPixBugFix, #CB_Padding, #CB_ImgContainer, #CB_PrevNext, #CB_ContentHide, #CB_LoadingImage, #CB_Text, #CB_Window, #CB_Image, #CB_TopLeft, #CB_Top, #CB_TopRight, #CB_Left, #CB_Content, #CB_Right, #CB_BtmLeft, #CB_Btm, #CB_BtmRight, #CB_Prev, #CB_Next, #CB_Prev:hover, #CB_Next:hover, #CB_CloseWindow, #CB_SlideShowS, #CB_SlideShowP, #CB_SlideShowBar, #CB_Email { + margin: 0; + padding: 0; + background-color: transparent; + border: 0px; +} + +#CB_ImgHide { + position: absolute; + visibility: hidden; + z-index: 1098; + left: 0px; +} +/* +#CB_ShowTh { + width: 100%; + height: 15%; + visibility: hidden; + position: absolute; + z-index: 1097; + top: 0px; + left: 0px; +} + +#CB_ShowEtc { + width: 100%; + height: 15%; + visibility: hidden; + position: absolute; + z-index: 1097; + top: 15px; + left: 0px; +} + +#CB_Etc { + text-align: center; + display: none; + height: 60px; + padding-top: 10px; + background-color: #fff; + position: absolute; + z-index: 1100; + overflow: hidden; + top: 20px; + left: 0px; +} + +#CB_Thumbs { + display: none; + height: 60px; + padding-top: 10px; + background-color: #777; + position: absolute; + z-index: 1100; + overflow: hidden; + top: 10px; + left: 0px; +} + +#CB_Thumbs2 { + height: 50px; + position: absolute; +} + +.CB_ThumbsImg { + position: absolute; +} +*/ + +.CB_RoundPixBugFix { + display: block; + visibility: hidden; + font-family: arial; + font-size: 1pt; +} + +#CB_ImgContainer { + position: relative; + width: 100%; +} + +#CB_PrevNext { + position: absolute; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + z-index: 1002; +} + +#CB_ContentHide { + position: absolute; + z-index: 1000; + top: 0px; + left: 0px; +} + +#CB_LoadingImage { + position: absolute; + left: 50%; + top: 50%; + margin-left: -12px; + margin-top: -12px; + visibility: hidden; +} + +#CB_Text { + text-align: center; + color: #0000FF; + margin-top: 4px; +/* width: 150px; + overflow: auto; */ +} + +#CB_Text { + position: relative; + top: -6px; +} + +#CB_DetailText, #CB_NoteText { + width: 5px; + background-color: #FFFFFF; + text-align: center; + font-weight: 300; + color: #8800FF; + padding-bottom: 4px; + margin-top: -3px; + margin-bottom: 6px; +} +#CB_DetailText a, #CB_NoteText a, #CB_Txt2 a { + color: #888888; +} +#CB_DetailText a:hover, #CB_NoteText a:hover, #CB_Txt2 a:hover { + color: #AA0000; +} + +#CB_NavBar table { + background-color: #FFFFFF; + text-align: center; + font-weight: 300; + color: #8800FF; + padding-bottom: 4px; + margin-top: -4px; + margin-bottom: 3px; +} +#CB_NavBar table td img{ + border: 0px; +} + +#CB_Window { + /* For IE */ + right:expression( (document.body.clientWidth - CB_ImgWidthOld ) /2 + 'px'); + /* For FF */ + left:50%; + position:absolute; + top:50%; + visibility:hidden; + z-index: 1100; +} + +#CB_Image { + position: relative; +} + +#CB_iFrame { + /* border: red solid 1px; */ + position: absolute; + width: 0px; + height: 0px; + z-index: 1003; +} + +#CB_UrlNotes { + position: absolute; + color: magenta; + width: 0px; + height: 0px; + background: #ffff88; + border: blue solid 1px; + z-index: 1010; +} + +#CB_TopLeft { + background-image:url(../pic/s_topright.png); + background-position:right bottom; +} + +#CB_Top { + background-image:url(../pic/s_top.png); + background-position:left bottom; +} + +#CB_TopRight { + background-image:url(../pic/s_topleft.png); + background-position:left bottom; +} + +#CB_Left { + background-image:url(../pic/s_right.png); + background-position:right top; +} + +#CB_Content { + background-color:#FFFFFF; +} + +#CB_Right { + background-image:url(../pic/s_left.png); + background-position:left top; +} + +#CB_BtmLeft { + background-image:url(../pic/s_btmright.png); + background-position:right top; +} + +#CB_Btm { + background-image:url(../pic/s_btm.png); + background-position:left top; +} + +#CB_BtmRight { + background-image:url(../pic/s_btmleft.png); + background-position:left top; +} + +#CB_Prev, #CB_Next { + background: transparent url(../pic/blank.gif) no-repeat scroll 0%; + display: block; + width: 49%; + cursor: pointer; + outline-style:none; + z-index: 1102; +} + +.CB_TextNav { + margin-left: 30px; + margin-right: 30px; + text-decoration: underline; + color: #aaaaaa; +} + +.CB_TextNav:hover { + margin-left: 30px; + margin-right: 30px; + text-decoration: none; + color: #ff7700; +} + +#CB_Prev { + float: left; + left: 0px; +} + +#CB_Next { + float: right; + left: 0px; +} + +#CB_Prev:hover { +background:transparent url(../pic/prev.gif) no-repeat scroll left 50%; +} + +#CB_Next:hover { +background:transparent url(../pic/next.gif) no-repeat scroll right 50%; +} + + +#CB_NavBar { + position: relative; + top: 10px; +} + +#CB_SlideShowS, #CB_SlideShowP { + position: absolute; +/* top: -4px; */ + top: 2px; + left: 2px; + z-index: 1104; + cursor: pointer; +} + +#CB_MusicOn, #CB_MusicOff { + position: absolute; +/* top: -6px; */ + top: 0px; + left: 28px; + z-index: 1104; + cursor: pointer; +} + +#CB_Speak, #CB_Speaker { + position: absolute; +/* top: -6px; */ + top: 0px; + left: 28px; + z-index: 1104; + cursor: pointer; +} + +#CB_ZoomOn { + position: absolute; + top: -1px; + right: 28px; + z-index: 1104; + cursor: pointer; +} + +#CB_ZoomOff { + position: absolute; + top: -1px; + right: 28px; + z-index: 1104; + cursor: pointer; +} + +#CB_CloseWindow { + position: absolute; + top: 1px; + right: 2px; + z-index: 1104; + cursor: pointer; +} + +#CB_SlideShowBar { + width: 0px; + position: absolute; + top: 5px; +/* left: 22px; */ + left: 2px; + height: 5px; + display: none; +} + +#CB_Email { + position: absolute; + right: 15px; +} +
\ No newline at end of file diff --git a/modules_v2/lightbox/functions/lb_call_js.php b/modules_v2/lightbox/functions/lb_call_js.php new file mode 100644 index 0000000000..03f19aa106 --- /dev/null +++ b/modules_v2/lightbox/functions/lb_call_js.php @@ -0,0 +1,92 @@ +<?php +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * @version $Id$ + * @author Brian Holland + */ +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +global $tabno, $LB_MUSIC_FILE, $LB_SS_SPEED, $LB_TRANSITION, $TEXT_DIRECTION; + +?> + +<script language="javascript" type="text/javascript"> + + var CB_ImgDetails = "<?php echo WT_I18N::translate('Details'); ?>"; // = "Details" + var CB_Detail_Info = "<?php echo WT_I18N::translate('View this Media Item Details ... Plus other Media Options - MediaViewer page'); ?>"; // = "View this Media Item......etc" + var CB_ImgNotes = "<?php echo WT_I18N::translate('Notes'); ?>"; // = "Notes" + var CB_Note_Info = "<?php echo ''; ?>"; // = "" + var CB_Pause_SS = "<?php echo WT_I18N::translate('Pause Slideshow'); ?>"; // = "Pause Slideshow" + var CB_Start_SS = "<?php echo WT_I18N::translate('Start Slideshow'); ?>"; // = "Start Slideshow" + var CB_Music = "<?php echo WT_I18N::translate('Turn Music On/Off'); ?>"; // = "Music On/Off " + var CB_Zoom_Off = "<?php echo WT_I18N::translate('Disable Zoom'); ?>"; // = "Disable Zoom" + var CB_Zoom_On = "<?php echo WT_I18N::translate('Zoom is enabled ... Use mousewheel or i and o keys to zoom in and out'); ?>"; // = "Zoom is Enabled" + var CB_Close_Win = "<?php echo WT_I18N::translate('Close Lightbox window'); ?>"; // = "Close Lightbox Window" + var CB_Balloon = "<?php echo "false"; ?>"; // Notes Tooltip Balloon or not + + <?php if ($TEXT_DIRECTION=="rtl") { ?> + var CB_Alignm = "<?php echo "right"; ?>"; // Notes RTL Tooltip Balloon Text align + var CB_ImgNotes2 = "<?php echo WT_I18N::translate('Notes'); ?>"; // Notes RTL Tooltip for Full Image + <?php } else { ?> + var CB_Alignm = "<?php echo "left"; ?>"; // Notes LTR Tooltip Balloon Text align + var CB_ImgNotes2 = "<?php echo WT_I18N::translate('Notes'); ?>"; // Notes LTR Tooltip for Full Image + <?php } ?> + + <?php if ($LB_MUSIC_FILE == "") { ?> + var myMusic = null; + <?php } else { ?> + var myMusic = '<?php echo $LB_MUSIC_FILE; ?>'; // The music file + <?php } ?> + + var CB_SlShowTime = '<?php echo $LB_SS_SPEED; ?>'; // Slide show timer + var CB_Animation = '<?php echo $LB_TRANSITION; ?>'; // Next/Prev Image transition effect + +</script> + +<?php if ($TEXT_DIRECTION == "rtl") { ?> + <script src="<?php echo WT_MODULES_DIR; ?>lightbox/js/Sound.js" type="text/javascript"></script> + <script src="<?php echo WT_MODULES_DIR; ?>lightbox/js/clearbox.js" type="text/javascript"></script> + <!--[if lte IE 7]> + <link href ="<?php echo WT_MODULES_DIR; ?>lightbox/css/album_page_RTL.css" rel="stylesheet" type="text/css" media="screen" /> + <![endif]--> +<?php } else { ?> + <script src="<?php echo WT_MODULES_DIR; ?>lightbox/js/Sound.js" type="text/javascript"></script> + <script src="<?php echo WT_MODULES_DIR; ?>lightbox/js/clearbox.js" type="text/javascript"></script> +<?php } ?> + + <script src="<?php echo WT_MODULES_DIR; ?>lightbox/js/wz_tooltip.js" type="text/javascript"></script> + <script src="<?php echo WT_MODULES_DIR; ?>lightbox/js/tip_centerwindow.js" type="text/javascript"></script> + +<?php if ($TEXT_DIRECTION=="rtl") { ?> + <script src="<?php echo WT_MODULES_DIR; ?>lightbox/js/tip_balloon_RTL.js" type="text/javascript"></script> +<?php } else { ?> + <script src="<?php echo WT_MODULES_DIR; ?>lightbox/js/tip_balloon.js" type="text/javascript"></script> +<?php } ?> diff --git a/modules_v2/lightbox/functions/lb_head.php b/modules_v2/lightbox/functions/lb_head.php new file mode 100644 index 0000000000..e3997b52b5 --- /dev/null +++ b/modules_v2/lightbox/functions/lb_head.php @@ -0,0 +1,231 @@ +<?php +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox 4.1 + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2007 to 2008 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * @version $Id$ + * @author Brian Holland + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +global $reorder, $GEDCOM, $LB_AL_HEAD_LINKS; + +$reorder=safe_get('reorder', '1', '0'); + +?> + +<script language="javascript" type="text/javascript"> +<!-- + function reorder_media() { + var win02 = window.open( + "edit_interface.php?action=reorder_media&pid=<?php echo $this->controller->indi->getXref(); ?>&currtab=album", "win02", "resizable=1, menubar=0, scrollbars=1, top=20, HEIGHT=840, WIDTH=450 "); + if (window.focus) {win02.focus();} + } + + function album_add() { + win03 = window.open( + "addmedia.php?action=showmediaform&linktoid=<?php echo $this->controller->indi->getXref(); ?>", "win03", "resizable=1, scrollbars=1, top=50, HEIGHT=780, WIDTH=600 "); + if (window.focus) {win03.focus();} + } + + function album_link() { + win04 = window.open( + "inverselink.php?linktoid=<?php echo $this->controller->indi->getXref(); ?>&linkto=person", "win04", "resizable=1, scrollbars=1, top=50, HEIGHT=300, WIDTH=450 "); + win04.focus() + } + + function goto_config_lightbox() { + window.location = "module.php?mod=lightbox&mod_action=admin_config&pid=<?php echo $this->controller->indi->getXref(); ?>&gedcom=<?php echo $GEDCOM; ?>#lightbox"; + } +--> +</script> + +<?php + +// Load Lightbox javascript and css files +// require_once WT_ROOT.WT_MODULES_DIR.'lightbox/functions/lb_call_js.php'; + +// Find if indi and family associated media exists and then count them ( $tot_med_ct) +require_once WT_ROOT.'includes/media_reorder_count.php'; + + // If in re-order mode do not show header links, but instead, show drag and drop title. + if (isset($reorder) && $reorder==1) { + echo "<center><b>", WT_I18N::translate('Drag-and-drop thumbnails to re-order media items'), "</b></center>" ; + echo "<br />"; + + } else { + //Show Lightbox-Album header Links + //echo "<br />"; + echo '<table border="0" width="75%"><tr>'; + // echo "<td class=\"width10 center wrap\" valign=\"top\"></td>"; + + if ($LB_AL_HEAD_LINKS == "icon" || (!WT_USER_IS_ADMIN && !WT_USER_CAN_EDIT)) { + echo "<td>"; + } + + // Configuration + if (WT_USER_IS_ADMIN) { + if ($LB_AL_HEAD_LINKS == "both") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"javascript:goto_config_lightbox()\">"; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/image_edit.gif" id="head_icon" class="icon" title="', WT_I18N::translate('Lightbox-Album Configuration'), '" alt="', WT_I18N::translate('Lightbox-Album Configuration'), '" /><br />'; + echo "" . WT_I18N::translate('Lightbox-Album Configuration') . " "; + echo "</a>"; + echo "</td>"; + // echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "text") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"javascript:goto_config_lightbox()\">"; + echo "" . WT_I18N::translate('Lightbox-Album Configuration') . " "; + echo "</a>"; + echo "</td>"; + // echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "icon") { + echo " "; + echo "<a href=\"javascript:goto_config_lightbox()\">"; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/image_edit.gif" id="head_icon" class="icon" title="', WT_I18N::translate('Lightbox-Album Configuration'), '" alt="', WT_I18N::translate('Lightbox-Album Configuration'), '" />'; + echo "</a>"; + } + } + + //Add a new multimedia object + if (WT_USER_CAN_EDIT) { + if ($LB_AL_HEAD_LINKS == "both") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"javascript: album_add()\"> "; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/image_add.gif" id="head_icon" class="icon" title="', WT_I18N::translate('Add a new Multimedia Object to this Individual'), '" alt="', WT_I18N::translate('Add a new Multimedia Object to this Individual'), '" /><br />'; + echo "" . WT_I18N::translate('Add a new Media Object') . " "; + echo " </a> "; + echo "</td>"; + //echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "text") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"javascript: album_add()\"> "; + echo "" . WT_I18N::translate('Add a new Media Object') . " "; + echo " </a> "; + echo "</td>"; + //echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "icon") { + echo " "; + echo "<a href=\"javascript: album_add()\"> "; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/image_add.gif" id="head_icon" class="icon" title="', WT_I18N::translate('Add a new Multimedia Object to this Individual'), '" alt="', WT_I18N::translate('Add a new Multimedia Object to this Individual'), '" />'; + echo "</a>"; + } + } + + //Link to an existing item + if (WT_USER_CAN_EDIT) { + if ($LB_AL_HEAD_LINKS == "both") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"javascript: album_link()\"> "; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/image_link.gif" id="head_icon" class="icon" title="', WT_I18N::translate('Link this Individual to an existing Multimedia Object'), '" alt="', WT_I18N::translate('Link this Individual to an existing Multimedia Object'), '" /><br />'; + echo "" . WT_I18N::translate('Link to an existing Media Object') . " "; + echo " </a> "; + echo "</td>"; + // echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "text") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"javascript: album_link()\"> "; + echo "" . WT_I18N::translate('Link to an existing Media Object') . " "; + echo " </a> "; + echo "</td>"; + // echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "icon") { + echo " "; + echo "<a href=\"javascript: album_link()\">"; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/image_link.gif" id="head_icon" class="icon" title="', WT_I18N::translate('Link this Individual to an existing Multimedia Object'), '" alt="', WT_I18N::translate('Link this Individual to an existing Multimedia Object'), '" />'; + echo "</a> "; + } else { + } + } +/* + // Album Reorder Media ----- + if (WT_USER_CAN_EDIT) { + if ($LB_AL_HEAD_LINKS == "both") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"".WT_SCRIPT_NAME."?pid={$pid}&tab={$tabno}&reorder=1\">" ; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/images.gif" class="icon" title="', WT_I18N::translate('Re-order media'), '" alt="', WT_I18N::translate('Re-order media'), '" /><br />'; + echo "" . WT_I18N::translate('Re-order media') . " "; + echo '</a>'; + echo "</td>"; + // echo "<input type=\"hidden\" name=\"reorder\" value=\"1\" />"; + //echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "text") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"".WT_SCRIPT_NAME."?pid={$pid}&tab={$tabno}&reorder=1\">" ; + echo "" . WT_I18N::translate('Re-order media') . " "; + echo '</a>'; + echo "</td>"; + //echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "icon") { + echo " "; + echo "<a href=\"".WT_SCRIPT_NAME."?pid={$pid}&tab={$tabno}&reorder=1\">" ; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/images.gif" class="icon" title="', WT_I18N::translate('Re-order media'), '" alt="', WT_I18N::translate('Re-order media'), '" />'; + echo '</a>'; + //echo "<td width=\"5%\"> </td>"; + } + } +*/ + + // Popup Reorder Media ----- + if (WT_USER_CAN_EDIT ) { + if ($LB_AL_HEAD_LINKS == "both") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"javascript: reorder_media()\">" ; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/images.gif" id="head_icon" class="icon" title="', WT_I18N::translate('Re-order media (window)'), '" alt="', WT_I18N::translate('Re-order media (window)'), '" /><br />'; + //echo "" . WT_I18N::translate('Re-order media (window)') . " "; + echo "" . WT_I18N::translate('Re-order media (window)') . " "; + echo '</a>'; + echo "</td>"; + //echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "text") { + echo "<td class=\"width15 center wrap\" valign=\"top\">"; + echo "<a href=\"javascript: reorder_media()\">" ; + // echo "" . WT_I18N::translate('Re-order media (window)') . " "; + echo "" . WT_I18N::translate('Re-order media') . " "; + echo '</a>'; + echo "</td>"; + //echo "<td width=\"5%\"> </td>"; + } else if ($LB_AL_HEAD_LINKS == "icon") { + echo " "; + echo "<a href=\"javascript: reorder_media()\">" ; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/images.gif" id="head_icon" class="icon" title="', WT_I18N::translate('Re-order media (window)'), '" alt="', WT_I18N::translate('Re-order media (window)'), '" /><br />'; + echo '</a>'; + //echo "<td width=\"5%\"> </td>"; + } + } + + + if ($LB_AL_HEAD_LINKS == "icon" || (!WT_USER_IS_ADMIN && !WT_USER_CAN_EDIT)) { + echo "</td>"; + } + + echo "</tr></table>"; + } diff --git a/modules_v2/lightbox/functions/lb_horiz_sort.php b/modules_v2/lightbox/functions/lb_horiz_sort.php new file mode 100644 index 0000000000..c093ec76a5 --- /dev/null +++ b/modules_v2/lightbox/functions/lb_horiz_sort.php @@ -0,0 +1,97 @@ +<?php +// Lightbox Album Include for Horizontal Album sort +// +// Various printing functions used to print fact records +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2008 PGV Development Team. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +/* + <script type="text/javascript" src="js/prototype/prototype.js"></script> + <script type="text/javascript" src="js/scriptaculous/scriptaculous.js"></script> +*/ +?> + <script type="text/javascript"> + function getGroupOrder() { + // var sections = document.getElementsByClassName('section'); + var sections = $$('.section'); + + var alerttext = ''; + var order = ''; + + sections.each(function(section) { + order += Sortable.sequence(section) + ','; + alerttext = order; + }); + alert(alerttext); + return false; + } + + </script> + + <style type="text/css"> + + body, div { + font-family: Arial, Helvetica; + font-size: 12px; + } + + ul { + width: 100%; + list-style-type:none; + color: black; + } + + li.facts_value { + padding: 2px; + cursor: move; + border: none; + text-align: center; + } + + </style> + +<script type="text/javascript"> +// <![CDATA[ + //sections = [ 'group1','group2' ]; + + <?php if ($rownum1>0) { ?> + Sortable.create( 'thumblist_1', { tag:'li', dropOnEmpty: false, constraint: false, only:'facts_value' } ); + <?php } ?> + <?php if ($rownum2>0) { ?> + Sortable.create( 'thumblist_2', { tag:'li', dropOnEmpty: false, constraint: false, only:'facts_value' } ); + <?php } ?> + <?php if ($rownum3>0) { ?> + Sortable.create( "thumblist_3", { tag:'li', dropOnEmpty: false, constraint: false, only:'facts_value' } ); + <?php } ?> + <?php if ($rownum4>0) { ?> + Sortable.create( "thumblist_4", { tag:'li', dropOnEmpty: false, constraint: false, only:'facts_value' } ); + <?php } ?> + +// Sortable.create( "thumblist", { tag:'li', dropOnEmpty: false, constraint: false, only:'facts_value' } ); + // ]]> +</script> diff --git a/modules_v2/lightbox/functions/lb_link.php b/modules_v2/lightbox/functions/lb_link.php new file mode 100644 index 0000000000..188f064e24 --- /dev/null +++ b/modules_v2/lightbox/functions/lb_link.php @@ -0,0 +1,94 @@ +<?php +// Lightbox Album module for webtrees +// +// Display media Items using Lightbox +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2002 to 2007 PHPGedView Development Team +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + + // Set Link + /** + * Generate link flyout menu + * + * @param string $mediaid + */ +// function print_link_menu2($mediaid) { + $mediaid=$media["XREF"]; + global $TEXT_DIRECTION, $WT_IMAGES; + if (!isset($WT_IMAGES['image_link'])) { + $WT_IMAGES['image_link']=WT_MODULES_DIR.'lightbox/images/image_link.gif'; + } + + $classSuffix = ""; + if ($TEXT_DIRECTION=="rtl") $classSuffix = "_rtl"; + + // main link displayed on page + $menu = new WT_Menu(); + if ($LB_ML_THUMB_LINKS == "icon" || $LB_ML_THUMB_LINKS == "both") { + $menu->addIcon('image_link'); + } + if ($LB_ML_THUMB_LINKS == "both") { + $menu->addLabel(WT_I18N::translate('Set link'), "down"); + } + if ($LB_ML_THUMB_LINKS == "text") { + $menu->addLabel(WT_I18N::translate('Set link')); + } + $menu->addOnclick("return ilinkitem('$mediaid','person')"); + $menu->addClass("", "", "submenu"); + $menu->addFlyout("left"); + + $submenu = new WT_Menu(WT_I18N::translate('To Person'), "#"); + $submenu->addOnclick("return ilinkitem('$mediaid','person')"); + $submenu->addClass("submenuitem".$classSuffix, "submenuitem".$classSuffix); + $menu->addSubMenu($submenu); + + $submenu = new WT_Menu(WT_I18N::translate('To Family'), "#"); + $submenu->addOnclick("return ilinkitem('$mediaid','family')"); + $submenu->addClass("submenuitem".$classSuffix, "submenuitem".$classSuffix); + $menu->addSubMenu($submenu); + + $submenu = new WT_Menu(WT_I18N::translate('To Source'), "#"); + $submenu->addOnclick("return ilinkitem('$mediaid','source')"); + $submenu->addClass("submenuitem".$classSuffix, "submenuitem".$classSuffix); + $menu->addSubMenu($submenu); + + echo $menu->getMenu(); +?> +<script type="text/javascript"> + function ilinkitem(mediaid, type) { + window.open('inverselink.php?mediaid='+mediaid+'&linkto='+type+'&'+sessionname+'='+sessionid, '_blank', 'top=50,left=50,width=400,height=300,resizable=1,scrollbars=1'); + return false; + } +</script> +<?php + +// } + + // Only set link on media that is in the DB +// if ($media["XREF"] != "") { +// print_link_menu($media2["XREF"]); +// } diff --git a/modules_v2/lightbox/functions/lightbox_print_media.php b/modules_v2/lightbox/functions/lightbox_print_media.php new file mode 100644 index 0000000000..d9e7d25f65 --- /dev/null +++ b/modules_v2/lightbox/functions/lightbox_print_media.php @@ -0,0 +1,362 @@ +<?php +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2007 to 2009 PGV Development Team. All rights reserved. + * + * Modifications Copyright (c) 2010 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * @version $Id$ + * @author Brian Holland + * + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +/** + * ----------------------------------------------------------------------------- + * Print the links to multi-media objects + * @param string $pid The the xref id of the object to find media records related to + * @param int $level The level of media object to find + * @param boolean $related Whether or not to grab media from related records + */ +function lightbox_print_media($pid, $level=1, $related=false, $kind=1, $noedit=false) { + + $edit="1"; + $n=1; + $fn=1; + + global $MULTI_MEDIA, $MEDIA_EXTERNAL; + global $GEDCOM, $MEDIATYPE; + global $WORD_WRAPPED_NOTES, $MEDIA_DIRECTORY, $WT_IMAGES, $TEXT_DIRECTION; + + global $is_media, $cntm1, $cntm2, $cntm3, $cntm4, $t, $mgedrec; + global $res, $typ2b, $edit, $tabno, $n, $item, $items, $p, $note, $rowm, $note_text, $reorder; + global $action, $order, $order2, $rownum, $rownum1, $rownum2, $rownum3, $rownum4, $media_data, $sort_i; + + global $GEDCOM_ID_PREFIX; + $ged_id=get_id_from_gedcom($GEDCOM); + + $gedrec = find_gedcom_record($pid, $ged_id, WT_USER_CAN_EDIT); + $ids = array($pid); + + //-- find all of the related ids + if ($related) { + $ct = preg_match_all("/1 FAMS @(.*)@/", $gedrec, $match, PREG_SET_ORDER); + for ($i=0; $i<$ct; $i++) { + $ids[] = trim($match[$i][1]); + } + } + + //LBox -- if exists, get a list of the sorted current objects in the indi gedcom record - (1 _WT_OBJE_SORT @xxx@ .... etc) ---------- + $sort_current_objes = array(); + if ($level>0) $sort_regexp = "/".$level." _WT_OBJE_SORT @(.*)@/"; + else $sort_regexp = "/_WT_OBJE_SORT @(.*)@/"; + $sort_ct = preg_match_all($sort_regexp, $gedrec, $sort_match, PREG_SET_ORDER); + for ($i=0; $i<$sort_ct; $i++) { + if (!isset($sort_current_objes[$sort_match[$i][1]])) $sort_current_objes[$sort_match[$i][1]] = 1; + else $sort_current_objes[$sort_match[$i][1]]++; + $sort_obje_links[$sort_match[$i][1]][] = $sort_match[$i][0]; + } + + // create ORDER BY list from Gedcom sorted records list --------------------------- + $orderbylist = 'ORDER BY '; // initialize + foreach ($sort_match as $id) { + $orderbylist .= "m_media='$id[1]' DESC, "; + } + $orderbylist = rtrim($orderbylist, ', '); + // --------------------------------------------------------------------------------------------------------------------------------------------------- + + //-- get a list of the current objects in the record + $current_objes = array(); + if ($level>0) $regexp = "/".$level." OBJE @(.*)@/"; + else $regexp = "/OBJE @(.*)@/"; + $ct = preg_match_all($regexp, $gedrec, $match, PREG_SET_ORDER); + for ($i=0; $i<$ct; $i++) { + if (!isset($current_objes[$match[$i][1]])) { + $current_objes[$match[$i][1]] = 1; + } else { + $current_objes[$match[$i][1]]++; + } + $obje_links[$match[$i][1]][] = $match[$i][0]; + } + + $media_found = false; + + // Get the related media items + $sqlmm = "SELECT DISTINCT "; + $sqlmm .= "m_media, m_ext, m_file, m_titl, m_gedfile, m_gedrec, mm_gid, mm_gedrec FROM `##media`, `##media_mapping` where "; + $sqlmm .= "mm_gid IN ("; + $vars=array(); + foreach ($ids as $id) { + $sqlmm .= "?, "; + $vars[]=$id; + } + $sqlmm = rtrim($sqlmm, ', '); + $sqlmm .= ") AND mm_gedfile=? AND mm_media=m_media AND mm_gedfile=m_gedfile "; + $vars[]=WT_GED_ID; + //-- for family and source page only show level 1 obje references + if ($level>0) { + $sqlmm .= "AND mm_gedrec LIKE ?"; + $vars[]="$level OBJE%"; + } + + // Set type of media from call in album + switch ($kind) { + case 1: + $tt=WT_I18N::translate('Photo'); + $sqlmm.="AND (m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ?)"; + $vars[]='%TYPE photo%'; + $vars[]='%TYPE map%'; + $vars[]='%TYPE painting%'; + $vars[]='%TYPE tombstone%'; + break; + case 2: + $tt=WT_I18N::translate('Document'); + $sqlmm.="AND (m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ?)"; + $vars[]='%TYPE card%'; + $vars[]='%TYPE certificate%'; + $vars[]='%TYPE document%'; + $vars[]='%TYPE magazine%'; + $vars[]='%TYPE manuscript%'; + $vars[]='%TYPE newspaper%'; + break; + case 3: + $tt=WT_I18N::translate('Census'); + $sqlmm.="AND (m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ?)"; + $vars[]='%TYPE electronic%'; + $vars[]='%TYPE fiche%'; + $vars[]='%TYPE film%'; + break; + case 4: + $tt=WT_I18N::translate('Other'); + $sqlmm.="AND (m_gedrec NOT LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ? OR m_gedrec LIKE ?)"; + $vars[]='%TYPE %'; + $vars[]='%TYPE coat%'; + $vars[]='%TYPE book%'; + $vars[]='%TYPE audio%'; + $vars[]='%TYPE video%'; + $vars[]='%TYPE other%'; + break; + case 5: + default: + $tt = WT_I18N::translate('Not in DB'); + break; + } + + if ($sort_ct>0) { + $sqlmm .= $orderbylist; + } else { + $sqlmm .= " ORDER BY mm_gid DESC "; + } + + $rows=WT_DB::prepare($sqlmm)->execute($vars)->fetchAll(PDO::FETCH_ASSOC); + $foundObjs = array(); + $numm = count($rows); + + // Begin to Layout the Album Media Rows + if ($numm>0 || $kind==5) { + if ($kind!=5) { + echo "\n\n"; + echo "<table cellpadding=\"0\" border=\"0\" width=\"100%\" class=\"facts_table\"><tr>", "\n"; + + echo '<td width="100" align="center" class="descriptionbox" style="vertical-align:middle;">'; + echo "<b>{$tt}</b>"; + echo '</td>'; + + echo '<td class="facts_value" >'; + echo '<table class="facts_table" width="100%" cellpadding="0"><tr><td >' . "\n"; + echo "<div id=\"thumbcontainer", $kind, "\">" . "\n"; + echo "<ul class=\"section\" id=\"thumblist_", $kind, "\">" . "\n\n"; + } + + // Album Reorder include ============================= + // Following used for Album media sort ------------------ + $reorder=safe_get('reorder', '1', '0'); + if ($reorder==1) { + if ($kind==1) $rownum1=$numm; + if ($kind==2) $rownum2=$numm; + if ($kind==3) $rownum3=$numm; + if ($kind==4) $rownum4=$numm; + if ($kind==5) require WT_ROOT.WT_MODULES_DIR.'lightbox/functions/lb_horiz_sort.php'; + } + // ================================================== + + // Start pulling media items into thumbcontainer div ============================== + foreach ($rows as $rowm) { + if (isset($foundObjs[$rowm['m_media']])) { + if (isset($current_objes[$rowm['m_media']])) { + $current_objes[$rowm['m_media']]--; + } + continue; + } + // NOTE: Determine the size of the mediafile + $imgwidth = 300+40; + $imgheight = 300+150; + if (isFileExternal($rowm["m_file"])) { + if (in_array($rowm["m_ext"], $MEDIATYPE)) { + $imgwidth = 400+40; + $imgheight = 500+150; + } else { + $imgwidth = 800+40; + $imgheight = 400+150; + } + } else if (media_exists(check_media_depth($rowm["m_file"], "NOTRUNC"))) { + $imgsize = findImageSize(check_media_depth($rowm["m_file"], "NOTRUNC")); + $imgwidth = $imgsize[0]+40; + $imgheight = $imgsize[1]+150; + } + $rows=array(); + + + //-- if there is a change to this media item then get the + //-- updated media item and show it + if (($newrec=find_updated_record($rowm["m_media"], $ged_id)) && $kind!=5 ) { + $row = array(); + $row['m_media'] = $rowm["m_media"]; + $row['m_file'] = get_gedcom_value("FILE", 1, $newrec); + $row['m_titl'] = get_gedcom_value("TITL", 1, $newrec); + if (empty($row['m_titl'])) $row['m_titl'] = get_gedcom_value("FILE:TITL", 1, $newrec); + $row['m_gedrec'] = $newrec; + $et = preg_match("/(\.\w+)$/", $row['m_file'], $ematch); + $ext = ""; + if ($et>0) $ext = substr(trim($ematch[1]), 1); + $row['m_ext'] = $ext; + $row['mm_gid'] = $pid; + $row['mm_gedrec'] = $rowm["mm_gedrec"]; + $rows['new'] = $row; + $rows['old'] = $rowm; + } else { + if (!isset($current_objes[$rowm['m_media']]) && ($rowm['mm_gid']==$pid)) { + $rows['old'] = $rowm; + } else { + $rows['normal'] = $rowm; + if (isset($current_objes[$rowm['m_media']])) { + $current_objes[$rowm['m_media']]--; + } + } + } + + foreach ($rows as $rtype => $rowm) { + if ($kind!=5) { + $res = lightbox_print_media_row($rtype, $rowm, $pid); + } + $media_found = $media_found || $res; + $foundObjs[$rowm['m_media']]=true; + } + } + + // ===================================================================================== + //-- Objects are removed from the $current_objes list as they are printed. + //-- Any "Extra" objects left in the list are new objects recently added to the gedcom + //-- but not yet accepted into the database. + //-- We will print them too, and put any "Extra Items not in DB" into a new Row. + + // Firstly, get count of Items in Database for this Individual + $indiobjs = "SELECT "; + $indiobjs .= "m_media, m_ext, m_file, m_titl, m_gedfile, m_gedrec, mm_gid, mm_gedrec FROM `##media`, `##media_mapping` where "; + $indiobjs .= "mm_gid=? "; + $indiobjs .= "AND mm_gedfile=? AND mm_media=m_media AND mm_gedfile=m_gedfile "; + $vars2=array($pid, WT_GED_ID); + $rows=WT_DB::prepare($indiobjs)->execute($vars2)->fetchAll(PDO::FETCH_ASSOC); + $foundObjs = array(); + $numindiobjs = count($rows); + + // Compare Items count in Database versus Item count in GEDCOM + if ($kind==5 && $ct!=$numindiobjs) { + // If any items are left in $current_objes list for this individual, put them into $kind 5 ("Not in DB") row + echo "\n\n"; + echo "<table cellpadding=\"0\" border=\"0\" width=\"100%\" class=\"facts_table\"><tr>", "\n"; + echo '<td width="100" align="center" class="descriptionbox" style="vertical-align:middle;">'; + echo "<b>{$tt}</b>"; + echo '</td>'; + echo '<td class="facts_value" >'; + echo '<table class="facts_table" width="100%" cellpadding="0"><tr><td >' . "\n"; + echo "<div id=\"thumbcontainer", $kind, "\">" . "\n"; + echo "<ul class=\"section\" id=\"thumblist_", $kind, "\">" . "\n\n"; + foreach ($current_objes as $media_id=>$value) { + while ($value>0) { + $objSubrec = array_pop($obje_links[$media_id]); + $row = array(); + $newrec = find_gedcom_record($media_id, $ged_id, true); + $row['m_media'] = $media_id; + $row['m_gedfile']=$ged_id; + $row['m_file'] = get_gedcom_value("FILE", 1, $newrec); + $row['m_titl'] = get_gedcom_value("TITL", 1, $newrec); + if (empty($row['m_titl'])) $row['m_titl'] = get_gedcom_value("FILE:TITL", 1, $newrec); + $row['m_gedrec'] = $newrec; + $et = preg_match("/(\.\w+)$/", $row['m_file'], $ematch); + $ext = ""; + if ($et>0) $ext = substr(trim($ematch[1]), 1); + $row['m_ext'] = $ext; + $row['mm_gid'] = $pid; + $row['mm_gedrec'] = get_sub_record($objSubrec{0}, $objSubrec, $gedrec); + $res = lightbox_print_media_row('new', $row, $pid); + $media_found = $media_found || $res; + $value--; + } + } + } + + // No "Extra" Media Items ============================ + if ($kind==5 && $ct==$numindiobjs) { + // "Extra" Media Item in GEDCOM but NOT in DB ======== + } else if ($kind==5 && $ct!=$numindiobjs) { + echo "</ul>"; + echo "</div>"; + echo "<div class=\"clearlist\">"; + echo "</div>"; + echo '</td></tr></table>' . "\n"; + echo '</td>'. "\n"; + echo '</tr>'; + echo '</table>' . "\n\n"; + // Media Item in GEDCOM & in DB ====================== + } else { + echo "</ul>"; + echo "</div>"; + echo "<div class=\"clearlist\">"; + echo "</div>"; + echo '</td></tr></table>' . "\n"; + if ($kind==3 && $numm > 0) { + echo "<font size='1'>"; + echo WT_I18N::translate('"UK census images have been obtained from "The National Archives", the custodian of the original records, and appear here with their approval on the condition that no commercial use is made of them without permission. +Requests for commercial publication of these or other UK census images appearing on this website should be directed to: Image Library, The National Archives, Kew, Surrey, TW9 4DU, United Kingdom." +'); + echo "</font>"; + } + echo '</td>'. "\n"; + echo '</tr>'; + echo '</table>' . "\n\n"; + } + + } + + if ($media_found) return $is_media="YES" ; + else return $is_media="NO" ; + +} diff --git a/modules_v2/lightbox/functions/lightbox_print_media_row.php b/modules_v2/lightbox/functions/lightbox_print_media_row.php new file mode 100644 index 0000000000..38c3ea8152 --- /dev/null +++ b/modules_v2/lightbox/functions/lightbox_print_media_row.php @@ -0,0 +1,365 @@ +<?php +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox 4.1 + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2007 to 2009 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * @version $Id$ + * @author Brian Holland + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +/** + * print a media row in a table + * @param string $rtype whether this is a 'new', 'old', or 'normal' media row... this is used to determine if the rows should be printed with an outline color + * @param array $rowm An array with the details about this media item + * @param string $pid The record id this media item was attached to + */ +function lightbox_print_media_row($rtype, $rowm, $pid) { + + global $WT_IMAGES, $MEDIA_DIRECTORY, $TEXT_DIRECTION; + global $GEDCOM, $THUMBNAIL_WIDTH, $USE_MEDIA_VIEWER; + global $SEARCH_SPIDER; + global $t, $n, $item, $items, $p, $edit, $reorder, $LB_AL_THUMB_LINKS, $note; + global $LB_URL_WIDTH, $LB_URL_HEIGHT, $order1, $sort_i, $notes, $q, $LB_TT_BALLOON; + + $reorder=safe_get('reorder', '1', '0'); + + $mainMedia = check_media_depth($rowm["m_file"], "NOTRUNC"); + // If media file is missing from "media" directory, but is referenced in Gedcom + if (!media_exists($mainMedia)) { + if (!file_exists($rowm['m_file']) && !isset($rowm['m_file'])) { + echo "<tr>"; + echo "<td valign=\"top\" rowspan=\"2\" >"; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/transp80px.gif" height="82px" alt=""></img>'; + echo "</td>"; + echo "<td class=\"description_box\" valign=\"top\" colspan=\"3\" nowrap=\"nowrap\" >"; + echo "<center><br /><img src=\"" . WT_THEME_DIR . "images/media.gif\" height=\"30\" border=\"0\" />"; + echo "<font size=\"1\"><br />" . WT_I18N::translate('File not found.') . "</font></center>"; + echo "</td>"; + echo "</tr>"; + } else if (!file_exists($rowm['m_file'])) { + echo "<li class=\"li_norm\" >"; + echo "<table class=\"pic\" width=\"50px\" border=\"0\" >"; + echo "<tr>"; + echo "<td valign=\"top\" rowspan=\"2\" >"; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/transp80px.gif" height="100px" alt=""></img>'; + echo "</td>"; + echo "<td class=\"description_box\" valign=\"top\" colspan=\"3\" nowrap=\"nowrap\" >"; + echo "<center><br /><img src=\"" . WT_THEME_DIR . "images/media.gif\" height=\"30\" border=\"0\" />"; + echo "<font size=\"1\"><br />" . WT_I18N::translate('File not found.') . "</font></center>"; + echo "</td>"; + echo "</tr>"; + + } else { + echo "<li class=\"li_norm\" >"; + echo "<table class=\"pic\" width=\"50px\" border=\"0\" >"; + } + // Else Media files are present in "media" directory + } else { + //If media is linked to a 'private' person + if (!canDisplayRecord($rowm['m_gedfile'], $rowm['m_gedrec']) || !canDisplayFact($rowm['m_media'], $rowm['m_gedfile'], $rowm['mm_gedrec'])) { + return false; + } else { + // Media is NOT linked to private person + // If reorder media has been clicked + if (isset($reorder) && $reorder==1) { + echo "<li class=\"facts_value\" style=\"border:0px;\" id=\"li_" . $rowm['m_media'] . "\" >"; + + // Else If reorder media has NOT been clicked + // Highlight Album Thumbnails - Changed=new (blue), Changed=old (red), Changed=no (none) + } else if ($rtype=='new') { + echo "<li class=\"li_new\">"; + } else if ($rtype=='old') { + echo "<li class=\"li_old\">"; + } else { + echo "<li class=\"li_norm\">"; + } + } + } + + // Add blue or red borders + $styleadd=""; + if ($rtype=='new') $styleadd = "change_new"; + if ($rtype=='old') $styleadd = "change_old"; + + // NOTE Start printing the media details + if (!media_exists($mainMedia)) { + if (!media_exists($rowm['m_file'])) { + $thumbnail = ""; + $isExternal = ""; // isFileExternal($thumbnail); + } else { + $thumbnail = thumbnail_file($rowm["m_file"], true, false, $pid); + $isExternal = isFileExternal($thumbnail); + } + } else { + $thumbnail = thumbnail_file($mainMedia, true, false, $pid); + $isExternal = isFileExternal($thumbnail); + // echo $thumbnail; + } + $linenum = 0; + + // If Fact details can be shown -------------------------------------------------------------------------------------------- + if (canDisplayFact($pid, $rowm['m_file'], $rowm['mm_gedrec'])) { + + // Get the title of the media + $media=WT_Media::getInstance($rowm["m_media"]); + $rawTitle = $rowm["m_titl"]; + if (empty($rawTitle)) $rawTitle = get_gedcom_value("TITL", 2, $rowm["mm_gedrec"]); + if (empty($rawTitle)) $rawTitle = basename($rowm["m_file"]); + $mediaTitle = PrintReady(htmlspecialchars($rawTitle)); + + $mainMedia = check_media_depth($rowm["m_file"], "NOTRUNC"); + $mainFileExists = true; + $imgsize = findImageSize($mainMedia); + $imgwidth = $imgsize[0]+40; + $imgheight = $imgsize[1]+150; + + // Get the tooltip link for source + $sour = get_gedcom_value("SOUR", 1, $rowm["m_gedrec"]); + + //Get media item Notes + $haystack = $rowm["m_gedrec"]; + $needle = "1 NOTE"; + $before = substr($haystack, 0, strpos($haystack, $needle)); + $after = substr(strstr($haystack, $needle), strlen($needle)); + $final = $before.$needle.$after; + $notes = PrintReady(htmlspecialchars(print_fact_notes($final, 1, true, true))); + + // Get info on how to handle this media file + $mediaInfo = mediaFileInfo($mainMedia, $thumbnail, $rowm["m_media"], $mediaTitle, $notes); + + //text alignment for Tooltips + if ($TEXT_DIRECTION=="rtl") { + $alignm = "right"; + $left = "true"; + } else { + $alignm = "left"; + $left = "false"; + } + + // Tooltip Options + $tt_opts = ", BALLOON," . $LB_TT_BALLOON ; + $tt_opts .= ", LEFT," . $left . ""; + $tt_opts .= ", ABOVE, true"; + $tt_opts .= ", TEXTALIGN, '" . $alignm . "'"; + $tt_opts .= ", WIDTH, -480 "; + $tt_opts .= ", BORDERCOLOR, ''"; + $tt_opts .= ", TITLEBGCOLOR, ''"; + $tt_opts .= ", CLOSEBTNTEXT, 'X'"; + $tt_opts .= ", CLOSEBTN, false"; + $tt_opts .= ", CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000']"; + $tt_opts .= ", OFFSETX, -30"; + $tt_opts .= ", OFFSETY, 110"; + $tt_opts .= ", STICKY, true"; + $tt_opts .= ", PADDING, 6"; + $tt_opts .= ", CLICKCLOSE, true"; + $tt_opts .= ", DURATION, 8000"; + $tt_opts .= ", BGCOLOR, '#f3f3f3'"; + $tt_opts .= ", JUMPHORZ, 'true' "; + $tt_opts .= ", JUMPVERT, 'false' "; + $tt_opts .= ", DELAY, 0"; + + // Prepare Below Thumbnail menu ---------------------------------------------------- + if ($TEXT_DIRECTION== "rtl") { + $submenu_class = "submenuitem_rtl"; + $submenu_hoverclass = "submenuitem_hover_rtl"; + } else { + $submenu_class = "submenuitem"; + $submenu_hoverclass = "submenuitem_hover"; + } + $menu = new WT_Menu(); + // Truncate media title to 13 chars (45 chars if Streetview) and add ellipsis + $mtitle = $rawTitle; + if (strpos($rowm['m_file'], 'http://maps.google.')===0) { + if (utf8_strlen($rawTitle)>16) $mtitle = utf8_substr($rawTitle, 0, 45).WT_I18N::translate('…'); + } else { + if (utf8_strlen($rawTitle)>16) $mtitle = utf8_substr($rawTitle, 0, 13).WT_I18N::translate('…'); + } + $mtitle = PrintReady(htmlspecialchars($mtitle)); + + // Continue menu construction + // If media file is missing from "media" directory, but is referenced in Gedcom + if (!media_exists($rowm['m_file']) && !media_exists($mainMedia)) { + $menu->addLabel("<img src=\"{$thumbnail}\" style=\"display:none;\" alt=\"\" title=\"\" />" . WT_I18N::translate('Edit')." (". $rowm["m_media"].")", "right"); + } else { + $menu->addLabel("<img src=\"{$thumbnail}\" style=\"display:none;\" alt=\"\" title=\"\" />" . PrintReady($mtitle), "right"); + } + // Next line removed to avoid gallery thumbnail duplication + // $menu["link"] = mediaInfo['url']; + + if ($rtype=='old') { + // Do not print menu if item has changed and this is the old item + } else { + // Continue printing menu + $menu->addClass("", "", "submenu"); + + // View Notes + if (strpos($rowm['m_gedrec'], "\n1 NOTE")) { + $submenu = new WT_Menu(" " . WT_I18N::translate('View Notes') . " ", "#", "right"); + // Notes Tooltip ---------------------------------------------------- + $sonclick = "TipTog("; + // Contents of Notes + $sonclick .= "'"; + $sonclick .= "<font color=#008800><b>" . WT_I18N::translate('Notes') . ":</b></font><br />"; + $sonclick .= $notes; + $sonclick .= "'"; + // Notes Tooltip Parameters + $sonclick .= $tt_opts; + $sonclick .= ");"; + $sonclick .= "return false;"; + $submenu->addOnclick($sonclick); + $submenu->addClass($submenu_class, $submenu_hoverclass); + $menu->addSubMenu($submenu); + } + //View Details + $submenu = new WT_Menu(" " . WT_I18N::translate('View Details') . " ", WT_SERVER_NAME.WT_SCRIPT_PATH . "mediaviewer.php?mid=" . $rowm["m_media"], "right"); + $submenu->addClass($submenu_class, $submenu_hoverclass); + $menu->addSubMenu($submenu); + //View Source + if (strpos($rowm['m_gedrec'], "\n1 SOUR") && canDisplayRecord(WT_GED_ID, find_source_record($sour, WT_GED_ID))) { + $submenu = new WT_Menu(" " . WT_I18N::translate('View Source') . " ", WT_SERVER_NAME.WT_SCRIPT_PATH . "source.php?sid=" . $sour, "right"); + $submenu->addClass($submenu_class, $submenu_hoverclass); + $menu->addSubMenu($submenu); + } + if (WT_USER_CAN_EDIT) { + // Edit Media + $submenu = new WT_Menu(" " . WT_I18N::translate('Edit media') . " ", "#", "right"); + $submenu->addOnclick("return window.open('addmedia.php?action=editmedia&pid={$rowm['m_media']}&linktoid={$rowm['mm_gid']}', '_blank', 'top=50,left=50,width=600,height=700,resizable=1,scrollbars=1');"); + $submenu->addClass($submenu_class, $submenu_hoverclass); + $menu->addSubMenu($submenu); + if (WT_USER_IS_ADMIN) { + // Manage Links + $submenu = new WT_Menu(" " . WT_I18N::translate('Manage links') . " ", "#", "right"); + $submenu->addOnclick("return window.open('inverselink.php?mediaid={$rowm['m_media']}&linkto=manage', '_blank', 'top=50,left=50,width=570,height=650,resizable=1,scrollbars=1');"); + $submenu->addClass($submenu_class, $submenu_hoverclass); + $menu->addSubMenu($submenu); + // Unlink Media + $submenu = new WT_Menu(" " . WT_I18N::translate('Unlink Media') . " ", "#", "right"); + $submenu->addOnclick("return delete_record('$pid', 'OBJE', '".$rowm['m_media']."');"); + $submenu->addClass($submenu_class, $submenu_hoverclass); + $menu->addSubMenu($submenu); + } + } + } + + // Check if allowed to View media + if ($isExternal || media_exists($thumbnail) && canDisplayFact($rowm['m_media'], $rowm['m_gedfile'], $rowm['m_gedrec'])) { + $mainFileExists = false; + + // Get Media info + if ($isExternal || media_exists($rowm['m_file']) || media_exists($mainMedia)) { + $mainFileExists = true; + $imgsize = findImageSize($rowm['m_file']); + $imgwidth = $imgsize[0]+40; + $imgheight = $imgsize[1]+150; + + // Start Thumbnail Enclosure table --------------------------------------------- + // Pull table up 90px if media object is a "streetview" + if (strpos($rowm['m_file'], 'http://maps.google.')===0) { + echo "<table width=\"10px\" style=\"margin-top:-90px;\" class=\"pic\" border=\"0\"><tr>"; + } else { + echo "<table width=\"10px\" class=\"pic\" border=\"0\"><tr>"; + } + echo "<td align=\"center\" rowspan=\"2\" >"; + echo '<img src="', WT_MODULES_DIR, 'lightbox/images/transp80px.gif" height="100px" alt=""></img>'; + echo "</td>"; + + // Check for Notes associated media item + if ($reorder) { + // If reorder media has been clicked + echo "<td width=\"90% align=\"center\"><b><font size=\"2\" style=\"cursor:move;margin-bottom:2px;\">" . $rowm['m_media'] . "</font></b></td>"; + echo "</tr>"; + } + $item++; + + echo "<td colspan=\"3\" valign=\"middle\" align=\"center\" >"; + // If not reordering, enable Lightbox or popup and show thumbnail tooltip ------ + if (!$reorder) { + echo '<a href="', $mediaInfo['url'], '">'; + } + } + + // Now finally print the thumbnail ----------------------------------------------------- + $height = 78; + $size = findImageSize($mediaInfo['thumb']); + if ($size[1]<$height) $height = $size[1]; + echo "<img src=\"{$mediaInfo['thumb']}\" border=\"0\" height=\"{$height}\"" ; + + // print browser tooltips associated with image ---------------------------------------- + echo " alt=\"\" title=\"" . Printready(strip_tags($mediaTitle)) . "\" />"; + + // Close anchor -------------------------------------------------------------- + if ($mainFileExists) { + echo "</a>"; + } + echo "</td></tr>"; + + //View Edit Menu ---------------------------------- + if (!$reorder) { + // If not reordering media print View or View-Edit Menu + echo "<tr>"; + echo "<td width=\"5px\"></td>"; + echo "<td valign=\"bottom\" align=\"center\" nowrap=\"nowrap\">"; + echo $menu->getMenu(); + echo "</td>"; + echo "<td width=\"5px\"></td>"; + echo "</tr>"; + } + + // echo "</table>"; + } + + } // NOTE End If Show fact details + + + // If media file is missing but details are in Gedcom then add the menu as well + //if (!media_exists($rowm['m_file'])) { + if (!media_exists($mainMedia)) { + if (!media_exists($rowm['m_file'])) { + echo "<tr>"; + echo "<td ></td>"; + echo "<td valign=\"bottom\" align=\"center\" nowrap=\"nowrap\">"; + echo $menu->getMenu(); + echo "</td>"; + echo "<td ></td>"; + echo "</tr>"; + } + } + + //close off the table + echo "</table>"; + + $media_data = $rowm['m_media']; + echo "<input type=\"hidden\" name=\"order1[$media_data]\" value=\"$sort_i\" />"; + $sort_i++; + + echo "</li>"; + return true; +} diff --git a/modules_v2/lightbox/help_text.php b/modules_v2/lightbox/help_text.php new file mode 100644 index 0000000000..6e3083aecf --- /dev/null +++ b/modules_v2/lightbox/help_text.php @@ -0,0 +1,88 @@ +<?php +/** + * Lightbox Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} +switch ($help) { + +// Added in VERSION 4.1.6 + +case 'LIGHTBOX_CONFIG': + $title=WT_I18N::translate('Configure Lightbox'); + $text=WT_I18N::translate('Configure all aspects of the Lightbox module here.'); + break; + +case 'lb_tt_balloon': + $title=WT_I18N::translate('Album Tab Thumbnail - Notes Link Tooltip'); + $text=WT_I18N::translate('This option lets you determine whether the \'View Notes\' link should show a \'Balloon\' Tooltip or \'Normal\' Tooltip when clicked. <br /><br />The link shown here show you the Notes associated with a Media item (if available).<br />'); + break; + +// VERSION 4.1.3 + +case 'mediatab': + $title=WT_I18N::translate('Media Tab Appearance'); + $text=WT_I18N::translate('This option lets you determine whether the Media tab should be shown on the Individual Information page.<br /><br />When this option is set to <b>Hide</b>, only the <b>Lightbox</b> tab will be shown.<br />'); + break; + +case 'lb_al_head_links': + $title=WT_I18N::translate('Album Tab Header Link appearance'); + $text=WT_I18N::translate('This option lets you determine whether the header area of the Lightbox tab, which contains links to control various aspects of the Lightbox module, should contain only icons, only text, or both.<br /><br />The <b>Icon</b> option is probably not very useful, since you won\'t see any indication of each icon\'s function until your mouse hovers over the icon.<br />'); + break; + +case 'lb_al_thumb_links': + $title=WT_I18N::translate('Album Tab Thumbnails Link appearance'); + $text=WT_I18N::translate('This option lets you determine whether the links area below each thumbnail should show an icon or text. The links shown here let you edit the Media object\'s details or delete it.<br />'); + break; + +case 'lb_ml_thumb_links': + $title=WT_I18N::translate('Thumbnails Link appearance'); + $text=WT_I18N::translate('This option lets you determine whether the Links area above the Media object\'s details in the MultiMedia list should contain only icons, only text, or both. The links shown here let you perform various editing actions on the Media object in question.<br /><br />The <b>None</b> option completely hides these links, and thus acts as if the user did not have any editing rights.<br />'); + break; + +case 'lb_ss_speed': + $title=WT_I18N::translate('Slide Show speed'); + $text=WT_I18N::translate('This option determines the length of time each image should be displayed before the Slide Show displays the next image in the sequence.<br />'); + break; + +case 'lb_music_file': + $title=WT_I18N::translate('Slideshow sound track'); + $text=WT_I18N::translate('This option lets you specify a sound track to be played whenever the slide show is active. When you leave this field blank, no sound will play during the slide show.<br /><br />This feature only supports files in the mp3 format.<br />'); + break; + +case 'lb_transition': + $title=WT_I18N::translate('Image Transition speed'); + $text=WT_I18N::translate('This option lets you specify the transition speed when the image changes. This selection is applied during the slideshow. It is also applied when you move to the next or previous image when the slideshow is not running.<br /><br />The <b>None</b> option eliminates image transitions so that the new image immediately replaces the old without visible adjustment of the new image\'s dimensions.<br />'); + break; + +case 'lb_url_dimensions': + $title=WT_I18N::translate('Lightbox URL Window dimensions'); + $text=WT_I18N::translate('When clicking on a URL image thumbnail, this option lets you specify the Lightbox URL Window dimensions in pixels.<br /><br />This should normally be less than your current browser window dimensions, and certainly less than your screen resolution.<br />'); + break; + +} diff --git a/modules_v2/lightbox/images/blank.gif b/modules_v2/lightbox/images/blank.gif Binary files differnew file mode 100644 index 0000000000..1d11fa9ada --- /dev/null +++ b/modules_v2/lightbox/images/blank.gif diff --git a/modules_v2/lightbox/images/close_1.gif b/modules_v2/lightbox/images/close_1.gif Binary files differnew file mode 100644 index 0000000000..fac64f5d6e --- /dev/null +++ b/modules_v2/lightbox/images/close_1.gif diff --git a/modules_v2/lightbox/images/image_add.gif b/modules_v2/lightbox/images/image_add.gif Binary files differnew file mode 100644 index 0000000000..b8d6a2e5e4 --- /dev/null +++ b/modules_v2/lightbox/images/image_add.gif diff --git a/modules_v2/lightbox/images/image_copy.gif b/modules_v2/lightbox/images/image_copy.gif Binary files differnew file mode 100644 index 0000000000..f9c1074068 --- /dev/null +++ b/modules_v2/lightbox/images/image_copy.gif diff --git a/modules_v2/lightbox/images/image_delete.gif b/modules_v2/lightbox/images/image_delete.gif Binary files differnew file mode 100644 index 0000000000..fc6b67eda7 --- /dev/null +++ b/modules_v2/lightbox/images/image_delete.gif diff --git a/modules_v2/lightbox/images/image_edit.gif b/modules_v2/lightbox/images/image_edit.gif Binary files differnew file mode 100644 index 0000000000..ad5a6769ef --- /dev/null +++ b/modules_v2/lightbox/images/image_edit.gif diff --git a/modules_v2/lightbox/images/image_link.gif b/modules_v2/lightbox/images/image_link.gif Binary files differnew file mode 100644 index 0000000000..1ccfbf3b88 --- /dev/null +++ b/modules_v2/lightbox/images/image_link.gif diff --git a/modules_v2/lightbox/images/image_view.gif b/modules_v2/lightbox/images/image_view.gif Binary files differnew file mode 100644 index 0000000000..22fc38c9aa --- /dev/null +++ b/modules_v2/lightbox/images/image_view.gif diff --git a/modules_v2/lightbox/images/images.gif b/modules_v2/lightbox/images/images.gif Binary files differnew file mode 100644 index 0000000000..f9c1074068 --- /dev/null +++ b/modules_v2/lightbox/images/images.gif diff --git a/modules_v2/lightbox/images/loading.gif b/modules_v2/lightbox/images/loading.gif Binary files differnew file mode 100644 index 0000000000..5bb90fd6a4 --- /dev/null +++ b/modules_v2/lightbox/images/loading.gif diff --git a/modules_v2/lightbox/images/next.gif b/modules_v2/lightbox/images/next.gif Binary files differnew file mode 100644 index 0000000000..bfeb97cf36 --- /dev/null +++ b/modules_v2/lightbox/images/next.gif diff --git a/modules_v2/lightbox/images/nextlabel.gif b/modules_v2/lightbox/images/nextlabel.gif Binary files differnew file mode 100644 index 0000000000..7c66121faf --- /dev/null +++ b/modules_v2/lightbox/images/nextlabel.gif diff --git a/modules_v2/lightbox/images/norm_2.gif b/modules_v2/lightbox/images/norm_2.gif Binary files differnew file mode 100644 index 0000000000..fdc2f6d05f --- /dev/null +++ b/modules_v2/lightbox/images/norm_2.gif diff --git a/modules_v2/lightbox/images/overlay.png b/modules_v2/lightbox/images/overlay.png Binary files differnew file mode 100644 index 0000000000..e2c6ff7d91 --- /dev/null +++ b/modules_v2/lightbox/images/overlay.png diff --git a/modules_v2/lightbox/images/prev.gif b/modules_v2/lightbox/images/prev.gif Binary files differnew file mode 100644 index 0000000000..dc8f31693a --- /dev/null +++ b/modules_v2/lightbox/images/prev.gif diff --git a/modules_v2/lightbox/images/prevlabel.gif b/modules_v2/lightbox/images/prevlabel.gif Binary files differnew file mode 100644 index 0000000000..064187672c --- /dev/null +++ b/modules_v2/lightbox/images/prevlabel.gif diff --git a/modules_v2/lightbox/images/private.gif b/modules_v2/lightbox/images/private.gif Binary files differnew file mode 100644 index 0000000000..21baed2115 --- /dev/null +++ b/modules_v2/lightbox/images/private.gif diff --git a/modules_v2/lightbox/images/slideshow.jpg b/modules_v2/lightbox/images/slideshow.jpg Binary files differnew file mode 100644 index 0000000000..c964604327 --- /dev/null +++ b/modules_v2/lightbox/images/slideshow.jpg diff --git a/modules_v2/lightbox/images/transp80px.gif b/modules_v2/lightbox/images/transp80px.gif Binary files differnew file mode 100644 index 0000000000..68d259058a --- /dev/null +++ b/modules_v2/lightbox/images/transp80px.gif diff --git a/modules_v2/lightbox/images/zoom_1.gif b/modules_v2/lightbox/images/zoom_1.gif Binary files differnew file mode 100644 index 0000000000..dc3b210e83 --- /dev/null +++ b/modules_v2/lightbox/images/zoom_1.gif diff --git a/modules_v2/lightbox/index.php b/modules_v2/lightbox/index.php new file mode 100644 index 0000000000..edcfdc1ecc --- /dev/null +++ b/modules_v2/lightbox/index.php @@ -0,0 +1,33 @@ +<?php +/** + * Entry point for Lightbox module when changing theme on configuration page + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Lightbox + * @author Brian Holland + * $Id$ + */ + +header("Location: ../../index.php"); +exit; +?>
\ No newline at end of file diff --git a/modules_v2/lightbox/js/Sound.js b/modules_v2/lightbox/js/Sound.js new file mode 100644 index 0000000000..2d65d036a1 --- /dev/null +++ b/modules_v2/lightbox/js/Sound.js @@ -0,0 +1,197 @@ +/* +Copyright (c) 2006, Gustavo Ribeiro Amigo +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + + function Sound(options) { + + this.options = options; + if (this.options == undefined) this.options = new Object(); + + if (!this.options.swfLocation) { + this.options.swfLocation = "js/SoundBridge.swf"; + } + + if (Sound.id_count == undefined) { + Sound.id_count = 1; + } else { + Sound.id_count ++; + } + + if (Sound.instances == undefined) { + Sound.instances = new Object(); + } + + this.object_id = 'object_id_' + Sound.id_count; + + Sound.instances[this.object_id] = this; + + movie_swf = this.options.swfLocation; + movie_id = this.object_id; + + movie_element = ""; + movie_element += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="0" height="0"'; + movie_element += ' id="' + movie_id+ '"'; + movie_element += ' align="middle">'; + movie_element += '<param name="movie" value="'+movie_swf+'" />'; + movie_element += '<param name="quality" value="high" />'; + movie_element += '<param name="bgcolor" value="#ffffff" />'; + movie_element += '<param name="FlashVars" value="id='+ movie_id +'"/>'; + movie_element += '<param name="allowScriptAccess" value="allowScriptAccess"/>'; + movie_element += '<embed src="'+movie_swf+'" FlashVars="id='+ movie_id +'"'; + movie_element += ' allowScriptAccess="always" quality="high" bgcolor="#ffffff" width="0" height="0"'; + movie_element += ' name="' + movie_id + '" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'; + movie_element += '</object>'; + +/* + this.so = new SWFObject(movie_swf, movie_id, "0", "0", "8", "#ffffff"); + this.so.addParam("quality", "high"); + this.so.addParam("FlashVars", "id="+ movie_id); + this.so.addParam("allowScriptAccess", "always"); +*/ + + if ( document.getElementById('__sound_flash__') == undefined) { + var element = document.createElement("div"); + element.id = "__sound_flash__"; + document.body.appendChild(element); + } + + document.getElementById('__sound_flash__').innerHTML += movie_element; + //this.so.write('__sound_flash__'); + + } + + Sound.prototype.loadSound = function(url, streaming) { + return Sound.__call('loadSound',this.object_id, url, streaming); + } + + Sound.prototype.start= function() { + return Sound.__call('start', this.object_id); + } + + Sound.prototype.stop = function() { + return Sound.__call('stop', this.object_id); + } + + Sound.prototype.getId3 = function() { + return Sound.__call('id3', this.object_id); + } + + Sound.prototype.getPan = function() { + return Sound.__call('getPan', this.object_id); + } + + Sound.prototype.getTransform = function() { + return Sound.__call('getTransform', this.object_id); + } + + Sound.prototype.getVolume = function(){ + return Sound.__call('getVolume', this.object_id); + } + + Sound.prototype.setPan = function(value){ + return Sound.__call('setPan', this.object_id, value); + } + + Sound.prototype.setTransform = function(transformObject){ + return Sound.__call('setTransform', this.object_id, transformObject); + } + + Sound.prototype.setVolume = function(value){ + return Sound.__call('setVolume', this.object_id, value); + } + + Sound.prototype.start = function(secondOffset, loops){ + return Sound.__call('start', this.object_id, secondOffset, loops); + } + + Sound.prototype.getDuration = function(){ + return Sound.__call('getDuration', this.object_id); + } + + Sound.prototype.setDuration = function(value){ + return Sound.__call('setDuration', this.object_id, value); + } + + Sound.prototype.getPosition = function(){ + return Sound.__call('getPosition', this.object_id); + } + + Sound.prototype.setPosition = function(value){ + return Sound.__call('setPosition', this.object_id, value); + } + + Sound.prototype.getBytesLoaded = function(){ + return Sound.__call('getBytesLoaded', this.object_id); + } + + Sound.prototype.getBytesTotal = function(){ + return Sound.__call('getBytesTotal', this.object_id); + } + + Sound.prototype.onLoad = function(success){ + Sound.trace('Sound:onLoad('+success+') event triggered'); + } + + Sound.onLoad = function(object_id, success) { + //Sound.trace('Sound.onLoad('+success+') object_id=' + object_id); + Sound.instances[object_id].onLoad(success); + } + + Sound.prototype.onSoundComplete = function(){ + Sound.trace('Sound:onSoundComplete() event triggered'); + } + + Sound.onSoundComplete = function(object_id) { + Sound.instances[object_id].onSoundComplete; + } + + Sound.prototype.onID3 = function(){ + Sound.trace('Sound:onID3() event triggered'); + } + + Sound.onID3 = function(object_id) { + Sound.instances[object_id].onID3(); + } + + Sound.trace = function(value, isJavascript) { + if (document.getElementById('sound_tracer') != undefined) { + if (isJavascript == undefined || isJavascript == true) { + document.getElementById('sound_tracer').value += 'Javascript: ' + value + '\n'; + } else { + document.getElementById('sound_tracer').value += value + '\n'; + } + } + } + + Sound.__thisMovie = function(movieName) { + if (navigator.appName.indexOf("Microsoft") != -1) { + return window[movieName] + } + else { + return document[movieName] + } + } + + Sound.__call = function () { + Sound.trace('Sound.__call '+ arguments[0]+ ' on object_id ' + arguments[1] ); + var functionname = arguments[0]; + var object_id = arguments[1]; + var justArgs = new Array(); + if (arguments.length > 1) { + for (var i = 2; i < arguments.length; i++ ) { + justArgs.push(arguments[i]); + } + } + + return Sound.__thisMovie(object_id).proxyMethods(functionname, justArgs); + } diff --git a/modules_v2/lightbox/js/SoundBridge.swf b/modules_v2/lightbox/js/SoundBridge.swf Binary files differnew file mode 100644 index 0000000000..2131e4d49c --- /dev/null +++ b/modules_v2/lightbox/js/SoundBridge.swf diff --git a/modules_v2/lightbox/js/clearbox.js b/modules_v2/lightbox/js/clearbox.js new file mode 100644 index 0000000000..7a77f2e952 --- /dev/null +++ b/modules_v2/lightbox/js/clearbox.js @@ -0,0 +1,371 @@ +/* clearbox.js - Author Brian Holland .... email webman@windmillway.f2s.com - (modified from Clearbox.js - Author Pyro ... email pyrex@chello.hu) + * @package webtrees + * @subpackage Module + * @version $Id$ + * @author Brian Holland +*/ + +/* + ClearBox JS by pyro + + script home: http://www.kreatura.hu/pyro/clearbox + author e-mail: pyrexkukacchelloponthu + author msn: prokukacradiomaxponthu + support forum 1: http://www.sg.hu/listazas.php3?id=1172325655 + support forum 2: http://www.tutorial.hu/forum/index.php?showtopic=1391&st=0 + + LICENSZ FELT?TELEK: + + A ClearBox szabadon felhaszn?lhat? b?rmilyen nem kereskedelmi jelleg? honlapon, teh?t olyanokon + amik nem hivatalos c?gek oldalai, amik nem tartalmaznak kereskedelmi jelleg? szolg?ltat?st vagy + term?k(ek) elad?s(?)t, illetve rekl?moz?s?t. A kereskedelmi jelleg? honlapokon val? + felhaszn?l?s?r?l ?rdekl?dj a k?sz?t?n?l! A ClearBox forr?sa (clsource.js) kiz?r?lag a k?sz?t? + el?zetes hozz?j?rul?s?val m?dos?that?. A ClearBox a k?sz?t? beleegyez?se n?lk?l p?nz?rt harmadik + f?lnek tov?bb nem adhat?! +*/ + var CB_version='200beta'; + +/* + clearbox.js: + + ClearBox konfigur?ci?s f?jl. Ebben a f?jlban tudod kedved szerint testre szabni a scriptet. + Az 1.70 verzi?t?l kezdve a ClearBox script k?t k?l?n .js f?jlra tagol?dott: clearbox.js ?s + cbsource.js. A cbsource.js f?jl k?dolva ?s t?m?r?tve tartalmazza a ClearBox scriptet, azt + ne v?ltoztasd! A dokument?ci?t k?l?n f?jlok helyett a clearbox.js (ez a f?jl) tartalmazza. + Minden param?tern?l le?r?st tal?lsz, hogy az hogyan befoly?solja a ClearBox m?k?d?s?t. + + CB_HideColor: + + ?rt?ke egy sz?nk?d. Megadja, hogy a script megh?v?sakor a dokumentumot 'eltakar?' + fel?let milyen sz?n?rnyalat? legyen. Mindenk?ppen haszn?ld a ' ' jeleket ?s a #-et. +*/ + var CB_HideColor='#000'; + +/* + CB_HideOpacity: + + ?rt?ke egy nem negat?v eg?sz sz?m (0-100). Megadja, hogy a h?tt?r h?ny sz?zal?kig + vegye fel a CB_HideColor sz?nk?dot. Ha 0, akkor egy?ltal?n nem fog l?tsz?dni, ha 100, + akkor teljesen elfedi a dokumentumot. A k?ztes esetekben pedig ?ttetsz? lesz. +*/ + var CB_HideOpacity=75; + +/* + CB_OpacityStep: + + ?rt?ke egy pozit?v eg?sz sz?m (1-CB_HideOpacity). Megadja, hogy a h?tt?r el?t?n?se, + halv?ny?t?sa mekkora l?p?sekben t?rt?njen, am?g el nem ?ri a CB_HideOpacity ?rt?ket. + (Ne legyen nagyobb, mint CB_HideOpacity ?s nem ?rt, ha CB_HideOpacity marad?ktalanul + oszthat? CB_OpacityStep-pel!) + +*/ + var CB_OpacityStep=25; + +/* + CB_WinBaseW: + + ?rt?ke egy pozit?v eg?sz sz?m. (25- ) A ClearBox ablak kezdeti sz?less?ge + (ehhez m?g hozz?ad?dik a CB_RoundPix ?rt?knek a k?tszerese). + Ne adj meg t?l nagy ?rt?ket! Ha nem l?tfontoss?g?, ne v?ltoztass az alap?rt?ken! +*/ + var CB_WinBaseW=120; + +/* + CB_WinBaseH: + + ?rt?ke egy pozit?v eg?sz sz?m. (50- ) A ClearBox ablak kezdeti magass?ga + (ehhez m?g hozz?ad?dik a CB_RoundPix ?rt?knek a k?tszerese, viszont beletartozik a + CB_TextH ?rt?ke.). Ne adj meg t?l nagy ?rt?ket! Ha nem l?tfontoss?g?, ne v?ltoztass az + alap?rt?ken! +*/ + var CB_WinBaseH=110; + +/* + CB_WinPadd: + + ?rt?ke egy nem negat?v eg?sz sz?m. (0- ) Megadja, hogy norm?lis esetben minimum h?ny + pixel legyen a b?ng?sz? sz?le ?s a ClearBox ablak k?z?tt. Ne adj meg t?l nagy ?rt?ket! + Megjegyz?s: alap?llapotban a ClearBox ablakot k?r?lvev? ?rny?k miatt ez az ?rt?k nagyobbnak + n?z ki, mint ami meg van adva!) +*/ + var CB_WinPadd=1; + +/* + CB_RoundPix: + + ?rt?ke nem negat?v eg?sz sz?m. Megadja a lekerek?t?sek k?peinek nagys?g?t. + Fontos: V?ltoztat?s?hoz a lekerek?t?sek k?peit is cser?lni kell, ez?rt ennek a megv?ltoztat?sa + csak a jobban hozz?rt?knek aj?nlott! + Tipp: Amennyiben azt szeretn?d, hogy a ClearBox ablak sarkai sz?gletesek legyenek, ?ll?tsd az + ?rt?ket 0-ra. (Ilyenkor nem ?rt megn?velni a CB_Padd ?rt?k?t minimum 5-re, a szebb vizu?lis + megjelen?s ?rdek?ben.) +*/ + var CB_RoundPix=12; + +/* + CB_Animation: + + A ClearBox ablak anim?ci?ja ?ll?that? be vele. T?bbf?le lehet?s?g k?z?l v?laszthatsz: + + 'none': ilyenkor az ablak egy l?p?sben felveszi a m?retet, + 'normal': ez a m?r megszokott anim?ci?, + 'double': ilyenkor az ablak egyszerre m?retez?dik X ?s Y ir?nyban + 'warp': mint a double, de a k?p m?g az anim?ci? megkezd?se el?tt megjelenik + (nagy a cpu ig?nye, ez?rt kisebb m?ret? k?pekhez aj?nlott) + + Mindenk?ppen haszn?ld a ' ' jeleket. +*/ +// var CB_Animation='none'; + +/* + CB_Jump_X: + + ?rt?ke egy pozit?v eg?sz sz?m (1-99). Megadja a v?zszintes ?tm?retez? anim?ci? gyorsas?g?t, + r?szletess?g?t. +*/ + var CB_Jump_X= 40; + +/* + CB_Jump_Y: + + ?rt?ke egy pozit?v eg?sz sz?m (1-99). Megadja a f?gg?leges ?tm?retez? anim?ci? gyorsas?g?t, + r?szletess?g?t. +*/ + var CB_Jump_Y= 40; + +/* + CB_AnimTimeout: + + ?rt?ke egy pozit?v eg?sz sz?m (5- ). Megadja (milisecundumban), hogy ?tm?retez? anim?ci? l?p?sei + k?zben mennyit 'v?rjon' a script. +*/ + var CB_AnimTimeout=5; + +/* + CB_ImgBorder: + + ?rt?ke egy nem negat?v eg?sz sz?m (0- ). Megadja a k?p k?r?li keret vastags?g?t. +*/ + var CB_ImgBorder=1; + +/* + CB_ImgBorderColor: + + ?rt?ke egy sz?nk?d. Megadja a k?p k?r?li keret sz?n?t. Mindenk?ppen haszn?ld a ' ' jeleket ?s a #-et. +*/ + var CB_ImgBorderColor='#ccc'; + +/* + CB_Padd: + + ?rt?ke egy nem negat?v eg?sz sz?m (0- ). A k?p keret?n (?s a lekerek?t?seken) k?v?l ad m?g egy plusz + ? gyakorlatilag l?thatatlan - keretet a k?pnek (magyarul a k?p k?r?li feh?r keret vastags?g?t n?veli). +*/ + var CB_Padd=0; + +/* + CB_ShowImgURL: + + ?rt?ke lehet 'be' vagy 'ki'. Megadja, hogy a ClearBox ablakban megjelenjen-e a k?p el?r?si ?tja, amennyiben + nincs c?m megadva a k?pnek. Mindenk?ppen haszn?ld a ' ' jeleket. +*/ + var CB_ShowImgURL='be'; + +/* + CB_ImgNum: + + ?rt?ke lehet 'be' vagy 'ki'. Megadja, hogy ha a ClearBox gal?ri?kn?l legyen-e kijelezve az ?sszes k?p, illetve, + hogy ?ppen h?nyadik k?p van megjelen?tve. Mindenk?ppen haszn?ld a ' ' jeleket. +*/ + var CB_ImgNum='ki'; + +/* + CB_ImgNumBracket: + + Ha a CB_ImgNum be van kapcsolva, akkor ez adja meg, hogy milyen z?r?jelben legyen a k?pek sz?moz?s?nak a + kijelz?se. Mindenk?ppen haszn?ld a ' ' jeleket ?s mindenk?ppen k?t, azaz 2 karaktert adj meg, sz?net n?lk?l. +*/ + var CB_ImgNumBracket='[]'; + +/* + CB_SlShowTime: + + ?rt?ke egy pozit?v eg?sz sz?m (1- ). Megadja, hogy a SlideShow effekt (1.6 verzi?t?l) mennyit v?rjon + (m?sodpercben), miel?tt megjelen?ti a k?vetkez? k?pet. Megjegyz?s: sajnos ez csak k?zel?t?leges ?rt?ket ad, + val?j?ban a b?ng?sz?t?l is f?gg. +*/ +// var CB_SlShowTime=6; + +/* + CB_PadT: + + ?rt?ke egy nem negat?v eg?sz sz?m (0- ). A sz?vegmez? k?p alj?t?l val? t?vols?g?t adja meg. + Fontos: haszn?ld okosan ezt a param?tert a CB_TextH ?rt?kkel. A CB_PaddT a CB_TextH-b?l mindenk?ppen + levon?dik, ?gy k?nnyen hib?t gener?lhatunk a nem megfelel? ?rt?kad?ssal! +*/ +// var CB_PadT=10; + var CB_PadT=8; + +/* + CB_TextH: + + ?rt?ke egy pozit?v eg?sz sz?m (25- ). A k?p alatti sz?vegmez? magass?g?t adja meg. + Fontos: figyelj a CB_PadT megfelel? ?rt?k?re is! +*/ +// var CB_TextH=40; + var CB_TextH=30; + +/* + CB_Font: + + ?rt?ke egy (vagy t?bb) bet?t?pus. A k?p alatti sz?veg bet?t?pus?t adja meg. + Haszn?lhatunk egyszerre a CSS-ben is alkalmazhat? t?bb ?rt?ket, pl: 'Arial, Verdana, Tahoma'. + Mindenk?ppen haszn?ld a ' ' jeleket. +*/ + var CB_Font='arial'; + +/* + Cb_FontSize: + + ?rt?ke egy pozit?v eg?sz sz?m (6- ). A k?p alatti sz?veg m?ret?t adja meg. +*/ + var CB_FontSize=12; + +/* + CB_FontColor: + + ?rt?ke egy sz?nk?d. A k?p alatti sz?veg sz?n?t adja meg. Mindenk?ppen haszn?ld a ' ' jeleket ?s a #-et. +*/ +// var CB_FontColor='#656565'; + var CB_FontColor='#0000FF'; + +/* + CB_FontWeight: + + ?rt?ke lehet 'normal' vagy 'bold'. A k?p alatti sz?veg bet?vastags?g?t adja meg. + Mindenk?ppen haszn?ld a ' ' jeleket. +*/ + var CB_FontWeigth='bold'; + +/* + CB_CheckDuplicates: + + K?s?bbi funkci?, jelenleg nem m?k?dik! + ?rt?ke lehet 'be' vagy 'ki'. Megadja, hogy legyen-e a gel?ri?kban ism?tl?d?s-ellen?rz?s. Amennyiben be van + kapcsolva, ?gy agy adott gal?ri?ban ugyanazzal az el?r?si ?ttal egyszerre csak egy k?p lehet, teh?t v?letlen?l + sem t?rt?nik ism?tl?d?s. Mindenk?ppen haszn?ld a ' ' jeleket. +*/ + var CB_CheckDuplicates='ki'; + +/* + CB_LoadingText: + + Megadja, hogy alul milyen sz?veg jelenjen meg a k?pek bet?lt?se k?zben. Mindenk?ppen haszn?ld a ' ' jeleket. +*/ +// var CB_LoadingText='- k?p bet?lt?se -'; + var CB_LoadingText='- > < -'; + +/* + CB_PicDir: + + Megadja a ClearBox-hoz tartoz? k?pek el?r?si ?tj?t. Amennyiben megv?ltoztatod, a clearbox.css-ben se felejtsd el + v?grehajtani a sz?ks?ges v?ltoztat?sokat! Mindenk?ppen haszn?ld a ' ' jeleket. +*/ + var CB_PicDir=WT_MODULES_DIR+'lightbox/pic'; +// var CB_MusicDir='../music'; + +/* + CB_BodyMargin param?terek: + + Amennyiben az oldaladon sz?nd?kozol konkr?t ?rt?ket adni a BODY margin-j?nak, teh?t ha: + margin-left, margin-top, margin-bottom vagy margin-right B?RMELYIKE NEM 0 ?s NEM auto, akkor az al?bbi + param?terekkel meg KELL adnod azt a ClearBox-nak is. Ez a HideContent Layer pontos m?retez?se miatt sz?ks?ges! + Megjegyz?s: figyelj arra, hogy ha nem adt?l meg a css f?jlodban a body-nak egy?ltal?n margin ?rt?ket, akkor is van egy + alap?rtelmezett margin ?rt?k a b?ng?sz?k szerint! + Fontos: NE haszn?lj %-os ?rt?keket, mert akkor a ClearBox HideContent Layer-e nem fog megfelel?en megjelenni! +*/ + var CB_BodyMarginLeft=0; + var CB_BodyMarginRight=0; + var CB_BodyMarginTop=0; + var CB_BodyMarginBottom=0; + +/* + CB_Preload: + + ?rt?ke lehet 'be' vagy 'ki'. Megadja, hogy gal?ri?kn?l legyen-e az el?z? ?s k?vetkez? k?pek el?re t?lt?se. + Mindenk?ppen haszn?ld a ' ' jeleket. +*/ + var CB_Preload='be'; + +/* + CB_TextNav: + + ?rt?ke lehet 'be' vagy 'ki'. Megadja, hogy gal?ri?kn?l legyen-e el?z? ?s k?vetkez? felirat megjelen?t?se a CB_TextH + s?vban (ahol a k?p neve is tal?lhat?). Mindenk?ppen haszn?ld a ' ' jeleket. +*/ + var CB_TextNav='ki'; + +/* + CB_NavText param?terek: + + Megadhatod a CB_TextH megjelen? gombok (linkek) nev?t. Mindenk?ppen haszn?ld a ' ' jeleket. + A linkek kin?zet?t a clearbox.css f?jlban tudod m?dos?tani, a linkek class oszt?lya: CB_TextNav. +*/ +//BH var CB_NavTextPrv='el?z?'; +//BH var CB_NavTextNxt='k?vetkez?'; +//BH var CB_NavTextCls='bez?r'; + var CB_NavTextPrv='Prev'; + var CB_NavTextNxt='Next'; +//BH var CB_NavTextCls=''; + +/* + CB_Picture param?terek: + + Ha meg akarod v?ltoztatni a ClearBox ?ltal haszn?lt Start, Pause ?s Close gombokat, valamint a Loading k?pet, + akkor azt itt teheted meg. Fontos: kiz?r?lag a f?jlnevet add meg, / jel ?s mappa n?lk?l! + Mindenk?ppen haszn?ld a ' ' jeleket. + Megjegyz?s: az El?z? ?s K?vetkez? gombokat a clearbox.css-ben tudod megv?ltoztatni. + +*/ + var CB_PictureStart='start.png'; + var CB_PicturePause='pause.png'; + var CB_PictureClose='close_red.png'; + var CB_PictureLoading='loading.gif'; + var CB_PictureNotes='notes.gif'; + var CB_PictureDetails='detail.gif'; + var CB_MusicStart='music_off.png'; + var CB_MusicStop='music_on.png'; + var CB_MusicNull='music_null.png'; + var CB_Speak='music_off.png'; + var CB_ZoomStart='zoom_on.png'; + var CB_ZoomStop='zoom_off.png'; + + +// Slideshow music configurable options --------------------------------------------------------- + var foreverLoop = 0; // Set 0 if want to stop on the last image or Set it to 1 for Infinite loop feature + var loopMusic = true; //loops music if it is shorter then slideshow + var SoundBridgeSWF = WT_MODULES_DIR+"lightbox/js/SoundBridge.swf"; + +// Music variables --------------------------------------------------------- + var slideshowMusic = null; + var firstTime = 1; + var objSpeakerImage; + var saveLoopMusic; + + +/* + Az al?bbi k?don ne v?ltoztass, ellenkez? esetben a ClearBox nem (megfelel?en) fog m?k?dni!. + clearbox.js el?r?si ?tj?nak megkeres?se, majd ez alapj?n cbsource.js beilleszt?se a html dokumentumba: +*/ + + var CB_Scripts = document.getElementsByTagName('script'); + for (i=0;i<CB_Scripts.length;i++){ + if (CB_Scripts[i].src.match('clearbox.js')!=null){ + var CB_jsdir=CB_Scripts[i].src.substring(0,CB_Scripts[i].src.length-11); + } + } + document.write('<' + 'script'); + document.write(' language="javascript"'); + document.write(' type="text/javascript"'); + document.write(' src="'+CB_jsdir+'clsource_music.js">'); + document.write('</' + 'script' + '>'); diff --git a/modules_v2/lightbox/js/clsource_music.js b/modules_v2/lightbox/js/clsource_music.js new file mode 100644 index 0000000000..8e1577e70d --- /dev/null +++ b/modules_v2/lightbox/js/clsource_music.js @@ -0,0 +1,2243 @@ +/* clsource_music.js - Author Brian Holland .... email webman@windmillway.f2s.com - (modified from Clsource.js - Author Pyro ... email pyrex@chello.hu) + * @package webtrees + * @subpackage Module + * @version $Id$ + * @author Brian Holland +*/ + +//Browser detection ==================================================================== + +var nVer = navigator.appVersion; +var nAgt = navigator.userAgent; +var browserName = ''; +var fullVersion = 0; +var majorVersion = 0; + +// In Internet Explorer, the true version is after "MSIE" in userAgent +if ((verOffset=nAgt.indexOf("MSIE"))!=-1) { + browserName = "Microsoft Internet Explorer"; + fullVersion = parseFloat(nAgt.substring(verOffset+5)); + majorVersion = parseInt(''+fullVersion); +} + +// In Opera, the true version is after "Opera" +else if ((verOffset=nAgt.indexOf("Opera"))!=-1) { + browserName = "Opera"; + fullVersion = parseFloat(nAgt.substring(verOffset+6)); + majorVersion = parseInt(''+fullVersion); +} + +// In Firefox, the true version is after "Firefox" +else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) { + browserName = "Firefox"; + fullVersion = parseFloat(nAgt.substring(verOffset+8)); + majorVersion = parseInt(''+fullVersion); +} + +// In most other browsers, "name/version" is at the end of userAgent +else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) +{ + browserName = nAgt.substring(nameOffset,verOffset); + fullVersion = parseFloat(nAgt.substring(verOffset+1)); + if (!isNaN(fullVersion)) majorVersion = parseInt(''+fullVersion); + else {fullVersion = 0; majorVersion = 0;} +} + +// Finally, if no name and/or no version detected from userAgent... +if (browserName.toLowerCase() == browserName.toUpperCase() + || fullVersion==0 || majorVersion == 0 ) +{ + browserName = navigator.appName; + fullVersion = parseFloat(nVer); + majorVersion = parseInt(nVer); +} + +//document.write('Browser name = '+browserName+'<br>'); +//document.write('Full version = '+fullVersion+'<br>'); +//document.write('Major version = '+majorVersion+'<br>'); +//document.write('navigator.appName = '+navigator.appName+'<br>'); +//document.write('navigator.userAgent = '+navigator.userAgent+'<br>'); + +// ================================================================================================= + +// Initial variable settings + +var CB_Show = 1; +var CB_Zoom = null; +var zoomSet = 0; // ZoomSet = 0 means No Lightbox window. (Leave at 0 here please) + // Note: ZoomSet = 1 means Lightbox window open. + // Note: ZoomSet = 2 means Lightbox window open and zoomed. + +var soond = null; +var CB_Alignm = CB_Alignm; +var CB_Balloon = CB_Balloon; +var CB_Animation = CB_Animation; +var CB_SlShowTime = CB_SlShowTime; +var CB_ImgDetails = CB_ImgDetails; +var CB_Detail_Info = CB_Detail_Info; +var CB_ImgNotes = CB_ImgNotes; +var CB_ImgNotes2 = CB_ImgNotes2; +var CB_Note_Info = CB_Note_Info; +var CB_Start_SS = CB_Start_SS; +var CB_Pause_SS = CB_Pause_SS; +var CB_Music = CB_Music; +var CB_Zoom_Off = CB_Zoom_Off; +var CB_Zoom_On = CB_Zoom_On; +var CB_Close_Win = CB_Close_Win; + +// ------- Keyboard options --------------------------------------------------------- + + function CB_KeyPress(a) { + + var b; + if (!a) { + var a = window.event; + } + if (a.keyCode) { + b = a.keyCode; + }else if (a.which) { + b = a.which; + } + var c = String.fromCharCode(b); + + if (CB_ClearBox == "be") { + + // Previous or Move Left - "Keys P, or left arrow, or 4" + if (c == "%" || c == "p" || b == 80 || b == 37 || b == 52) { + if (CB_Zoom == "true" ) { + moveLeft(); + return false; + }else if (CB_ActImgId > 1) { + if (CB_SSTimer ) { + CB_SlideShowJump(); + } + CB_LoadImage(CB_ActImgId - 1); + return false; + }else{ + } + } + + // Next or Move Right - "Keys N, or right arrow, or 6" + if (c == "'" || c == "n" || b == 78 || b == 39 || b == 54) { + if (CB_Zoom == "true") { + moveRight(); + return false; + }else if (CB_ActImgId < CB_Gallery.length - 1) { + if (CB_SSTimer) { + CB_SlideShowJump(); + } + CB_LoadImage(CB_ActImgId + 1); + return false; + }else{ + } + } + + // Move Up - "Keys U, or up arrow" + if (c == "u" || b == 38 || b == 85) { + if (CB_Zoom == "true") { + moveUp(); + return false; + }else{ + } + } + + // Move Up - "Keys D, or down arrow" + if (c == "d" || b == 40 || b == 68) { + if (CB_Zoom == "true") { + moveDown(); + return false; + }else{ + } + } + + // Start/Stop Slideshow - "Key Spacebar" + if ((c == " " || b == 32) && CB_IsAnimating == 0) { + if (CB_Gallery.length < 3) { + return false; + } + if (CB_SS == "start") { + resetZoom(); + CB_SSStart(); + return false; + }else{ + CB_SSPause(); + return false; + } + } + + // Close - "Keys Esc or X" + if (c == "\x1B" || b == 27 || c == "x" || b == 88 ) { + CB_Close(); + return false; + } + + // Toggle Volume - "Key S" + if (c == "s" || b == 83) { + player.toggleVolume(); + return false; + } + + // Zoom in - "Key I" + if (c == "i" || b == 73) { + if (CB_SS == "start") { + zoomIn(); + return false; + } + } + + // Zoom Out - "Key O" + if (c == "o" || b == 79) { + if (CB_SS == "start") { + zoomOut(); + return false; + } + } + + // Reset Zoom - "Key Z" + if (c == "z" || b == 90) { + if (CB_SS == "start") { + resetZoom(); + CB_SSStart(); + CB_SSPause(); + return false; + // }else if (CB_SS == "start" && zoomSet==1) { + // CB_FullSize(); + }else{ + } + } + + // Do nothing - "Key Enter" + if (b == 13) { + return false; + } + + }else{ + + // If animating Do nothing - "Keys Spacebar, or Enter" + if (CB_IsAnimating == 1 && (c == " " || b == 32 || b == 13)) { + return false; + } + } + } +// End function keyboard ---------------------------------------------- + + +// Mousewheel for zooming --------------------------------------------- +// if (zoomSet == 2) { + function handle(delta) { + if (delta <0) { + if (CB_SS == "start" ) { + zoomIn(); + return false; + } + }else{ + if (CB_SS == "start" ) { + zoomOut(); + return false; + } + } + } + + function wheel(event){ + var delta = 0; + if (!event) event = window.event; + if (event.wheelDelta) { + delta = event.wheelDelta/120; + if (window.opera) delta = -delta; + } else if (event.detail) { + delta = -event.detail/3; + } + if (delta) + handle(delta); + + if (zoomSet == 2 || zoomSet == 1) { + // Prevents default scrolling + if (event.preventDefault) + event.preventDefault(); + event.returnValue = false; + } + } + + /* Initialization code. */ + if (window.addEventListener) + window.addEventListener('DOMMouseScroll', wheel, false); + window.onmousewheel = document.onmousewheel = wheel; +//} +// End Mousewheel for zooming --------------------------------------------- + + +// Music Player Class ---------------------------------------------- + function Player () { + this.paused = true; + this.stoped = true; + + this.options = new Object(); + this.options.swfLocation = SoundBridgeSWF; + this.sound = new Sound(this.options); + + this.position = 0; + this.frequency = 1000; + this.isLoaded = false; + this.duration = 0; + this.bytesTotal = 0; + this.callback = this.registerCallback(); + } + + + Player.prototype.onTimerEvent = function() { + var isDurationOk = false + if (!this.paused) { + var position = this.sound.getPosition(); + if (!position) position = 0; + + if (position != this.position && position != 0) { + this.onPlaying(); + } else { + this.onBuffering(); + } + this.position = position; + + var duration = 0; + duration = this.sound.getDuration(); + + if (!duration) duration = 0; + if (duration == this.duration && duration != 0) { + isDurationOk = true; + } + this.duration = duration; + var progress = position/duration; + if (isDurationOk) { + this.setProgressBar(progress); + } + + var isBytesTotalOk = false; + + var bytesTotal = this.sound.getBytesTotal(); + if (bytesTotal == this.bytesTotal) { + isBytesTotalOk = true; + } + this.bytesTotal = bytesTotal; + + if (isBytesTotalOk) { + var loaded = this.sound.getBytesLoaded()/bytesTotal; + this.setLoadedBar(loaded); + } + if (progress == 1 && duration != 0 && position != 0) { + this.onSoundComplete(); + } + } + } + + Player.prototype.registerCallback = function() { + return setInterval(this.onTimerEvent.bind(this), this.frequency); + } + + Player.prototype.clearCallback = function() { + clearInterval(this.callback); + this.callback = null; + } + + Player.prototype.setProgressBar = function(progress) { + if (!progress) progress = 0; + } + + Player.prototype.setLoadedBar = function(loaded) { + if (!loaded) loaded = 0; + } + + Player.prototype.onPlaying = function() { + //Element.show('caption'); + //Element.setInnerHTML( 'caption', this.sound.getId3()); + } + + Player.prototype.onPause = function() { + } + + Player.prototype.onBuffering = function() { + } + + Player.prototype.onSoundComplete = function() { + if (!this.paused) { + if (loopMusic) { + this.onForward(); + } + } + } + + Player.prototype.onForward = function() { + this.position = 0; + this.duration = 0; + this.sound.start(this.duration/1000, 1); + this.sound.stop(); + this.loadTrack(this.track); + this.stoped = true; + this.setProgressBar(0); + this.setLoadedBar(0); + if (this.sound.getVolume() == 0) { + if (!this.paused) { + this.paused = true; + this.play(); + this.sound.setVolume(0); + } + }else{ + if (!this.paused) { + this.paused = true; + this.play(); + } + } + } + + Player.prototype.fadeOut = function() { + for (var i=this.sound.getVolume()-1; i>=0; i--) { + this.sound.setVolume(i); + //pause(1); + } + } + + Player.prototype.fadeIn = function() { + for (var i=1; i <= 100; i++) { + this.sound.setVolume(i); + //pause(1); + } + } + + Player.prototype.toggleVolume = function() { + if (this.paused) return; + var volume = this.sound.getVolume(); + if (volume == 0) { + this.fadeIn(); + //this.sound.setVolume(100); + CB_Speak.setAttribute('src', CB_PicDir + CB_MusicStop); + } + if (volume == 100) { + this.fadeOut(); + //this.sound.setVolume(0); + CB_Speak.setAttribute('src', CB_PicDir + CB_MusicStart); + } + } + + Player.prototype.play = function() { + if (this.paused) { + this.paused = false; + if (this.stoped) { + this.sound.loadSound(this.track, true); + } + this.sound.start(this.position/1000, 1); + this.stoped = false; + CB_Speak.setAttribute('src', CB_PicDir + CB_MusicStop); + } else { + this.position = this.sound.getPosition(); + this.sound.stop(); + this.paused = true; + this.onPause(); + CB_Speak.setAttribute('src', CB_PicDir + CB_MusicStart); + } + } + + Player.prototype.stop = function() { + if (! this.paused) { + //fade out + for (var i=this.sound.getVolume()-1; i>=0; i--) { + this.sound.setVolume(i); + pause(1); + } + } + this.paused = true; + this.stoped = true; + this.position = 0; + this.duration = 0; + this.sound.start(this.duration/1000, 1); + this.sound.stop(); + } + + Player.prototype.loadTrack = function(track) { + this.track = track; + } + + Player.prototype.onStopButtonClick = function() { + this.paused = true; + this.stoped = true; + this.position = 0; + this.duration = 0; + this.sound.start(this.duration/1000, 1); + this.sound.stop(); + this.setProgressBar(0); +// $('button_play').className ='button_play'; +// $('display').innerHTML = "stoped"; + } + + var player; + +// Set Music Player functions ---------------------------------------------- + function setMusicPlayer() { + if (slideshowMusic == null) { + player = new Player(); + slideshowMusic = null; + } + } + + function resetVolume() { + if (player.sound.getVolume() == 0) { + player.toggleVolume(); + }else{ + } + } + + +// Start slideshow --------------------------------------------------------------------- + function CB_SSStart() { + resetZoom(); + saveForeverLoop = foreverLoop; + saveLoopMusic = loopMusic; +// if (imageArray.length == 1) { +// slideshowMusic = anchor.getAttribute('music'); + slideshowMusic = myMusic; + if (slideshowMusic == null) { + CB_Speak.style.display = "none"; + } else { + CB_Speak.style.display = "block"; + player.loadTrack(slideshowMusic); + if ( soond==null ){ + CB_Speak.setAttribute('src', CB_PicDir + CB_MusicStart); + }else{ + } + } +// var foreverMusic = anchor.getAttribute('loopMusic'); + var foreverMusic = "true"; + if (foreverMusic != null) { + if (foreverMusic == "true") loopMusic = true; else loopMusic = false; + } + if (foreverLoop == 1) { loopMusic = true; } +// } + +// CB_Prv.style.display = "none"; +// CB_Nxt.style.display = "none"; + CB_SlideS.style.display = "none"; + CB_SlideP.style.display = "block"; + CB_ZoomS.style.display = "none"; + CB_ZoomP.style.display = "none"; + CB_SlideB.style.display = "block"; + CB_SS = "pause"; + CB_SlideShow(); + if ( slideshowMusic != null && soond==null) { + soond="playing"; + }else{ + } + } + + +// Pause slideshow --------------------------------------------------------------------- + function CB_SSPause() { +// CB_Prv.style.display = "block"; +// CB_Nxt.style.display = "block"; + CB_SlideP.style.display = "none"; + CB_SlideS.style.display = "block"; + if (slideshowMusic == null) { + CB_Speak.style.display = "none"; + }else{ + CB_Speak.style.display = "block"; + } + CB_ZoomS.style.display = "block"; + CB_ZoomP.style.display = "none"; + CB_SlideShowStop(); + } + +// --------------------------------------------------------------------- + + + CB_AnimTimeout = parseInt(CB_AnimTimeout); + if (CB_AnimTimeout < 5) { + CB_AnimTimeout = 5; + } + CB_BodyMarginLeft = parseInt(CB_BodyMarginLeft); + if (CB_BodyMarginLeft < 0) { + CB_BodyMarginLeft = 0; + } + CB_BodyMarginRight = parseInt(CB_BodyMarginRight); + if (CB_BodyMarginRight < 0) { + CB_BodyMarginRight = 0; + } + CB_BodyMarginTop = parseInt(CB_BodyMarginTop); + if (CB_BodyMarginTop < 0) { + CB_BodyMarginTop = 0; + } + CB_BodyMarginBottom = parseInt(CB_BodyMarginBottom); + if (CB_BodyMarginBottom < 0) { + CB_BodyMarginBottom = 0; + } + CB_HideOpacity = parseInt(CB_HideOpacity); + if (CB_HideOpacity < 0 || CB_HideOpacity > 100) { + CB_HideOpacity = 70; + } + CB_OpacityStep = parseInt(CB_OpacityStep); + if (CB_OpacityStep < 1 || CB_OpacityStep > CB_HideOpacity) { + CB_OpacityStep = 10; + } + CB_WinBaseW = parseInt(CB_WinBaseW); + if (CB_WinBaseW < 25 || CB_WinBaseW > 1000) { + CB_WinBaseW = 120; + } + CB_WinBaseH = parseInt(CB_WinBaseH); + if (CB_WinBaseH < 50 || CB_WinBaseH > 1000) { + CB_WinBaseH = 110; + } + CB_WinPadd = parseInt(CB_WinPadd); + if (CB_WinPadd < 0) { + CB_WinPadd = 5; + } + + if (CB_Animation != "none" && + CB_Animation != "normal" && + CB_Animation != "double" && CB_Animation != "warp") { + CB_Animation = "double"; + } + + CB_Jump_X = parseInt(CB_Jump_X); + if (CB_Jump_X < 1 || CB_Jump_X > 99) { + CB_Jump_X = 50; + } + + CB_Jump_Y = parseInt(CB_Jump_Y); + if (CB_Jump_Y < 1 || CB_Jump_Y > 99) { + CB_Jump_Y = 50; + } + + CB_ImgBorder = parseInt(CB_ImgBorder); + if (CB_ImgBorder < 0) { + CB_ImgBorder = 1; + } + + CB_Padd = parseInt(CB_Padd); + if (CB_Padd < 0) { + CB_Padd = 2; + } + + if (CB_ShowImgURL != "be" && CB_ShowImgURL != "ki") { + CB_ShowImgURL = "ki"; + } + + CB_PadT = parseInt(CB_PadT); + if (CB_PadT < 0) { + CB_PadT = 10; + } + + CB_RoundPix = parseInt(CB_RoundPix); + if (CB_RoundPix < 0) { + CB_RoundPix = 12; + } + + CB_TextH = parseInt(CB_TextH); + if (CB_TextH < 25) { + CB_TextH = 25; + } + + CB_FontSize = parseInt(CB_FontSize); + if (CB_FontSize < 6) { + CB_FontSize = 13; + } + + if (CB_ImgNum != "be" && CB_ImgNum != "ki") { + CB_ImgNum = "be"; + } + + CB_SlShowTime = parseInt(CB_SlShowTime); + if (CB_SlShowTime < 1) { + CB_SlShowTime = 5; + } + +// var CB_SlShowTime = 5; + + CB_SlShowTime *= 1000; + if (CB_CheckDuplicates != "be" && CB_CheckDuplicates != "ki") { + CB_CheckDuplicates = "ki"; + } + + if (CB_Preload != "be" && CB_Preload != "ki") { + CB_Preload = "be"; + } + + var CB_AllThumbsWidth, CB_ResizeTimer, CB_IsAnimating, CB_ImgWidthOrig, CB_ImgHeightOrig; + var CB_ieRPBug = 0, CB_ie6RPBug = "", CB_ClearBox, CB_AnimX, CB_AnimY; + var CB_BodyMarginX = CB_BodyMarginLeft + CB_BodyMarginRight, CB_BodyMarginY = CB_BodyMarginTop + CB_BodyMarginBottom; + var FF_ScrollbarBug, CB_Links, CB_SlideBW = 0, CB_SSTimer, CB_SS = "start", CB_ii = 0, CB_jj = 0; + var CB_Hide, CB_LoadingImg, CB_JumpX, CB_JumpY, CB_MarginL, CB_MarginT, CB_Content; + var CB_ImgWidth = CB_WinBaseW, CB_ImgHeight = CB_WinBaseH - CB_TextH; + var CB_ImgRate, CB_Win, CB_Txt, CB_Img, CB_Prv, CB_Nxt, CB_ImgWidthOld, CB_ImgHeightOld, CB_ActImgId; + var CB_Gallery, CB_Count, CB_preImages, CB_Loaded, CB_Header, CB_Footer, CB_Left, CB_Right, CB_Txt3, CB_Txt3a; + + CB_PicDir += "/"; + + var IE = document.all ? true : false; + if (!IE) { + document.captureEvents(Event.MOUSEMOVE); + } + + function OnLoad(a, b) { + if (typeof window.addEventListener != "undefined") { + window.addEventListener(a, b, false); + } else if (typeof document.addEventListener != "undefined") { + document.addEventListener(a, b, false); + } else if (typeof window.attachEvent != "undefined") { + window.attachEvent("on" + a, b); + } + } + + OnLoad("load", CB_Init); + + + function CB_Init() { + //BH --------------- Changed following lines for IE7 arrow keys ------------- + if (navigator.appVersion.indexOf("MSIE")!=-1){ + document.onkeydown = CB_KeyPress; + }else{ + document.onkeypress = CB_KeyPress; + } + //BH ------------------------------------------------------------------------------ + + if (!document.getElementById("CB_All") && CB_Show != 0) { + document.body.style.position = "static"; + var a = "<div class=\"CB_RoundPixBugFix\" style=\"width: " + CB_RoundPix + "px; height: " + CB_RoundPix + "px;\"></div>"; + var b = document.getElementsByTagName("body").item(0); + var c = document.createElement("div"); + c.setAttribute("id", "CB_All"); + b.appendChild(c); + + document.getElementById("CB_All").innerHTML = "<table cellspacing=\"0\" cellpadding=\"0\" id=\"CB_Window\"><tr id=\"CB_Header\"><td id=\"CB_TopLeft\">" + a + "</td><td id=\"CB_Top\"></td><td id=\"CB_TopRight\">" + a + "</td></tr><tr id=\"CB_Body\"><td id=\"CB_Left\"></td><td id=\"CB_Content\" valign=\"top\" align=\"left\"><div id=\"CB_Padding\"><div id=\"CB_Text\"></div><div id=\"CB_ImgContainer\"><iframe frameborder=\"0\" id=\"CB_iFrame\" src=\"\"></iframe><div id=\"CB_UrlNotes\" ></div><div id=\"CB_ShowTh\"></div><div id=\"CB_Thumbs\"><div id=\"CB_Thumbs2\"></div></div><img id=\"CB_LoadingImage\" title=\"loading\" src=\"" + CB_PicDir + CB_PictureLoading + "\" alt=\"\" /><img id=\"CB_Image\" alt=\"\" src=\"" + CB_PicDir + "blank.gif\" /><div id=\"CB_PrevNext\"><div id=\"CB_ImgHide\"></div><img id=\"CB_SlideShowBar\" src=\"" + CB_PicDir + "white.gif\" alt=\"\" /><a id=\"CB_Prev\" href=\"#\"></a><a id=\"CB_Next\" href=\"#\"></a></div></div><div id=\"CB_NavBar\"><img id=\"CB_SlideShowP\" title=\"" + CB_Pause_SS + "\" src=\"" + CB_PicDir + CB_PicturePause + "\" alt=\"\" /><img id=\"CB_SlideShowS\" title=\"" + CB_Start_SS + "\" src=\"" + CB_PicDir + CB_PictureStart + "\" alt=\"\" /><img id=\"CB_Speaker\" title=\"" + CB_Music + "\" src=\"" + CB_PicDir + CB_MusicNull + "\" alt=\"\" /><img id=\"CB_ZoomOff\" title=\"" + CB_Zoom_Off + "\" src=\"" + CB_PicDir + CB_ZoomStop + "\" alt=\"\" /><img id=\"CB_ZoomOn\" title=\"" + CB_Zoom_On + "\" src=\"" + CB_PicDir + CB_ZoomStart + "\" alt=\"\" /><center><table><tr><td valign=\"top\"><div id=\"CB_Notes\"></div></td><td><div id=\"CB_NoteText\" ></div></td><td><div id=\"CB_DetailText\" title=\"" + CB_Detail_Info + "\" alt=\"\"></div></td><td valign=\"top\"><a href=\"\"><img id=\"CB_Details\" title=\"" + CB_Detail_Info + "\" src=\"" + CB_PicDir + CB_PictureDetails + "\" alt=\"\" /></a></td></tr></table></center><img id=\"CB_CloseWindow\" title=\"" + CB_Close_Win + "\" src=\"" + CB_PicDir + CB_PictureClose + "\" alt=\"\" /></div></div></td><td id=\"CB_Right\"></td></tr><tr id=\"CB_Footer\"><td id=\"CB_BtmLeft\">" + a + "</td><td id=\"CB_Btm\"></td><td id=\"CB_BtmRight\">" + a + "</td></tr></table><div id=\"CB_ContentHide\"></div>"; + + if (navigator.userAgent.indexOf("MSIE 6") != -1 && + CB_RoundPix == 0) { + CB_ie6RPBug = 1; + } + + if (navigator.userAgent.indexOf("MSIE") != -1 && + CB_RoundPix < 2) { + CB_ieRPBug = 6; + } + + //Music player + var objFlashPlayer = document.createElement("div"); + objFlashPlayer.setAttribute('id','__sound_flash__'); + b.appendChild(objFlashPlayer); + + //CB All elements + document.getElementById("CB_Padding").style.padding = CB_Padd + "px"; + CB_ShTh = document.getElementById("CB_ShowTh"); + CB_ImgHd = document.getElementById("CB_ImgHide"); + CB_ImgHd.style.backgroundColor = "#fff"; + CB_ImgHd.style.opacity = 0.75; + CB_ImgHd.style.filter = "alpha(opacity=75)"; + CB_Win = document.getElementById("CB_Window"); + CB_Thm = document.getElementById("CB_Thumbs"); + CB_Thm2 = document.getElementById("CB_Thumbs2"); + CB_HideContent = document.getElementById("CB_ContentHide"); + CB_HideContent.style.backgroundColor = CB_HideColor; + CB_HideContent.style.opacity = 0; + CB_HideContent.style.filter = "alpha(opacity=0)"; + CB_Img = document.getElementById("CB_Image"); + CB_LoadingImg = document.getElementById("CB_LoadingImage"); + CB_ImgCont = document.getElementById("CB_ImgContainer"); + CB_Img.style.border = CB_ImgBorder + "px solid " + CB_ImgBorderColor; + CB_Cls = document.getElementById("CB_CloseWindow"); + CB_SlideS = document.getElementById("CB_SlideShowS"); + CB_SlideP = document.getElementById("CB_SlideShowP"); + CB_Speak = document.getElementById("CB_Speaker"); + CB_ZoomS = document.getElementById("CB_ZoomOn"); + CB_ZoomP = document.getElementById("CB_ZoomOff"); + CB_SlideB = document.getElementById("CB_SlideShowBar"); + CB_SlideB.style.opacity = 0.5; + CB_SlideB.style.filter = "alpha(opacity=50)"; + CB_Prv = document.getElementById("CB_Prev"); + CB_Nxt = document.getElementById("CB_Next"); + CB_Txt = document.getElementById("CB_Text"); + // CB_Txt.style.height = CB_TextH - CB_PadT + "px"; + // CB_Txt.style.marginTop = CB_PadT + "px"; + CB_Txt.style.fontFamily = CB_Font; + CB_Txt.style.fontSize = CB_FontSize + "px"; + CB_Txt.style.fontWeight = CB_FontWeigth; + //CB_Txt.style.color = CB_FontColor; + + CB_Txt2 = document.getElementById("CB_DetailText"); + CB_Txt2.style.fontFamily = CB_Font; + CB_Txt2.style.fontSize = CB_FontSize + "px"; + CB_Txt2.style.fontWeight = CB_FontWeigth; + + CB_Txt2a = document.getElementById("CB_Details"); + CB_Txt2a.style.fontFamily = CB_Font; + CB_Txt2a.style.fontSize = CB_FontSize + "px"; + CB_Txt2a.style.fontWeight = CB_FontWeigth; + + CB_Txt3 = document.getElementById("CB_NoteText"); + CB_Txt3.style.fontFamily = CB_Font; + CB_Txt3.style.fontSize = CB_FontSize + "px"; + CB_Txt3.style.fontWeight = CB_FontWeigth; + + CB_Txt3a = document.getElementById("CB_Notes"); + CB_Txt3a.style.fontFamily = CB_Font; + CB_Txt3a.style.fontSize = CB_FontSize + "px"; + CB_Txt3a.style.fontWeight = CB_FontWeigth; + + CB_Txt4 = document.getElementById("CB_UrlNotes"); + CB_Txt4.style.fontFamily = CB_Font; + CB_Txt4.style.fontSize = CB_FontSize + "px"; + CB_Txt4.style.fontWeight = CB_FontWeigth; + + CB_Header = document.getElementById("CB_Header").style; + CB_Header.height = CB_RoundPix + "px"; + CB_Footer = document.getElementById("CB_Footer").style; + CB_Footer.height = CB_RoundPix + "px"; + CB_Left = document.getElementById("CB_Left").style; + CB_Left.width = CB_RoundPix + CB_ie6RPBug + "px"; + CB_Right = document.getElementById("CB_Right").style; + CB_Right.width = CB_RoundPix + "px"; + CB_iFr = document.getElementById("CB_iFrame"); + CB_PrvNxt = document.getElementById("CB_PrevNext").style; + CB_ShTh.onmouseover = function () {CB_ShowThumbs();return;}; + CB_ImgHd.onmouseover = function () {CB_HideThumbs();return;}; + CB_Txt.onmouseover = function () {CB_HideThumbs();return;}; + CB_HideContent.onmouseover = function () {CB_HideThumbs();return;}; + + if (navigator.userAgent.indexOf("MSIE") != -1 && + navigator.userAgent.indexOf("Windows") != -1 && + navigator.userAgent.indexOf("MSIE 7") == -1) { + CB_pngFixIE(); + } + + if (navigator.userAgent.indexOf("Opera") != -1) { + CB_BodyMarginX = 0; + CB_BodyMarginY = 0; + } + + if (navigator.userAgent.indexOf("Firefox") != -1) { + CB_BodyMarginY = 0; + } + } + + document.getElementById("CB_Thumbs").onmousemove = getMouseXY; + + var d = 0; + var e = 0; + CB_Links = document.getElementsByTagName("a"); + for (i = 0; i < CB_Links.length; i++) { + CB_Rel = CB_Links[i].rel; + CB_URL = CB_Links[i].getAttribute("href"); + if (CB_Rel.match("clearbox") != null && CB_Show != 0) { + if (CB_Rel == "clearbox") { + CB_Links[i].onclick = function () {CB_ClickIMG(this.rel + "+\\+" + this.getAttribute("href") + "+\\+" + this.getAttribute("rev"));return false;}; + } else { + if (CB_Rel.substring(0, 8) == "clearbox" && + CB_Rel.charAt(8) == "[" && + CB_Rel.charAt(CB_Rel.length - 1) == "]") { + if (CB_Links[i].rel.substring(9, CB_Links[i].rel.length - 1).split(/\s*,\s*/)[0] != "clearbox") { + CB_Links[i].onclick = function () {CB_ClickIMG(this.rel.substring(9, this.rel.length - 1) + "+\\+" + this.getAttribute("href") + "+\\+" + this.getAttribute("rev"));return false;}; + } else { + alert("ClearBox HIBA:\n\nClearBox galeria neve NEM lehet \"clearbox[clearbox]\"!\n(Helye: dokumentum, a " + i + ". <a> tag-en belul.)"); } + } else if (CB_Rel.substring(0, 8) == "clearbox" && + CB_Rel.charAt(8) == "(" && + CB_Rel.charAt(CB_Rel.length - 1) == ")") { + if (CB_Rel.substring(9, CB_Rel.length - 1).split(/\s*,\s*/)[2] == "click") { + CB_Links[i].onclick = function () {CB_ClickURL(this.rel.substring(9, this.rel.length - 1) + "+\\+" + this.getAttribute("href") + "+\\+" + this.getAttribute("rev"));return false;}; + } else { + CB_Links[i].onmouseover = function () {CB_ClickURL(this.rel.substring(9, this.rel.length - 1) + "+\\+" + this.getAttribute("href") + "+\\+" + this.getAttribute("rev"));return false;}; + } + } else { + alert("ClearBox HIBA:\n\nHibasan megadott clearbox REL azonosito: \"" + CB_Links[i].rel + "\"!\n(Helye: dokumentum, a " + i + ". <a> tag-en belul.)"); + } + } + } + } + } + + function CB_ClickIMG(a) { + zoomSet=1; + if (CB_Show == 0) { + return false; + } + CB_Cls.onclick = ""; + CB_SlideS.onclick = ""; + CB_SlideP.onclick = ""; + CB_Clicked = a.split("+\\+"); + CB_Rel = CB_Clicked[0].split(/\s*,\s*/); + + if (CB_Rel[1] > 0) { + CB_SlShowTimer = parseInt(CB_Rel[1]) * 1000; + } else { + CB_SlShowTimer = CB_SlShowTime; + } + + if (CB_Rel[2] == "start") { + CB_SS = "pause"; + } + + if (CB_Gallery && + CB_Rel[0] == CB_Gallery[0][0] && CB_Gallery[0][0] != "clearbox") { + } else { + CB_Gallery = new Array; + CB_Gallery.push(new Array(CB_Rel[0], CB_Rel[1], CB_Rel[2])); + if (CB_Clicked[0] == "clearbox") { + CB_Gallery.push(new Array(CB_Clicked[1], CB_Clicked[2])); + } else { + for (i = 0; i < CB_Links.length; i++) { + if (CB_Links[i].rel.substring(9, CB_Links[i].rel.length - 1).split(/\s*,\s*/)[0] == CB_Gallery[0][0]) { + var b = CB_PicDir + "blank.gif"; + if (CB_Links[i].getAttribute("tnhref") == null || + CB_Links[i].getAttribute("tnhref") == "null") { + for (j = 0; j < CB_Links[i].childNodes.length; j++) { + if (CB_Links[i].childNodes[j].src != undefined) { + b = CB_Links[i].childNodes[j].src; + } + } + } else { + b = CB_Links[i].getAttribute("tnhref"); + } + // Split the rev attribute + var splitTitle = CB_Links[i].getAttribute("rev").split("::",4); + CB_Gallery.push(new Array(CB_Links[i].getAttribute("href"), splitTitle[2], b, splitTitle[0], splitTitle[1], splitTitle[3])); + } + } + } + } + + CB_ActImgId = 0; + + while (CB_Gallery[CB_ActImgId][0] != CB_Clicked[1]) { + CB_ActImgId++; + } + CB_ImgWidthOld = CB_WinBaseW; + CB_ImgHeightOld = CB_WinBaseH - CB_TextH; + CB_SetAllPositions(); + CB_HideDocument(); + } + + function CB_SetAllPositions() { + getBrowserSize(); + getDocumentSize(); + getScrollPosition(); + if (BrSizeY > DocSizeY) { + DocSizeY = BrSizeY; + } + if ((navigator.userAgent.indexOf("Netscape") != -1 || + navigator.userAgent.indexOf("Firefox") != -1) && + BrSizeX != DocSizeX) { + FF_ScrollbarBug = window.scrollMaxY + window.innerHeight - DocSizeY; + } else { + FF_ScrollbarBug = 0; + } + CB_SetMargins(); + if (CB_BodyMarginX == 0) { + if (DocSizeX > BrSizeX) { + CB_HideContent.style.width = DocSizeX + "px"; + } else { + CB_HideContent.style.width = BrSizeX + "px"; + } + } else { + CB_HideContent.style.width = DocSizeX + CB_BodyMarginX + "px"; + } + CB_HideContent.style.height = BrSizeY + DocScrY + "px"; + CB_HideContent.style.visibility = "visible"; + return; + } + + var clicks=0; + function CB_BrBack_Close() { + // Debug ----------------- + // alert(browserName); + if (browserName=="Firefox" || browserName=="Opera"){ + CB_Close(); + history.go(-1); + }else if (browserName=="Microsoft Internet Explorer") { + clicks=(clicks+1); + if (clicks==1) { + CB_Close(); + }else{ + CB_Close(); + clicks=0; + history.go(-1); + } + }else{ + CB_Close(); + } + } + + + function CB_ClickURL(a) { + CB_iFr.src = ""; + // alert("Open = " + clicks); + if (CB_Show == 0) { + return false; + } + CB_ClearBox = "ki"; + CB_Clicked = a.split("+\\+"); + CB_PrvNxt.display = "none"; + CB_Cls.style.display = "block"; + CB_Cls.onclick = function () { CB_BrBack_Close();return false; }; + CB_Rel = CB_Clicked[0].split(/\s*,\s*/); + // alert(CB_Clicked[0] + " and " + CB_Clicked[1] + " and " + CB_Clicked[2]); + CB_SetAllPositions(); + CB_ImgWidth = parseInt(CB_Rel[0]); + CB_ImgHeight = parseInt(CB_Rel[1]); + CB_ImgWidthOld = CB_WinBaseW; + CB_ImgHeightOld = CB_WinBaseH - CB_TextH; + if (CB_ImgWidth > BrSizeX - 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd + CB_WinPadd)) { + CB_ImgWidth = BrSizeX - 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd + CB_WinPadd); + } + if (CB_ImgHeight > BrSizeY - 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd + CB_WinPadd) - CB_TextH) { + CB_ImgHeight = BrSizeY - 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd + CB_WinPadd) - CB_TextH; + } + CB_Img.style.width = CB_WinBaseW + "px"; + CB_Img.style.height = CB_WinBaseH - CB_TextH + "px"; + CB_Img.style.display = "block"; + CB_Img.style.visibility = "hidden"; + CB_Win.style.visibility = "visible"; + CB_SlideS.style.display = "none"; + CB_SlideP.style.display = "none"; + CB_Speak.style.display = "none"; + CB_ZoomS.style.display = "none"; + CB_ZoomP.style.display = "none"; + + CB_Txt2.style.visibility = "hidden"; + CB_Txt2a.style.visibility = "hidden"; + CB_HideDocument("x"); + CB_HideContent.onclick = function () {CB_Close();return false;}; + CB_SS = "pause"; + } + + function CB_HideDocument(a) { + var b = a; + if (CB_ii < CB_HideOpacity) { + CB_ii += CB_OpacityStep; + CB_HideContent.style.opacity = CB_ii / 100; + CB_HideContent.style.filter = "alpha(opacity=" + CB_ii + ")"; + CB_Hide = CB_ii; + CB_Blur = setTimeout("CB_HideDocument('" + b + "')", 5); + } else { + CB_ii = 0; + CB_HideContent.style.height = DocSizeY + CB_BodyMarginY + "px"; + if (CB_HideOpacity != 0) { + clearTimeout(CB_Blur); + } + if (b == "x") { + CB_LoadingImg.style.visibility = "visible"; + CB_AnimatePlease("x"); + } else { + CB_NewWindow(); + } + return; + } + } + + function CB_NewWindow() { + CB_Img.style.width = CB_WinBaseW + "px"; + CB_Img.style.height = CB_WinBaseH - CB_TextH + "px"; + CB_Img.style.display = "block"; + CB_Img.style.visibility = "hidden"; + CB_Win.style.visibility = "visible"; + CB_LoadImage(); + } + + function CB_LoadImage(a) { + CB_ImgWidthOld = CB_ImgWidth; + CB_ImgHeightOld = CB_ImgHeight; + CB_Thm.style.display = "none"; + CB_ImgHd.style.width = "0px"; + CB_ImgHd.style.height = "0px"; + CB_ImgHd.style.visibility = "hidden"; + CB_Thm.style.width = "0px"; + CB_ClearBox = "ki"; + CB_jj = 0; + CB_HideContent.onclick = ""; + if (CB_Gallery.length < 3) { + CB_SlideS.style.display = "none"; + CB_SlideP.style.display = "none"; + CB_Speak.style.display = "none"; + CB_ZoomP.style.display = "none"; + CB_ZoomS.style.display = "block"; + } else { + if (CB_SS == "start") { + CB_SlideS.style.display = "block"; + CB_SlideP.style.display = "none"; + if (slideshowMusic == null) { + CB_Speak.style.display = "none"; + }else{ + CB_Speak.style.display = "block"; + } +// CB_ZoomS.style.display = "none"; + CB_ZoomP.style.display = "none"; + } else { + CB_SlideP.style.display = "block"; + CB_SlideS.style.display = "none"; +// CB_Speak.style.display = "none"; + CB_ZoomP.style.display = "none"; + CB_ZoomS.style.display = "none"; + } + } + CB_Prv.style.display = "none"; + CB_Nxt.style.display = "none"; + + if (a) { + CB_ActImgId = parseInt(a); + } + CB_JumpX = CB_Jump_X; + CB_JumpY = CB_Jump_Y; + if (CB_Animation != "warp") { + CB_Img.style.visibility = "hidden"; + CB_LoadingImg.style.visibility = "visible"; + } + CB_Txt.innerHTML = CB_LoadingText; + CB_Txt.innerHTML = ""; + CB_Count = 0; + CB_preImages = new Image; + CB_preImages.src = CB_Gallery[CB_ActImgId][0]; + CB_Loaded = false; +// CB_preImages.onerror = function () {CB_ShowImage();alert("ClearBox ERROR:\n\nCould not open Image: " + CB_Gallery[CB_ActImgId][0]);return;}; + CB_preImages.onerror = function () {CB_ShowImage();alert("Lightbox ERROR:\n\nCould not open Image : " );return;}; + CB_CheckLoaded(); +// resetZoom(); + } + + function CB_CheckLoaded() { + if (CB_Count == 1) { + CB_Loaded = true; + clearTimeout(CB_ImgLoadTimer); + CB_GetImageSize(); + return; + } + if (CB_Loaded == false && CB_preImages.complete) { + CB_Count++; + } + CB_ImgLoadTimer = setTimeout("CB_CheckLoaded()", 5); + return; + } + + function CB_GetImageSize() { + CB_ImgWidth = CB_preImages.width; + CB_ImgHeight = CB_preImages.height; + CB_ImgWidthOrig = CB_ImgWidth; + CB_ImgHeightOrig = CB_ImgHeight; + CB_ImgRate = CB_ImgWidth / CB_ImgHeight; + CB_FitToBrowser(); + CB_Img.src = CB_Gallery[CB_ActImgId][0]; +// CB_Img.mid = CB_Gallery[CB_ActImgId][2]; +// CB_Txt.style.width = CB_ImgWidth + "px"; + CB_AnimatePlease(); + return; + } + + function CB_AnimatePlease(a) { + // CB_Speak.style.display = "none"; + tt_HideInit(); + CB_tt="closed"; + CB_JumpX = CB_Jump_X; + CB_JumpY = CB_Jump_Y; + CB_AnimX = "false"; + CB_AnimY = "false"; + CB_IsAnimating = 1; + + if (CB_Animation == "double") { + CB_WindowResizeX(); + CB_WindowResizeY(); + } else if (CB_Animation == "warp") { + if (!a) { + CB_LoadingImg.style.visibility = "hidden"; + CB_Img.style.visibility = "visible"; + } + CB_WindowResizeX(); + CB_WindowResizeY(); + } else if (CB_Animation == "none") { + CB_SetMargins(); + CB_ImgCont.style.height = CB_ImgHeight + 2 * CB_ImgBorder + "px"; + CB_Img.style.width = CB_ImgWidth + "px"; + CB_Img.style.height = CB_ImgHeight + "px"; + CB_AnimX = "true"; + CB_AnimY = "true"; + } else if (CB_Animation == "normal") { + CB_WindowResizeX(); + }else{ + // ---Adjust Title width to image --------------------------------------- + CB_Txt.style.width = CB_ImgWidthOld + "px"; + // -------------------------------------------------------------------------- + + } + if (a) { + CB_CheckResize2(); + } else { + CB_CheckResize(); + } + return; + } + + function CB_WindowResizeX() { + if (CB_ImgWidth == CB_ImgWidthOld) { + if (CB_TimerX) { + clearTimeout(CB_TimerX); + } + if (CB_Animation == "normal") { + CB_AnimX = "true"; + CB_WindowResizeY(); + } else { + CB_AnimX = "true"; + } + return; + } else { + if (CB_ImgWidth < CB_ImgWidthOld) { + if (CB_ImgWidthOld < CB_ImgWidth + 100 && CB_Jump_X > 20) { + CB_JumpX = 20; + } + if (CB_ImgWidthOld < CB_ImgWidth + 60 && CB_Jump_X > 10) { + CB_JumpX = 10; + } + if (CB_ImgWidthOld < CB_ImgWidth + 30 && CB_Jump_X > 5) { + CB_JumpX = 5; + } + if (CB_ImgWidthOld < CB_ImgWidth + 15 && CB_Jump_X > 2) { + CB_JumpX = 2; + } + if (CB_ImgWidthOld < CB_ImgWidth + 4) { + CB_JumpX = 1; + } + CB_ImgWidthOld -= CB_JumpX; + } else { + if (CB_ImgWidthOld > CB_ImgWidth - 100 && CB_Jump_X > 20) { + CB_JumpX = 20; + } + if (CB_ImgWidthOld > CB_ImgWidth - 60 && CB_Jump_X > 10) { + CB_JumpX = 10; + } + if (CB_ImgWidthOld > CB_ImgWidth - 30 && CB_Jump_X > 50) { + CB_JumpX = 5; + } + if (CB_ImgWidthOld > CB_ImgWidth - 15 && CB_Jump_X > 2) { + CB_JumpX = 2; + } + if (CB_ImgWidthOld > CB_ImgWidth - 4) { + CB_JumpX = 1; + } + CB_ImgWidthOld += CB_JumpX; + } + CB_Img.style.width = CB_ImgWidthOld + "px"; + // ---Adjust Title width to image --------------------------------------- + CB_Txt.style.width = CB_ImgWidthOld + "px"; + // -------------------------------------------------------------------------- + CB_MarginL = parseInt(DocScrX - (CB_ImgWidthOld + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginLeft = CB_MarginL + "px"; + CB_TimerX = setTimeout("CB_WindowResizeX()", CB_AnimTimeout); + } + } + + function CB_WindowResizeY() { + if (CB_ImgHeight == CB_ImgHeightOld) { + if (CB_TimerY) { + clearTimeout(CB_TimerY); + } + CB_AnimY = "true"; + return; + } else { + if (CB_ImgHeight < CB_ImgHeightOld) { + if (CB_ImgHeightOld < CB_ImgHeight + 100 && CB_Jump_Y > 20) { + CB_JumpY = 20; + } + if (CB_ImgHeightOld < CB_ImgHeight + 60 && CB_Jump_Y > 10) { + CB_JumpY = 10; + } + if (CB_ImgHeightOld < CB_ImgHeight + 30 && CB_Jump_Y > 5) { + CB_JumpY = 5; + } + if (CB_ImgHeightOld < CB_ImgHeight + 15 && CB_Jump_Y > 2) { + CB_JumpY = 2; + } + if (CB_ImgHeightOld < CB_ImgHeight + 4) { + CB_JumpY = 1; + } + CB_ImgHeightOld -= CB_JumpY; + } else { + if (CB_ImgHeightOld > CB_ImgHeight - 100 && CB_Jump_Y > 20) { + CB_JumpY = 20; + } + if (CB_ImgHeightOld > CB_ImgHeight - 60 && CB_Jump_Y > 10) { + CB_JumpY = 10; + } + if (CB_ImgHeightOld > CB_ImgHeight - 30 && CB_Jump_Y > 5) { + CB_JumpY = 5; + } + if (CB_ImgHeightOld > CB_ImgHeight - 15 && CB_Jump_Y > 2) { + CB_JumpY = 2; + } + if (CB_ImgHeightOld > CB_ImgHeight - 4) { + CB_JumpY = 1; + } + CB_ImgHeightOld += CB_JumpY; + } + CB_Img.style.height = CB_ImgHeightOld + "px"; + CB_ImgCont.style.height = CB_ImgHeightOld + 2 * CB_ImgBorder + "px"; + CB_MarginT = parseInt(DocScrY - (CB_ieRPBug + CB_ImgHeightOld + CB_TextH + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginTop = CB_MarginT - FF_ScrollbarBug / 2 + "px"; + CB_TimerY = setTimeout("CB_WindowResizeY()", CB_AnimTimeout); + } + } + + function CB_CheckResize() { + if (CB_AnimX == "true" && CB_AnimY == "true") { + if (CB_ResizeTimer) { + clearTimeout(CB_ResizeTimer); + } + + // ---Adjust Title width to image --------------------------------------- + CB_Txt.style.width = CB_ImgWidthOld + "px"; + // -------------------------------------------------------------------------- + + CB_ShowImage(); + return; + } else { + CB_ResizeTimer = setTimeout("CB_CheckResize()", 5); + } + } + + function CB_CheckResize2() { + if (CB_AnimX == "true" && CB_AnimY == "true") { + if (CB_ResizeTimer) { + clearTimeout(CB_ResizeTimer); + } + CB_Gallery = ""; + CB_iFr.src = CB_Clicked[1]; + CB_Img.style.visibility = "visible"; + CB_LoadingImg.style.visibility = "hidden"; + CB_iFr.style.top = CB_ImgBorder + "px"; + CB_iFr.style.left = CB_ImgBorder + "px"; + CB_iFr.style.width = CB_ImgWidth + "px"; + //BH next line changed to make url navbar smaller in Firefox + //BH CB_iFr.style.height = CB_ImgHeight + 2 + "px"; + CB_iFr.style.height = CB_ImgHeight + 4 + "px"; + + if (CB_Clicked[2] && + CB_Clicked[2] != "null" && CB_Clicked[2] != null) { + + CB_Txt.style.visibility = "visible"; + CB_Txt3.style.visibility = "visible"; + CB_Txt3a.style.visibility = "visible"; + + CB_Txt4.style.top = "20px"; + CB_Txt4.style.left = "20px"; + CB_Txt4.style.width = "200px"; + CB_Txt4.style.height = "80px"; + CB_Txt4.innerHTML = " Testing "; + CB_Txt4.style.visibility = "hidden"; + + // Split URL title and also create CB_Txt.innerHTML + // CB_Txt.innerHTML = CB_Clicked[2]; + var splitURLTitle = CB_Clicked[2].split("::",4); + CB_Txt.innerHTML = splitURLTitle[2]; + var MIDa = splitURLTitle[0]; + var GEDCOMa = splitURLTitle[1]; + var notey = splitURLTitle[3]; + if (notey != "<br />" && notey) { + CB_Txt3.innerHTML = "<a href=\"JavaScript:void(0);\" onclick=\"TipTog('<font color=#008800><b>" + CB_ImgNotes2 + ":</b></font><br />" + notey + "', CENTERWINDOW, false, DELAY, 0, TEXTALIGN, '" + CB_Alignm + "', WIDTH, -450, BGCOLOR, '#fffbcc', BALLOON, true, BALLOONSTEMWIDTH, 0, ABOVE, false, BORDERCOLOR, '', TITLEBGCOLOR, '', CLOSEBTNTEXT, 'X', CLOSEBTN, false, CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000'], OFFSETY, -25, OFFSETX, 40, STICKY, true, PADDING, 6, CLICKCLOSE, true );\" ></a>"; + CB_Txt3a.innerHTML = "<a href=\"JavaScript:void(0);\" onclick=\"TipTog('<font color=#008800><b>" + CB_ImgNotes2 + ":</b></font><br />" + notey + "', CENTERWINDOW, false, DELAY, 0, TEXTALIGN, '" + CB_Alignm + "', WIDTH, -450, BGCOLOR, '#fffbcc', BALLOON, true, BALLOONSTEMWIDTH, 0, ABOVE, false, BORDERCOLOR, '', TITLEBGCOLOR, '', CLOSEBTNTEXT, 'X', CLOSEBTN, false, CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000'], OFFSETY, -25, OFFSETX, 40, STICKY, true, PADDING, 6, CLICKCLOSE, true );\" ><img id=\"CB_PicNotes\" title=\"" + CB_ImgNotes + "\" src=\"" + CB_PicDir + CB_PictureNotes + "\" alt=\"\" /></a>"; + + } + CB_Txt2.onclick = function () { window.location.href = 'mediaviewer.php?mid='+MIDa+'&ged='+GEDCOMa; return false; }; + CB_Txt2a.onclick = function () { window.location.href = 'mediaviewer.php?mid='+MIDa+'&ged='+GEDCOM; return false; }; + } else { + CB_Txt.innerHTML = CB_Clicked[1]; + } +//Temp CB_Txt.innerHTML += " " + CB_ImgNumBracket.substring(0, 1) + "<a class=\"CB_TextNav\" href=\"javascript:void(0)\" onclick=\"CB_Close();\">" + CB_NavTextCls + "</a>" + CB_ImgNumBracket.substring(1, 2); + CB_HideContent.onclick = function () {CB_BrBack_Close();return false;}; + CB_ClearBox = "be"; + CB_IsAnimating = 0; + return; + } else { + CB_ResizeTimer = setTimeout("CB_CheckResize2()", 5); + } + } + + + function moveLeft() { + if ( CB_ImgWidthOld > BrSizeX ) { + CB_MarginL = CB_MarginL - 10; + CB_Win.style.marginLeft = CB_MarginL + "px"; + CB_Prv.style.display = "none"; + CB_Nxt.style.display = "none"; + CB_SlideB.style.display = "none"; + CB_ZoomP.style.display = "block"; + CB_ZoomS.style.display = "none"; + CB_SlideS.style.display = "block"; + CB_SlideP.style.display = "none"; + CB_ShTh.style.display = "none"; + }else{ + } + } + + function moveRight() { + if (CB_ImgWidthOld > BrSizeX ){ + CB_MarginL = CB_MarginL + 10; + CB_Win.style.marginLeft = CB_MarginL + "px"; + CB_Prv.style.display = "none"; + CB_Nxt.style.display = "none"; + CB_SlideB.style.display = "none"; + CB_ZoomP.style.display = "block"; + CB_ZoomS.style.display = "none"; + CB_SlideS.style.display = "block"; + CB_SlideP.style.display = "none"; + CB_ShTh.style.display = "none"; + }else{ + } + } + + function moveUp() { + if ( CB_ImgHeightOld > BrSizeY ) { + CB_MarginT = CB_MarginT - 10; + CB_Win.style.marginTop = CB_MarginT + "px"; + CB_Prv.style.display = "none"; + CB_Nxt.style.display = "none"; + CB_SlideB.style.display = "none"; + CB_ZoomP.style.display = "block"; + CB_ZoomS.style.display = "none"; + CB_SlideS.style.display = "block"; + CB_SlideP.style.display = "none"; + CB_ShTh.style.display = "none"; + }else{ + } + } + + function moveDown() { + if ( CB_ImgHeightOld > BrSizeY ) { + CB_MarginT = CB_MarginT + 10; + CB_Win.style.marginTop = CB_MarginT + "px"; + CB_Prv.style.display = "none"; + CB_Nxt.style.display = "none"; + CB_SlideB.style.display = "none"; + CB_ZoomP.style.display = "block"; + CB_ZoomS.style.display = "none"; + CB_SlideS.style.display = "block"; + CB_SlideP.style.display = "none"; + CB_ShTh.style.display = "none"; + }else{ + } + } + + function zoomIn() { + if (zoomSet == 1) { + CB_ImgWidthOld = CB_ImgWidthOld + ( CB_ImgWidthOld * 0.05 ); + CB_ImgHeightOld = CB_ImgHeightOld + ( CB_ImgHeightOld * 0.05 ); + CB_Img.style.width = CB_ImgWidthOld + "px"; + CB_Img.style.height = CB_ImgHeightOld + "px" ; + CB_ImgCont.style.height = CB_ImgHeightOld + ( 2 ) * CB_ImgBorder + "px"; + CB_MarginL = parseInt(DocScrX - (CB_ImgWidthOld + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginLeft = CB_MarginL + "px"; + CB_MarginT = parseInt(DocScrY - (CB_ieRPBug + CB_ImgHeightOld + CB_TextH + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginTop = CB_MarginT - FF_ScrollbarBug / 2 + "px"; + CB_Prv.style.display = "none"; + CB_Nxt.style.display = "none"; + CB_SlideB.style.display = "none"; + CB_ZoomP.style.display = "block"; + CB_ZoomS.style.display = "none"; + if (CB_Gallery.length < 3) { + CB_SlideS.style.display = "none"; + }else{ + CB_SlideS.style.display = "block"; + } + CB_SlideP.style.display = "none"; + CB_ShTh.style.display = "none"; + // ---Adjust Title width to image --------------------------------------- + CB_Txt.style.width = CB_ImgWidthOld + "px"; + // -------------------------------------------------------------------------- + CB_Zoom = "true"; + // Drag and Drop + dragDrop.initElement(CB_Win); + CB_Win.onclick = function() {return false;}; + } + } + + function zoomOut() { + if (zoomSet == 1) { + CB_ImgWidthOld = CB_ImgWidthOld - ( CB_ImgWidthOld * 0.05 ); + CB_ImgHeightOld = CB_ImgHeightOld - ( CB_ImgHeightOld * 0.05 ); + CB_Img.style.width = CB_ImgWidthOld + "px"; + CB_Img.style.height = CB_ImgHeightOld + "px"; + CB_ImgCont.style.height = CB_ImgHeightOld + ( 2 ) * CB_ImgBorder + "px"; + CB_MarginL = parseInt(DocScrX - (CB_ImgWidthOld + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginLeft = CB_MarginL + "px"; + CB_MarginT = parseInt(DocScrY - (CB_ieRPBug + CB_ImgHeightOld + CB_TextH + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginTop = CB_MarginT - FF_ScrollbarBug / 2 + "px"; + CB_Prv.style.display = "none"; + CB_Nxt.style.display = "none"; + CB_SlideB.style.display = "none"; + CB_ZoomP.style.display = "block"; + CB_ZoomS.style.display = "none"; + if (CB_Gallery.length < 3) { + CB_SlideS.style.display = "none"; + }else{ + CB_SlideS.style.display = "block"; + } + CB_SlideP.style.display = "none"; + CB_ShTh.style.display = "none"; + // ---Adjust Title width to image --------------------------------------- + CB_Txt.style.width = CB_ImgWidthOld + "px"; + // -------------------------------------------------------------------------- + CB_Zoom = "true"; + // Drag and Drop + dragDrop.initElement(CB_Win); + CB_Win.onclick = function() {return false;}; + } + } + + function setZoom() { + zoomSet = 2; + // Drag and Drop + } + + function resetZoom() { + + CB_AnimatePlease(); + + CB_ImgWidthOld = CB_ImgWidthOrig; + CB_ImgHeightOld = CB_ImgHeightOrig; + CB_Img.style.width = CB_ImgWidthOld + "px"; + CB_Img.style.height = CB_ImgHeightOld + "px"; + CB_ImgCont.style.height = CB_ImgHeightOld + ( 2 ) * CB_ImgBorder + "px"; + CB_MarginL = parseInt(DocScrX - (CB_ImgWidthOld + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginLeft = CB_MarginL + "px"; + CB_MarginT = parseInt(DocScrY - (CB_ieRPBug + CB_ImgHeightOld + CB_TextH + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginTop = CB_MarginT - FF_ScrollbarBug / 2 + "px"; + if (CB_Gallery.length < 3) { + CB_Prv.style.display = "none"; + CB_Nxt.style.display = "none"; + }else{ + CB_Prv.style.display = "block"; + CB_Nxt.style.display = "block"; + } + CB_SlideB.style.display = "none"; + CB_ZoomS.style.display = "block"; + CB_ZoomP.style.display = "none"; + + if (CB_Gallery.length < 3) { + CB_SlideS.style.display = "none"; + }else{ + CB_SlideS.style.display = "block"; + } + CB_SlideP.style.display = "none"; + CB_ShTh.style.display = "block"; + zoomSet=1; + CB_Win.style.left = "50%"; + CB_Win.style.top = "50%"; + return; + } + + + + function closeZoom() { + CB_ImgWidthOld = CB_ImgWidthOrig; + CB_ImgHeightOld = CB_ImgHeightOrig; + CB_Img.style.width = CB_ImgWidthOrig + "px"; + CB_Img.style.height = CB_ImgHeightOrig + "px"; + CB_ImgCont.style.height = CB_ImgHeightOrig + ( 2 ) * CB_ImgBorder + "px"; + CB_MarginL = parseInt(DocScrX - (CB_ImgWidthOrig + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginLeft = CB_MarginL + "px"; + CB_MarginT = parseInt(DocScrY - (CB_ieRPBug + CB_ImgHeightOrig + CB_TextH + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginTop = CB_MarginT - FF_ScrollbarBug / 2 + "px"; + CB_Prv.style.display = "block"; + CB_Nxt.style.display = "block"; + CB_SlideB.style.display = "none"; + CB_ZoomS.style.display = "block"; + CB_ZoomP.style.display = "none"; + CB_SlideS.style.display = "block"; + CB_SlideP.style.display = "none"; + CB_ShTh.style.display = "block"; + zoomSet=1; + return; + } + + // New function used when counting number of lines in a Note ==================================== + function countOccurrencesOf(source, pattern) { + count = 0; + if (source!=null) { + len = pattern.length; + found = -1; + start = 0; + while( (found = source.indexOf(pattern, start) ) != -1) { + start = found + len; + count++; + } + return count; + } + else return 0; + } + // ======================================================================================== + + function decode_htmlspecialchars(p_string) { + p_string = p_string.replace(/&/g, '&'); + p_string = p_string.replace(/</g, '<'); + p_string = p_string.replace(/>/g, '>'); + p_string = p_string.replace(/\\"/g, '"'); + p_string = p_string.replace(/"/g, '"'); + p_string = p_string.replace(/'/g, '\''); + p_string=p_string.replace(/\\'/g,'\''); + p_string=p_string.replace(/\\"/g,'"'); + p_string=p_string.replace(/\\\\/g,'\\'); + p_string=p_string.replace(/\\0/g,'\0'); + return p_string; + }; + + function CB_ShowImage() { + // ---Adjust Title width to image ---------------------------- + CB_Txt.style.width = CB_ImgWidth + "px"; + // --------------------------------------------------------------- + + // UnTip(); // Supposed to Clear Notes Tooltip ... Does not work ? + tt_HideInit(); // Clears Notes Tooltip + + // init music player + setMusicPlayer(); + // set navigation controls + CB_Cls.onclick = function () {resetVolume(); CB_Close();}; // Close + CB_SlideS.onclick = function () {resetZoom(); CB_SSStart();return false; }; // Start Slideshow + CB_SlideP.onclick = function () {CB_SSPause();return false;}; // pause Slideshow + CB_Speak.onclick = function () {player.play();return false;}; // Speaker on/off + CB_ZoomP.onclick = function () {resetZoom(); CB_SSStart(); CB_SSPause(); return false; }; // Reset Zoom + CB_Win.ondblclick= function () {resetZoom(); CB_SSStart(); CB_SSPause(); return false; }; // REset Zoom +// CB_ZoomS.onclick = function () {CB_FullSize(); }; + + CB_PrvNxt.display = "block"; + if (CB_Animation != "warp") { + CB_Txt.innerHTML = ""; + CB_Txt3.innerHTML = ""; + CB_Txt3a.innerHTML = ""; + CB_LoadingImg.style.visibility = "hidden"; + CB_Img.src = CB_Gallery[CB_ActImgId][0]; + CB_Img.style.visibility = "visible"; + } + CB_Cls.style.display = "block"; + CB_HideContent.onclick = function () {CB_Close();return false;}; + CB_Prv.style.height = CB_ImgHeight + "px"; + CB_Nxt.style.height = CB_ImgHeight + "px"; + + if (CB_Gallery[CB_ActImgId][1] && + CB_Gallery[CB_ActImgId][1] != "null" && + CB_Gallery[CB_ActImgId][1] != null) { + + CB_Txt.innerHTML = CB_Gallery[CB_ActImgId][1]; + var notey1 = CB_Gallery[CB_ActImgId][5]; + if (notey1 != "<br />" && notey1 ) { + // alert(notey1); + var brs = countOccurrencesOf(notey1, "<br />"); + var spacer=7; + if (brs==1) {spacer=spacer+0;} + if (brs==2) {spacer=spacer+5;} + if (brs==3) {spacer=spacer+10;} + if (brs==4) {spacer=spacer+17;} + if (brs==5) {spacer=spacer+20;} + if (brs==6) {spacer=spacer+27;} + if (brs==7) {spacer=spacer+35;} + if (brs==8) {spacer=spacer+45;} + if (brs==9) {spacer=spacer+55;} + if (brs==10) {spacer=spacer+65;} + //alert(brs + " - " + spacer); + + // CB_Txt3.innerHTML = "<a href=\"JavaScript:void(0);\" onclick=\"TipTog('<font color=#008800><b>" + CB_ImgNotes2 + ":</b></font><br />" + notey1 + "', CENTERWINDOW, true, DELAY, 0, TEXTALIGN, '" + CB_Alignm + "', WIDTH, "+CB_ImgWidth+"-30, BGCOLOR, '#fffbcc', BALLOON, true , BALLOONSTEMWIDTH, 0, ABOVE, true, BORDERCOLOR, '', TITLEBGCOLOR, '', CLOSEBTNTEXT, 'X', CLOSEBTN, false, CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000'], OFFSETY, 150-" + ((DocSizeY-BrSizeY)/2) + ", OFFSETX, 0, STICKY, true, PADDING, 6, CLICKCLOSE, true );\" ></a>"; + // CB_Txt3a.innerHTML = "<a href=\"JavaScript:void(0);\" onclick=\"TipTog('<font color=#008800><b>" + CB_ImgNotes2 + ":</b></font><br />" + notey1 + "', CENTERWINDOW, true, DELAY, 0, TEXTALIGN, '" + CB_Alignm + "', WIDTH, "+CB_ImgWidth+"-30, BGCOLOR, '#fffbcc', BALLOON, true, BALLOONSTEMWIDTH, 0, ABOVE, true, BORDERCOLOR, '', TITLEBGCOLOR, '', CLOSEBTNTEXT, 'X', CLOSEBTN, false, CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000'], OFFSETY, -10-" + ((DocSizeY-BrSizeY)/2) + "+" +(CB_ImgHeight/2)+ "-" +(spacer)+ ", OFFSETX, 0, STICKY, true, PADDING, 6, CLICKCLOSE, true );\" ><img id=\"CB_PicNotes\" title=\"" + CB_ImgNotes + "\" src=\"" + CB_PicDir + CB_PictureNotes + "\" alt=\"\" /></a>"; + CB_Txt3.innerHTML = "<a href=\"JavaScript:void(0);\" onclick=\"TipTog('" + notey1 + "', CENTERWINDOW, true, DELAY, 0, TEXTALIGN, '" + CB_Alignm + "', WIDTH, "+CB_ImgWidth+"-30, BGCOLOR, '#fffbcc', BALLOON, true , BALLOONSTEMWIDTH, 0, ABOVE, true, BORDERCOLOR, '', TITLEBGCOLOR, '', CLOSEBTNTEXT, 'X', CLOSEBTN, false, CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000'], OFFSETY, 150-" + ((DocSizeY-BrSizeY)/2) + ", OFFSETX, 0, STICKY, true, PADDING, 6, CLICKCLOSE, true );\" ></a>"; + CB_Txt3a.innerHTML = "<a href=\"JavaScript:void(0);\" onclick=\"TipTog('" + notey1 + "', CENTERWINDOW, true, DELAY, 0, TEXTALIGN, '" + CB_Alignm + "', WIDTH, "+CB_ImgWidth+"-30, BGCOLOR, '#fffbcc', BALLOON, true, BALLOONSTEMWIDTH, 0, ABOVE, true, BORDERCOLOR, '', TITLEBGCOLOR, '', CLOSEBTNTEXT, 'X', CLOSEBTN, false, CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000'], OFFSETY, -10-" + ((DocSizeY-BrSizeY)/2) + "+" +(CB_ImgHeight/2)+ "-" +(spacer)+ ", OFFSETX, 0, STICKY, true, PADDING, 6, CLICKCLOSE, true );\" ><img id=\"CB_PicNotes\" title=\"" + CB_ImgNotes + "\" src=\"" + CB_PicDir + CB_PictureNotes + "\" alt=\"\" /></a>"; + + // ENABLE NOTES DISPLAY DURING SLIDESHOW (Remove the comment on the following line) + // Tip(decode_htmlspecialchars(notey1), CENTERWINDOW, true, DELAY, 0, TEXTALIGN, CB_Alignm, WIDTH, CB_ImgWidth-30, BGCOLOR, '#fffbcc', BALLOON, true, BALLOONSTEMWIDTH, 0, ABOVE, true, BORDERCOLOR, '', TITLEBGCOLOR, '', CLOSEBTNTEXT, 'X', CLOSEBTN, false, CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000'], OFFSETY, -10-((DocSizeY-BrSizeY)/2)+(CB_ImgHeight/2)-(spacer), OFFSETX, 0, STICKY, true, PADDING, 6, CLICKCLOSE, true ); + + } + } else { + if (CB_ShowImgURL == "be") { + CB_Txt.innerHTML = CB_Gallery[CB_ActImgId][0].split("/")[CB_Gallery[CB_ActImgId][0].split("/").length - 1]; + var notey2 = CB_Gallery[CB_ActImgId][5]; + if (notey2 != "<br />" && notey2 ) { + // alert(notey2); + var brs = countOccurrencesOf(notey2, "<br />"); + var spacer=7; + if (brs==1) {spacer=spacer+0;} + if (brs==2) {spacer=spacer+5;} + if (brs==3) {spacer=spacer+10;} + if (brs==4) {spacer=spacer+17;} + if (brs==5) {spacer=spacer+20;} + if (brs==6) {spacer=spacer+27;} + if (brs==7) {spacer=spacer+35;} + if (brs==8) {spacer=spacer+45;} + if (brs==9) {spacer=spacer+55;} + if (brs==10) {spacer=spacer+65;} + // alert(brs + " - " + spacer); + CB_Txt3.innerHTML = "<a href=\"JavaScript:void(0);\" onclick=\"TipTog('<font color=#008800><b>" + CB_ImgNotes2 + ":</b></font><br />" + notey2 + "', CENTERWINDOW, true, DELAY, 0, TEXTALIGN, '" + CB_Alignm + "', WIDTH, "+CB_ImgWidth+"-30, BGCOLOR, '#fffbcc', BALLOON, true , BALLOONSTEMWIDTH, 0, ABOVE, true, BORDERCOLOR, '', TITLEBGCOLOR, '', CLOSEBTNTEXT, 'X', CLOSEBTN, false, CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000'], OFFSETY, 150-" + ((DocSizeY-BrSizeY)/2) + ", OFFSETX, 0, STICKY, true, PADDING, 6, CLICKCLOSE, true );\" ></a>"; + CB_Txt3a.innerHTML = "<a href=\"JavaScript:void(0);\" onclick=\"TipTog('<font color=#008800><b>" + CB_ImgNotes2 + ":</b></font><br />" + notey2 + "', CENTERWINDOW, true, DELAY, 0, TEXTALIGN, '" + CB_Alignm + "', WIDTH, "+CB_ImgWidth+"-30, BGCOLOR, '#fffbcc', BALLOON, true, BALLOONSTEMWIDTH, 0, ABOVE, true, BORDERCOLOR, '', TITLEBGCOLOR, '', CLOSEBTNTEXT, 'X', CLOSEBTN, false, CLOSEBTNCOLORS, ['#ff0000', '#ffffff', '#ffffff', '#ff0000'], OFFSETY, -10-" + ((DocSizeY-BrSizeY)/2) + "+" +(CB_ImgHeight/2)+ "-" +(spacer)+ ", OFFSETX, 0, STICKY, true, PADDING, 6, CLICKCLOSE, true );\" ><img id=\"CB_PicNotes\" title=\"" + CB_ImgNotes + "\" src=\"" + CB_PicDir + CB_PictureNotes + "\" alt=\"\" /></a>"; + } + } + } + if (CB_ImgNum == "be" && CB_Gallery.length > 2) { + CB_Txt.innerHTML += " " + CB_ImgNumBracket.substring(0, 1) + CB_ActImgId + "/" + (CB_Gallery.length - 1) + CB_ImgNumBracket.substring(1, 2); + } + + CB_PrevNext(); + + CB_Txt.style.visibility = "visible"; + CB_Txt3.style.visibility= "visible"; + CB_Txt3a.style.visibility= "visible"; + if (CB_Gallery.length > 0) { + CB_ImgWidthOld = CB_ImgWidth; + CB_ImgHeightOld = CB_ImgHeight; + } + if (CB_Gallery.length > 2) { + if (CB_SS == "pause") { + CB_SlideP.style.display = "block"; + CB_SlideB.style.display = "block"; + if (slideshowMusic == null) { + CB_Speak.style.display = "none"; + }else{ + CB_Speak.style.display = "block"; + } + CB_SlideShow(); + } else { + CB_SlideS.style.display = "block"; + if (soond==null && CB_SS == "start") { + CB_Speak.style.display = "none"; + }else{ + CB_Speak.style.display = "block"; + } + } + } else { + CB_SS = "start"; + } + CB_ClearBox = "be"; + CB_IsAnimating = 0; + if (CB_Gallery.length > 2) { + CB_ShTh.style.visibility = "visible"; + CB_ImgHd.style.width = CB_ImgWidth + 2 + "px"; + CB_ImgHd.style.height = CB_ImgHeight + 2 + "px"; + CB_Thm.style.width = CB_ImgWidth + 2 + "px"; + + var a = ""; + var b = 5; + CB_AllThumbsWidth = 0; + for (i = 1; i < CB_Gallery.length; i++) { + CB_preThumbs = new Image; + CB_preThumbs.src = CB_Gallery[i][2]; + CB_AllThumbsWidth += Math.round(CB_preThumbs.width / CB_preThumbs.height * 50); + } + CB_AllThumbsWidth += (CB_Gallery.length - 2) * b; + + var c = 0; + for (i = 1; i < CB_Gallery.length; i++) { + CB_preThumbs = new Image; + CB_preThumbs.src = CB_Gallery[i][2]; + a += "<a href=\"javascript:void(0)\" onclick=\"if (CB_SSTimer){CB_SlideShowJump();}CB_LoadImage(" + i + ")\"><img style=\"border: 0; left: " + c + "px;\" \" src=\"" + CB_Gallery[i][2] + "\" height=\"50\" class=\"CB_ThumbsImg\" alt=\"\" /></a>"; + c += Math.round(CB_preThumbs.width / CB_preThumbs.height * 50) + b; + } + CB_Thm2.style.width = CB_AllThumbsWidth + "px"; + CB_Thm2.innerHTML = a; + CB_Thm2.style.marginLeft = (CB_ImgWidth - CB_AllThumbsWidth) / 2 + "px"; + } + +// var MID = splitURLTitle[0] + var MID = CB_Gallery[CB_ActImgId][3]; + var GEDCOM = CB_Gallery[CB_ActImgId][4]; +// CB_Txt2.onclick = function () { window.open('mediaviewer.php?filename='+MID+'&ged='+GEDCOM+'', "win01", " resizable=1, scrollbars=1, top=50, HEIGHT=800, WIDTH=1100 "); }; + if (MID != "") { + CB_Txt2.onclick = function () { window.location.href = 'mediaviewer.php?mid='+MID+'&ged='+GEDCOM; return false; }; + CB_Txt2a.onclick = function () { window.location.href = 'mediaviewer.php?mid='+MID+'&ged='+GEDCOM; return false; }; + //CB_Txt3.onclick = function () { alert(CB_Gallery[CB_ActImgId][5]); }; + + }else{ + CB_Txt2.onclick = function () { CB_Close(); }; + CB_Txt2a.onclick = function () { CB_Close(); }; + } + + return true; + } + + + + function CB_ShowThumbs() { + CB_ImgHd.style.visibility = "visible"; + CB_Thm.style.display = "block"; + return; + } + + function CB_HideThumbs() { + CB_ImgHd.style.visibility = "hidden"; + CB_Thm.style.display = "none"; + return; + } + + function getMouseXY(e) { + if (CB_AllThumbsWidth > CB_ImgWidth) { + if (IE) { + tempX = event.clientX; + } else { + tempX = e.pageX; + } + if (tempX < 0) { + tempX = 0; + } + CB_Thm2.style.marginLeft = ((BrSizeX - CB_ImgWidth) / 2 - tempX) / (CB_ImgWidth / (CB_AllThumbsWidth - CB_ImgWidth)) + "px"; + } + } + + function CB_FullSize() { + setZoom(); + CB_Img.style.width = CB_ImgWidthOrig + "px"; + CB_Img.style.height = CB_ImgHeightOrig + "px"; + CB_ImgCont.style.height = CB_ImgHeightOrig + 2 * CB_ImgBorder + "px"; + CB_ZoomS.style.display = "none"; + CB_ZoomP.style.display = "block"; +// CB_Speak.style.display = "block"; + } + + function CB_SlideShowStop() { + CB_SS = "start"; + CB_SlideShowJump(); + } + + function CB_SlideShowJump() { + if (CB_SSTimer) { + clearTimeout(CB_SSTimer); + } + CB_jj = 0; + CB_SlideBW = 0; + CB_SlideB.style.display = "none"; + } + + function CB_SlideShow() { + if (CB_SlShowTimer > CB_jj) { + CB_SSTimer = setTimeout("CB_SlideShow()", 25); + CB_jj += 25; +//BH ----- Changed slide show progress bar width as controls are now at bottom --------------------- +//BH CB_SlideBW += (CB_ImgWidth - 44) / (CB_SlShowTimer / 25); + CB_SlideBW += (CB_ImgWidth - 4) / (CB_SlShowTimer / 25); + + CB_SlideB.style.width = CB_SlideBW + "px"; + } else { + clearTimeout(CB_SSTimer); + CB_SlideBW = 0; + CB_SlideB.style.width = CB_SlideBW + "px"; + if (CB_ActImgId == CB_Gallery.length - 1) { + CB_LoadImage(1); + } else { + CB_LoadImage(CB_ActImgId + 1); + } + return; + } + } + + function CB_FitToBrowser() { + if (CB_ImgWidth > BrSizeX - 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd + CB_WinPadd)) { + CB_ImgWidth = BrSizeX - 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd + CB_WinPadd); + CB_ImgHeight = Math.round(CB_ImgWidth / CB_ImgRate); + } + if (CB_ImgHeight > BrSizeY - 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd + CB_WinPadd) - 3*CB_TextH) { + CB_ImgHeight = BrSizeY - 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd + CB_WinPadd) - 3*CB_TextH; + CB_ImgWidth = Math.round(CB_ImgRate * CB_ImgHeight); + } + return; + } + + function CB_SetMargins() { + CB_MarginL = parseInt(DocScrX - (CB_ImgWidth + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_MarginT = parseInt(DocScrY - (CB_ieRPBug + CB_ImgHeight + CB_TextH + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + CB_Win.style.marginLeft = CB_MarginL + "px"; + CB_Win.style.marginTop = CB_MarginT - FF_ScrollbarBug / 2 + "px"; + return; + } + + function CB_PrevNext() { + if (CB_ActImgId > 1) { + if (CB_Preload == "be") { + PreloadPrv = new Image; + PreloadPrv.src = CB_Gallery[CB_ActImgId - 1][0]; + } + if (CB_TextNav == "be") { + var a = CB_Txt.innerHTML; + CB_Txt.innerHTML = "<a class=\"CB_TextNav\" href=\"javascript:void(0)\" onclick=\"if (CB_SSTimer){CB_SlideShowJump();}CB_LoadImage(" + (CB_ActImgId - 1) + ")\" alt=\"<\">" + CB_NavTextPrv + "</a> " + a; + } + CB_Prv.style.display = "block"; + if (slideshowMusic == null) { + CB_Speak.style.display = "none"; + }else{ + CB_Speak.style.display = "block"; + } + CB_Prv.onclick = function () { + if (CB_SSTimer) { + CB_SlideShowJump(); + } CB_LoadImage(CB_ActImgId - 1); + return false; + }; + } + if (CB_ActImgId < CB_Gallery.length - 1) { + if (CB_Preload == "be") { + PreloadNxt = new Image; + PreloadNxt.src = CB_Gallery[CB_ActImgId + 1][0]; + } + if (CB_TextNav == "be") { + CB_Txt.innerHTML += " <a class=\"CB_TextNav\" href=\"javascript:void(0)\" onclick=\"if (CB_SSTimer){CB_SlideShowJump();}CB_LoadImage(" + (CB_ActImgId + 1) + ")\" alt=\">\">" + CB_NavTextNxt + "</a>"; + } + CB_Nxt.style.display = "block"; + CB_Nxt.onclick = function () { + if (CB_SSTimer) { + CB_SlideShowJump(); + } CB_LoadImage(CB_ActImgId + 1); + return false; + }; + } + if (CB_ActImgId == 1 && CB_SS == "start" && soond=="playing" ) { + if (slideshowMusic == null) { + CB_Speak.style.display = "none"; + }else{ + CB_Speak.style.display = "block"; + } + } + return; + } + + function CB_Close() { + CB_Win.style.left = "50%"; + CB_Win.style.top = "50%"; + CB_ImgHd.style.width = "0px"; + CB_ImgHd.style.height = "0px"; + CB_ImgHd.style.visibility = "hidden"; + CB_ShTh.style.visibility = "hidden"; + CB_SlideShowStop(); + CB_Txt.style.visibility = "hidden"; + CB_Txt3.style.visibility = "hidden"; + CB_Txt3a.style.visibility = "hidden"; + CB_Txt4.style.visibility = "hidden"; + CB_Txt.innerHTML = ""; + CB_Txt3.innerHTML = ""; + CB_Txt3a.innerHTML = ""; + CB_Txt4.innerHTML = ""; + CB_Img.src = ""; + CB_ImgWidth = CB_WinBaseW; + CB_ImgHeight = CB_WinBaseH - CB_TextH; + CB_ImgCont.style.height = CB_ImgHeight + 2 * CB_ImgBorder + "px"; + CB_Img.style.display = "none"; + CB_Win.style.visibility = "hidden"; + CB_HideContent.onclick = ""; + CB_iFr.src = ""; + CB_iFr.style.top = "0px"; + CB_iFr.style.left = "0px"; + CB_iFr.style.width = "0px"; + CB_iFr.style.height = "0px"; + CB_ShowDocument(); + if (slideshowMusic == null) { + //do nothing + }else{ + player.onStopButtonClick(); + } + + soond=null; +// closeZoom(); + zoomSet=0; + return; + } + + function CB_ShowDocument() { + if (CB_Hide > 0) { + CB_HideContent.style.opacity = CB_Hide / 100; + CB_HideContent.style.filter = "alpha(opacity=" + CB_Hide + ")"; + CB_Hide -= CB_OpacityStep; + CB_Blur = setTimeout("CB_ShowDocument()", 5); + } else { + CB_HideContent.style.visibility = "hidden"; + CB_HideContent.style.width = "0px"; + CB_HideContent.style.height = "0px"; + if (CB_HideOpacity != 0) { + clearTimeout(CB_Blur); + } + CB_ClearBox = "ki"; + return; + } + } + + function getDocumentSize() { + this.DocSizeX = 0; + this.DocSizeY = 0; + if (window.innerWidth && window.scrollMaxX) { + DocSizeX = window.innerWidth + window.scrollMaxX; + DocSizeY = window.innerHeight + window.scrollMaxY; + } else if (document.body.scrollWidth > document.body.offsetWidth) { + DocSizeX = document.body.scrollWidth; + DocSizeY = document.body.scrollHeight; + } else { + DocSizeX = document.body.offsetWidth; + DocSizeY = document.body.offsetHeight; + } + if (navigator.userAgent.indexOf("MSIE") != -1 || + navigator.userAgent.indexOf("Opera") != -1) { + DocSizeX = document.body.scrollWidth; + DocSizeY = document.body.scrollHeight; + } + if (navigator.userAgent.indexOf("Firefox") != -1 || + navigator.userAgent.indexOf("Netscape") != -1) { + DocSizeX = BrSizeX + window.scrollMaxX; + DocSizeY = BrSizeY + window.scrollMaxY; + } + return; + } + + function getBrowserSize() { + this.BrSizeX = 0; + this.BrSizeY = 0; + if (document.documentElement && + (document.documentElement.clientWidth || + document.documentElement.clientHeight)) { + BrSizeX = document.documentElement.clientWidth; + BrSizeY = document.documentElement.clientHeight; + } else if (typeof window.innerWidth == "number") { + BrSizeX = window.innerWidth; + BrSizeY = window.innerHeight; + } else if (document.body && + (document.body.clientWidth || document.body.clientHeight)) { + BrSizeX = document.body.clientWidth; + BrSizeY = document.body.clientHeight; + return; + } + if (navigator.userAgent.indexOf("Opera") != -1) { + BrSizeX = document.documentElement.clientWidth; + BrSizeY = window.innerHeight; + } + if (document.compatMode != undefined) { + if (document.compatMode.match("Back") && + navigator.userAgent.indexOf("Firefox") != -1) { + BrSizeY = document.body.clientHeight; + } + } + return; + } + + function getScrollPosition() { + this.DocScrX = 0; + this.DocScrY = 0; + if (typeof window.pageYOffset == "number") { + DocScrY = window.pageYOffset; + DocScrX = window.pageXOffset; + } else if (document.body && + (document.body.scrollLeft || document.body.scrollTop)) { + DocScrY = document.body.scrollTop; + DocScrX = document.body.scrollLeft; + } else if (document.documentElement && + (document.documentElement.scrollLeft || + document.documentElement.scrollTop)) { + DocScrY = document.documentElement.scrollTop; + DocScrX = document.documentElement.scrollLeft; + } + return; + } + + function CB_pngFixIE() { + var s, i, j; + var a = new Array; + a.push(document.getElementById("CB_CloseWindow")); + a.push(document.getElementById("CB_SlideShowS")); + a.push(document.getElementById("CB_SlideShowP")); + for (i = 0; i < a.length; i++) { + s = a[i].getAttribute("src"); + if (s.toLowerCase().indexOf(".png") != -1) { + a[i].src = CB_PicDir + "blank.gif"; + a[i].style.filter += "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + s + "', sizingMethod=image);"; + } + } + for (i = 0; i < document.styleSheets.length; i++) { + if (document.styleSheets[i].href.match("clearbox.css")) { + var b = document.styleSheets[i].href.lastIndexOf("/"); + var c = b != -1 ? document.styleSheets[i].href.substring(0, b + 1) : ""; + for (j = 0; j < document.styleSheets[i].rules.length; j++) { + var d = document.styleSheets[i].rules[j].style; + if (d.backgroundImage.toLowerCase().indexOf(".png") != -1) { + var e = d.backgroundImage.substring(4, d.backgroundImage.length - 1); + if (e.indexOf("http://") != 0 && + e.indexOf("/") != 0) { + e = c + e; + d.backgroundImage = "none"; + d.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + e + "', sizingMethod='crop');"; + } + } + } + } + } + } + + +// --------------------------------------------------- + +function showFlash(){ + var flashObjects = document.getElementsByTagName("object"); + for (i = 0; i < flashObjects.length; i++) { + flashObjects[i].style.visibility = "visible"; + } + + var flashEmbeds = document.getElementsByTagName("embed"); + for (i = 0; i < flashEmbeds.length; i++) { + flashEmbeds[i].style.visibility = "visible"; + } +} + +// --------------------------------------------------- + + +function hideFlash(){ + var flashObjects = document.getElementsByTagName("object"); + for (i = 0; i < flashObjects.length; i++) { + flashObjects[i].style.visibility = "hidden"; + } + + var flashEmbeds = document.getElementsByTagName("embed"); + for (i = 0; i < flashEmbeds.length; i++) { + flashEmbeds[i].style.visibility = "hidden"; + } +} + + +/*------------------------------Drag and Drop - quirksmode----------------------------------------------*/ + +dragDrop = { + keyHTML: '<a href="#" class="keyLink">#</a>', + keySpeed: 10, // pixels per keypress event + initialMouseX: undefined, + initialMouseY: undefined, + startX: undefined, + startY: undefined, + dXKeys: undefined, + dYKeys: undefined, + draggedObject: undefined, + + initElement: function (element) { +/* + if (typeof element == 'string') + element = document.getElementById(element); + element = document.getElementById(element); +*/ + if (CB_ZoomP.style.display == "block") { + element.onmousedown = dragDrop.startDragMouse; + } +/* + element.innerHTML += dragDrop.keyHTML; + var links = element.getElementsByTagName('a'); + var lastLink = links[links.length-1]; + lastLink.relatedElement = element; + lastLink.onclick = dragDrop.startDragKeys; +*/ + }, + + startDragMouse: function (e) { + dragDrop.startDrag(CB_Win); + var evt = e || window.event; + dragDrop.initialMouseX = evt.clientX; + dragDrop.initialMouseY = evt.clientY; + addEventSimple(document,'mousemove',dragDrop.dragMouse); + addEventSimple(document,'mouseup',dragDrop.releaseElement); + return false; + }, + + startDragKeys: function () { + dragDrop.startDrag(this.relatedElement); + dragDrop.dXKeys = dragDrop.dYKeys = 0; + addEventSimple(document,'keydown',dragDrop.dragKeys); + addEventSimple(document,'keypress',dragDrop.switchKeyEvents); + this.blur(); + return false; + }, + + startDrag: function (obj) { + if (dragDrop.draggedObject) + dragDrop.releaseElement(); + if (IE){ + dragDrop.startX = (obj.offsetLeft+(CB_ImgWidthOld + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + dragDrop.startY = ((obj.offsetTop-document.documentElement.scrollTop)+(CB_ieRPBug + CB_ImgHeightOld + CB_TextH + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + }else{ + // dragDrop.startX = (obj.offsetLeft)+CB_ieRPBug ; + // dragDrop.startY = (obj.offsetTop)+CB_ieRPBug ; + dragDrop.startX = (obj.offsetLeft+(CB_ImgWidthOld + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + dragDrop.startY = ((obj.offsetTop-document.documentElement.scrollTop)+(CB_ieRPBug + CB_ImgHeightOld + CB_TextH + 2 * (CB_RoundPix + CB_ImgBorder + CB_Padd)) / 2); + + } + dragDrop.draggedObject = obj; + obj.className += ' dragged'; + }, + + dragMouse: function (e) { + var evt = e || window.event; + var dX = evt.clientX - dragDrop.initialMouseX; + var dY = evt.clientY - dragDrop.initialMouseY; + dragDrop.setPosition(dX,dY); + return false; + }, + + dragKeys: function(e) { + var evt = e || window.event; + var key = evt.keyCode; + switch (key) { + case 37: // left + case 63234: + dragDrop.dXKeys -= dragDrop.keySpeed; + break; + + case 38: // up + case 63232: + dragDrop.dYKeys -= dragDrop.keySpeed; + break; + + case 39: // right + case 63235: + dragDrop.dXKeys += dragDrop.keySpeed; + break; + + case 40: // down + case 63233: + dragDrop.dYKeys += dragDrop.keySpeed; + break; + + case 13: // enter + case 27: // escape + dragDrop.releaseElement(); + return false; + + default: + return true; + } + + dragDrop.setPosition(dragDrop.dXKeys,dragDrop.dYKeys); + if (evt.preventDefault) // also solves problem in Saf; keypress part of default ??? + evt.preventDefault(); + return false; + }, + + setPosition: function (dx,dy) { + dragDrop.draggedObject.style.left = dragDrop.startX + dx + 'px'; + dragDrop.draggedObject.style.top = dragDrop.startY + dy + 'px'; + }, + + switchKeyEvents: function () { + // for Opera and Safari 1.3 + removeEventSimple(document,'keydown',dragDrop.dragKeys); + removeEventSimple(document,'keypress',dragDrop.switchKeyEvents); + addEventSimple(document,'keypress',dragDrop.dragKeys); + + }, + + + releaseElement: function() { + removeEventSimple(document,'mousemove',dragDrop.dragMouse); + removeEventSimple(document,'mouseup',dragDrop.releaseElement); + removeEventSimple(document,'keypress',dragDrop.dragKeys); + removeEventSimple(document,'keypress',dragDrop.switchKeyEvents); + removeEventSimple(document,'keydown',dragDrop.dragKeys); + dragDrop.draggedObject.className = dragDrop.draggedObject.className.replace(/dragged/,''); + dragDrop.draggedObject = null; + } +} + + +function addEventSimple(obj,evt,fn) { + if (obj.addEventListener) + obj.addEventListener(evt,fn,false); + else if (obj.attachEvent) + obj.attachEvent('on'+evt,fn); +} + +function removeEventSimple(obj,evt,fn) { + if (obj.removeEventListener) + obj.removeEventListener(evt,fn,false); + else if (obj.detachEvent) + obj.detachEvent('on'+evt,fn); +} + +// -------------------------------------------------------------------------------------- diff --git a/modules_v2/lightbox/js/swfobject.js b/modules_v2/lightbox/js/swfobject.js new file mode 100644 index 0000000000..083b9b1a06 --- /dev/null +++ b/modules_v2/lightbox/js/swfobject.js @@ -0,0 +1,145 @@ +/** + * SWFObject v1.4.3: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ + * + * SWFObject is (c) 2006 Geoff Stearns and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * **SWFObject is the SWF embed script formerly known as FlashObject. The name was changed for + * legal reasons. + */ +if(typeof deconcept=="undefined"){var deconcept=new Object();} +if(typeof deconcept.util=="undefined"){deconcept.util=new Object();} +if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();} +deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a,_b){ +if(!document.getElementById){return;} +this.DETECT_KEY=_b?_b:"detectflash"; +this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY); +this.params=new Object(); +this.variables=new Object(); +this.attributes=new Array(); +if(_1){this.setAttribute("swf",_1);} +if(id){this.setAttribute("id",id);} +if(w){this.setAttribute("width",w);} +if(h){this.setAttribute("height",h);} +if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));} +this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion(); +if(c){this.addParam("bgcolor",c);} +var q=_8?_8:"high"; +this.addParam("quality",q); +this.setAttribute("useExpressInstall",_7); +this.setAttribute("doExpressInstall",false); +var _d=(_9)?_9:window.location; +this.setAttribute("xiRedirectUrl",_d); +this.setAttribute("redirectUrl",""); +if(_a){this.setAttribute("redirectUrl",_a);}}; +deconcept.SWFObject.prototype={setAttribute:function(_e,_f){ +this.attributes[_e]=_f; +},getAttribute:function(_10){ +return this.attributes[_10]; +},addParam:function(_11,_12){ +this.params[_11]=_12; +},getParams:function(){ +return this.params; +},addVariable:function(_13,_14){ +this.variables[_13]=_14; +},getVariable:function(_15){ +return this.variables[_15]; +},getVariables:function(){ +return this.variables; +},getVariablePairs:function(){ +var _16=new Array(); +var key; +var _18=this.getVariables(); +for(key in _18){_16.push(key+"="+_18[key]);} +return _16; +},getSWFHTML:function(){ +var _19=""; +if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){ +if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");} +_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\""; +_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" "; +var _1a=this.getParams(); +for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";} +var _1c=this.getVariablePairs().join("&"); +if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";} +_19+="/>"; +}else{ +if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");} +_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\">"; +_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />"; +var _1d=this.getParams(); +for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";} +var _1f=this.getVariablePairs().join("&"); +if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";} +_19+="</object>";} +return _19; +},write:function(_20){ +if(this.getAttribute("useExpressInstall")){ +var _21=new deconcept.PlayerVersion([6,0,65]); +if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){ +this.setAttribute("doExpressInstall",true); +this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl"))); +document.title=document.title.slice(0,47)+" - Flash Player Installation"; +this.addVariable("MMdoctitle",document.title);}} +if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){ +var n=(typeof _20=="string")?document.getElementById(_20):_20; +n.innerHTML=this.getSWFHTML(); +return true; +}else{ +if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}} +return false;}}; +deconcept.SWFObjectUtil.getPlayerVersion=function(){ +var _23=new deconcept.PlayerVersion([0,0,0]); +if(navigator.plugins&&navigator.mimeTypes.length){ +var x=navigator.plugins["Shockwave Flash"]; +if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));} +}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");} +catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); +_23=new deconcept.PlayerVersion([6,0,21]); +axo.AllowScriptAccess="always"; +}catch(e){ +if(_23.major==6){return _23;}} +try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");} +catch(e){}} +if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}} +return _23;}; +deconcept.PlayerVersion=function(_27){ +this.major=_27[0]!=null?parseInt(_27[0]):0; +this.minor=_27[1]!=null?parseInt(_27[1]):0; +this.rev=_27[2]!=null?parseInt(_27[2]):0; +}; +deconcept.PlayerVersion.prototype.versionIsValid=function(fv){ +if(this.major<fv.major){return false;} +if(this.major>fv.major){return true;} +if(this.minor<fv.minor){return false;} +if(this.minor>fv.minor){return true;} +if(this.rev<fv.rev){return false;}return true;}; +deconcept.util={getRequestParameter:function(_29){ +var q=document.location.search||document.location.hash; +if(q){var _2b=q.substring(1).split("&"); +for(var i=0;i<_2b.length;i++){ +if(_2b[i].substring(0,_2b[i].indexOf("="))==_29){ +return _2b[i].substring((_2b[i].indexOf("=")+1));}}} +return "";}}; +deconcept.SWFObjectUtil.cleanupSWFs=function(){ +var _2d=document.getElementsByTagName("OBJECT"); +if(_2d.length>0){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};} +for(var i=0;i<_2d.length;i++){ +_2d[i].style.display="none"; +for(var x in _2d[i]){ +if(typeof _2d[i][x]=="function"){_2d[i][x]=function(){};}}}}; +if(typeof window.onbeforeunload=="function"){ +var oldBeforeUnload=window.onbeforeunload; +window.onbeforeunload=function(){ +deconcept.SWFObjectUtil.cleanupSWFs(); +oldBeforeUnload();}; +}else{window.onbeforeunload=deconcept.SWFObjectUtil.cleanupSWFs;} +if(Array.prototype.push==null){ +Array.prototype.push=function(_30){ +this[this.length]=_30; +return this.length;};} + +var getQueryParamValue=deconcept.util.getRequestParameter; +var FlashObject=deconcept.SWFObject; +var SWFObject=deconcept.SWFObject; + diff --git a/modules_v2/lightbox/js/tip_balloon.js b/modules_v2/lightbox/js/tip_balloon.js new file mode 100644 index 0000000000..0b0e476930 --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon.js @@ -0,0 +1,231 @@ +/* +tip_balloon.js v. 1.51 + +The latest version is available at +http://www.walterzorn.com +or http://www.devira.com +or http://www.walterzorn.de + +Initial author: Walter Zorn +Last modified: 3.6.2008 + +Extension for the tooltip library wz_tooltip.js. +Implements balloon tooltips. +*/ + +// Make sure that the core file wz_tooltip.js is included first +if(typeof config == "undefined") + alert("Error:\nThe core tooltip script file 'wz_tooltip.js' must be included first, before the plugin files!"); + +// Here we define new global configuration variable(s) (as members of the +// predefined "config." class). +// From each of these config variables, wz_tooltip.js will automatically derive +// a command which can be passed to Tip() or TagToTip() in order to customize +// tooltips individually. These command names are just the config variable +// name(s) translated to uppercase, +// e.g. from config. Balloon a command BALLOON will automatically be +// created. + +//=================== GLOBAL TOOPTIP CONFIGURATION =========================// + +config. Balloon = false // true or false - set to true if you want this to be the default behaviour +config. BalloonImgPath = WT_MODULES_DIR+"lightbox/js/tip_balloon/" // Path to images (border, corners, stem), in quotes. Path must be relative to your HTML file. + +// Sizes of balloon images +config. BalloonEdgeSize = 6 // Integer - sidelength of quadratic corner images +config. BalloonStemWidth = 15 // Integer +config. BalloonStemHeight = 19 // Integer +config. BalloonStemOffset = -7 // Integer - horizontal offset of left stem edge from mouse (recommended: -stemwidth/2 to center the stem above the mouse) + +//======= END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW ==============// + + + + + +// Create a new tt_Extension object (make sure that the name of that object, +// here balloon, is unique amongst the extensions available for wz_tooltips.js): +var balloon = new tt_Extension(); + +// Implement extension eventhandlers on which our extension should react + +balloon.OnLoadConfig = function() +{ + if(tt_aV[BALLOON]) + { + // Turn off native style properties which are not appropriate + balloon.padding = Math.max(tt_aV[PADDING] - tt_aV[BALLOONEDGESIZE], 0); + balloon.width = tt_aV[WIDTH]; + //if(tt_bBoxOld) + // balloon.width += (balloon.padding << 1); + tt_aV[BORDERWIDTH] = 0; + tt_aV[WIDTH] = 0; + tt_aV[PADDING] = 0; + tt_aV[BGCOLOR] = ""; + tt_aV[BGIMG] = ""; + tt_aV[SHADOW] = false; + // Append slash to img path if missing + if(tt_aV[BALLOONIMGPATH].charAt(tt_aV[BALLOONIMGPATH].length - 1) != '/') + tt_aV[BALLOONIMGPATH] += "/"; + return true; + } + return false; +}; + +balloon.OnCreateContentString = function() +{ + if(!tt_aV[BALLOON]) + return false; + + var aImg, sImgZ, sCssCrn, sVaT, sVaB, sCssImg; + + // Cache balloon images in advance: + // Either use the pre-cached default images... + if(tt_aV[BALLOONIMGPATH] == config.BalloonImgPath) + aImg = balloon.aDefImg; + // ...or load images from different directory + else + aImg = Balloon_CacheImgs(tt_aV[BALLOONIMGPATH]); + sCssCrn = ' style="position:relative;width:' + tt_aV[BALLOONEDGESIZE] + 'px;padding:0px;margin:0px;overflow:hidden;line-height:0px;'; + sVaT = 'vertical-align:top;" valign="top"'; + sVaB = 'vertical-align:bottom;" valign="bottom"'; + sCssImg = 'padding:0px;margin:0px;border:0px;'; + sImgZ = '" style="' + sCssImg + '" />'; + + tt_sContent = '<table border="0" cellpadding="0" cellspacing="0" style="width:auto;padding:0px;margin:0px;left:0px;top:0px;"><tr>' + // Left-top corner + + '<td' + sCssCrn + sVaB + '>' + + '<img src="' + aImg[1].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ + + '</td>' + // Top border + + '<td valign="bottom" style="position:relative;padding:0px;margin:0px;overflow:hidden;">' + + '<img id="bALlOOnT" style="position:relative;top:1px;z-index:1;display:none;' + sCssImg + '" src="' + aImg[9].src + '" width="' + tt_aV[BALLOONSTEMWIDTH] + '" height="' + tt_aV[BALLOONSTEMHEIGHT] + '" />' + + '<div style="position:relative;z-index:0;padding:0px;margin:0px;overflow:hidden;width:auto;height:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[2].src + ');">' + + '</div>' + + '</td>' + // Right-top corner + + '<td' + sCssCrn + sVaB + '>' + + '<img src="' + aImg[3].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ + + '</td>' + + '</tr><tr>' + // Left border + + '<td style="position:relative;padding:0px;margin:0px;width:' + tt_aV[BALLOONEDGESIZE] + 'px;overflow:hidden;background-image:url(' + aImg[8].src + ');">' + // Redundant image for bugous old Geckos that won't auto-expand TD height to 100% + + '<img width="' + tt_aV[BALLOONEDGESIZE] + '" height="100%" src="' + aImg[8].src + sImgZ + + '</td>' + // Content + + '<td id="bALlO0nBdY" style="position:relative;line-height:normal;' + + ';background-image:url(' + aImg[0].src + ')' + + ';color:' + tt_aV[FONTCOLOR] + + ';font-family:' + tt_aV[FONTFACE] + + ';font-size:' + tt_aV[FONTSIZE] + + ';font-weight:' + tt_aV[FONTWEIGHT] + + ';text-align:' + tt_aV[TEXTALIGN] + + ';padding:' + balloon.padding + 'px' + + ';width:' + ((balloon.width > 0) ? (balloon.width + 'px') : 'auto') + + ';">' + tt_sContent + '</td>' + // Right border + + '<td style="position:relative;padding:0px;margin:0px;width:' + tt_aV[BALLOONEDGESIZE] + 'px;overflow:hidden;background-image:url(' + aImg[4].src + ');">' + // Image redundancy for bugous old Geckos that won't auto-expand TD height to 100% + + '<img width="' + tt_aV[BALLOONEDGESIZE] + '" height="100%" src="' + aImg[4].src + sImgZ + + '</td>' + + '</tr><tr>' + // Left-bottom corner + + '<td' + sCssCrn + sVaT + '>' + + '<img src="' + aImg[7].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ + + '</td>' + // Bottom border + + '<td valign="top" style="position:relative;padding:0px;margin:0px;overflow:hidden;">' + + '<div style="position:relative;left:0px;top:0px;padding:0px;margin:0px;overflow:hidden;width:auto;height:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[6].src + ');"></div>' + + '<img id="bALlOOnB" style="position:relative;top:-1px;left:2px;z-index:1;display:none;' + sCssImg + '" src="' + aImg[10].src + '" width="' + tt_aV[BALLOONSTEMWIDTH] + '" height="' + tt_aV[BALLOONSTEMHEIGHT] + '" />' + + '</td>' + // Right-bottom corner + + '<td' + sCssCrn + sVaT + '>' + + '<img src="' + aImg[5].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ + + '</td>' + + '</tr></table>'; + return true; +}; + +balloon.OnSubDivsCreated = function() +{ + if(tt_aV[BALLOON]) + { + balloon.iStem = tt_aV[ABOVE] * 1; + balloon.aStem = [tt_GetElt("bALlOOnT"), tt_GetElt("bALlOOnB")]; + balloon.aStem[balloon.iStem].style.display = "inline"; + if (balloon.width < -1) + Balloon_MaxW(); + return true; + } + return false; +}; + +// Display the stem appropriately +balloon.OnMoveAfter = function() +{ + if(tt_aV[BALLOON]) + { + var iStem = (tt_aV[ABOVE] != tt_bJmpVert) * 1; + + // Tooltip position vertically flipped? + if(iStem != balloon.iStem) + { + // Display opposite stem + balloon.aStem[balloon.iStem].style.display = "none"; + balloon.aStem[iStem].style.display = "inline"; + balloon.iStem = iStem; + } + + balloon.aStem[iStem].style.left = Balloon_CalcStemX() + "px"; + return true; + } + return false; +}; + +function Balloon_CalcStemX() +{ + var x = tt_musX - tt_x + tt_aV[BALLOONSTEMOFFSET] - tt_aV[BALLOONEDGESIZE]; + return Math.max(Math.min(x, tt_w - tt_aV[BALLOONSTEMWIDTH] - (tt_aV[BALLOONEDGESIZE] << 1) - 2), 2); +} + +function Balloon_CacheImgs(sPath) +{ + var asImg = ["background", "lt", "t", "rt", "r", "rb", "b", "lb", "l", "stemt", "stemb"], + n = asImg.length, + aImg = new Array(n), + img; + + while(n) + {--n; + img = aImg[n] = new Image(); + img.src = sPath + asImg[n] + ".gif"; // Change to ".png" if you want to use PNG images + } + return aImg; +} + +function Balloon_MaxW() +{ + var bdy = tt_GetElt("bALlO0nBdY"); + + if (bdy) + { + var iAdd = tt_bBoxOld ? (balloon.padding << 1) : 0, w = tt_GetDivW(bdy); + if (w > -balloon.width + iAdd) + bdy.style.width = (-balloon.width + iAdd) + "px"; + } +} + +// This mechanism pre-caches the default images specified by +// congif.BalloonImgPath, so, whenever a balloon tip using these default images +// is created, no further server connection is necessary. +function Balloon_PreCacheDefImgs() +{ + // Append slash to img path if missing + if(config.BalloonImgPath.charAt(config.BalloonImgPath.length - 1) != '/') + config.BalloonImgPath += "/"; + // Preload default images into array + balloon.aDefImg = Balloon_CacheImgs(config.BalloonImgPath); +} + +Balloon_PreCacheDefImgs(); diff --git a/modules_v2/lightbox/js/tip_balloon/b.gif b/modules_v2/lightbox/js/tip_balloon/b.gif Binary files differnew file mode 100644 index 0000000000..ff0c04b250 --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/b.gif diff --git a/modules_v2/lightbox/js/tip_balloon/background.gif b/modules_v2/lightbox/js/tip_balloon/background.gif Binary files differnew file mode 100644 index 0000000000..cb61e7ffab --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/background.gif diff --git a/modules_v2/lightbox/js/tip_balloon/l.gif b/modules_v2/lightbox/js/tip_balloon/l.gif Binary files differnew file mode 100644 index 0000000000..14a68d93d2 --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/l.gif diff --git a/modules_v2/lightbox/js/tip_balloon/lb.gif b/modules_v2/lightbox/js/tip_balloon/lb.gif Binary files differnew file mode 100644 index 0000000000..713c3739a3 --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/lb.gif diff --git a/modules_v2/lightbox/js/tip_balloon/lt.gif b/modules_v2/lightbox/js/tip_balloon/lt.gif Binary files differnew file mode 100644 index 0000000000..93c71f465e --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/lt.gif diff --git a/modules_v2/lightbox/js/tip_balloon/r.gif b/modules_v2/lightbox/js/tip_balloon/r.gif Binary files differnew file mode 100644 index 0000000000..be041ff92b --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/r.gif diff --git a/modules_v2/lightbox/js/tip_balloon/rb.gif b/modules_v2/lightbox/js/tip_balloon/rb.gif Binary files differnew file mode 100644 index 0000000000..70b6834efc --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/rb.gif diff --git a/modules_v2/lightbox/js/tip_balloon/rt.gif b/modules_v2/lightbox/js/tip_balloon/rt.gif Binary files differnew file mode 100644 index 0000000000..2752a0ccb5 --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/rt.gif diff --git a/modules_v2/lightbox/js/tip_balloon/stemb.gif b/modules_v2/lightbox/js/tip_balloon/stemb.gif Binary files differnew file mode 100644 index 0000000000..92f2ad5153 --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/stemb.gif diff --git a/modules_v2/lightbox/js/tip_balloon/stemt.gif b/modules_v2/lightbox/js/tip_balloon/stemt.gif Binary files differnew file mode 100644 index 0000000000..d259a4aec5 --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/stemt.gif diff --git a/modules_v2/lightbox/js/tip_balloon/t.gif b/modules_v2/lightbox/js/tip_balloon/t.gif Binary files differnew file mode 100644 index 0000000000..6fec86f81a --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon/t.gif diff --git a/modules_v2/lightbox/js/tip_balloon_RTL.js b/modules_v2/lightbox/js/tip_balloon_RTL.js new file mode 100644 index 0000000000..661d60fbf1 --- /dev/null +++ b/modules_v2/lightbox/js/tip_balloon_RTL.js @@ -0,0 +1,233 @@ +/* +tip_balloon.js v. 1.51 + +The latest version is available at +http://www.walterzorn.com +or http://www.devira.com +or http://www.walterzorn.de + +Initial author: Walter Zorn +Last modified: 3.6.2008 + +Extension for the tooltip library wz_tooltip.js. +Implements balloon tooltips. +*/ + +// Make sure that the core file wz_tooltip.js is included first +if(typeof config == "undefined") + alert("Error:\nThe core tooltip script file 'wz_tooltip.js' must be included first, before the plugin files!"); + +// Here we define new global configuration variable(s) (as members of the +// predefined "config." class). +// From each of these config variables, wz_tooltip.js will automatically derive +// a command which can be passed to Tip() or TagToTip() in order to customize +// tooltips individually. These command names are just the config variable +// name(s) translated to uppercase, +// e.g. from config. Balloon a command BALLOON will automatically be +// created. + +//=================== GLOBAL TOOPTIP CONFIGURATION =========================// + +config. Balloon = false // true or false - set to true if you want this to be the default behaviour +config. BalloonImgPath = WT_MODULES_DIR+"lightbox/js/tip_balloon/" // Path to images (border, corners, stem), in quotes. Path must be relative to your HTML file. + +// Sizes of balloon images +config. BalloonEdgeSize = 6 // Integer - sidelength of quadratic corner images +config. BalloonStemWidth = 15 // Integer +config. BalloonStemHeight = 19 // Integer +config. BalloonStemOffset = -7 // Integer - horizontal offset of left stem edge from mouse (recommended: -stemwidth/2 to center the stem above the mouse) + +//======= END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW ==============// + + + + + +// Create a new tt_Extension object (make sure that the name of that object, +// here balloon, is unique amongst the extensions available for wz_tooltips.js): +var balloon = new tt_Extension(); + +// Implement extension eventhandlers on which our extension should react + +balloon.OnLoadConfig = function() +{ + if(tt_aV[BALLOON]) + { + // Turn off native style properties which are not appropriate + balloon.padding = Math.max(tt_aV[PADDING] - tt_aV[BALLOONEDGESIZE], 0); + balloon.width = tt_aV[WIDTH]; + //if(tt_bBoxOld) + // balloon.width += (balloon.padding << 1); + tt_aV[BORDERWIDTH] = 0; + tt_aV[WIDTH] = 0; + tt_aV[PADDING] = 0; + tt_aV[BGCOLOR] = ""; + tt_aV[BGIMG] = ""; + tt_aV[SHADOW] = false; + // Append slash to img path if missing + if(tt_aV[BALLOONIMGPATH].charAt(tt_aV[BALLOONIMGPATH].length - 1) != '/') + tt_aV[BALLOONIMGPATH] += "/"; + return true; + } + return false; +}; + +balloon.OnCreateContentString = function() +{ + if(!tt_aV[BALLOON]) + return false; + + var aImg, sImgZ, sCssCrn, sVaT, sVaB, sCssImg; + + // Cache balloon images in advance: + // Either use the pre-cached default images... + if(tt_aV[BALLOONIMGPATH] == config.BalloonImgPath) + aImg = balloon.aDefImg; + // ...or load images from different directory + else + aImg = Balloon_CacheImgs(tt_aV[BALLOONIMGPATH]); + sCssCrn = ' style="position:relative;width:' + tt_aV[BALLOONEDGESIZE] + 'px;padding:0px;margin:0px;overflow:hidden;line-height:0px;'; + sVaT = 'vertical-align:top;" valign="top"'; + sVaB = 'vertical-align:bottom;" valign="bottom"'; + sCssImg = 'padding:0px;margin:0px;border:0px;'; + sImgZ = '" style="' + sCssImg + '" />'; + + tt_sContent = '<table border="0" cellpadding="0" cellspacing="0" style="width:auto;padding:0px;margin:0px;left:0px;top:0px;"><tr>' + // Left-top corner + + '<td' + sCssCrn + sVaB + '>' + + '<img src="' + aImg[3].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ + + '</td>' + // Top border + + '<td valign="bottom" style="position:relative;padding:0px;margin:0px;overflow:hidden;">' + + '<img id="bALlOOnT" style="position:relative;top:1px;z-index:1;display:none;' + sCssImg + '" src="' + aImg[9].src + '" width="' + tt_aV[BALLOONSTEMWIDTH] + '" height="' + tt_aV[BALLOONSTEMHEIGHT] + '" />' + + '<div style="position:relative;z-index:0;padding:0px;margin:0px;overflow:hidden;width:auto;height:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[2].src + ');">' + + '</div>' + + '</td>' + // Right-top corner + + '<td' + sCssCrn + sVaB + '>' + + '<img src="' + aImg[1].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ + + '</td>' + + '</tr><tr>' + // Left border + + '<td style="position:relative;padding:0px;margin:0px;width:' + tt_aV[BALLOONEDGESIZE] + 'px;overflow:hidden;background-image:url(' + aImg[4].src + ');">' + // Redundant image for bugous old Geckos that won't auto-expand TD height to 100% + + '<img width="' + tt_aV[BALLOONEDGESIZE] + '" height="100%" src="' + aImg[4].src + sImgZ + + '</td>' + // Content + + '<td id="bALlO0nBdY" style="position:relative;line-height:normal;' + + ';background-image:url(' + aImg[0].src + ')' + + ';color:' + tt_aV[FONTCOLOR] + + ';font-family:' + tt_aV[FONTFACE] + + ';font-size:' + tt_aV[FONTSIZE] + + ';font-weight:' + tt_aV[FONTWEIGHT] + + ';text-align:' + tt_aV[TEXTALIGN] + + ';padding:' + balloon.padding + 'px' + + ';width:' + ((balloon.width > 0) ? (balloon.width + 'px') : 'auto') + + ';">' + tt_sContent + '</td>' + // Right border + + '<td style="position:relative;padding:0px;margin:0px;width:' + tt_aV[BALLOONEDGESIZE] + 'px;overflow:hidden;background-image:url(' + aImg[8].src + ');">' + // Image redundancy for bugous old Geckos that won't auto-expand TD height to 100% + + '<img width="' + tt_aV[BALLOONEDGESIZE] + '" height="100%" src="' + aImg[8].src + sImgZ + + '</td>' + + '</tr><tr>' + // Left-bottom corner + + '<td' + sCssCrn + sVaT + '>' + + '<img src="' + aImg[5].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ + + '</td>' + // Bottom border + + '<td valign="top" style="position:relative;padding:0px;margin:0px;overflow:hidden;">' + + '<div style="position:relative;left:0px;top:0px;padding:0px;margin:0px;overflow:hidden;width:auto;height:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[6].src + ');"></div>' + + '<img id="bALlOOnB" style="position:relative;top:-1px;left:2px;z-index:1;display:none;' + sCssImg + '" src="' + aImg[10].src + '" width="' + tt_aV[BALLOONSTEMWIDTH] + '" height="' + tt_aV[BALLOONSTEMHEIGHT] + '" />' + + '</td>' + // Right-bottom corner + + '<td' + sCssCrn + sVaT + '>' + + '<img src="' + aImg[7].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ + + '</td>' + + '</tr></table>'; + return true; +}; + +balloon.OnSubDivsCreated = function() +{ + if(tt_aV[BALLOON]) + { + balloon.iStem = tt_aV[ABOVE] * 1; + balloon.aStem = [tt_GetElt("bALlOOnT"), tt_GetElt("bALlOOnB")]; + balloon.aStem[balloon.iStem].style.display = "inline"; + if (balloon.width < -1) + Balloon_MaxW(); + return true; + } + return false; +}; + +// Display the stem appropriately +balloon.OnMoveAfter = function() +{ + if(tt_aV[BALLOON]) + { + var iStem = (tt_aV[ABOVE] != tt_bJmpVert) * 1; + + // Tooltip position vertically flipped? + if(iStem != balloon.iStem) + { + // Display opposite stem + balloon.aStem[balloon.iStem].style.display = "none"; + balloon.aStem[iStem].style.display = "inline"; + balloon.iStem = iStem; + } + + balloon.aStem[iStem].style.left = Balloon_CalcStemX() + "px"; + return true; + } + return false; +}; + +function Balloon_CalcStemX() +{ + // var x = tt_musX - tt_x + tt_aV[BALLOONSTEMOFFSET] - tt_aV[BALLOONEDGESIZE]; + // return Math.max(Math.min(x, tt_w - tt_aV[BALLOONSTEMWIDTH] - (tt_aV[BALLOONEDGESIZE] << 1) - 2), 2); + var x = -tt_musX - tt_x + tt_aV[BALLOONSTEMOFFSET] - tt_aV[BALLOONEDGESIZE]; + return Math.max(Math.min(x, tt_w - tt_aV[BALLOONSTEMWIDTH] - (tt_aV[BALLOONEDGESIZE] << 1) - 2), -2); +} + +function Balloon_CacheImgs(sPath) +{ + var asImg = ["background", "lt", "t", "rt", "r", "rb", "b", "lb", "l", "stemt", "stemb"], + n = asImg.length, + aImg = new Array(n), + img; + + while(n) + {--n; + img = aImg[n] = new Image(); + img.src = sPath + asImg[n] + ".gif"; // Change to ".png" if you want to use PNG images + } + return aImg; +} + +function Balloon_MaxW() +{ + var bdy = tt_GetElt("bALlO0nBdY"); + + if (bdy) + { + var iAdd = tt_bBoxOld ? (balloon.padding << 1) : 0, w = tt_GetDivW(bdy); + if (w > -balloon.width + iAdd) + bdy.style.width = (-balloon.width + iAdd) + "px"; + } +} + +// This mechanism pre-caches the default images specified by +// congif.BalloonImgPath, so, whenever a balloon tip using these default images +// is created, no further server connection is necessary. +function Balloon_PreCacheDefImgs() +{ + // Append slash to img path if missing + if(config.BalloonImgPath.charAt(config.BalloonImgPath.length - 1) != '/') + config.BalloonImgPath += "/"; + // Preload default images into array + balloon.aDefImg = Balloon_CacheImgs(config.BalloonImgPath); +} + +Balloon_PreCacheDefImgs(); diff --git a/modules_v2/lightbox/js/tip_centerwindow.js b/modules_v2/lightbox/js/tip_centerwindow.js new file mode 100644 index 0000000000..d2b1d0d92d --- /dev/null +++ b/modules_v2/lightbox/js/tip_centerwindow.js @@ -0,0 +1,104 @@ +/* +tip_centerwindow.js v. 1.21 + +The latest version is available at +http://www.walterzorn.com +or http://www.devira.com +or http://www.walterzorn.de + +Initial author: Walter Zorn +Last modified: 3.6.2008 + +Extension for the tooltip library wz_tooltip.js. +Centers a sticky tooltip in the window's visible clientarea, +optionally even if the window is being scrolled or resized. +*/ + +// Make sure that the core file wz_tooltip.js is included first +if(typeof config == "undefined") + alert("Error:\nThe core tooltip script file 'wz_tooltip.js' must be included first, before the plugin files!"); + +// Here we define new global configuration variable(s) (as members of the +// predefined "config." class). +// From each of these config variables, wz_tooltip.js will automatically derive +// a command which can be passed to Tip() or TagToTip() in order to customize +// tooltips individually. These command names are just the config variable +// name(s) translated to uppercase, +// e.g. from config. CenterWindow a command CENTERWINDOW will automatically be +// created. + +//=================== GLOBAL TOOPTIP CONFIGURATION =========================// +config. CenterWindow = false // true or false - set to true if you want this to be the default behaviour +config. CenterAlways = false // true or false - recenter if window is resized or scrolled +//======= END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW ==============// + + +// Create a new tt_Extension object (make sure that the name of that object, +// here ctrwnd, is unique amongst the extensions available for +// wz_tooltips.js): +var ctrwnd = new tt_Extension(); + +// Implement extension eventhandlers on which our extension should react +ctrwnd.OnLoadConfig = function() +{ + if(tt_aV[CENTERWINDOW]) + { + // Permit CENTERWINDOW only if the tooltip is sticky + if(tt_aV[STICKY]) + { + if(tt_aV[CENTERALWAYS]) + { + // IE doesn't support style.position "fixed" + if(tt_ie) + tt_AddEvtFnc(window, "scroll", Ctrwnd_DoCenter); + else + tt_aElt[0].style.position = "fixed"; + tt_AddEvtFnc(window, "resize", Ctrwnd_DoCenter); + } + return true; + } + tt_aV[CENTERWINDOW] = false; + } + return false; +}; +// We react on the first OnMouseMove event to center the tip on that occasion +ctrwnd.OnMoveBefore = Ctrwnd_DoCenter; +ctrwnd.OnKill = function() +{ + if(tt_aV[CENTERWINDOW] && tt_aV[CENTERALWAYS]) + { + tt_RemEvtFnc(window, "resize", Ctrwnd_DoCenter); + if(tt_ie) + tt_RemEvtFnc(window, "scroll", Ctrwnd_DoCenter); + else + tt_aElt[0].style.position = "absolute"; + } + return false; +}; +// Helper function +function Ctrwnd_DoCenter() +{ + if(tt_aV[CENTERWINDOW]) + { + var x, y, dx, dy; + + // Here we use some functions and variables (tt_w, tt_h) which the + // extension API of wz_tooltip.js provides for us + if(tt_ie || !tt_aV[CENTERALWAYS]) + { + dx = tt_GetScrollX(); + dy = tt_GetScrollY(); + } + else + { + dx = 0; + dy = 0; + } + // Position the tip, offset from the center by OFFSETX and OFFSETY + x = (tt_GetClientW() - tt_w) / 2 + dx + tt_aV[OFFSETX]; + y = (tt_GetClientH() - tt_h) / 2 + dy + tt_aV[OFFSETY]; + tt_SetTipPos(x, y); + return true; + } + return false; +} diff --git a/modules_v2/lightbox/js/wz_tooltip.js b/modules_v2/lightbox/js/wz_tooltip.js new file mode 100644 index 0000000000..b301545afd --- /dev/null +++ b/modules_v2/lightbox/js/wz_tooltip.js @@ -0,0 +1,1259 @@ +/* This notice must be untouched at all times. +Copyright (c) 2002-2008 Walter Zorn. All rights reserved. + +wz_tooltip.js v. 5.11 + +The latest version is available at +http://www.walterzorn.com +or http://www.devira.com +or http://www.walterzorn.de + +Created 1.12.2002 by Walter Zorn (Web: http://www.walterzorn.com ) +Last modified: 22.5.2008 + +Easy-to-use cross-browser tooltips. +Just include the script at the beginning of the <body> section, and invoke +Tip('Tooltip text') from the desired HTML onmouseover eventhandlers, +and UnTip(), usually from the onmouseout eventhandlers, to hide the tip. +No container DIV required. +By default, width and height of tooltips are automatically adapted to content. +Is even capable of dynamically converting arbitrary HTML elements to tooltips +by calling TagToTip('ID_of_HTML_element_to_be_converted') instead of Tip(), +which means you can put important, search-engine-relevant stuff into tooltips. +Appearance & behaviour of tooltips can be individually configured +via commands passed to Tip() or TagToTip(). + +Tab Width: 4 +LICENSE: LGPL + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License (LGPL) as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library 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. + +For more details on the GNU Lesser General Public License, +see http://www.gnu.org/copyleft/lesser.html +*/ + +var config = new Object(); + + +//=================== GLOBAL TOOPTIP CONFIGURATION =========================// +var tt_Debug = true // false or true - recommended: false once you release your page to the public +var tt_Enabled = true // Allows to (temporarily) suppress tooltips, e.g. by providing the user with a button that sets this global variable to false +var TagsToTip = true // false or true - if true, HTML elements to be converted to tooltips via TagToTip() are automatically hidden; + // if false, you should hide those HTML elements yourself + +// For each of the following config variables there exists a command, which is +// just the variablename in uppercase, to be passed to Tip() or TagToTip() to +// configure tooltips individually. Individual commands override global +// configuration. Order of commands is arbitrary. +// Example: onmouseover="Tip('Tooltip text', LEFT, true, BGCOLOR, '#FF9900', FADEIN, 400)" + +config. Above = false // false or true - tooltip above mousepointer +config. BgColor = '#E2E7FF' // Background colour (HTML colour value, in quotes) +config. BgImg = '' // Path to background image, none if empty string '' +config. BorderColor = '#003099' +config. BorderStyle = 'solid' // Any permitted CSS value, but I recommend 'solid', 'dotted' or 'dashed' +config. BorderWidth = 1 +config. CenterMouse = false // false or true - center the tip horizontally below (or above) the mousepointer +config. ClickClose = false // false or true - close tooltip if the user clicks somewhere +config. ClickSticky = false // false or true - make tooltip sticky if user left-clicks on the hovered element while the tooltip is active +config. CloseBtn = false // false or true - closebutton in titlebar +config. CloseBtnColors = ['#990000', '#FFFFFF', '#DD3333', '#FFFFFF'] // [Background, text, hovered background, hovered text] - use empty strings '' to inherit title colours +config. CloseBtnText = ' X ' // Close button text (may also be an image tag) +config. CopyContent = true // When converting a HTML element to a tooltip, copy only the element's content, rather than converting the element by its own +config. Delay = 400 // Time span in ms until tooltip shows up +config. Duration = 0 // Time span in ms after which the tooltip disappears; 0 for infinite duration, < 0 for delay in ms _after_ the onmouseout until the tooltip disappears +config. FadeIn = 0 // Fade-in duration in ms, e.g. 400; 0 for no animation +config. FadeOut = 0 +config. FadeInterval = 30 // Duration of each fade step in ms (recommended: 30) - shorter is smoother but causes more CPU-load +config. Fix = null // Fixated position - x- an y-oordinates in brackets, e.g. [210, 480], or null for no fixation +config. FollowMouse = true // false or true - tooltip follows the mouse +config. FontColor = '#000044' +config. FontFace = 'Verdana,Geneva,sans-serif' +config. FontSize = '8pt' // E.g. '9pt' or '12px' - unit is mandatory +config. FontWeight = 'normal' // 'normal' or 'bold'; +config. Height = 0 // Tooltip height; 0 for automatic adaption to tooltip content, < 0 (e.g. -100) for a maximum for automatic adaption +config. JumpHorz = false // false or true - jump horizontally to other side of mouse if tooltip would extend past clientarea boundary +config. JumpVert = true // false or true - jump vertically " +config. Left = false // false or true - tooltip on the left of the mouse +config. OffsetX = 14 // Horizontal offset of left-top corner from mousepointer +config. OffsetY = 8 // Vertical offset +config. Opacity = 100 // Integer between 0 and 100 - opacity of tooltip in percent +config. Padding = 3 // Spacing between border and content +config. Shadow = false // false or true +config. ShadowColor = '#C0C0C0' +config. ShadowWidth = 5 +config. Sticky = false // false or true - fixate tip, ie. don't follow the mouse and don't hide on mouseout +config. TextAlign = 'left' // 'left', 'right' or 'justify' +config. Title = '' // Default title text applied to all tips (no default title: empty string '') +config. TitleAlign = 'left' // 'left' or 'right' - text alignment inside the title bar +config. TitleBgColor = '' // If empty string '', BorderColor will be used +config. TitleFontColor = '#FFFFFF' // Color of title text - if '', BgColor (of tooltip body) will be used +config. TitleFontFace = '' // If '' use FontFace (boldified) +config. TitleFontSize = '' // If '' use FontSize +config. TitlePadding = 2 +config. Width = 0 // Tooltip width; 0 for automatic adaption to tooltip content; < -1 (e.g. -240) for a maximum width for that automatic adaption; + // -1: tooltip width confined to the width required for the titlebar +//======= END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW ==============// + + + + +//===================== PUBLIC =============================================// +var CB_tt=""; +function TipTog() +{ + if (CB_tt!="open") { + tt_Tip(arguments, null); + CB_tt="open"; + }else{ + tt_HideInit(); + CB_tt="closed"; + } +} + + +function Tip() +{ + tt_Tip(arguments, null); +} +function TagToTip() +{ + var t2t = tt_GetElt(arguments[0]); + if(t2t) + tt_Tip(arguments, t2t); +} +function UnTip() +{ + tt_OpReHref(); + if(tt_aV[DURATION] < 0 && (tt_iState & 0x2)) + tt_tDurt.Timer("tt_HideInit()", -tt_aV[DURATION], true); + else if(!(tt_aV[STICKY] && (tt_iState & 0x2))) + tt_HideInit(); +} + +//================== PUBLIC PLUGIN API =====================================// +// Extension eventhandlers currently supported: +// OnLoadConfig, OnCreateContentString, OnSubDivsCreated, OnShow, OnMoveBefore, +// OnMoveAfter, OnHideInit, OnHide, OnKill + +var tt_aElt = new Array(10), // Container DIV, outer title & body DIVs, inner title & body TDs, closebutton SPAN, shadow DIVs, and IFRAME to cover windowed elements in IE +tt_aV = new Array(), // Caches and enumerates config data for currently active tooltip +tt_sContent, // Inner tooltip text or HTML +tt_scrlX = 0, tt_scrlY = 0, +tt_musX, tt_musY, +tt_over, +tt_x, tt_y, tt_w, tt_h; // Position, width and height of currently displayed tooltip + +function tt_Extension() +{ + tt_ExtCmdEnum(); + tt_aExt[tt_aExt.length] = this; + return this; +} +function tt_SetTipPos(x, y) +{ + var css = tt_aElt[0].style; + + tt_x = x; + tt_y = y; + css.left = x + "px"; + css.top = y + "px"; + if(tt_ie56) + { + var ifrm = tt_aElt[tt_aElt.length - 1]; + if(ifrm) + { + ifrm.style.left = css.left; + ifrm.style.top = css.top; + } + } +} +function tt_HideInit() +{ + if(tt_iState) + { + tt_ExtCallFncs(0, "HideInit"); + tt_iState &= ~0x4; + if(tt_flagOpa && tt_aV[FADEOUT]) + { + tt_tFade.EndTimer(); + if(tt_opa) + { + var n = Math.round(tt_aV[FADEOUT] / (tt_aV[FADEINTERVAL] * (tt_aV[OPACITY] / tt_opa))); + tt_Fade(tt_opa, tt_opa, 0, n); + return; + } + } + tt_tHide.Timer("tt_Hide();", 1, false); + } +} +function tt_Hide() +{ + if(tt_db && tt_iState) + { + tt_OpReHref(); + if(tt_iState & 0x2) + { + tt_aElt[0].style.visibility = "hidden"; + tt_ExtCallFncs(0, "Hide"); + } + tt_tShow.EndTimer(); + tt_tHide.EndTimer(); + tt_tDurt.EndTimer(); + tt_tFade.EndTimer(); + CB_tt="closed"; + if(!tt_op && !tt_ie) + { + tt_tWaitMov.EndTimer(); + tt_bWait = false; + } + if(tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY]) + tt_RemEvtFnc(document, "mouseup", tt_OnLClick); + tt_ExtCallFncs(0, "Kill"); + // In case of a TagToTip tooltip, hide converted DOM node and + // re-insert it into document + if(tt_t2t && !tt_aV[COPYCONTENT]) + { + tt_t2t.style.display = "none"; + tt_MovDomNode(tt_t2t, tt_aElt[6], tt_t2tDad); + } + tt_iState = 0; + tt_over = null; + tt_ResetMainDiv(); + if(tt_aElt[tt_aElt.length - 1]) + tt_aElt[tt_aElt.length - 1].style.display = "none"; + } +} +function tt_GetElt(id) +{ + return(document.getElementById ? document.getElementById(id) + : document.all ? document.all[id] + : null); +} +function tt_GetDivW(el) +{ + return(el ? (el.offsetWidth || el.style.pixelWidth || 0) : 0); +} +function tt_GetDivH(el) +{ + return(el ? (el.offsetHeight || el.style.pixelHeight || 0) : 0); +} +function tt_GetScrollX() +{ + return(window.pageXOffset || (tt_db ? (tt_db.scrollLeft || 0) : 0)); +} +function tt_GetScrollY() +{ + return(window.pageYOffset || (tt_db ? (tt_db.scrollTop || 0) : 0)); +} +function tt_GetClientW() +{ + return(document.body && (typeof(document.body.clientWidth) != tt_u) ? document.body.clientWidth + : (typeof(window.innerWidth) != tt_u) ? window.innerWidth + : tt_db ? (tt_db.clientWidth || 0) + : 0); +} +function tt_GetClientH() +{ + // Exactly this order seems to yield correct values in all major browsers + return(document.body && (typeof(document.body.clientHeight) != tt_u) ? document.body.clientHeight + : (typeof(window.innerHeight) != tt_u) ? window.innerHeight + : tt_db ? (tt_db.clientHeight || 0) + : 0); +} +function tt_GetEvtX(e) +{ + return (e ? ((typeof(e.pageX) != tt_u) ? e.pageX : (e.clientX + tt_scrlX)) : 0); +} +function tt_GetEvtY(e) +{ + return (e ? ((typeof(e.pageY) != tt_u) ? e.pageY : (e.clientY + tt_scrlY)) : 0); +} +function tt_AddEvtFnc(el, sEvt, PFnc) +{ + if(el) + { + if(el.addEventListener) + el.addEventListener(sEvt, PFnc, false); + else + el.attachEvent("on" + sEvt, PFnc); + } +} +function tt_RemEvtFnc(el, sEvt, PFnc) +{ + if(el) + { + if(el.removeEventListener) + el.removeEventListener(sEvt, PFnc, false); + else + el.detachEvent("on" + sEvt, PFnc); + } +} + +//====================== PRIVATE ===========================================// +var tt_aExt = new Array(), // Array of extension objects + +tt_db, tt_op, tt_ie, tt_ie56, tt_bBoxOld, // Browser flags +tt_body, +tt_ovr_, // HTML element the mouse is currently over +tt_flagOpa, // Opacity support: 1=IE, 2=Khtml, 3=KHTML, 4=Moz, 5=W3C +tt_maxPosX, tt_maxPosY, +tt_iState = 0, // Tooltip active |= 1, shown |= 2, move with mouse |= 4 +tt_opa, // Currently applied opacity +tt_bJmpVert, tt_bJmpHorz,// Tip temporarily on other side of mouse +tt_t2t, tt_t2tDad, // Tag converted to tip, and its parent element in the document +tt_elDeHref, // The tag from which we've removed the href attribute +// Timer +tt_tShow = new Number(0), tt_tHide = new Number(0), tt_tDurt = new Number(0), +tt_tFade = new Number(0), tt_tWaitMov = new Number(0), +tt_bWait = false, +tt_u = "undefined"; + + +function tt_Init() +{ + tt_MkCmdEnum(); + // Send old browsers instantly to hell + if(!tt_Browser() || !tt_MkMainDiv()) + return; + tt_IsW3cBox(); + tt_OpaSupport(); + tt_AddEvtFnc(window, "scroll", tt_OnScrl); + // IE doesn't fire onscroll event when switching to fullscreen; + // fix suggested by Yoav Karpeles 14.2.2008 + tt_AddEvtFnc(window, "resize", tt_OnScrl); + tt_AddEvtFnc(document, "mousemove", tt_Move); + // In Debug mode we search for TagToTip() calls in order to notify + // the user if they've forgotten to set the TagsToTip config flag + if(TagsToTip || tt_Debug) + tt_SetOnloadFnc(); + // Ensure the tip be hidden when the page unloads + tt_AddEvtFnc(window, "unload", tt_Hide); +} +// Creates command names by translating config variable names to upper case +function tt_MkCmdEnum() +{ + var n = 0; + for(var i in config) + eval("window." + i.toString().toUpperCase() + " = " + n++); + tt_aV.length = n; +} +function tt_Browser() +{ + var n, nv, n6, w3c; + + n = navigator.userAgent.toLowerCase(), + nv = navigator.appVersion; + tt_op = (document.defaultView && typeof(eval("w" + "indow" + "." + "o" + "p" + "er" + "a")) != tt_u); + tt_ie = n.indexOf("msie") != -1 && document.all && !tt_op; + if(tt_ie) + { + var ieOld = (!document.compatMode || document.compatMode == "BackCompat"); + tt_db = !ieOld ? document.documentElement : (document.body || null); + if(tt_db) + tt_ie56 = parseFloat(nv.substring(nv.indexOf("MSIE") + 5)) >= 5.5 + && typeof document.body.style.maxHeight == tt_u; + } + else + { + tt_db = document.documentElement || document.body || + (document.getElementsByTagName ? document.getElementsByTagName("body")[0] + : null); + if(!tt_op) + { + n6 = document.defaultView && typeof document.defaultView.getComputedStyle != tt_u; + w3c = !n6 && document.getElementById; + } + } + tt_body = (document.getElementsByTagName ? document.getElementsByTagName("body")[0] + : (document.body || null)); + if(tt_ie || n6 || tt_op || w3c) + { + if(tt_body && tt_db) + { + if(document.attachEvent || document.addEventListener) + return true; + } + else + tt_Err("wz_tooltip.js must be included INSIDE the body section," + + " immediately after the opening <body> tag.", false); + } + tt_db = null; + return false; +} +function tt_MkMainDiv() +{ + // Create the tooltip DIV + if(tt_body.insertAdjacentHTML) + tt_body.insertAdjacentHTML("afterBegin", tt_MkMainDivHtm()); + else if(typeof tt_body.innerHTML != tt_u && document.createElement && tt_body.appendChild) + tt_body.appendChild(tt_MkMainDivDom()); + if(window.tt_GetMainDivRefs /* FireFox Alzheimer */ && tt_GetMainDivRefs()) + return true; + tt_db = null; + return false; +} +function tt_MkMainDivHtm() +{ + return('<div id="WzTtDiV"></div>' + + (tt_ie56 ? ('<iframe id="WzTtIfRm" src="javascript:false" scrolling="no" frameborder="0" style="filter:Alpha(opacity=0);position:absolute;top:0px;left:0px;display:none;"></iframe>') + : '')); +} +function tt_MkMainDivDom() +{ + var el = document.createElement("div"); + if(el) + el.id = "WzTtDiV"; + return el; +} +function tt_GetMainDivRefs() +{ + tt_aElt[0] = tt_GetElt("WzTtDiV"); + if(tt_ie56 && tt_aElt[0]) + { + tt_aElt[tt_aElt.length - 1] = tt_GetElt("WzTtIfRm"); + if(!tt_aElt[tt_aElt.length - 1]) + tt_aElt[0] = null; + } + if(tt_aElt[0]) + { + var css = tt_aElt[0].style; + + css.visibility = "hidden"; + css.position = "absolute"; + css.overflow = "hidden"; + return true; + } + return false; +} +function tt_ResetMainDiv() +{ + var w = (window.screen && screen.width) ? screen.width : 10000; + + tt_SetTipPos(-w, 0); + tt_aElt[0].innerHTML = ""; + tt_aElt[0].style.width = (w - 1) + "px"; + tt_h = 0; +} +function tt_IsW3cBox() +{ + var css = tt_aElt[0].style; + + css.padding = "10px"; + css.width = "40px"; + tt_bBoxOld = (tt_GetDivW(tt_aElt[0]) == 40); + css.padding = "0px"; + tt_ResetMainDiv(); +} +function tt_OpaSupport() +{ + var css = tt_body.style; + + tt_flagOpa = (typeof(css.filter) != tt_u) ? 1 + : (typeof(css.KhtmlOpacity) != tt_u) ? 2 + : (typeof(css.KHTMLOpacity) != tt_u) ? 3 + : (typeof(css.MozOpacity) != tt_u) ? 4 + : (typeof(css.opacity) != tt_u) ? 5 + : 0; +} +// Ported from http://dean.edwards.name/weblog/2006/06/again/ +// (Dean Edwards et al.) +function tt_SetOnloadFnc() +{ + tt_AddEvtFnc(document, "DOMContentLoaded", tt_HideSrcTags); + tt_AddEvtFnc(window, "load", tt_HideSrcTags); + if(tt_body.attachEvent) + tt_body.attachEvent("onreadystatechange", + function() { + if(tt_body.readyState == "complete") + tt_HideSrcTags(); + } ); + if(/WebKit|KHTML/i.test(navigator.userAgent)) + { + var t = setInterval(function() { + if(/loaded|complete/.test(document.readyState)) + { + clearInterval(t); + tt_HideSrcTags(); + } + }, 10); + } +} +function tt_HideSrcTags() +{ + if(!window.tt_HideSrcTags || window.tt_HideSrcTags.done) + return; + window.tt_HideSrcTags.done = true; + if(!tt_HideSrcTagsRecurs(tt_body)) + tt_Err("There are HTML elements to be converted to tooltips.\nIf you" + + " want these HTML elements to be automatically hidden, you" + + " must edit wz_tooltip.js, and set TagsToTip in the global" + + " tooltip configuration to true.", true); +} +function tt_HideSrcTagsRecurs(dad) +{ + var ovr, asT2t; + // Walk the DOM tree for tags that have an onmouseover or onclick attribute + // containing a TagToTip('...') call. + // (.childNodes first since .children is bugous in Safari) + var a = dad.childNodes || dad.children || null; + + for(var i = a ? a.length : 0; i;) + {--i; + if(!tt_HideSrcTagsRecurs(a[i])) + return false; + ovr = a[i].getAttribute ? (a[i].getAttribute("onmouseover") || a[i].getAttribute("onclick")) + : (typeof a[i].onmouseover == "function") ? (a[i].onmouseover || a[i].onclick) + : null; + if(ovr) + { + asT2t = ovr.toString().match(/TagToTip\s*\(\s*'[^'.]+'\s*[\),]/); + if(asT2t && asT2t.length) + { + if(!tt_HideSrcTag(asT2t[0])) + return false; + } + } + } + return true; +} +function tt_HideSrcTag(sT2t) +{ + var id, el; + + // The ID passed to the found TagToTip() call identifies an HTML element + // to be converted to a tooltip, so hide that element + id = sT2t.replace(/.+'([^'.]+)'.+/, "$1"); + el = tt_GetElt(id); + if(el) + { + if(tt_Debug && !TagsToTip) + return false; + else + el.style.display = "none"; + } + else + tt_Err("Invalid ID\n'" + id + "'\npassed to TagToTip()." + + " There exists no HTML element with that ID.", true); + return true; +} +function tt_Tip(arg, t2t) +{ + if(!tt_db) + return; + if(tt_iState) + tt_Hide(); + if(!tt_Enabled) + return; + tt_t2t = t2t; + if(!tt_ReadCmds(arg)) + return; + tt_iState = 0x1 | 0x4; + tt_AdaptConfig1(); + tt_MkTipContent(arg); + tt_MkTipSubDivs(); + tt_FormatTip(); + tt_bJmpVert = false; + tt_bJmpHorz = false; + tt_maxPosX = tt_GetClientW() + tt_scrlX - tt_w - 1; + tt_maxPosY = tt_GetClientH() + tt_scrlY - tt_h - 1; + tt_AdaptConfig2(); + // Ensure the tip be shown and positioned before the first onmousemove + tt_OverInit(); + tt_ShowInit(); + tt_Move(); +} +function tt_ReadCmds(a) +{ + var i; + + // First load the global config values, to initialize also values + // for which no command is passed + i = 0; + for(var j in config) + tt_aV[i++] = config[j]; + // Then replace each cached config value for which a command is + // passed (ensure the # of command args plus value args be even) + if(a.length & 1) + { + for(i = a.length - 1; i > 0; i -= 2) + tt_aV[a[i - 1]] = a[i]; + return true; + } + tt_Err("Incorrect call of Tip() or TagToTip().\n" + + "Each command must be followed by a value.", true); + return false; +} +function tt_AdaptConfig1() +{ + tt_ExtCallFncs(0, "LoadConfig"); + // Inherit unspecified title formattings from body + if(!tt_aV[TITLEBGCOLOR].length) + tt_aV[TITLEBGCOLOR] = tt_aV[BORDERCOLOR]; + if(!tt_aV[TITLEFONTCOLOR].length) + tt_aV[TITLEFONTCOLOR] = tt_aV[BGCOLOR]; + if(!tt_aV[TITLEFONTFACE].length) + tt_aV[TITLEFONTFACE] = tt_aV[FONTFACE]; + if(!tt_aV[TITLEFONTSIZE].length) + tt_aV[TITLEFONTSIZE] = tt_aV[FONTSIZE]; + if(tt_aV[CLOSEBTN]) + { + // Use title colours for non-specified closebutton colours + if(!tt_aV[CLOSEBTNCOLORS]) + tt_aV[CLOSEBTNCOLORS] = new Array("", "", "", ""); + for(var i = 4; i;) + {--i; + if(!tt_aV[CLOSEBTNCOLORS][i].length) + tt_aV[CLOSEBTNCOLORS][i] = (i & 1) ? tt_aV[TITLEFONTCOLOR] : tt_aV[TITLEBGCOLOR]; + } + // Enforce titlebar be shown + if(!tt_aV[TITLE].length) + tt_aV[TITLE] = " "; + } + // Circumvents broken display of images and fade-in flicker in Geckos < 1.8 + if(tt_aV[OPACITY] == 100 && typeof tt_aElt[0].style.MozOpacity != tt_u && !Array.every) + tt_aV[OPACITY] = 99; + // Smartly shorten the delay for fade-in tooltips + if(tt_aV[FADEIN] && tt_flagOpa && tt_aV[DELAY] > 100) + tt_aV[DELAY] = Math.max(tt_aV[DELAY] - tt_aV[FADEIN], 100); +} +function tt_AdaptConfig2() +{ + if(tt_aV[CENTERMOUSE]) + { + tt_aV[OFFSETX] -= ((tt_w - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0)) >> 1); + tt_aV[JUMPHORZ] = false; + } +} +// Expose content globally so extensions can modify it +function tt_MkTipContent(a) +{ + if(tt_t2t) + { + if(tt_aV[COPYCONTENT]) + tt_sContent = tt_t2t.innerHTML; + else + tt_sContent = ""; + } + else + tt_sContent = a[0]; + tt_ExtCallFncs(0, "CreateContentString"); +} +function tt_MkTipSubDivs() +{ + var sCss = 'position:relative;margin:0px;padding:0px;border-width:0px;left:0px;top:0px;line-height:normal;width:auto;', + sTbTrTd = ' cellspacing="0" cellpadding="0" border="0" style="' + sCss + '"><tbody style="' + sCss + '"><tr><td '; + + tt_aElt[0].innerHTML = + ('' + + (tt_aV[TITLE].length ? + // BH change for line below enables close to be within a bubble area--------------------------------------- + // ('<div id="WzTiTl" style="position:relative;z-index:1;">' + // ------------------------------------------------------------------------------------------------------------------------ + ('<div id="WzTiTl" style="position:relative;left:-3px;top:20px;z-index:1;">' + + '<table id="WzTiTlTb"' + sTbTrTd + 'id="WzTiTlI" style="' + sCss + '">' + + tt_aV[TITLE] + + '</td>' + + (tt_aV[CLOSEBTN] ? + ('<td align="right" style="' + sCss + + 'text-align:right;">' + + '<span id="WzClOsE" style="position:relative;left:2px;padding-left:2px;padding-right:2px;' + + 'cursor:' + (tt_ie ? 'hand' : 'pointer') + + ';" onmouseover="tt_OnCloseBtnOver(1)" onmouseout="tt_OnCloseBtnOver(0)" onclick="tt_HideInit()">' + + tt_aV[CLOSEBTNTEXT] + + '</span></td>') + : '') + + '</tr></tbody></table></div>') + : '') + + '<div id="WzBoDy" style="position:relative;z-index:0;">' + + '<table' + sTbTrTd + 'id="WzBoDyI" style="' + sCss + '">' + + tt_sContent + + '</td></tr></tbody></table></div>' + + (tt_aV[SHADOW] + ? ('<div id="WzTtShDwR" style="position:absolute;overflow:hidden;"></div>' + + '<div id="WzTtShDwB" style="position:relative;overflow:hidden;"></div>') + : '') + ); + tt_GetSubDivRefs(); + // Convert DOM node to tip + if(tt_t2t && !tt_aV[COPYCONTENT]) + { + // Store the tag's parent element so we can restore that DOM branch + // once the tooltip is hidden + tt_t2tDad = tt_t2t.parentNode || tt_t2t.parentElement || tt_t2t.offsetParent || null; + if(tt_t2tDad) + { + tt_MovDomNode(tt_t2t, tt_t2tDad, tt_aElt[6]); + tt_t2t.style.display = "block"; + } + } + tt_ExtCallFncs(0, "SubDivsCreated"); +} +function tt_GetSubDivRefs() +{ + var aId = new Array("WzTiTl", "WzTiTlTb", "WzTiTlI", "WzClOsE", "WzBoDy", "WzBoDyI", "WzTtShDwB", "WzTtShDwR"); + + for(var i = aId.length; i; --i) + tt_aElt[i] = tt_GetElt(aId[i - 1]); +} +function tt_FormatTip() +{ + var css, w, h, pad = tt_aV[PADDING], padT, wBrd = tt_aV[BORDERWIDTH], + iOffY, iOffSh, iAdd = (pad + wBrd) << 1; + + //--------- Title DIV ---------- + if(tt_aV[TITLE].length) + { + padT = tt_aV[TITLEPADDING]; + css = tt_aElt[1].style; + css.background = tt_aV[TITLEBGCOLOR]; + css.paddingTop = css.paddingBottom = padT + "px"; + css.paddingLeft = css.paddingRight = (padT + 2) + "px"; + css = tt_aElt[3].style; + css.color = tt_aV[TITLEFONTCOLOR]; + if(tt_aV[WIDTH] == -1) + css.whiteSpace = "nowrap"; + css.fontFamily = tt_aV[TITLEFONTFACE]; + css.fontSize = tt_aV[TITLEFONTSIZE]; + css.fontWeight = "bold"; + css.textAlign = tt_aV[TITLEALIGN]; + // Close button DIV + if(tt_aElt[4]) + { + css = tt_aElt[4].style; + css.background = tt_aV[CLOSEBTNCOLORS][0]; + css.color = tt_aV[CLOSEBTNCOLORS][1]; + css.fontFamily = tt_aV[TITLEFONTFACE]; + css.fontSize = tt_aV[TITLEFONTSIZE]; + css.fontWeight = "bold"; + } + if(tt_aV[WIDTH] > 0) + tt_w = tt_aV[WIDTH]; + else + { + tt_w = tt_GetDivW(tt_aElt[3]) + tt_GetDivW(tt_aElt[4]); + // Some spacing between title DIV and closebutton + if(tt_aElt[4]) + tt_w += pad; + // Restrict auto width to max width + if(tt_aV[WIDTH] < -1 && tt_w > -tt_aV[WIDTH]) + tt_w = -tt_aV[WIDTH]; + } + // Ensure the top border of the body DIV be covered by the title DIV + iOffY = -wBrd; + } + else + { + tt_w = 0; + iOffY = 0; + } + + //-------- Body DIV ------------ + css = tt_aElt[5].style; + css.top = iOffY + "px"; + if(wBrd) + { + css.borderColor = tt_aV[BORDERCOLOR]; + css.borderStyle = tt_aV[BORDERSTYLE]; + css.borderWidth = wBrd + "px"; + } + if(tt_aV[BGCOLOR].length) + css.background = tt_aV[BGCOLOR]; + if(tt_aV[BGIMG].length) + css.backgroundImage = "url(" + tt_aV[BGIMG] + ")"; + css.padding = pad + "px"; + css.textAlign = tt_aV[TEXTALIGN]; + if(tt_aV[HEIGHT]) + { + css.overflow = "auto"; + if(tt_aV[HEIGHT] > 0) + css.height = (tt_aV[HEIGHT] + iAdd) + "px"; + else + tt_h = iAdd - tt_aV[HEIGHT]; + } + // TD inside body DIV + css = tt_aElt[6].style; + css.color = tt_aV[FONTCOLOR]; + css.fontFamily = tt_aV[FONTFACE]; + css.fontSize = tt_aV[FONTSIZE]; + css.fontWeight = tt_aV[FONTWEIGHT]; + css.background = ""; + css.textAlign = tt_aV[TEXTALIGN]; + if(tt_aV[WIDTH] > 0) + w = tt_aV[WIDTH]; + // Width like title (if existent) + else if(tt_aV[WIDTH] == -1 && tt_w) + w = tt_w; + else + { + // Measure width of the body's inner TD, as some browsers would expand + // the container and outer body DIV to 100% + w = tt_GetDivW(tt_aElt[6]); + // Restrict auto width to max width + if(tt_aV[WIDTH] < -1 && w > -tt_aV[WIDTH]) + w = -tt_aV[WIDTH]; + } + if(w > tt_w) + tt_w = w; + tt_w += iAdd; + + //--------- Shadow DIVs ------------ + if(tt_aV[SHADOW]) + { + tt_w += tt_aV[SHADOWWIDTH]; + iOffSh = Math.floor((tt_aV[SHADOWWIDTH] * 4) / 3); + // Bottom shadow + css = tt_aElt[7].style; + css.top = iOffY + "px"; + css.left = iOffSh + "px"; + css.width = (tt_w - iOffSh - tt_aV[SHADOWWIDTH]) + "px"; + css.height = tt_aV[SHADOWWIDTH] + "px"; + css.background = tt_aV[SHADOWCOLOR]; + // Right shadow + css = tt_aElt[8].style; + css.top = iOffSh + "px"; + css.left = (tt_w - tt_aV[SHADOWWIDTH]) + "px"; + css.width = tt_aV[SHADOWWIDTH] + "px"; + css.background = tt_aV[SHADOWCOLOR]; + } + else + iOffSh = 0; + + //-------- Container DIV ------- + tt_SetTipOpa(tt_aV[FADEIN] ? 0 : tt_aV[OPACITY]); + tt_FixSize(iOffY, iOffSh); +} +// Fixate the size so it can't dynamically change while the tooltip is moving. +function tt_FixSize(iOffY, iOffSh) +{ + var wIn, wOut, h, add, pad = tt_aV[PADDING], wBrd = tt_aV[BORDERWIDTH], i; + + tt_aElt[0].style.width = tt_w + "px"; + tt_aElt[0].style.pixelWidth = tt_w; + wOut = tt_w - ((tt_aV[SHADOW]) ? tt_aV[SHADOWWIDTH] : 0); + // Body + wIn = wOut; + if(!tt_bBoxOld) + wIn -= (pad + wBrd) << 1; + tt_aElt[5].style.width = wIn + "px"; + // Title + if(tt_aElt[1]) + { + wIn = wOut - ((tt_aV[TITLEPADDING] + 2) << 1); + if(!tt_bBoxOld) + wOut = wIn; + tt_aElt[1].style.width = wOut + "px"; + tt_aElt[2].style.width = wIn + "px"; + } + // Max height specified + if(tt_h) + { + h = tt_GetDivH(tt_aElt[5]); + if(h > tt_h) + { + if(!tt_bBoxOld) + tt_h -= (pad + wBrd) << 1; + tt_aElt[5].style.height = tt_h + "px"; + } + } + tt_h = tt_GetDivH(tt_aElt[0]) + iOffY; + // Right shadow + if(tt_aElt[8]) + tt_aElt[8].style.height = (tt_h - iOffSh) + "px"; + i = tt_aElt.length - 1; + if(tt_aElt[i]) + { + tt_aElt[i].style.width = tt_w + "px"; + tt_aElt[i].style.height = tt_h + "px"; + } +} +function tt_DeAlt(el) +{ + var aKid; + + if(el) + { + if(el.alt) + el.alt = ""; + if(el.title) + el.title = ""; + aKid = el.childNodes || el.children || null; + if(aKid) + { + for(var i = aKid.length; i;) + tt_DeAlt(aKid[--i]); + } + } +} +// This hack removes the native tooltips over links in Opera +function tt_OpDeHref(el) +{ + if(!tt_op) + return; + if(tt_elDeHref) + tt_OpReHref(); + while(el) + { + if(el.hasAttribute("href")) + { + el.t_href = el.getAttribute("href"); + el.t_stats = window.status; + el.removeAttribute("href"); + el.style.cursor = "hand"; + tt_AddEvtFnc(el, "mousedown", tt_OpReHref); + window.status = el.t_href; + tt_elDeHref = el; + break; + } + el = el.parentElement; + } +} +function tt_OpReHref() +{ + if(tt_elDeHref) + { + tt_elDeHref.setAttribute("href", tt_elDeHref.t_href); + tt_RemEvtFnc(tt_elDeHref, "mousedown", tt_OpReHref); + window.status = tt_elDeHref.t_stats; + tt_elDeHref = null; + } +} +function tt_OverInit() +{ + if(window.event) + tt_over = window.event.target || window.event.srcElement; + else + tt_over = tt_ovr_; + tt_DeAlt(tt_over); + tt_OpDeHref(tt_over); +} +function tt_ShowInit() +{ + tt_tShow.Timer("tt_Show()", tt_aV[DELAY], true); + if(tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY]) + tt_AddEvtFnc(document, "mouseup", tt_OnLClick); +} +function tt_Show() +{ + var css = tt_aElt[0].style; + + // Override the z-index of the topmost wz_dragdrop.js D&D item + css.zIndex = Math.max((window.dd && dd.z) ? (dd.z + 2) : 0, 1110); + if(tt_aV[STICKY] || !tt_aV[FOLLOWMOUSE]) + tt_iState &= ~0x4; + if(tt_aV[DURATION] > 0) + tt_tDurt.Timer("tt_HideInit()", tt_aV[DURATION], true); + tt_ExtCallFncs(0, "Show") + css.visibility = "visible"; + tt_iState |= 0x2; + if(tt_aV[FADEIN]) + tt_Fade(0, 0, tt_aV[OPACITY], Math.round(tt_aV[FADEIN] / tt_aV[FADEINTERVAL])); + tt_ShowIfrm(); +} +function tt_ShowIfrm() +{ + if(tt_ie56) + { + var ifrm = tt_aElt[tt_aElt.length - 1]; + if(ifrm) + { + var css = ifrm.style; + css.zIndex = tt_aElt[0].style.zIndex - 1; + css.display = "block"; + } + } +} +function tt_Move(e) +{ + if(e) + tt_ovr_ = e.target || e.srcElement; + e = e || window.event; + if(e) + { + tt_musX = tt_GetEvtX(e); + tt_musY = tt_GetEvtY(e); + } + if(tt_iState & 0x04) + { + // Prevent jam of mousemove events + if(!tt_op && !tt_ie) + { + if(tt_bWait) + return; + tt_bWait = true; + tt_tWaitMov.Timer("tt_bWait = false;", 1, true); + } + if(tt_aV[FIX]) + { + var iY = tt_aV[FIX][1]; + // For a fixed tip to be positioned above the mouse, use the + // bottom edge as anchor + // (recommended by Christophe Rebeschini, 31.1.2008) + if(tt_aV[ABOVE]) + iY -= tt_h; + tt_iState &= ~0x4; + tt_SetTipPos(tt_aV[FIX][0], tt_aV[FIX][1]); + } + else if(!tt_ExtCallFncs(e, "MoveBefore")) + tt_SetTipPos(tt_Pos(0), tt_Pos(1)); + tt_ExtCallFncs([tt_musX, tt_musY], "MoveAfter") + } +} +function tt_Pos(iDim) +{ + var iX, bJmpMode, cmdAlt, cmdOff, cx, iMax, iScrl, iMus, bJmp; + + // Map values according to dimension to calculate + if(iDim) + { + bJmpMode = tt_aV[JUMPVERT]; + cmdAlt = ABOVE; + cmdOff = OFFSETY; + cx = tt_h; + iMax = tt_maxPosY; + iScrl = tt_scrlY; + iMus = tt_musY; + bJmp = tt_bJmpVert; + } + else + { + bJmpMode = tt_aV[JUMPHORZ]; + cmdAlt = LEFT; + cmdOff = OFFSETX; + cx = tt_w; + iMax = tt_maxPosX; + iScrl = tt_scrlX; + iMus = tt_musX; + bJmp = tt_bJmpHorz; + } + if(bJmpMode) + { + if(tt_aV[cmdAlt] && (!bJmp || tt_CalcPosAlt(iDim) >= iScrl + 16)) + iX = tt_PosAlt(iDim); + else if(!tt_aV[cmdAlt] && bJmp && tt_CalcPosDef(iDim) > iMax - 16) + iX = tt_PosAlt(iDim); + else + iX = tt_PosDef(iDim); + } + else + { + iX = iMus; + if(tt_aV[cmdAlt]) + iX -= cx + tt_aV[cmdOff] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0); + else + iX += tt_aV[cmdOff]; + } + // Prevent tip from extending past clientarea boundary + if(iX > iMax) + iX = bJmpMode ? tt_PosAlt(iDim) : iMax; + + // In case of insufficient space on both sides, ensure the left/upper part + // of the tip be visible +//BH changed following line to correct HORZ JUMP + if(iX < (iScrl-OFFSETY)) + // iX = bJmpMode ? tt_PosDef(iDim) : iScrl; + iX = (bJmpMode ? tt_PosDef(iDim) : iScrl)-(OFFSETY*9); + return iX; +} +function tt_PosDef(iDim) +{ + if(iDim) + tt_bJmpVert = tt_aV[ABOVE]; + else + tt_bJmpHorz = tt_aV[LEFT]; + return tt_CalcPosDef(iDim); +} +function tt_PosAlt(iDim) +{ + if(iDim) + tt_bJmpVert = !tt_aV[ABOVE]; + else + tt_bJmpHorz = !tt_aV[LEFT]; + return tt_CalcPosAlt(iDim); +} +function tt_CalcPosDef(iDim) +{ + return iDim ? (tt_musY + tt_aV[OFFSETY]) : (tt_musX + tt_aV[OFFSETX]); +} +function tt_CalcPosAlt(iDim) +{ + var cmdOff = iDim ? OFFSETY : OFFSETX; + var dx = tt_aV[cmdOff] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0); + if(tt_aV[cmdOff] > 0 && dx <= 0) + dx = 1; + return((iDim ? (tt_musY - tt_h) : (tt_musX - tt_w)) - dx); +} +function tt_Fade(a, now, z, n) +{ + if(n) + { + now += Math.round((z - now) / n); + if((z > a) ? (now >= z) : (now <= z)) + now = z; + else + tt_tFade.Timer("tt_Fade(" + + a + "," + now + "," + z + "," + (n - 1) + + ")", + tt_aV[FADEINTERVAL], + true); + } + now ? tt_SetTipOpa(now) : tt_Hide(); +} +function tt_SetTipOpa(opa) +{ + // To circumvent the opacity nesting flaws of IE, we set the opacity + // for each sub-DIV separately, rather than for the container DIV. + tt_SetOpa(tt_aElt[5], opa); + if(tt_aElt[1]) + tt_SetOpa(tt_aElt[1], opa); + if(tt_aV[SHADOW]) + { + opa = Math.round(opa * 0.8); + tt_SetOpa(tt_aElt[7], opa); + tt_SetOpa(tt_aElt[8], opa); + } +} +function tt_OnScrl() +{ + tt_scrlX = tt_GetScrollX(); + tt_scrlY = tt_GetScrollY(); +} +function tt_OnCloseBtnOver(iOver) +{ + var css = tt_aElt[4].style; + + iOver <<= 1; + css.background = tt_aV[CLOSEBTNCOLORS][iOver]; + css.color = tt_aV[CLOSEBTNCOLORS][iOver + 1]; +} +function tt_OnLClick(e) +{ + // Ignore right-clicks + e = e || window.event; + if(!((e.button && e.button & 2) || (e.which && e.which == 3))) + { + if(tt_aV[CLICKSTICKY] && (tt_iState & 0x4)) + { + tt_aV[STICKY] = true; + tt_iState &= ~0x4; + } + else if(tt_aV[CLICKCLOSE]) + tt_HideInit(); + } +} +function tt_Int(x) +{ + var y; + + return(isNaN(y = parseInt(x)) ? 0 : y); +} +Number.prototype.Timer = function(s, iT, bUrge) +{ + if(!this.value || bUrge) + this.value = window.setTimeout(s, iT); +} +Number.prototype.EndTimer = function() +{ + if(this.value) + { + window.clearTimeout(this.value); + this.value = 0; + } +} +function tt_SetOpa(el, opa) +{ + var css = el.style; + + tt_opa = opa; + if(tt_flagOpa == 1) + { + if(opa < 100) + { + // Hacks for bugs of IE: + // 1.) Once a CSS filter has been applied, fonts are no longer + // anti-aliased, so we store the previous 'non-filter' to be + // able to restore it + if(typeof(el.filtNo) == tt_u) + el.filtNo = css.filter; + // 2.) A DIV cannot be made visible in a single step if an + // opacity < 100 has been applied while the DIV was hidden + var bVis = css.visibility != "hidden"; + // 3.) In IE6, applying an opacity < 100 has no effect if the + // element has no layout (position, size, zoom, ...) + css.zoom = "100%"; + if(!bVis) + css.visibility = "visible"; + css.filter = "alpha(opacity=" + opa + ")"; + if(!bVis) + css.visibility = "hidden"; + } + else if(typeof(el.filtNo) != tt_u) + // Restore 'non-filter' + css.filter = el.filtNo; + } + else + { + opa /= 100.0; + switch(tt_flagOpa) + { + case 2: + css.KhtmlOpacity = opa; break; + case 3: + css.KHTMLOpacity = opa; break; + case 4: + css.MozOpacity = opa; break; + case 5: + css.opacity = opa; break; + } + } +} +function tt_MovDomNode(el, dadFrom, dadTo) +{ + if(dadFrom) + dadFrom.removeChild(el); + if(dadTo) + dadTo.appendChild(el); +} +function tt_Err(sErr, bIfDebug) +{ + if(tt_Debug || !bIfDebug) + alert("Tooltip Script Error Message:\n\n" + sErr); +} + +//============ EXTENSION (PLUGIN) MANAGER ===============// +function tt_ExtCmdEnum() +{ + var s; + + // Add new command(s) to the commands enum + for(var i in config) + { + s = "window." + i.toString().toUpperCase(); + if(eval("typeof(" + s + ") == tt_u")) + { + eval(s + " = " + tt_aV.length); + tt_aV[tt_aV.length] = null; + } + } +} +function tt_ExtCallFncs(arg, sFnc) +{ + var b = false; + for(var i = tt_aExt.length; i;) + {--i; + var fnc = tt_aExt[i]["On" + sFnc]; + // Call the method the extension has defined for this event + if(fnc && fnc(arg)) + b = true; + } + return b; +} + +tt_Init(); diff --git a/modules_v2/lightbox/lb_defaultconfig.php b/modules_v2/lightbox/lb_defaultconfig.php new file mode 100644 index 0000000000..f8dbbd6807 --- /dev/null +++ b/modules_v2/lightbox/lb_defaultconfig.php @@ -0,0 +1,71 @@ +<?php +/** + * Lightbox Album module for webtrees + * + * Display media Items using Lightbox + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2009 PHPGedView Development Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Module + * @version $Id$ + * @author Brian Holland + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +global $LB_AL_HEAD_LINKS,$LB_AL_THUMB_LINKS,$LB_ML_THUMB_LINKS,$LB_SS_SPEED; +global $LB_MUSIC_FILE,$LB_TRANSITION,$LB_URL_WIDTH,$LB_URL_HEIGHT,$LB_TT_BALLOON,$GEDCOM; + +$LB_AL_HEAD_LINKS=get_module_setting('lightbox', 'LB_AL_HEAD_LINKS', 'both'); // Album Tab Page Header Links. + // Set to 'icon' to view icon links. + // Set to 'text' to view text links + // Set to 'both' to view both. + +$LB_TT_BALLOON=get_module_setting('lightbox', 'LB_TT_BALLOON', 'true'); // Album Tab Page - Above Thumbnail Links. + // Set to 'true' to view Tooltip Balloon. + // Set to 'false' to view Tooltip Normal. + +$LB_AL_THUMB_LINKS=get_module_setting('lightbox', 'LB_AL_THUMB_LINKS', 'text'); // Album Tab Page - Below Thumbnail Links. + // Set to 'icon' to view icon links. + // Set to 'text' to view text links. [Default] + +$LB_SS_SPEED=get_module_setting('lightbox', 'LB_SS_SPEED', '6'); // SlideShow speed in seconds. [Min 2 max 25] + +$LB_MUSIC_FILE=get_module_setting('lightbox', 'LB_MUSIC_FILE', WT_MODULES_DIR.'lightbox/music/music.mp3'); // The music file. [mp3 only] + +$LB_TRANSITION=get_module_setting('lightbox', 'LB_TRANSITION', 'warp'); // Next or Prvious Image Transition effect + // Set to 'none' No transtion effect. + // Set to 'normal' Normal transtion effect. + // Set to 'double' Fast transition effect. + // Set to 'warp' Stretch transtition effect. [Default] + +$LB_URL_WIDTH =get_module_setting('lightbox', 'LB_URL_WIDTH', '1000'); // URL Window width in pixels +$LB_URL_HEIGHT=get_module_setting('lightbox', 'LB_URL_HEIGHT', '600'); // URL Window height in pixels + +$LB_ML_THUMB_LINKS = get_module_setting('lightbox', 'LB_ML_THUMB_LINKS', 'text'); // MultiMedia List Page Thumbnail Links + // Set to 'icon' to view icon links. + // Set to 'text' to view text links. [Default] + // Set to 'both' to view both. + // Set to 'none' to view neither. diff --git a/modules_v2/lightbox/module.php b/modules_v2/lightbox/module.php new file mode 100644 index 0000000000..1d835f6b9e --- /dev/null +++ b/modules_v2/lightbox/module.php @@ -0,0 +1,126 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require_once WT_ROOT.WT_MODULES_DIR.'lightbox/lb_defaultconfig.php'; + +class lightbox_WT_Module extends WT_Module implements WT_Module_Config, WT_Module_Tab { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Album'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab (Album) to the individual page which an alternate way to view and work with media.'); + } + + // Extend WT_Module + public function modAction($mod_action) { + switch($mod_action) { + case 'admin_config': + case 'album': + // TODO: these files should be methods in this class + require WT_ROOT.WT_MODULES_DIR.$this->getName().'/'.$mod_action.'.php'; + break; + } + } + + // Implement WT_Module_Config + public function getConfigLink() { + return 'module.php?mod='.$this->getName().'&mod_action=admin_config'; + } + + // Implement WT_Module_Tab + public function defaultTabOrder() { + return 60; + } + + // Implement WT_Module_Tab + public function hasTabContent() { + global $MULTI_MEDIA; + return $MULTI_MEDIA && (WT_USER_CAN_EDIT || $this->get_media_count()>0); + } + + // Implement WT_Module_Tab + public function getTabContent() { + global $MULTI_MEDIA, $MEDIA_EXTERNAL; + global $GEDCOM, $MEDIATYPE; + global $WORD_WRAPPED_NOTES, $MEDIA_DIRECTORY, $WT_IMAGES, $TEXT_DIRECTION, $is_media; + global $cntm1, $cntm2, $cntm3, $cntm4, $t, $mgedrec ; + global $edit ; + global $tabno; + global $Fam_Navigator, $NAV_ALBUM; + + ob_start(); + require WT_ROOT.WT_MODULES_DIR.'lightbox/functions/lb_head.php'; + + $media_found = false; + if (!$this->controller->indi->canDisplayDetails()) { + echo "<table class=\"facts_table\" cellpadding=\"0\">"; + echo "<tr><td class=\"facts_value\">"; + print_privacy_error(); + echo "</td></tr>"; + echo "</table>"; + } else { + require WT_ROOT.WT_MODULES_DIR.'lightbox/album.php'; + } + return '<div id="'.$this->getName().'_content">'.ob_get_clean().'</div>'; + } + + // Implement WT_Module_Tab + public function canLoadAjax() { + return true; + } + + // Implement WT_Module_Tab + public function getPreLoadContent() { + ob_start(); + require_once WT_ROOT.WT_MODULES_DIR.'lightbox/functions/lb_call_js.php'; + return ob_get_clean(); + } + + // Implement WT_Module_Tab + public function getJSCallback() { + return 'CB_Init();'; + } + + protected $mediaCount = null; + + private function get_media_count() { + if ($this->mediaCount===null) { + $ct = preg_match("/\d OBJE/", $this->controller->indi->getGedcomRecord()); + foreach ($this->controller->indi->getSpouseFamilies() as $sfam) + $ct += preg_match("/\d OBJE/", $sfam->getGedcomRecord()); + $this->mediaCount = $ct; + } + return $this->mediaCount; + } + +} diff --git a/modules_v2/lightbox/music/music.mp3 b/modules_v2/lightbox/music/music.mp3 Binary files differnew file mode 100644 index 0000000000..0ecd3fe9b8 --- /dev/null +++ b/modules_v2/lightbox/music/music.mp3 diff --git a/modules_v2/lightbox/pic/blank.gif b/modules_v2/lightbox/pic/blank.gif Binary files differnew file mode 100644 index 0000000000..35d42e808f --- /dev/null +++ b/modules_v2/lightbox/pic/blank.gif diff --git a/modules_v2/lightbox/pic/close.png b/modules_v2/lightbox/pic/close.png Binary files differnew file mode 100644 index 0000000000..2938cfdbde --- /dev/null +++ b/modules_v2/lightbox/pic/close.png diff --git a/modules_v2/lightbox/pic/close_red.png b/modules_v2/lightbox/pic/close_red.png Binary files differnew file mode 100644 index 0000000000..2736e124db --- /dev/null +++ b/modules_v2/lightbox/pic/close_red.png diff --git a/modules_v2/lightbox/pic/detail.gif b/modules_v2/lightbox/pic/detail.gif Binary files differnew file mode 100644 index 0000000000..b8cf3781f9 --- /dev/null +++ b/modules_v2/lightbox/pic/detail.gif diff --git a/modules_v2/lightbox/pic/details.gif b/modules_v2/lightbox/pic/details.gif Binary files differnew file mode 100644 index 0000000000..358a5482f9 --- /dev/null +++ b/modules_v2/lightbox/pic/details.gif diff --git a/modules_v2/lightbox/pic/loading.gif b/modules_v2/lightbox/pic/loading.gif Binary files differnew file mode 100644 index 0000000000..474743b98b --- /dev/null +++ b/modules_v2/lightbox/pic/loading.gif diff --git a/modules_v2/lightbox/pic/music_null.png b/modules_v2/lightbox/pic/music_null.png Binary files differnew file mode 100644 index 0000000000..d533d79d89 --- /dev/null +++ b/modules_v2/lightbox/pic/music_null.png diff --git a/modules_v2/lightbox/pic/music_off.png b/modules_v2/lightbox/pic/music_off.png Binary files differnew file mode 100644 index 0000000000..cbb37aa1f2 --- /dev/null +++ b/modules_v2/lightbox/pic/music_off.png diff --git a/modules_v2/lightbox/pic/music_on.png b/modules_v2/lightbox/pic/music_on.png Binary files differnew file mode 100644 index 0000000000..eeabb9966b --- /dev/null +++ b/modules_v2/lightbox/pic/music_on.png diff --git a/modules_v2/lightbox/pic/next.gif b/modules_v2/lightbox/pic/next.gif Binary files differnew file mode 100644 index 0000000000..3b72427ad4 --- /dev/null +++ b/modules_v2/lightbox/pic/next.gif diff --git a/modules_v2/lightbox/pic/notes.gif b/modules_v2/lightbox/pic/notes.gif Binary files differnew file mode 100644 index 0000000000..8e2c05546e --- /dev/null +++ b/modules_v2/lightbox/pic/notes.gif diff --git a/modules_v2/lightbox/pic/pause.png b/modules_v2/lightbox/pic/pause.png Binary files differnew file mode 100644 index 0000000000..7a6195531e --- /dev/null +++ b/modules_v2/lightbox/pic/pause.png diff --git a/modules_v2/lightbox/pic/prev.gif b/modules_v2/lightbox/pic/prev.gif Binary files differnew file mode 100644 index 0000000000..02db9d6080 --- /dev/null +++ b/modules_v2/lightbox/pic/prev.gif diff --git a/modules_v2/lightbox/pic/s_btm.png b/modules_v2/lightbox/pic/s_btm.png Binary files differnew file mode 100644 index 0000000000..bcded34141 --- /dev/null +++ b/modules_v2/lightbox/pic/s_btm.png diff --git a/modules_v2/lightbox/pic/s_btmleft.png b/modules_v2/lightbox/pic/s_btmleft.png Binary files differnew file mode 100644 index 0000000000..4c35798fbd --- /dev/null +++ b/modules_v2/lightbox/pic/s_btmleft.png diff --git a/modules_v2/lightbox/pic/s_btmright.png b/modules_v2/lightbox/pic/s_btmright.png Binary files differnew file mode 100644 index 0000000000..785734076c --- /dev/null +++ b/modules_v2/lightbox/pic/s_btmright.png diff --git a/modules_v2/lightbox/pic/s_left.png b/modules_v2/lightbox/pic/s_left.png Binary files differnew file mode 100644 index 0000000000..cb42df3bc4 --- /dev/null +++ b/modules_v2/lightbox/pic/s_left.png diff --git a/modules_v2/lightbox/pic/s_right.png b/modules_v2/lightbox/pic/s_right.png Binary files differnew file mode 100644 index 0000000000..361b7ec08c --- /dev/null +++ b/modules_v2/lightbox/pic/s_right.png diff --git a/modules_v2/lightbox/pic/s_top.png b/modules_v2/lightbox/pic/s_top.png Binary files differnew file mode 100644 index 0000000000..ff3055e178 --- /dev/null +++ b/modules_v2/lightbox/pic/s_top.png diff --git a/modules_v2/lightbox/pic/s_topleft.png b/modules_v2/lightbox/pic/s_topleft.png Binary files differnew file mode 100644 index 0000000000..61c415030b --- /dev/null +++ b/modules_v2/lightbox/pic/s_topleft.png diff --git a/modules_v2/lightbox/pic/s_topright.png b/modules_v2/lightbox/pic/s_topright.png Binary files differnew file mode 100644 index 0000000000..3254daea86 --- /dev/null +++ b/modules_v2/lightbox/pic/s_topright.png diff --git a/modules_v2/lightbox/pic/start.png b/modules_v2/lightbox/pic/start.png Binary files differnew file mode 100644 index 0000000000..1a0eeac702 --- /dev/null +++ b/modules_v2/lightbox/pic/start.png diff --git a/modules_v2/lightbox/pic/white.gif b/modules_v2/lightbox/pic/white.gif Binary files differnew file mode 100644 index 0000000000..1713283595 --- /dev/null +++ b/modules_v2/lightbox/pic/white.gif diff --git a/modules_v2/lightbox/pic/zoom_off.png b/modules_v2/lightbox/pic/zoom_off.png Binary files differnew file mode 100644 index 0000000000..48ee8b8de0 --- /dev/null +++ b/modules_v2/lightbox/pic/zoom_off.png diff --git a/modules_v2/lightbox/pic/zoom_on.png b/modules_v2/lightbox/pic/zoom_on.png Binary files differnew file mode 100644 index 0000000000..2a0b3860cb --- /dev/null +++ b/modules_v2/lightbox/pic/zoom_on.png diff --git a/modules_v2/logged_in/help_text.php b/modules_v2/logged_in/help_text.php new file mode 100644 index 0000000000..456dc87a53 --- /dev/null +++ b/modules_v2/logged_in/help_text.php @@ -0,0 +1,37 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} +switch ($help) { +case 'index_loggedin': + $title=WT_I18N::translate('Logged in users block'); + $text=WT_I18N::translate('This block will show you the users currently logged in.<br /><br />If you are not an administrator, your view of logged-in users is restricted to those who have elected to be visible while on-line. For this to work, you must also elect to be visible while on-line. On-line users who are invisible to you are counted as being anonymous.'); + break; +} diff --git a/modules_v2/logged_in/module.php b/modules_v2/logged_in/module.php new file mode 100644 index 0000000000..e0ce6f5793 --- /dev/null +++ b/modules_v2/logged_in/module.php @@ -0,0 +1,104 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class logged_in_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Logged In Users'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The Logged In Users block shows a list of the users who are currently logged in.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + // List active users + $NumAnonymous = 0; + $loggedusers = array (); + foreach (get_logged_in_users() as $user_id=>$user_name) { + if (WT_USER_IS_ADMIN || get_user_setting($user_id, 'visibleonline')) { + $loggedusers[$user_id]=$user_name; + } else { + $NumAnonymous++; + } + } + + $id=$this->getName().$block_id; + $title=WT_I18N::translate('Users Logged In').help_link('index_loggedin', $this->getName()); + $content='<table width="90%">'; + $LoginUsers=count($loggedusers); + if ($LoginUsers==0 && $NumAnonymous==0) { + $content.='<tr><td><b>' . WT_I18N::translate('No logged-in and no anonymous users') . '</b></td></tr>'; + } + if ($NumAnonymous>0) { + $content.='<tr><td><b>' . WT_I18N::plural('%d anonymous logged-in user', '%d anonymous logged-in users', $NumAnonymous, $NumAnonymous) . '</b></td></tr>'; + } + if ($LoginUsers>0) { + $content.='<tr><td><b>' . WT_I18N::plural('%d logged-in user', '%d logged-in users', $LoginUsers, $LoginUsers) . '</b></td></tr>'; + } + if (WT_USER_ID) { + foreach ($loggedusers as $user_id=>$user_name) { + $content .= "<tr><td><br />".PrintReady(getUserFullName($user_id))." - ".$user_name; + if (WT_USER_ID!=$user_id && get_user_setting($user_id, 'contactmethod')!="none") { + $content .= "<br /><a href=\"javascript:;\" onclick=\"return message('" . $user_name . "');\">" . WT_I18N::translate('Send Message') . "</a>"; + } + $content .= "</td></tr>"; + } + } + $content .= "</table>"; + + if ($template) { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + } +} diff --git a/modules_v2/login_block/module.php b/modules_v2/login_block/module.php new file mode 100644 index 0000000000..88a2bb5ddc --- /dev/null +++ b/modules_v2/login_block/module.php @@ -0,0 +1,164 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class login_block_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Login'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The Login block accepts a user name and password for users to login.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $TEXT_DIRECTION; + + $id=$this->getName().$block_id; + if (WT_USER_ID) { + $title = WT_I18N::translate('Logout'); + + + $content = '<div class="center"><form method="post" action="index.php?logout=1" name="logoutform" onsubmit="return true;">'; + $content .= '<br /><a href="edituser.php" class="name2">'.WT_I18N::translate('Logged in as ').' ('.WT_USER_NAME.')</a><br /><br />'; + + $content .= "<input type=\"submit\" value=\"".WT_I18N::translate('Logout')."\" />"; + + $content .= "<br /><br /></form></div>"; + } else { + $title = WT_I18N::translate('Login'); + if (get_site_setting('USE_REGISTRATION_MODULE')) { + $title.=help_link('index_login_register'); + } else { + $title.=help_link('index_login'); + } + $LOGIN_URL=get_site_setting('LOGIN_URL'); + $content = "<div class=\"center\"><form method=\"post\" action=\"$LOGIN_URL\" name=\"loginform\" onsubmit=\"t = new Date(); document.loginform.usertime.value=t.getFullYear()+'-'+(t.getMonth()+1)+'-'+t.getDate()+' '+t.getHours()+':'+t.getMinutes()+':'+t.getSeconds(); return true;\">"; + $content .= "<input type=\"hidden\" name=\"url\" value=\"index.php\" />"; + $content .= "<input type=\"hidden\" name=\"ged\" value=\""; + $content .= WT_GEDCOM; + $content .= "\" />"; + $content .= "<input type=\"hidden\" name=\"pid\" value=\""; + if (isset($pid)) $content .= $pid; + $content .= "\" />"; + $content .= "<input type=\"hidden\" name=\"usertime\" value=\"\" />"; + $content .= "<input type=\"hidden\" name=\"action\" value=\"login\" />"; + $content .= "<table class=\"center tabs_table\">"; + + // Row 1: Userid + $content .= "<tr><td "; + $content .= write_align_with_textdir_check("right", true); + $content .= " class=\"{$TEXT_DIRECTION} wrap width50\">"; + $content .= WT_I18N::translate('User name'); + $content .= help_link('username'); + $content .= "</td><td "; + $content .= write_align_with_textdir_check("left", true); + $content .= " class=\"{$TEXT_DIRECTION}\"><input type=\"text\" name=\"username\" size=\"20\" class=\"formField\" />"; + $content .= "</td></tr>"; + + // Row 2: Password + $content .= "<tr><td "; + $content .= write_align_with_textdir_check("right", true); + $content .= " class=\"{$TEXT_DIRECTION} wrap width50\">"; + $content .= WT_I18N::translate('Password'); + $content .= help_link('password'); + $content .= "</td><td "; + $content .= write_align_with_textdir_check("left", true); + $content .= " class=\"{$TEXT_DIRECTION}\"><input type=\"password\" name=\"password\" size=\"20\" class=\"formField\" />"; + $content .= "</td></tr>"; + + // Row 3: "Login" link + $content .= "<tr><td colspan=\"2\" class=\"center\">"; + $content .= "<input type=\"submit\" value=\"".WT_I18N::translate('Login')."\" /> "; + $content .= "</td></tr>"; + + if (get_site_setting('USE_REGISTRATION_MODULE')) { + + // Row 4: "Request Account" link + $content .= "<tr><td "; + $content .= write_align_with_textdir_check("right", true); + $content .= " class=\"{$TEXT_DIRECTION} wrap width50\"><br />"; + $content .= WT_I18N::translate('No account?'); + $content .= help_link('new_user'); + $content .= "</td><td "; + $content .= write_align_with_textdir_check("left", true); + $content .= " class=\"{$TEXT_DIRECTION}\"><br />"; + $content .= "<a href=\"login_register.php?action=register\">"; + $content .= WT_I18N::translate('Request new user account'); + $content .= "</a>"; + $content .= "</td></tr>"; + + // Row 5: "Lost Password" link + $content .= "<tr><td "; + $content .= write_align_with_textdir_check("right", true); + $content .= " class=\"{$TEXT_DIRECTION} wrap width50\">"; + $content .= WT_I18N::translate('Lost your password?'); + $content .= help_link('new_password'); + $content .= "</td><td "; + $content .= write_align_with_textdir_check("left", true); + $content .= " class=\"{$TEXT_DIRECTION}\">"; + $content .= "<a href=\"login_register.php?action=pwlost\">"; + $content .= WT_I18N::translate('Request new password'); + $content .= "</a>"; + $content .= "</td></tr>"; + } + + $content .= "</table>"; + $content .= "</form></div>"; + } + + if ($template) { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + } +} diff --git a/modules_v2/marriage_report/module.php b/modules_v2/marriage_report/module.php new file mode 100644 index 0000000000..a39cf5117a --- /dev/null +++ b/modules_v2/marriage_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class marriage_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Marriage Date and Place Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of people who were married in a given time or place.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('sfamily'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/marriage_report/report.xml b/modules_v2/marriage_report/report.xml new file mode 100644 index 0000000000..5a6c110f61 --- /dev/null +++ b/modules_v2/marriage_report/report.xml @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Marriage Date and Place Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of people who were married in a given time or place.')" /></Description> + <Input name="name" lookup="NAME" type="text"><var var="WT_I18N::translate('Name')" /></Input> + <Input name="marrplace" lookup="PLAC" type="text"><var var="WT_I18N::translate('Marriage Place contains')" /> </Input> + <Input name="marrdate1" lookup="DATE" type="text"><var var="WT_I18N::translate('Marriage Date range start')" /></Input> + <Input name="marrdate2" lookup="DATE" type="text"><var var="WT_I18N::translate('Marriage Date range end')" /></Input> + <Input name="sortby" type="select" options="NAME=>WT_I18N::translate('Name')|MARR:DATE=>translate_fact('MARR:DATE')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="16" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date tetx --> + <Style name="date" font="$fonts" size="8"/> + <Style name="text" font="$fonts" size="9" /> + <Style name="spouse" font="$fonts" size="8" /> + <Style name="label" font="$fonts" size="10" style="b"/> + + <Doc pageSize="$pageSize" orientation="landscape"> + <Header> + <Cell align="center" height="20" newline="1" style="header"><var var="WT_I18N::translate('Marriage Date and Place Report')" /></Cell> + <Cell align="rightrtl" height="10" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <TextBox bgcolor="$fill" border="1" height="12" width="200"> + <Text style="label"><var var="WT_I18N::translate('Name')" /></Text> + </TextBox> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='MARR:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <TextBox bgcolor="$fill" border="1" height="12" width="100"> + <Text style="label"><var var="WT_I18N::translate('Date')" /></Text> + </TextBox> + + <TextBox border="1" height="12" width="150"> + <Text style="label"><var var="WT_I18N::translate('Place')" /></Text> + </TextBox> + + <TextBox border="1" height="12" newline="1"> + <Text style="label"><var var="WT_I18N::translate('Source')" /></Text> + </TextBox> + </Header> + + <Body> + <SetVar name="printedFamilies" value="0" /> + <List list="family" filter1="MARR:PLAC CONTAINS $marrplace" filter2="MARR:DATE GTE $marrdate1" filter3="MARR:DATE LTE $marrdate2" sortby="$sortby"> + <!-- filter4 should be: filter4="NAME CONTAINS $name", but the family name doesn't exist as a field in the database, + so we can't use that. --> + <SetVar name="skipFamily" value="no" /> + <if condition="$name!=''"> + <SetVar name="skipFamily" value="yes" /> + <Gedcom id="@HUSB"> + <if condition="stristr(@NAME,$name)!==false"> + <SetVar name="skipFamily" value="no" /> + </if> + </Gedcom> + <Gedcom id="@WIFE"> + <if condition="stristr(@NAME,$name)!==false"> + <SetVar name="skipFamily" value="no" /> + </if> + </Gedcom> + </if> + <if condition="$skipFamily=='no'"> + <SetVar name="printedFamilies" value="$printedFamilies+1" /> + + <TextBox height="12" width="200"> + <Text style="text"><GetPersonName id="@HUSB" /></Text> + <Text style="spouse"> + <br /> <GetPersonName id="@WIFE" /> + </Text> + </TextBox> + + <TextBox height="12" width="100"> + <Text style="text"><GedcomValue tag="MARR:DATE" newline="1" /></Text> + </TextBox> + + <TextBox height="12" width="150"> + <Text style="text"><GedcomValue tag="MARR:PLAC" /></Text> + </TextBox> + + <TextBox height="12" newline="1"> + <!-- Only with multiple sources use line feed (br) --> + <SetVar name="usebr" value="0"/> + <Text style="text"> + <RepeatTag tag="MARR:SOUR"> + <Gedcom id="@SOUR"> + <if condition="$usebr==1"><br /></if> + <if condition="@AUTH!=''"><GedcomValue tag="AUTH" />, </if> + «<GedcomValue tag="TITL" />» + <if condition="@PUBL!=''"> (<GedcomValue tag="PUBL" />)</if> + </Gedcom> + <if condition="@PAGE!=''">: <GedcomValue tag="SOUR:PAGE" /></if> + <GedcomValue tag="SOUR:DATA:TEXT" /> + <SetVar name="usebr" value="1"/> + </RepeatTag> + </Text> + </TextBox> + + </if> + </List> + <Cell align="rightrtl" height="24" newline="1" style="label"><br/><var var="WT_I18N::translate('Total families')"/>: <var var="printedFamilies" /></Cell> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now/></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/media/module.php b/modules_v2/media/module.php new file mode 100644 index 0000000000..745263b36e --- /dev/null +++ b/modules_v2/media/module.php @@ -0,0 +1,128 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class media_WT_Module extends WT_Module implements WT_Module_Tab { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Media'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab to the individual page which displays the media items linked to an individual.'); + } + + // Implement WT_Module_Tab + public function defaultTabOrder() { + return 50; + } + + protected $mediaCount = null; + + // Implement WT_Module_Tab + public function hasTabContent() { + global $MULTI_MEDIA; + return $MULTI_MEDIA && (WT_USER_CAN_EDIT || $this->get_media_count()>0); + } + + // Implement WT_Module_Tab + public function getTabContent() { + global $MULTI_MEDIA, $NAV_MEDIA; + + ob_start(); + // For Reorder media ------------------------------------ + if (WT_USER_CAN_EDIT) { + echo "<center>"; + require_once './includes/media_tab_head.php'; + echo "</center>"; + } + ?> + <div id="media_content"> + <table class="facts_table"> + <?php + $media_found = false; + if (!$this->controller->indi->canDisplayDetails()) { + echo "<tr><td class=\"facts_value\">"; + print_privacy_error(); + echo "</td></tr>"; + } + else { + $media_found = print_main_media($this->controller->pid, 0, true); + if (!$media_found) echo "<tr><td id=\"no_tab4\" colspan=\"2\" class=\"facts_value\">".WT_I18N::translate('There are no media objects for this individual.')."</td></tr>"; + //-- New Media link + if (WT_USER_CAN_EDIT && $this->controller->indi->canDisplayDetails()) { + ?> + <tr> + <td class="facts_label"><?php echo WT_I18N::translate('Add media'), help_link('add_media'); ?></td> + <td class="facts_value"> + <a href="javascript:;" onclick="window.open('addmedia.php?action=showmediaform&linktoid=<?php echo $this->controller->pid; ?>', '_blank', 'top=50,left=50,width=600,height=500,resizable=1,scrollbars=1'); return false;"> <?php echo WT_I18N::translate('Add a new media item'); ?></a><br /> + <a href="javascript:;" onclick="window.open('inverselink.php?linktoid=<?php echo $this->controller->pid; ?>&linkto=person', '_blank', 'top=50,left=50,width=400,height=300,resizable=1,scrollbars=1'); return false;"><?php echo WT_I18N::translate('Link to an existing Media item'); ?></a> + </td> + </tr> + <?php + } + } + ?> + </table> + </div> + <?php + return '<div id="'.$this->getName().'_content">'.ob_get_clean().'</div>'; + } + + /** + * get the number of media items for this person + * @return int + */ + function get_media_count() { + if ($this->mediaCount===null) { + $ct = preg_match("/\d OBJE/", $this->controller->indi->getGedcomRecord()); + foreach ($this->controller->indi->getSpouseFamilies() as $sfam) + $ct += preg_match("/\d OBJE/", $sfam->getGedcomRecord()); + $this->mediaCount = $ct; + } + return $this->mediaCount; + } + + // Implement WT_Module_Tab + public function canLoadAjax() { + return true; + } + + // Implement WT_Module_Tab + public function getPreLoadContent() { + return ''; + } + + // Implement WT_Module_Tab + public function getJSCallback() { + return ''; + } + +} diff --git a/modules_v2/missing_facts_report/module.php b/modules_v2/missing_facts_report/module.php new file mode 100644 index 0000000000..ea50c8e683 --- /dev/null +++ b/modules_v2/missing_facts_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class missing_facts_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Missing relatives facts'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of unknown facts for a person and their relatives.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_USER; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('sfamily'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/missing_facts_report/report.xml b/modules_v2/missing_facts_report/report.xml new file mode 100644 index 0000000000..d0c14483ee --- /dev/null +++ b/modules_v2/missing_facts_report/report.xml @@ -0,0 +1,608 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Missing relatives facts')" /></Title> + <Description><var var="WT_I18N::translate('A report of unknown facts for a person and their relatives.')" /></Description> + <Input name="pid" type="text" default="" lookup="INDI"><var var="WT_I18N::translate('Enter Individual ID')"/></Input> + <Input name="relatives" type="select" default="direct-ancestors" options="child-family=>WT_I18N::translate('Parents and siblings')|spouse-family=>WT_I18N::translate('Spouses and children')|direct-ancestors=>WT_I18N::translate('Direct line ancestors')|ancestors=>WT_I18N::translate('Direct line ancestors and their families')|descendants=>WT_I18N::translate('Descendants')|all=>WT_I18N::translate('All')"><var var="WT_I18N::translate('Choose relatives')"/></Input> + <Input name="maxgen" type="select" default="*" options="*=>*|1=>1|2=>2|3=>3|4=>4|5=>5|6=>6|7=>7|8=>8|9=>9|10=>10"><var var="WT_I18N::translate('Generations')"/></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <Input name="fsour" type="checkbox" default="0"><var var="WT_I18N::translate('Sources to the events')" /></Input> + <Input name="fbirt" type="checkbox" default="1"><var var="translate_fact('BIRT')"/></Input> + <Input name="fbapm" type="checkbox" default="0"><var var="translate_fact('BAPM')"/> / <var var="translate_fact('CHR')"/></Input> + <Input name="fbarm" type="checkbox" default="0"><var var="translate_fact('BARM')"/></Input> + <Input name="fbasm" type="checkbox" default="0"><var var="translate_fact('BASM')"/></Input> + <Input name="fconf" type="checkbox" default="0"><var var="translate_fact('CONF')"/></Input> + <Input name="fenga" type="checkbox" default="0"><var var="translate_fact('ENGA')"/></Input> + <Input name="ffcom" type="checkbox" default="0"><var var="translate_fact('FCOM')"/></Input> + <Input name="fmarb" type="checkbox" default="0"><var var="translate_fact('MARB')"/></Input> + <Input name="fmarr" type="checkbox" default="0"><var var="translate_fact('MARR')"/></Input> + <Input name="fdeat" type="checkbox" default="1"><var var="translate_fact('DEAT')"/></Input> + <Input name="fburi" type="checkbox" default="0"><var var="translate_fact('BURI')"/></Input> + <Input name="freli" type="checkbox" default="0"><var var="translate_fact('RELI')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="18" style="b"/> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8"/> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Date Text - CSS Style name --> + <Style name="date" font="$fonts" size="8"/> + <!-- Column list labels - CSS Style name --> + <Style name="list_label" font="$fonts" size="9" style="b"/> + <!-- List values - CSS Style name --> + <Style name="list_value" font="$fonts" size="9"/> + + + <SetVar name="name" value="300" /> + <SetVar name="printname" value="0" /> + <SetVar name="vspace" value="5" /> + <SetVar name="nrrelatives" value="0" /> + <SetVar name="nrprinted" value="0" /> + <SetVar name="nrevent" value="0" /> + <SetVar name="nrmissingevent" value="0" /> + + <Doc pageSize="$pageSize"> + <Header> + <Cell align="center" newline="1" style="header"><var var="WT_I18N::translate('Missing relatives facts')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')"/> <PageNum/> / <TotalPages/></Cell> + <Cell align="center" border="1" style="list_label" width="$name"><var var="WT_I18N::translate('Name')" /></Cell> + <Cell align="center" border="1" newline="1" style="list_label"><var var="WT_I18N::translate('Event')" /></Cell> + </Header> + +<!-- Start with BIRT GEDCOM tag. + Place any GEDCOM tags in GEDCOM alphabetic order here + End it with DEAT and BURI + Place any GEDCOM tags after DEAT/BURI witch has no additional subtags, such as RELI, in alphabetic order +--> + <Body> + + <Relatives id="$pid" group="$relatives" maxgen="$maxgen" sortby="NAME"> + <!-- Relatives counter --> + <SetVar name="nrrelatives" value="$nrrelatives + 1" /> + <SetVar name="printname" value="0" /> + <!-- Birth --> + <if condition="$fbirt=='1'"> + <!-- Total Event Counter --> + <SetVar name="nrevent" value="$nrevent + 2" /> + <if condition="@BIRT:DATE==''"> + <!-- Missing event counter --> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BIRT:DATE')" /></Cell> + </if> + <if condition="@BIRT:PLAC==''"> + <!-- Missing event counter --> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BIRT:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <!-- Total Event Counter --> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@BIRT:SOUR==''"> + <!-- Missing event counter --> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BIRT:SOUR')" /></Cell> + </if> + </if> + </if> + + <!-- Baptism / Christining --> + <if condition="$fbapm=='1'"> + <!-- Total Event Counter --> + <SetVar name="nrevent" value="$nrevent + 2" /> + <SetVar name="printbapm" value="0" /> + <!-- Baptism --> + <if condition="(@CHR:DATE=='') and (@CHR:PLAC=='') and (@CHR:SOUR=='')"> + <if condition="@BAPM:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BAPM:DATE')" /></Cell> + </if> + <if condition="@BAPM:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BAPM:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@BAPM:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BAPM:SOUR')" /></Cell> + </if> + </if> + <SetVar name="printbapm" value="1" /> + </if> + + <!-- Christining --> + <if condition="((@CHR:DATE=='') or (@CHR:PLAC=='')) and ($printbapm==0)"> + <if condition="@CHR:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('CHR:DATE')" /></Cell> + </if> + <if condition="@CHR:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('CHR:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@CHR:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('CHR:SOUR')" /></Cell> + </if> + </if> + </if> + </if> + + <!-- BARM - male only --> + <if condition="($fbarm=='1') and (@SEX=='M')"> + <SetVar name="nrevent" value="$nrevent + 2" /> + <if condition="@BARM:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BARM:DATE')" /></Cell> + </if> + <if condition="@BARM:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BARM:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@BARM:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BARM:SOUR')" /></Cell> + </if> + </if> + </if> + + <!-- BASM - female only --> + <if condition="($fbasm=='1') and (@SEX=='F')"> + <SetVar name="nrevent" value="$nrevent + 2" /> + <if condition="@BASM:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BASM:DATE')" /></Cell> + </if> + <if condition="@BASM:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BASM:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@BASM:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BASM:SOUR')" /></Cell> + </if> + </if> + </if> + + <!-- CONF --> + <if condition="$fconf=='1'"> + <SetVar name="nrevent" value="$nrevent + 2" /> + <if condition="@CONF:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('CONF:DATE')" /></Cell> + </if> + <if condition="@CONF:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('CONF:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@CONF:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('CONF:SOUR')" /></Cell> + </if> + </if> + </if> + + <!-- ENGA --> + <if condition="$fenga=='1'"> + <SetVar name="nrevent" value="$nrevent + 2" /> + <Gedcom id="@FAMS"> + <if condition="@ENGA:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('ENGA:DATE')" /></Cell> + </if> + <if condition="@ENGA:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('ENGA:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@ENGA:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('ENGA:SOUR')" /></Cell> + </if> + </if> + </Gedcom> + </if> + + <!-- FCOM --> + <if condition="$ffcom=='1'"> + <SetVar name="nrevent" value="$nrevent + 2" /> + <if condition="@FCOM:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('FCOM:DATE')" /></Cell> + </if> + <if condition="@FCOM:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('FCOM:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@FCOM:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('FCOM:SOUR')" /></Cell> + </if> + </if> + </if> + + <!-- MARB --> + <if condition="$fmarb=='1'"> + <SetVar name="nrevent" value="$nrevent + 2" /> + <Gedcom id="@FAMS"> + <if condition="@MARB:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('MARB:DATE')" /></Cell> + </if> + <if condition="@MARB:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('MARB:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@MARB:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('MARB:SOUR')" /></Cell> + </if> + </if> + </Gedcom> + </if> + + <!-- MARM --> + <if condition="$fmarr=='1'"> + <SetVar name="nrevent" value="$nrevent + 2" /> + <Gedcom id="@FAMS"> + <if condition="@MARR:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('MARR:DATE')" /></Cell> + </if> + <if condition="@MARR:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('MARR:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@MARR:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('MARR:SOUR')" /></Cell> + </if> + </if> + </Gedcom> + </if> + + <!-- DEAT --> + <if condition="$fdeat=='1'"> + <SetVar name="nrevent" value="$nrevent + 2" /> + <if condition="@DEAT:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('DEAT:DATE')" /></Cell> + </if> + <if condition="@DEAT:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('DEAT:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@DEAT:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('DEAT:SOUR')" /></Cell> + </if> + </if> + </if> + + <!-- BURI --> + <if condition="$fburi=='1'"> + <SetVar name="nrevent" value="$nrevent + 2" /> + <if condition="@BURI:DATE==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BURI:DATE')" /></Cell> + </if> + <if condition="@BURI:PLAC==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BURI:PLAC')" /></Cell> + </if> + <if condition="$fsour=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@BURI:SOUR==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('BURI:SOUR')" /></Cell> + </if> + </if> + </if> + + <!-- RELI --> + <if condition="$freli=='1'"> + <SetVar name="nrevent" value="$nrevent + 1" /> + <if condition="@RELI==''"> + <SetVar name="nrmissingevent" value="$nrmissingevent + 1" /> + <if condition="$printname=='1'"> + <Cell style="list_value" width="$name"> </Cell> + </if> + <if condition="$printname=='0'"> + <Cell style="list_value" width="$name"><GetPersonName id="" /> - (<GedcomValue tag="@id" />)</Cell> + <SetVar name="printname" value="1" /> + </if> + <Cell newline="1" style="list_value"><var var="translate_fact('RELI')" /></Cell> + </if> + </if> + + <if condition="$printname=='1'"> + <SetVar name="nrprinted" value="$nrprinted + 1" /> + <TextBox height="1" newline="1" padding="0"/> + <Line /> + <TextBox height="1" newline="1" padding="0"/> + </if> + + </Relatives> + + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total individuals')"/>: <var var="nrprinted"/> / <var var="nrrelatives"/></Cell> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total events')"/>: <var var="nrmissingevent"/> / <var var="nrevent"/></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + + </Body> + + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now/></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/notes/module.php b/modules_v2/notes/module.php new file mode 100644 index 0000000000..6485ef6989 --- /dev/null +++ b/modules_v2/notes/module.php @@ -0,0 +1,162 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class notes_WT_Module extends WT_Module implements WT_Module_Tab { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Notes'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab to the individual page which displays the notes of an individual.'); + } + + // Implement WT_Module_Tab + public function defaultTabOrder() { + return 40; + } + + protected $noteCount = null; + + // Implement WT_Module_Tab + public function getTabContent() { + global $FACT_COUNT, $SHOW_LEVEL2_NOTES, $NAV_NOTES; + + ob_start(); + ?> +<table class="facts_table"> +<?php +if (!$this->controller->indi->canDisplayDetails()) { + echo "<tr><td class=\"facts_value\">"; + print_privacy_error(); + echo "</td></tr>"; +} else { + ?> + <tr> + <td></td> + <td class="descriptionbox rela"><input id="checkbox_note2" + type="checkbox" + <?php if ($SHOW_LEVEL2_NOTES) echo " checked=\"checked\""; ?> + onclick="toggleByClassName('TR', 'row_note2');" /> <label + for="checkbox_note2"><?php echo WT_I18N::translate('Show all notes'); ?></label> + <?php echo help_link('show_fact_sources'); ?> + </td> + </tr> + <?php + $globalfacts = $this->controller->getGlobalFacts(); + foreach ($globalfacts as $key => $event) { + $fact = $event->getTag(); + if ($fact=="NAME") { + print_main_notes($event->getGedcomRecord(), 2, $this->controller->pid, $event->getLineNumber(), true); + } + $FACT_COUNT++; + } + $otherfacts = $this->controller->getOtherFacts(); + foreach ($otherfacts as $key => $event) { + $fact = $event->getTag(); + if ($fact=="NOTE") { + print_main_notes($event->getGedcomRecord(), 1, $this->controller->pid, $event->getLineNumber()); + } + $FACT_COUNT++; + } + // 2nd to 5th level notes/sources + $this->controller->indi->add_family_facts(false); + foreach ($this->controller->getIndiFacts() as $key => $factrec) { + for ($i=2; $i<6; $i++) { + print_main_notes($factrec->getGedcomRecord(), $i, $this->controller->pid, $factrec->getLineNumber(), true); + } + } + if ($this->get_note_count()==0) echo "<tr><td id=\"no_tab2\" colspan=\"2\" class=\"facts_value\">".WT_I18N::translate('There are no Notes for this individual.')."</td></tr>"; + //-- New Note Link + if ($this->controller->indi->canEdit()) { + ?> + <tr> + <td class="facts_label"><?php echo WT_I18N::translate('Add Note'), help_link('add_note'); ?></td> + <td class="facts_value"><a href="javascript:;" + onclick="add_new_record('<?php echo $this->controller->pid; ?>','NOTE'); return false;"><?php echo WT_I18N::translate('Add a new note'); ?></a> + <br /> + </td> + </tr> + <tr> + <td class="facts_label"><?php echo WT_I18N::translate('Add Shared Note'), help_link('add_shared_note'); ?></td> + <td class="facts_value"><a href="javascript:;" + onclick="add_new_record('<?php echo $this->controller->pid; ?>','SHARED_NOTE'); return false;"><?php echo WT_I18N::translate('Add a new shared note'); ?></a> + <br /> + </td> + </tr> + <?php + } +} +?> +</table> +<br /> +<?php +if (!$SHOW_LEVEL2_NOTES) { + ?> +<script type="text/javascript"> + <!-- + toggleByClassName('TR', 'row_note2'); + //--> + </script> + <?php + } + return '<div id="'.$this->getName().'_content">'.ob_get_clean().'</div>'; + } + + function get_note_count() { + if ($this->noteCount===null) { + $ct = preg_match_all("/\d NOTE /", $this->controller->indi->getGedcomRecord(), $match, PREG_SET_ORDER); + foreach ($this->controller->indi->getSpouseFamilies() as $sfam) + $ct += preg_match("/\d NOTE /", $sfam->getGedcomRecord()); + $this->noteCount = $ct; + } + return $this->noteCount; + } + + // Implement WT_Module_Tab + public function hasTabContent() { + return WT_USER_CAN_EDIT || $this->get_note_count()>0; + } + // Implement WT_Module_Tab + public function canLoadAjax() { + return true; + } + + // Implement WT_Module_Tab + public function getPreLoadContent() { + return ''; + } + + // Implement WT_Module_Tab + public function getJSCallback() { + return ''; + } +} diff --git a/modules_v2/occupation_report/module.php b/modules_v2/occupation_report/module.php new file mode 100644 index 0000000000..890f7f44a0 --- /dev/null +++ b/modules_v2/occupation_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class occupation_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Occupation report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of people who had a given occupation.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_USER; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('indis'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/occupation_report/report.xml b/modules_v2/occupation_report/report.xml new file mode 100644 index 0000000000..18f2cfbdd2 --- /dev/null +++ b/modules_v2/occupation_report/report.xml @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Occupation report')" /></Title> + <Description><var var="WT_I18N::translate('A report of people who had a given occupation.')" /></Description> + <Input name="occupation" lookup="OCCU" type="text"><var var="translate_fact('OCCU')" /> </Input> + <Input name="sortby" type="select" default="NAME" options="none=>WT_I18N::translate('None')|NAME=>WT_I18N::translate('Name')|BIRT:DATE=>translate_fact('BIRT:DATE')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="16" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8"/> + <!-- Standard text --> + <Style name="text" font="$fonts" size="8"/> + <!-- Column labels --> + <Style name="label" font="$fonts" size="10" style="b" /> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + + <!-- landscape orientation --> + <SetVar name="namewidth" value="180"/> + <SetVar name="datewidth" value="95"/> + <SetVar name="occuwidth" value="130"/> + <SetVar name="occudatewidth" value="95"/> + <SetVar name="placewidth" value="100"/> + <SetVar name="printedoccupation" value="0" /> + <SetVar name="morespaceindi" value="$namewidth + $datewidth" /> + + <Doc pageSize="$pageSize" orientation="landscape"> + <Header> + <Cell align="center" height="20" newline="1" style="header"><var var="WT_I18N::translate('Occupation report')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" width="$namewidth"> + <Text style="label"><var var="WT_I18N::translate('Name')" /></Text> + </TextBox> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='BIRT:DATE'"><SetVar name="fill" value="#AAAAAA" /></if> + <TextBox bgcolor="$fill" border="1" width="$datewidth"> + <Text style="label"><var var="translate_fact('BIRT:DATE')" /></Text> + </TextBox> + <!-- should print and sort by birth date --> + + <TextBox border="1" width="$occuwidth"> + <Text style="label"><var var="translate_fact('OCCU')" /></Text> + </TextBox> + <TextBox border="1" width="$occudatewidth"> + <Text style="label"><var var="translate_fact('DATE')" /></Text> + </TextBox> + <TextBox border="1" width="$placewidth"> + <Text style="label"><var var="translate_fact('PLAC')" /></Text> + </TextBox> + + <TextBox border="1" newline="1"> + <Text style="label"><var var="translate_fact('NOTE')" /></Text> + </TextBox> + </Header> + <Body> + <List list="individual" filter1="OCCU CONTAINS $occupation" sortby="$sortby"> + <SetVar name="moreoccupation" value="0" /> + <!-- Printed List counter --> + <SetVar name="printedoccupation" value="$printedoccupation + 1" /> + <Cell style="text" width="$namewidth"><GetPersonName id="" /> + </Cell> + <Cell style="text" width="$datewidth"><GedcomValue tag="BIRT:DATE" newline="1" /></Cell> + <RepeatTag tag="OCCU"> + <!-- Intend the fact line if more then one occupation --> + <if condition="$moreoccupation==1"> + <Cell style="text" width="$morespaceindi"> </Cell> + </if> + <Cell style="text" width="$occuwidth"><GedcomValue tag="OCCU"/></Cell> + <!-- Date of the fact --> + <Cell style="text" width="$occudatewidth"><GedcomValue tag="OCCU:DATE"/></Cell> + <!-- Place of the fact --> + <Cell style="text" width="$placewidth"><GedcomValue tag="OCCU:PLAC"/></Cell> + <!-- Note text --> + <Cell style="text" newline="1"> + <RepeatTag tag="OCCU"> + <GedcomValue tag="OCCU:NOTE"/> + <if condition="OCCU:NOTE!=''"> + <br /><GedcomValue tag="OCCU:NOTE"/> + </if> + </RepeatTag> + </Cell> + <SetVar name="moreoccupation" value="1" /> + </RepeatTag> + </List> + <Cell align="rightrtl" newline="1" style="label"><br /><var var="WT_I18N::translate('Total individuals')" />: <ListTotal /></Cell> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now /></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/page_menu/module.php b/modules_v2/page_menu/module.php new file mode 100644 index 0000000000..f76e6ce8a2 --- /dev/null +++ b/modules_v2/page_menu/module.php @@ -0,0 +1,65 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class page_menu_WT_Module extends WT_Module implements WT_Module_Menu { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Page Menu'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a menu to the menu bar which provides page specific options.'); + } + + // Implement WT_Module_Menu + public function defaultMenuOrder() { + return 10; + } + + // Implement WT_Module_Menu + public function getMenu() { + global $controller; + + $menu = null; + if (empty($controller)) { + return null; + } + + if (WT_USER_CAN_EDIT && method_exists($controller, 'getEditMenu')) { + $menu = $controller->getEditMenu(); + if ($menu) { + $menu->addClass('menuitem', 'menuitem_hover', 'submenu', 'icon_large_gedcom'); + $menu->addLabel($menu->label, 'down'); + } + } + return $menu; + } +} diff --git a/modules_v2/pedigree_report/module.php b/modules_v2/pedigree_report/module.php new file mode 100644 index 0000000000..25a84e87fc --- /dev/null +++ b/modules_v2/pedigree_report/module.php @@ -0,0 +1,70 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class pedigree_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Pedigree Chart'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of a person\'s ancestors, formatted as a tree.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + global $controller; + + if ($controller && isset($controller->pid)) { + $pid='&pid='.$controller->pid; + } elseif ($controller && isset($controller->rootid)) { + $pid='&pid='.$controller->rootid; + } else { + $pid=''; + } + + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'.$pid); + $menu->addIcon('pedigree'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + + } +} diff --git a/modules_v2/pedigree_report/report.xml b/modules_v2/pedigree_report/report.xml new file mode 100644 index 0000000000..5763843186 --- /dev/null +++ b/modules_v2/pedigree_report/report.xml @@ -0,0 +1,1404 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Pedigree Chart')" /></Title> + <Description><var var="WT_I18N::translate('A report of a person\'s ancestors, formatted as a tree.')" /></Description> + <Input name="pid" lookup="INDI" type="text" default=""><var var="WT_I18N::translate('Enter Individual ID')" /></Input> + <Input name="orientation" type="select" default="portrait" options="portrait=>WT_I18N::translate('Portrait')|landscape=>WT_I18N::translate('Landscape')"><var var="WT_I18N::translate('Orientation')"/></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <if condition="$orientation=='portrait'"> + <Style name="header" font="$fonts" size="18" /> + <Style name="label1" font="$fonts" size="9" /> + <Style name="name" font="$fonts" size="9" /> + <Style name="text" font="$fonts" size="7" /> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + + <!-- Horizontal Number/Name/Fact text --> + <SetVar name="number_1_2_3" value="18" /> + <SetVar name="name_1_2_3" value="32" /> + <SetVar name="number_4_to_7" value="161" /> + <SetVar name="name_4_to_7" value="175" /> + <SetVar name="number_8_to_9" value="299" /> + <SetVar name="number_10_to_15" value="293" /> + <SetVar name="name_8_to_15" value="312" /> + <SetVar name="number_16_to_31" value="444" /> + <SetVar name="name_16_to_31" value="462" /> + + <!-- Truncate variables --> + <SetVar name="truncatename" value="25" /> + <SetVar name="trunc_123" value="28" /> + <SetVar name="trunc_123_place" value="33" /> + <SetVar name="trunc_4_to_7_place" value="33" /> + <SetVar name="trunc_place" value="40" /> + <SetVar name="trunc_dateplace" value="33" /> + + <Doc pageSize="$pageSize" leftmargin="1" rightmargin="1"> + <Header> + <Cell height="20" newline="1" left="20" style="header"><var var="WT_I18N::translate('Pedigree Chart')" /></Cell> + <Cell align="rightrtl" height="10" newline="1" style="date"><Now /></Cell> + </Header> + <Body> + <Line x1="29" y1="370" x2="190" y2="370" /> + <Line x1="29" y1="370" x2="29" y2="570" /> + <Line x1="29" y1="570" x2="172" y2="570" /> + <Line x1="29" y1="220" x2="29" y2="370" /> + <Line x1="29" y1="220" x2="172" y2="220" /> + + <Line x1="172" y1="130" x2="172" y2="290" /> + <Line x1="172" y1="450" x2="172" y2="610" /> + <Line x1="172" y1="130" x2="310" y2="130" /> + <Line x1="172" y1="290" x2="310" y2="290" /> + <Line x1="172" y1="450" x2="310" y2="450" /> + <Line x1="172" y1="610" x2="310" y2="610" /> + + <Gedcom id="$pid"> + <TextBox padding="0" width="160" height="10" align="left" left="$number_1_2_3" top="360" reseth="1"> + <Text style="label1">1.</Text> + </TextBox> + <TextBox padding="0" width="160" height="10" align="left" left="$name_1_2_3" top="360" reseth="1"> + <Text style="name"><GetPersonName id="$pid" truncate="$trunc_place" /></Text> + </TextBox> + <TextBox padding="0" width="160" height="10" align="left" left="$name_1_2_3" top="372" reseth="1"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_place" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_place" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_place" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_place" /> + </Gedcom> + </Text> + </TextBox> + + <TextBox padding="0" width="130" height="10" align="left" left="$number_1_2_3" top="210" reseth="1"> + <Text style="label1">2.</Text> + </TextBox> + <TextBox padding="0" width="137" height="10" align="left" left="$name_1_2_3" top="210" reseth="1"> + <Text style="name"><Gedcom id="@FAMC"><GetPersonName id="@HUSB" truncate="$trunc_123" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_1_2_3" top="222" reseth="1"> + <Gedcom id="@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_123_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_123_place" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_123_place" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_123_place" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_123_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_123_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="130" height="10" align="left" left="$number_1_2_3" top="560" reseth="1"> + <Text style="label1">3.</Text> + </TextBox> + <TextBox padding="0" width="137" height="10" align="left" left="$name_1_2_3" top="560" reseth="1"> + <Text style="name"><Gedcom id="@FAMC"><GetPersonName id="@WIFE" truncate="$trunc_123" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_1_2_3" top="572" reseth="1"> + <Gedcom id="@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_123_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_123_place" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_123_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_123_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="122" height="10" align="left" left="$number_4_to_7" top="120" reseth="1"> + <Text style="label1">4.</Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_4_to_7" top="120" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="122" height="10" align="left" left="$name_4_to_7" top="132" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_4_to_7_place" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_4_to_7_place" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_4_to_7_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="122" height="10" align="left" left="$number_4_to_7" top="280" reseth="1"> + <Text style="label1">5.</Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_4_to_7" top="280" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="122" height="10" align="left" left="$name_4_to_7" top="292" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_4_to_7_place" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_4_to_7_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + + <TextBox padding="0" width="122" height="10" align="left" left="$number_4_to_7" top="440" reseth="1"> + <Text style="label1">6.</Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_4_to_7" top="440" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="122" height="10" align="left" left="$name_4_to_7" top="452" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_4_to_7_place" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_4_to_7_place" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_4_to_7_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="122" height="10" align="left" left="$number_4_to_7" top="600" reseth="1"> + <Text style="label1">7.</Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_4_to_7" top="600" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="122" height="10" align="left" left="$name_4_to_7" top="612" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_4_to_7_place" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_4_to_7_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_4_to_7_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + + + <Line x1="310" y1="90" x2="310" y2="170" /> + <Line x1="310" y1="90" x2="460" y2="90" /> + <Line x1="310" y1="170" x2="460" y2="170" /> + <TextBox padding="0" width="130" height="10" align="left" left="$number_8_to_9" top="80" reseth="1"> + <Text style="label1">8.</Text> + </TextBox> + <TextBox padding="0" width="140" height="10" align="left" left="$name_8_to_15" top="80" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_8_to_15" top="92" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="130" height="10" align="left" left="$number_8_to_9" top="160" reseth="1"> + <Text style="label1">9.</Text> + </TextBox> + <TextBox padding="0" width="140" height="10" align="left" left="$name_8_to_15" top="160" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_8_to_15" top="172" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="310" y1="250" x2="310" y2="330" /> + <Line x1="310" y1="250" x2="460" y2="250" /> + <Line x1="310" y1="330" x2="460" y2="330" /> + <TextBox padding="0" width="130" height="10" align="left" left="$number_10_to_15" top="240" reseth="1"> + <Text style="label1">10.</Text> + </TextBox> + <TextBox padding="0" width="140" height="10" align="left" left="$name_8_to_15" top="240" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_8_to_15" top="252" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="130" height="10" align="left" left="$number_10_to_15" top="320" reseth="1"> + <Text style="label1">11.</Text> + </TextBox> + <TextBox padding="0" width="140" height="10" align="left" left="$name_8_to_15" top="320" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_8_to_15" top="332" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="310" y1="410" x2="310" y2="490" /> + <Line x1="310" y1="410" x2="460" y2="410" /> + <Line x1="310" y1="490" x2="460" y2="490" /> + <TextBox padding="0" width="130" height="10" align="left" left="$number_10_to_15" top="400" reseth="1"> + <Text style="label1">12.</Text> + </TextBox> + <TextBox padding="0" width="140" height="10" align="left" left="$name_8_to_15" top="400" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_8_to_15" top="412" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="130" height="10" align="left" left="$number_10_to_15" top="480" reseth="1"> + <Text style="label1">13.</Text> + </TextBox> + <TextBox padding="0" width="140" height="10" align="left" left="$name_8_to_15" top="480" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_8_to_15" top="492" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="310" y1="570" x2="310" y2="650" /> + <Line x1="310" y1="570" x2="460" y2="570" /> + <Line x1="310" y1="650" x2="460" y2="650" /> + <TextBox padding="0" width="130" height="10" align="left" left="$number_10_to_15" top="560" reseth="1"> + <Text style="label1">14.</Text> + </TextBox> + <TextBox padding="0" width="140" height="10" align="left" left="$name_8_to_15" top="560" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_8_to_15" top="572" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="130" height="10" align="left" left="$number_10_to_15" top="640" reseth="1"> + <Text style="label1">15.</Text> + </TextBox> + <TextBox padding="0" width="140" height="10" align="left" left="$name_8_to_15" top="640" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="130" height="10" align="left" left="$name_8_to_15" top="652" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + + + <Line x1="460" y1="70" x2="460" y2="110" /> + <Line x1="460" y1="70" x2="590" y2="70" /> + <Line x1="460" y1="110" x2="590" y2="110" /> + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="60" reseth="1"> + <Text style="label1">16.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="60" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="72" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="30" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="100" reseth="1"> + <Text style="label1">17.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="100" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="112" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="460" y1="150" x2="460" y2="190" /> + <Line x1="460" y1="150" x2="590" y2="150" /> + <Line x1="460" y1="190" x2="590" y2="190" /> + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="140" reseth="1"> + <Text style="label1">18.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="140" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="152" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="30" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="180" reseth="1"> + <Text style="label1">19.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="180" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="192" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="460" y1="230" x2="460" y2="270" /> + <Line x1="460" y1="230" x2="590" y2="230" /> + <Line x1="460" y1="270" x2="590" y2="270" /> + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="220" reseth="1"> + <Text style="label1">20.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="220" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="232" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="30" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="260" reseth="1"> + <Text style="label1">21.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="260" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="272" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="460" y1="310" x2="460" y2="350" /> + <Line x1="460" y1="310" x2="590" y2="310" /> + <Line x1="460" y1="350" x2="590" y2="350" /> + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="300" reseth="1"> + <Text style="label1">22.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="300" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="312" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="30" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="340" reseth="1"> + <Text style="label1">23.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="340" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="352" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="460" y1="390" x2="460" y2="430" /> + <Line x1="460" y1="390" x2="590" y2="390" /> + <Line x1="460" y1="430" x2="590" y2="430" /> + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="380" reseth="1"> + <Text style="label1">24.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="380" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="392" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="30" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="420" reseth="1"> + <Text style="label1">25.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="420" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="432" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="460" y1="470" x2="460" y2="510" /> + <Line x1="460" y1="470" x2="590" y2="470" /> + <Line x1="460" y1="510" x2="590" y2="510" /> + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="460" reseth="1"> + <Text style="label1">26.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="460" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="472" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="30" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="500" reseth="1"> + <Text style="label1">27.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="500" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="512" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="460" y1="550" x2="460" y2="590" /> + <Line x1="460" y1="550" x2="590" y2="550" /> + <Line x1="460" y1="590" x2="590" y2="590" /> + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="540" reseth="1"> + <Text style="label1">28.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="540" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="552" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="30" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="580" reseth="1"> + <Text style="label1">29.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="580" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="592" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="460" y1="630" x2="460" y2="670" /> + <Line x1="460" y1="630" x2="590" y2="630" /> + <Line x1="460" y1="670" x2="590" y2="670" /> + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" top="620" reseth="1"> + <Text style="label1">30.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" top="620" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="632" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="30" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" width="150" height="10" align="left" left="$number_16_to_31" newline="1" top="660" reseth="1"> + <Text style="label1">31.</Text> + </TextBox> + <TextBox padding="0" width="150" height="10" align="left" left="$name_16_to_31" newline="1" top="660" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" width="135" height="10" align="left" left="$name_16_to_31" top="672" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="30" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="30" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <SetVar name="my" value="440" /> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS"> + <if condition="$my LT 560"> + <TextBox padding="0" width="125" height="10" align="left" left="38" top="$my" reseth="1"> + <if condition="$pid==@HUSB"> + <Text style="name"><GetPersonName id="@WIFE" truncate="$trunc_123" /></Text> + </if> + <if condition="$pid==@WIFE"> + <Text style="name"><GetPersonName id="@HUSB" truncate="$trunc_123" /></Text> + </if> + </TextBox> + <SetVar name="my" value="$my+10" /> + <Line x1="38" y1="$my" x2="160" y2="$my" /> + </if> + <SetVar name="my" value="$my+2" /> + <RepeatTag tag="CHIL"> + <if condition="$my LT 560"> + <TextBox padding="0" width="120" height="10" align="left" left="48" top="$my" reseth="1"> + <Text style="text"><GetPersonName id="@CHIL" truncate="32" /></Text> + </TextBox> + <SetVar name="my" value="$my+10" /> + </if> + </RepeatTag> + </Gedcom> + </RepeatTag> + </Gedcom> + </Body> + </Doc> + </if> + <if condition="$orientation=='landscape'"> + <Style name="header" font="$fonts" size="18"/> + <Style name="label1" font="$fonts" size="9" /> + <Style name="name" font="$fonts" size="9" /> + <Style name="text" font="$fonts" size="7" /> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + + <!-- Horizontal Number/Name/Fact text --> + <SetVar name="number_1_2_3" value="19" /> + <SetVar name="name_1_2_3" value="35" /> + <SetVar name="number_4_to_7" value="197" /> + <SetVar name="name_4_to_7" value="213" /> + <SetVar name="number_8_to_9" value="377" /> + <SetVar name="number_10_to_15" value="374" /> + <SetVar name="name_8_to_15" value="393" /> + <SetVar name="number_16_to_31" value="554" /> + <SetVar name="name_16_to_31" value="573" /> + + <!-- Truncate variables --> + <SetVar name="truncatename" value="32" /> + <SetVar name="trunc_place" value="40" /> + <SetVar name="trunc_dateplace" value="27" /> + + <Doc pageSize="$pageSize" orientation="landscape" leftmargin="1" rightmargin="1" topmargin="65"> + <Header> + <Cell height="20" newline="1" left="20" style="header"><var var="WT_I18N::translate('Pedigree Chart')" /></Cell> + <Cell align="rightrtl" height="10" newline="1" style="date"><Now /></Cell> + </Header> + <Body> + <Line x1="32" y1="270" x2="210" y2="270" /> + <Line x1="32" y1="270" x2="32" y2="425" /> + <Line x1="32" y1="425" x2="210" y2="425" /> + <Line x1="32" y1="150" x2="32" y2="270" /> + <Line x1="32" y1="150" x2="210" y2="150" /> + + <Line x1="210" y1="95" x2="210" y2="215" /> + <Line x1="210" y1="335" x2="210" y2="455" /> + <Line x1="210" y1="95" x2="390" y2="95" /> + <Line x1="210" y1="215" x2="390" y2="215" /> + <Line x1="210" y1="335" x2="390" y2="335" /> + <Line x1="210" y1="455" x2="390" y2="455" /> + + <Gedcom id="$pid"> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_1_2_3" top="258" reseth="1"> + <Text style="label1">1.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_1_2_3" top="258" reseth="1"> + <Text style="name"><GetPersonName id="$pid" truncate="$truncatename" /></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_1_2_3" top="272" reseth="1"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_place" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_place" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_place" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_place" /> + </Gedcom> + </Text> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_1_2_3" top="138" reseth="1"> + <Text style="label1">2.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_1_2_3" top="138" reseth="1"> + <Text style="name"><Gedcom id="@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_1_2_3" top="152" reseth="1"> + <Gedcom id="@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_place" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_place" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_place" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_1_2_3" top="413" reseth="1"> + <Text style="label1">3.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_1_2_3" top="413" reseth="1"> + <Text style="name"><Gedcom id="@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_1_2_3" top="427" reseth="1"> + <Gedcom id="@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_place" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_4_to_7" top="83" reseth="1"> + <Text style="label1">4.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="170" height="10" align="left" left="$name_4_to_7" top="83" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_4_to_7" top="97" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_place" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_place" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_place" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_4_to_7" top="203" reseth="1"> + <Text style="label1">5.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="170" height="10" align="left" left="$name_4_to_7" top="203" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_4_to_7" top="217" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_place" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_4_to_7" top="323" reseth="1"> + <Text style="label1">6.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="170" height="10" align="left" left="$name_4_to_7" top="323" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_4_to_7" top="337" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_place" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_place" /> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:PLAC" truncate="$trunc_place" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_4_to_7" top="443" reseth="1"> + <Text style="label1">7.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="170" height="10" align="left" left="$name_4_to_7" top="443" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_4_to_7" top="457" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="BIRT" /> <GedcomValue tag="BIRT:PLAC" truncate="$trunc_place" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_place" /> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:PLAC" truncate="$trunc_place" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + + <Line x1="390" y1="65" x2="390" y2="125" /> + <Line x1="390" y1="65" x2="570" y2="65" /> + <Line x1="390" y1="125" x2="570" y2="125" /> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_8_to_9" top="53" reseth="1"> + <Text style="label1">8.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="53" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="67" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="MARR:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_8_to_9" top="113" reseth="1"> + <Text style="label1">9.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="113" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="127" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="BIRT:PLAC" truncate="32" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="390" y1="185" x2="390" y2="245" /> + <Line x1="390" y1="185" x2="570" y2="185" /> + <Line x1="390" y1="245" x2="570" y2="245" /> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_10_to_15" top="173" reseth="1"> + <Text style="label1">10.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="173" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="187" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="MARR:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_10_to_15" top="233" reseth="1"> + <Text style="label1">11.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="233" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="247" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="DEAT:PLAC" truncate="32" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="390" y1="305" x2="390" y2="365" /> + <Line x1="390" y1="305" x2="570" y2="305" /> + <Line x1="390" y1="365" x2="570" y2="365" /> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_10_to_15" top="293" reseth="1"> + <Text style="label1">12.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="293" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="307" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="MARR:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_10_to_15" top="353" reseth="1"> + <Text style="label1">13.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="353" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="367" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="BIRT:PLAC" truncate="32" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="390" y1="425" x2="390" y2="485" /> + <Line x1="390" y1="425" x2="570" y2="425" /> + <Line x1="390" y1="485" x2="570" y2="485" /> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_10_to_15" top="413" reseth="1"> + <Text style="label1">14.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="413" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="427" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="MARR:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$number_10_to_15" top="473" reseth="1"> + <Text style="label1">15.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="473" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="160" height="10" align="left" left="$name_8_to_15" top="487" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="BIRT:PLAC" truncate="$trunc_dateplace" /> + <Gedcom id="DEAT"> + <br /><varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="$trunc_dateplace" /> + <GedcomValue tag="DEAT:PLAC" truncate="$trunc_dateplace" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + + + <Line x1="570" y1="50" x2="570" y2="80" /> + <Line x1="570" y1="50" x2="750" y2="50" /> + <Line x1="570" y1="80" x2="750" y2="80" /> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="38" reseth="1"> + <Text style="label1">16.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="38" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="52" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="68" reseth="1"> + <Text style="label1">17.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="68" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="82" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="570" y1="110" x2="570" y2="140" /> + <Line x1="570" y1="110" x2="750" y2="110" /> + <Line x1="570" y1="140" x2="750" y2="140" /> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="98" reseth="1"> + <Text style="label1">18.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="98" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="112" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="129" reseth="1"> + <Text style="label1">19.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="129" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="142" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="570" y1="170" x2="570" y2="200" /> + <Line x1="570" y1="170" x2="750" y2="170" /> + <Line x1="570" y1="200" x2="750" y2="200" /> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="158" reseth="1"> + <Text style="label1">20.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="158" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="172" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="189" reseth="1"> + <Text style="label1">21.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="189" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="202" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="570" y1="230" x2="570" y2="260" /> + <Line x1="570" y1="230" x2="750" y2="230" /> + <Line x1="570" y1="260" x2="750" y2="260" /> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="218" reseth="1"> + <Text style="label1">22.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="218" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="232" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="249" reseth="1"> + <Text style="label1">23.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="249" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="262" reseth="1"> + <Gedcom id="@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="570" y1="290" x2="570" y2="320" /> + <Line x1="570" y1="290" x2="750" y2="290" /> + <Line x1="570" y1="320" x2="750" y2="320" /> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="278" reseth="1"> + <Text style="label1">24.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="278" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="292" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="309" reseth="1"> + <Text style="label1">25.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="309" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="322" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="570" y1="350" x2="570" y2="380" /> + <Line x1="570" y1="350" x2="750" y2="350" /> + <Line x1="570" y1="380" x2="750" y2="380" /> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="338" reseth="1"> + <Text style="label1">26.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="338" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="352" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="369" reseth="1"> + <Text style="label1">27.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="369" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="382" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="570" y1="410" x2="570" y2="440" /> + <Line x1="570" y1="410" x2="750" y2="410" /> + <Line x1="570" y1="440" x2="750" y2="440" /> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="398" reseth="1"> + <Text style="label1">28.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="398" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="412" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="429" reseth="1"> + <Text style="label1">29.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="429" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="442" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <Line x1="570" y1="470" x2="570" y2="500" /> + <Line x1="570" y1="470" x2="750" y2="470" /> + <Line x1="570" y1="500" x2="750" y2="500" /> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="458" reseth="1"> + <Text style="label1">30.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="458" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@HUSB" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="472" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@HUSB"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + <Gedcom id="@FAMS"> + <br /><varLetter var="MARR" /> <GedcomValue tag="MARR:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$number_16_to_31" top="489" reseth="1"> + <Text style="label1">31.</Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="489" reseth="1"> + <Text style="name"><Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC"><GetPersonName id="@WIFE" truncate="$truncatename" /></Gedcom></Text> + </TextBox> + <TextBox padding="0" pagecheck="0" width="180" height="10" align="left" left="$name_16_to_31" top="502" reseth="1"> + <Gedcom id="@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE:@FAMC:@WIFE"> + <Text style="text"><varLetter var="BIRT" /> <GedcomValue tag="BIRT:DATE" truncate="20" /> + <Gedcom id="DEAT"> + <varLetter var="DEAT" /> <GedcomValue tag="DEAT:DATE" truncate="20" /> + </Gedcom> + </Text> + </Gedcom> + </TextBox> + + <SetVar name="my" value="335" /> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS"> + <if condition="$my LT 413"> + <TextBox padding="0" pagecheck="0" width="150" height="10" newline="1" align="left" left="38" top="$my" reseth="1"> + <if condition="$pid==@HUSB"> + <Text style="name"><GetPersonName id="@WIFE" truncate="$truncatename" /></Text> + </if> + <if condition="$pid==@WIFE"> + <Text style="name"><GetPersonName id="@HUSB" truncate="$truncatename" /></Text> + </if> + </TextBox> + <SetVar name="my" value="$my+10" /> + <Line x1="38" y1="$my" x2="160" y2="$my" /> + </if> + <SetVar name="my" value="$my+2" /> + <RepeatTag tag="CHIL"> + <if condition="$my LT 413"> + <TextBox padding="0" pagecheck="0" width="150" height="10" align="left" left="48" top="$my" reseth="1"> + <Text style="text"><GetPersonName id="@CHIL" truncate="$truncatename" /></Text> + </TextBox> + <SetVar name="my" value="$my+10" /> + </if> + </RepeatTag> + </Gedcom> + </RepeatTag> + </Gedcom> + </Body> + </Doc> + </if> +</Report> diff --git a/modules_v2/personal_facts/module.php b/modules_v2/personal_facts/module.php new file mode 100644 index 0000000000..0309b17e33 --- /dev/null +++ b/modules_v2/personal_facts/module.php @@ -0,0 +1,143 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class personal_facts_WT_Module extends WT_Module implements WT_Module_Tab { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Personal Facts'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab to the individual page which displays the facts of an individual and their close relatives.'); + } + + // Implement WT_Module_Tab + public function defaultTabOrder() { + return 10; + } + + // Implement WT_Module_Tab + public function getTabContent() { + global $FACT_COUNT, $EXPAND_RELATIVES_EVENTS, $n_chil, $n_gchi; + + /*if (isset($_COOKIE['row_rela'])) $EXPAND_RELATIVES_EVENTS = ($_COOKIE['row_rela']); + if (isset($_COOKIE['row_histo'])) $EXPAND_HISTO_EVENTS = ($_COOKIE['row_histo']); + else*/ $EXPAND_HISTO_EVENTS = false; + + //-- only need to add family facts on this tab + if (!isset($this->controller->skipFamilyFacts)) { + $this->controller->indi->add_family_facts(); + } + + ob_start(); + ?> + <table class="facts_table" style="margin-top:-2px;" cellpadding="0"> + <?php if (!$this->controller->indi->canDisplayDetails()) { + echo '<tr><td class="facts_value" colspan="2">'; + print_privacy_error(); + echo '</td></tr>'; + } else { + $indifacts = $this->controller->getIndiFacts(); + if (count($indifacts)==0) { ?> + <tr> + <td id="no_tab1" colspan="2" class="facts_value"><?php echo WT_I18N::translate('There are no Facts for this individual.'); ?> + </td> + </tr> + <?php } + if (!isset($this->controller->skipFamilyFacts)) { + ?> + <tr id="row_top"> + <td valign="top"></td> + <td class="descriptionbox rela"> + <input id="checkbox_rela_facts" type="checkbox" <?php if ($EXPAND_RELATIVES_EVENTS) echo ' checked="checked"'; ?> onclick="toggleByClassName('TR', 'row_rela');" /> + <label for="checkbox_rela_facts"><?php echo WT_I18N::translate('Events of close relatives'); ?></label> + <?php if (file_exists(get_site_setting('INDEX_DIRECTORY').'histo.'.WT_LOCALE.'.php')) { ?> + <input id="checkbox_histo" type="checkbox" <?php if ($EXPAND_HISTO_EVENTS) echo ' checked="checked"'; ?> onclick="toggleByClassName('TR', 'row_histo');" /> + <label for="checkbox_histo"><?php echo WT_I18N::translate('Historical facts'); ?></label> + <?php } ?> + </td> + </tr> + <?php + } + $yetdied=false; + $n_chil=1; + $n_gchi=1; + foreach ($indifacts as $value) { + if (strstr(WT_EVENTS_DEAT, $value->getTag())) { + $yetdied = true; + } + if (!is_null($value->getFamilyId())) { + if (!$yetdied) { + print_fact($value); + } + } else { + print_fact($value); + } + $FACT_COUNT++; + } + } + //-- new fact link + if ($this->controller->indi->canEdit()) { + print_add_new_fact($this->controller->pid, $indifacts, 'INDI'); + } + echo '</table><br />'; + echo WT_JS_START; + if (!$EXPAND_RELATIVES_EVENTS) { + echo "toggleByClassName('TR', 'row_rela');"; + } + if (!$EXPAND_HISTO_EVENTS) { + echo "toggleByClassName('TR', 'row_histo');"; + } + echo WT_JS_END; + return '<div id="'.$this->getName().'_content">'.ob_get_clean().'</div>'; + } + + // Implement WT_Module_Tab + public function hasTabContent() { + return true; + } + + // Implement WT_Module_Tab + public function canLoadAjax() { + // Don't load this tab using AJAX, otherwise search engines won't see it + return false; + } + + // Implement WT_Module_Tab + public function getPreLoadContent() { + return ''; + } + + // Implement WT_Module_Tab + public function getJSCallback() { + return ''; + } +} diff --git a/modules_v2/random_media/module.php b/modules_v2/random_media/module.php new file mode 100644 index 0000000000..94dffd1f1f --- /dev/null +++ b/modules_v2/random_media/module.php @@ -0,0 +1,501 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require_once WT_ROOT.'includes/functions/functions_print_facts.php'; + +class random_media_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Random Media'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The Random Media block randomly selects a photo or other media item from the currently active database and displays it to the user.<br /><br />The administrator determines whether this block can show media items associated with persons or events.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $foundlist, $MULTI_MEDIA, $TEXT_DIRECTION, $WT_IMAGES; + global $MEDIA_EXTERNAL, $MEDIA_DIRECTORY; + global $MEDIATYPE, $THUMBNAIL_WIDTH, $USE_MEDIA_VIEWER; + + if (!$MULTI_MEDIA) return; + + $filter =get_block_setting($block_id, 'filter', 'all'); + $controls=get_block_setting($block_id, 'controls', true); + $start =get_block_setting($block_id, 'start', false) || safe_GET_bool('start'); + $block =get_block_setting($block_id, 'block', true); + + $filters=array( + 'avi' =>get_block_setting($block_id, 'filter_avi', false), + 'bmp' =>get_block_setting($block_id, 'filter_bmp', true), + 'gif' =>get_block_setting($block_id, 'filter_gif', true), + 'jpg' =>get_block_setting($block_id, 'filter_jpeg', true), + 'jpeg' =>get_block_setting($block_id, 'filter_jpeg', true), + 'mp3' =>get_block_setting($block_id, 'filter_mp3', false), + 'ole' =>get_block_setting($block_id, 'filter_ole', true), + 'pcx' =>get_block_setting($block_id, 'filter_pcx', true), + 'pdf' =>get_block_setting($block_id, 'filter_pdf', false), + 'png' =>get_block_setting($block_id, 'filter_png', true), + 'tiff' =>get_block_setting($block_id, 'filter_tiff', true), + 'wav' =>get_block_setting($block_id, 'filter_wav', false), + 'audio' =>get_block_setting($block_id, 'filter_audio', false), + 'book' =>get_block_setting($block_id, 'filter_book', true), + 'card' =>get_block_setting($block_id, 'filter_card', true), + 'certificate'=>get_block_setting($block_id, 'filter_certificate', true), + 'coat' =>get_block_setting($block_id, 'filter_coat', true), + 'document' =>get_block_setting($block_id, 'filter_document', true), + 'electronic' =>get_block_setting($block_id, 'filter_electronic', true), + 'fiche' =>get_block_setting($block_id, 'filter_fiche', true), + 'film' =>get_block_setting($block_id, 'filter_film', true), + 'magazine' =>get_block_setting($block_id, 'filter_magazine', true), + 'manuscript' =>get_block_setting($block_id, 'filter_manuscript', true), + 'map' =>get_block_setting($block_id, 'filter_map', true), + 'newspaper' =>get_block_setting($block_id, 'filter_newspaper', true), + 'other' =>get_block_setting($block_id, 'filter_other', true), + 'painting' =>get_block_setting($block_id, 'filter_painting', true), + 'photo' =>get_block_setting($block_id, 'filter_photo', true), + 'tombstone' =>get_block_setting($block_id, 'filter_tombstone', true), + 'video' =>get_block_setting($block_id, 'filter_video', false), + ); + if ($cfg) { + foreach (array('filter', 'controls', 'start', 'filter_avi', 'filter_bmp', 'filter_gif', 'filter_jpeg', 'filter_mp3', 'filter_ole', 'filter_pcx', 'filter_pdf', 'filter_png', 'filter_tiff', 'filter_wav', 'filter_audio', 'filter_book', 'filter_card', 'filter_certificate', 'filter_coat', 'filter_document', 'filter_electronic', 'filter_fiche', 'filter_film', 'filter_magazine', 'filter_manuscript', 'filter_map', 'filter_newspaper', 'filter_other', 'filter_painting', 'filter_photo', 'filter_tombstone', 'filter_video', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + $medialist = array(); + $foundlist = array(); + + $medialist = get_medialist(false, '', true, true); + $ct = count($medialist); + if ($ct>0) { + $i=0; + $disp = false; + //-- try up to 40 times to get a media to display + while ($i<40) { + $error = false; + $value = array_rand($medialist); + if (WT_DEBUG) { + echo "<br />";print_r($medialist[$value]);echo "<br />"; + echo "Trying ".$medialist[$value]["XREF"]."<br />"; + } + $links = $medialist[$value]["LINKS"]; + $disp = ($medialist[$value]["EXISTS"]>0) && $medialist[$value]["LINKED"] && $medialist[$value]["CHANGE"]!="delete" ; + if (WT_DEBUG && !$disp && !$error) {$error = true; echo "<span class=\"error\">".$medialist[$value]["XREF"]." File does not exist, or is not linked to anyone, or is marked for deletion.</span><br />";} + + $disp &= canDisplayRecord($medialist[$value]["GEDFILE"], $medialist[$value]["GEDCOM"]); + + if (WT_DEBUG && !$disp && !$error) {$error = true; echo "<span class=\"error\">".$medialist[$value]["XREF"]." Failed to pass privacy</span><br />";} + + $isExternal = isFileExternal($medialist[$value]["FILE"]); + + if ($block && !$isExternal) $disp &= ($medialist[$value]["THUMBEXISTS"]>0); + if (WT_DEBUG && !$disp && !$error) {$error = true; echo "<span class=\"error\">".$medialist[$value]["XREF"]." thumbnail file could not be found</span><br />";} + + // Filter according to format and type (Default: unless configured otherwise, don't filter) + if ($medialist[$value]['FORM']!='' && !array_key_exists($medialist[$value]['FORM'], $filters)) { + $disp=false; + } elseif ($medialist[$value]['TYPE']!='' && !array_key_exists($medialist[$value]['TYPE'], $filters)) { + $disp=false; + } elseif (!empty($medialist[$value]["FORM"]) && !$filters[$medialist[$value]["FORM"]]) { + $disp=false; + } elseif (!empty($medialist[$value]["TYPE"]) && !$filters[$medialist[$value]["TYPE"]]) { + $disp=false; + } + if (WT_DEBUG && !$disp && !$error) {$error = true; echo "<span class=\"error\">".$medialist[$value]["XREF"]." failed Format or Type filters</span><br />"; + } + + if ($disp && count($links) != 0) { + if ($disp && $filter!="all") { + // Apply filter criteria + $ct = preg_match("/0 (@.*@) OBJE/", $medialist[$value]["GEDCOM"], $match); + $objectID = $match[1]; + //-- we could probably use the database for this filter + foreach ($links as $key=>$type) { + $gedrec = find_gedcom_record($key, WT_GED_ID); + $ct2 = preg_match("/(\d) OBJE {$objectID}/", $gedrec, $match2); + if ($ct2>0) { + $objectRefLevel = $match2[1]; + if ($filter=="indi" && $objectRefLevel!="1") $disp = false; + if ($filter=="event" && $objectRefLevel=="1") $disp = false; + if (WT_DEBUG && !$disp && !$error) {$error = true; echo "<span class=\"error\">".$medialist[$value]["XREF"]." failed to pass config filter</span><br />";} + } + else $disp = false; + } + } + } + //-- leave the loop if we find an image that works + if ($disp) { + break; + } + //-- otherwise remove the private media item from the list + else { + if (WT_DEBUG) echo "<span class=\"error\">".$medialist[$value]["XREF"]." Will not be shown</span><br />"; + unset($medialist[$value]); + } + //-- if there are no more media items, then try to get some more + if (count($medialist)==0) $medialist = get_medialist(false, '', true, true); + $i++; + } + if (!$disp) { + return false; + } + $id=$this->getName().$block_id; + $title=''; + $content = ''; + if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) { + if ($ctype=="gedcom") { + $name = WT_GEDCOM; + } else { + $name = WT_USER_NAME; + } + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title .= "<img class=\"adminicon\" src=\"{$WT_IMAGES['admin']}\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure').'" /></a>'; + } + $title .= WT_I18N::translate('Random Picture'); + $title .= help_link('index_media'); + $content = "<div id=\"random_picture_container$block_id\">"; + if ($controls) { + if ($start) { + $image = "stop"; + } else { + $image = "rarrow"; + } + $linkNextImage = "<a href=\"javascript: ".WT_I18N::translate('Next image')."\" onclick=\"jQuery('#block_{$block_id}').load('index.php?action=ajax&block_id={$block_id}');return false;\"><img src=\"{$WT_IMAGES['rdarrow']}\" border=\"0\" alt=\"".WT_I18N::translate('Next image')."\" title=\"".WT_I18N::translate('Next image')."\" /></a>"; + + $content .= "<div class=\"center\" id=\"random_picture_controls$block_id\"><br />"; + if ($TEXT_DIRECTION=="rtl") $content .= $linkNextImage; + $content .= "<a href=\"javascript: ".WT_I18N::translate('Play')."/".WT_I18N::translate('Stop')."\" onclick=\"togglePlay(); return false;\">"; + if (isset($WT_IMAGES[$image])) $content .= "<img id=\"play_stop\" src=\"{$WT_IMAGES[$image]}\" border=\"0\" alt=\"".WT_I18N::translate('Play')."/".WT_I18N::translate('Stop')."\" title=\"".WT_I18N::translate('Play')."/".WT_I18N::translate('Stop')."\" />"; + else $content .= WT_I18N::translate('Play')."/".WT_I18N::translate('Stop'); + $content .= "</a>"; + if ($TEXT_DIRECTION=="ltr") $content .= $linkNextImage; + $content .= '</div>'.WT_JS_START.' + var play = false; + function togglePlay() { + if (play) { + play = false; + imgid = document.getElementById("play_stop"); + imgid.src = \''.$WT_IMAGES["rarrow"].'\'; + } + else { + play = true; + playSlideShow(); + imgid = document.getElementById("play_stop"); + imgid.src = \''.$WT_IMAGES["stop"].'\'; + } + } + + function playSlideShow() { + if (play) { + window.setTimeout(\'reload_image()\', 6000); + } + } + function reload_image() { + jQuery(\'#block_'.$block_id.'\').load(\'index.php?ctype='.$ctype.'&action=ajax&block_id='.$block_id.'&start=1\'); + } + '.WT_JS_END; + } + if ($start) { + $content .= WT_JS_START.'togglePlay();'.WT_JS_END; + } + $content .= "<div class=\"center\" id=\"random_picture_content$block_id\">"; + $imgsize = findImageSize($medialist[$value]["FILE"]); + $imgwidth = $imgsize[0]+40; + $imgheight = $imgsize[1]+150; + $content .= "<table id=\"random_picture_box\" width=\"100%\"><tr><td valign=\"top\""; + + if ($block) $content .= " align=\"center\" class=\"details1\""; + else $content .= " class=\"details2\""; + $mediaid = $medialist[$value]["XREF"]; + +//LBox -------- change for Lightbox Album -------------------------------------------- +?> +<script type="text/javascript"> +<!-- +function openPic(filename, width, height) { + height=height+50; + screenW = screen.width; + screenH = screen.height; + if (width>screenW-100) width=screenW-100; + if (height>screenH-110) height=screenH-120; + if ((filename.search(/\.je?pg$/gi)!=-1)||(filename.search(/\.gif$/gi)!=-1)||(filename.search(/\.png$/gi)!=-1)||(filename.search(/\.bmp$/gi)!=-1)) + win02 = window.open('imageview.php?filename='+filename,'win02','top=50,left=150,height='+height+',width='+width+',scrollbars=1,resizable=1'); + // win03.resizeTo(winWidth 2,winHeight 30); + else window.open(unescape(filename),'win02','top=50,left=150,height='+height+',width='+width+',scrollbars=1,resizable=1'); + win02.focus(); + } +--> +</script><?php + + if (WT_USE_LIGHTBOX) { + // $content .= " ><a href=\"javascript:;\" onclick=\"return openPic('".$medialist[$value]["FILE"]."', $imgwidth, $imgheight);\">"; + // $content .= " ><a href=\"javascript:;\" onclick=\"return openImage('".$medialist[$value]["FILE"]."', $imgwidth, $imgheight);\">"; + // $content .= "><a href=\"" . $medialist[$value]["FILE"] . "\" rel=\"clearbox[general_4]\" title=\"" . $mediaid . "\">"; + $content .= " ><a href=\"mediaviewer.php?mid=".$mediaid."\">"; + } else +// --------------------------------------------------------------------------------------------- + + + if ($USE_MEDIA_VIEWER) { + $content .= " ><a href=\"mediaviewer.php?mid=".$mediaid."\">"; + } + else { + $content .= " ><a href=\"javascript:;\" onclick=\"return openImage('".$medialist[$value]["FILE"]."', $imgwidth, $imgheight);\">"; + } + $mediaTitle = ""; + if (!empty($medialist[$value]["TITL"])) { + $mediaTitle = PrintReady($medialist[$value]["TITL"]); + } + else $mediaTitle = basename($medialist[$value]["FILE"]); + if ($block) { + $content .= "<img src=\"".$medialist[$value]["THUMB"]."\" border=\"0\" class=\"thumbnail\""; + if ($isExternal) $content .= " width=\"".$THUMBNAIL_WIDTH."\""; + } else { + $content .= "<img src=\"".$medialist[$value]["FILE"]."\" border=\"0\" class=\"thumbnail\" "; + $imgsize = findImageSize($medialist[$value]["FILE"]); + if ($imgsize[0] > 175) $content .= "width=\"175\" "; + } + $content .= " alt=\"{$mediaTitle}\" title=\"{$mediaTitle}\" />"; + $content .= "</a>"; + if ($block) $content .= "<br />"; + else $content .= "</td><td class=\"details2\">"; + $content .= "<a href=\"mediaviewer.php?mid=".$mediaid."\">"; + $content .= "<b>". $mediaTitle ."</b>"; + $content .= "</a><br />"; + + ob_start(); + PrintMediaLinks($medialist[$value]["LINKS"], "normal"); + $content .= ob_get_clean(); + $content .= "<br /><div class=\"indent" . ($TEXT_DIRECTION=="rtl"?"_rtl":"") . "\">"; + $content .= print_fact_notes($medialist[$value]["GEDCOM"], "1", false, true); + $content .= "</div>"; + $content .= "</td></tr></table>"; + $content .= "</div>"; // random_picture_content + $content .= "</div>"; // random_picture_container + if ($template) { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } else { + return $content; + } + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'filter', safe_POST('filter', array('indi', 'event', 'all'), 'all')); + set_block_setting($block_id, 'controls', safe_POST_bool('controls')); + set_block_setting($block_id, 'start', safe_POST_bool('start')); + set_block_setting($block_id, 'filter_avi', safe_POST_bool('filter_avi')); + set_block_setting($block_id, 'filter_bmp', safe_POST_bool('filter_bmp')); + set_block_setting($block_id, 'filter_gif', safe_POST_bool('filter_gif')); + set_block_setting($block_id, 'filter_jpeg', safe_POST_bool('filter_jpeg')); + set_block_setting($block_id, 'filter_mp3', safe_POST_bool('filter_mp3')); + set_block_setting($block_id, 'filter_ole', safe_POST_bool('filter_ole')); + set_block_setting($block_id, 'filter_pcx', safe_POST_bool('filter_pcx')); + set_block_setting($block_id, 'filter_pdf', safe_POST_bool('filter_pdf')); + set_block_setting($block_id, 'filter_png', safe_POST_bool('filter_png')); + set_block_setting($block_id, 'filter_tiff', safe_POST_bool('filter_tiff')); + set_block_setting($block_id, 'filter_wav', safe_POST_bool('filter_wav')); + set_block_setting($block_id, 'filter_audio', safe_POST_bool('filter_audio')); + set_block_setting($block_id, 'filter_book', safe_POST_bool('filter_book')); + set_block_setting($block_id, 'filter_card', safe_POST_bool('filter_card')); + set_block_setting($block_id, 'filter_certificate', safe_POST_bool('filter_certificate')); + set_block_setting($block_id, 'filter_coat', safe_POST_bool('filter_coat')); + set_block_setting($block_id, 'filter_document', safe_POST_bool('filter_document')); + set_block_setting($block_id, 'filter_electronic', safe_POST_bool('filter_electronic')); + set_block_setting($block_id, 'filter_fiche', safe_POST_bool('filter_fiche')); + set_block_setting($block_id, 'filter_film', safe_POST_bool('filter_film')); + set_block_setting($block_id, 'filter_magazine', safe_POST_bool('filter_magazine')); + set_block_setting($block_id, 'filter_manuscript', safe_POST_bool('filter_manuscript')); + set_block_setting($block_id, 'filter_map', safe_POST_bool('filter_map')); + set_block_setting($block_id, 'filter_newspaper', safe_POST_bool('filter_newspaper')); + set_block_setting($block_id, 'filter_other', safe_POST_bool('filter_other')); + set_block_setting($block_id, 'filter_painting', safe_POST_bool('filter_painting')); + set_block_setting($block_id, 'filter_photo', safe_POST_bool('filter_photo')); + set_block_setting($block_id, 'filter_tombstone', safe_POST_bool('filter_tombstone')); + set_block_setting($block_id, 'filter_video', safe_POST_bool('filter_video')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $filter=get_block_setting($block_id, 'filter', 'all'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show only persons, events, or all?'), help_link('random_media_persons_or_all'); + echo '</td><td class="optionbox">'; + echo select_edit_control('filter', array('indi'=>WT_I18N::translate('Persons'), 'event'=>WT_I18N::translate('Events'), 'all'=>WT_I18N::translate('All')), null, $filter, ''); + echo '</td></tr>'; + + $filters=array( + 'avi' =>get_block_setting($block_id, 'filter_avi', false), + 'bmp' =>get_block_setting($block_id, 'filter_bmp', true), + 'gif' =>get_block_setting($block_id, 'filter_gif', true), + 'jpeg' =>get_block_setting($block_id, 'filter_jpeg', true), + 'mp3' =>get_block_setting($block_id, 'filter_mp3', false), + 'ole' =>get_block_setting($block_id, 'filter_ole', true), + 'pcx' =>get_block_setting($block_id, 'filter_pcx', true), + 'pdf' =>get_block_setting($block_id, 'filter_pdf', false), + 'png' =>get_block_setting($block_id, 'filter_png', true), + 'tiff' =>get_block_setting($block_id, 'filter_tiff', true), + 'wav' =>get_block_setting($block_id, 'filter_wav', false), + 'audio' =>get_block_setting($block_id, 'filter_audio', false), + 'book' =>get_block_setting($block_id, 'filter_book', true), + 'card' =>get_block_setting($block_id, 'filter_card', true), + 'certificate'=>get_block_setting($block_id, 'filter_certificate', true), + 'coat' =>get_block_setting($block_id, 'filter_coat', true), + 'document' =>get_block_setting($block_id, 'filter_document', true), + 'electronic' =>get_block_setting($block_id, 'filter_electronic', true), + 'fiche' =>get_block_setting($block_id, 'filter_fiche', true), + 'film' =>get_block_setting($block_id, 'filter_film', true), + 'magazine' =>get_block_setting($block_id, 'filter_magazine', true), + 'manuscript' =>get_block_setting($block_id, 'filter_manuscript', true), + 'map' =>get_block_setting($block_id, 'filter_map', true), + 'newspaper' =>get_block_setting($block_id, 'filter_newspaper', true), + 'other' =>get_block_setting($block_id, 'filter_other', true), + 'painting' =>get_block_setting($block_id, 'filter_painting', true), + 'photo' =>get_block_setting($block_id, 'filter_photo', true), + 'tombstone' =>get_block_setting($block_id, 'filter_tombstone', true), + 'video' =>get_block_setting($block_id, 'filter_video', false), + ); + + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Filter'), help_link('random_media_filter'); +?> + </td> + <td class="optionbox"> + <center><b><?php echo translate_fact('FORM'); ?></b></center> + <table class="width100"> + <tr> + <td class="width33"><input type="checkbox" value="yes" + name="filter_avi" + <?php if ($filters['avi']) echo " checked=\"checked\""; ?> /> avi </td> + <td class="width33"><input type="checkbox" value="yes" + name="filter_bmp" + <?php if ($filters['bmp']) echo " checked=\"checked\""; ?> /> bmp </td> + <td class="width33"><input type="checkbox" value="yes" + name="filter_gif" + <?php if ($filters['gif']) echo " checked=\"checked\""; ?> /> gif </td> + </tr> + <tr> + <td class="width33"><input type="checkbox" value="yes" + name="filter_jpeg" + <?php if ($filters['jpeg']) echo " checked=\"checked\""; ?> /> jpeg </td> + <td class="width33"><input type="checkbox" value="yes" + name="filter_mp3" + <?php if ($filters['mp3']) echo " checked=\"checked\""; ?> /> mp3 </td> + <td class="width33"><input type="checkbox" value="yes" + name="filter_ole" + <?php if ($filters['ole']) echo " checked=\"checked\""; ?> /> ole </td> + </tr> + <tr> + <td class="width33"><input type="checkbox" value="yes" + name="filter_pcx" + <?php if ($filters['pcx']) echo " checked=\"checked\""; ?> /> pcx </td> + <td class="width33"><input type="checkbox" value="yes" + name="filter_pdf" + <?php if ($filters['pdf']) echo " checked=\"checked\""; ?> /> pdf </td> + <td class="width33"><input type="checkbox" value="yes" + name="filter_png" + <?php if ($filters['png']) echo " checked=\"checked\""; ?> /> png </td> + </tr> + <tr> + <td class="width33"><input type="checkbox" value="yes" + name="filter_tiff" + <?php if ($filters['tiff']) echo " checked=\"checked\""; ?> /> tiff </td> + <td class="width33"><input type="checkbox" value="yes" + name="filter_wav" + <?php if ($filters['wav']) echo " checked=\"checked\""; ?> /> wav </td> + <td class="width33"> </td> + <td class="width33"> </td> + </tr> + </table> + <br /> + <center><b><?php echo translate_fact('TYPE'); ?></b></center> + <table class="width100"> + <tr> + <?php + //-- Build the list of checkboxes + $i = 0; + global $MEDIA_TYPES; + foreach ($MEDIA_TYPES as $typeName => $typeValue) { + $i++; + if ($i > 3) { + $i = 1; + echo "</tr><tr>"; + } + echo "<td class=\"width33\"><input type=\"checkbox\" value=\"yes\" name=\"filter_".$typeName."\""; + if ($filters[$typeName]) echo " checked=\"checked\""; + echo " /> ".$typeValue." </td>"; + } + ?> + </tr> + </table> + </td> + </tr> + + <?php + + $controls=get_block_setting($block_id, 'controls', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show slideshow controls?'), help_link('random_media_ajax_controls'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('controls', $controls); + echo '</td></tr>'; + + $start=get_block_setting($block_id, 'start', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Start slideshow on page load?'), help_link('random_media_start_slide'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('start', $start); + echo '</td></tr>'; + } +} diff --git a/modules_v2/recent_changes/help_text.php b/modules_v2/recent_changes/help_text.php new file mode 100644 index 0000000000..b289501282 --- /dev/null +++ b/modules_v2/recent_changes/help_text.php @@ -0,0 +1,35 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +} +?> diff --git a/modules_v2/recent_changes/module.php b/modules_v2/recent_changes/module.php new file mode 100644 index 0000000000..9b0c3598e8 --- /dev/null +++ b/modules_v2/recent_changes/module.php @@ -0,0 +1,190 @@ +<?php + +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class recent_changes_WT_Module extends WT_Module implements WT_Module_Block { + + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Recent changes'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('This block lists the changes that have been made to all family trees within a specified number of days.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $WT_IMAGES; + + $days = get_block_setting($block_id, 'days', 7); + $infoStyle = get_block_setting($block_id, 'infoStyle', 'table'); + $show_parents = get_block_setting($block_id, 'show_parents', false); + $sortStyle = get_block_setting($block_id, 'sortStyle', 'datea'); + $hide_empty = get_block_setting($block_id, 'hide_empty', false); + $block = get_block_setting($block_id, 'block', true); + if ($cfg) { + foreach (array('days', 'infoStyle', 'show_parents', 'sortStyle', 'hide_empty', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name = $cfg[$name]; + } + } + } + + $found_facts = get_recent_changes(WT_CLIENT_JD - $days); + + if (!$found_facts && $hide_empty) { + return ''; + } + // Print block header + $id = $this->getName() . $block_id; + $title = ''; + if ($ctype == "gedcom" && WT_USER_GEDCOM_ADMIN || $ctype == 'user') { + if ($ctype == "gedcom") { + $name = WT_GEDCOM; + } else { + $name = WT_USER_NAME; + } + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title .= "<img class=\"adminicon\" src=\"" . $WT_IMAGES["admin"] . "\" width=\"15\" height=\"15\" border=\"0\" alt=\"" . WT_I18N::translate('Configure') . "\" /></a>"; + } + $title.= /* I18N: title for list of recent changes */ WT_I18N::plural('Changes in the last %d day', 'Changes in the last %d days', $days, $days); + $content = ""; + // Print block content + if (count($found_facts) == 0) { + $content .= WT_I18N::translate('There have been no changes within the last %s days.', $days); + } else { + ob_start(); + switch ($infoStyle) { + case 'list': + $content .= print_changes_list($found_facts, $sortStyle, $show_parents); + break; + case 'table': + // sortable table + $content .= print_changes_table($found_facts, $sortStyle, $show_parents); + break; + } + $content .= ob_get_clean(); + } + + if ($template) { + if ($block) { + require WT_THEME_DIR . 'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR . 'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'days', safe_POST_integer('days', 1, 30, 7)); + set_block_setting($block_id, 'infoStyle', safe_POST('infoStyle', array('list', 'table'), 'table')); + set_block_setting($block_id, 'show_parents', safe_POST_bool('show_parents')); + set_block_setting($block_id, 'sortStyle', safe_POST('sortStyle', array('name', 'date_asc', 'date_desc'), 'date_asc')); + set_block_setting($block_id, 'hide_empty', safe_POST_bool('hide_empty')); + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT . 'includes/functions/functions_edit.php'; + + $days = get_block_setting($block_id, 'days', 7); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Number of days to show'); + echo '</td><td class="optionbox">'; + echo '<input type="text" name="days" size="2" value="', $days, '" />'; + echo ' <i>', WT_I18N::plural('maximum %d day', 'maximum %d days', 30, 30), '</i>'; + echo '</td></tr>'; + + $infoStyle = get_block_setting($block_id, 'infoStyle', 'table'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Presentation style'); //, help_link('style'); + echo '</td><td class="optionbox">'; + echo select_edit_control('infoStyle', array('list' => WT_I18N::translate('list'), 'table' => WT_I18N::translate('table')), null, $infoStyle, ''); + echo '</td></tr>'; + + $sortStyle = get_block_setting($block_id, 'sortStyle', 'date'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a list box */WT_I18N::translate('Sort style'); //, help_link('sort_style'); + echo '</td><td class="optionbox">'; + echo select_edit_control('sortStyle', array( + 'name' => /* I18N: a list-box option, for sorting */ WT_I18N::translate('alphabetically'), + 'date_asc' => /* I18N: a list-box option, for sorting */ WT_I18N::translate('oldest first'), + 'date_desc' => /* I18N: a list-box option, for sorting */ WT_I18N::translate('newest first') + ), null, $sortStyle, ''); + echo '</td></tr>'; + + $show_parents = get_block_setting($block_id, 'show_parents', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Show parents'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('show_parents', $show_parents); + echo '</td></tr>'; + + $block = get_block_setting($block_id, 'block', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + + $hide_empty = get_block_setting($block_id, 'hide_empty', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Should this block be hidden when it is empty?'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('hide_empty', $hide_empty); + echo '</td></tr>'; + echo '<tr><td colspan="2" class="optionbox wrap">'; + echo '<span class="error">', WT_I18N::translate('If you hide an empty block, you will not be able to change its configuration until it becomes visible by no longer being empty.'), '</span>'; + echo '</td></tr>'; + } + +} diff --git a/modules_v2/relative_ext_report/module.php b/modules_v2/relative_ext_report/module.php new file mode 100644 index 0000000000..6b47eec3f7 --- /dev/null +++ b/modules_v2/relative_ext_report/module.php @@ -0,0 +1,69 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class relative_ext_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Expanded Relatives Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of a person and details of their relatives.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + global $controller; + + if ($controller && isset($controller->pid)) { + $pid='&pid='.$controller->pid; + } elseif ($controller && isset($controller->rootid)) { + $pid='&pid='.$controller->rootid; + } else { + $pid=''; + } + + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'.$pid); + $menu->addIcon('cfamily'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/relative_ext_report/report.xml b/modules_v2/relative_ext_report/report.xml new file mode 100644 index 0000000000..e6622f9526 --- /dev/null +++ b/modules_v2/relative_ext_report/report.xml @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Expanded Relatives Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of a person and details of their relatives.')" /></Description> + <Input name="pid" lookup="INDI" type="text"><var var="WT_I18N::translate('Enter Individual ID')" /></Input> + <Input name="relatives" type="select" options="child-family=>WT_I18N::translate('Parents and siblings')|spouse-family=>WT_I18N::translate('Spouses and children')|direct-ancestors=>WT_I18N::translate('Direct line ancestors')|ancestors=>WT_I18N::translate('Direct line ancestors and their families')|descendants=>WT_I18N::translate('Descendants')|all=>WT_I18N::translate('All')"><var var="WT_I18N::translate('Choose relatives')" /></Input> + <Input name="sortby" type="select" default="BIRT:DATE" options="none=>WT_I18N::translate('None')|NAME=>WT_I18N::translate('Name')|BIRT:DATE=>WT_I18N::translate('Date of birth')|DEAT:DATE=>WT_I18N::translate('Date of death')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="14" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8" /> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + <Style name="text" font="$fonts" size="10" /> + <Style name="bold" font="$fonts" size="10" style="b" /> + <Style name="mini" font="$fonts" size="8" /> + <Style name="minibold" font="$fonts" size="8" style="b" /> + <Style name="label" font="$fonts" size="10" style="b" /> + + <SetVar name="height1" value="14" /> + <SetVar name="height2" value="10" /> + <SetVar name="width1" value="45" /> + <SetVar name="width2" value="195" /> + <SetVar name="width3" value="120" /> + <SetVar name="width4" value="120" /> + <SetVar name="width5" value="150" /> + <SetVar name="width6" value="150" /> + <SetVar name="widthB2" value="280" /> + <SetVar name="widthB3" value="40" /> + <SetVar name="widthB4" value="375" /> + <SetVar name="leftbdp" value="$width1+$width2" /> + + <Doc pageSize="$pageSize" orientation="landscape"> + <Header> + <Cell align="center" height="20" newline="1" style="header"><var var="WT_I18N::translate('Expanded Relatives Report')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" height="$height1" style="label" width="$width2"> <var var="WT_I18N::translate('Name')" /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='BIRT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" height="$height1" style="label" width="$width3"> <var var="WT_I18N::translate('Birth')" /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='DEAT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" height="$height1" style="label" width="$width4"> <var var="WT_I18N::translate('Death')" /></Cell> + + <Cell border="1" height="$height1" style="label" width="$width5"> <var var="WT_I18N::translate('Father')" /></Cell> + <Cell border="1" height="$height1" newline="1" style="label"> <var var="WT_I18N::translate('Mother')" /></Cell> + </Header> + + <Body> + <Relatives id="$pid" group="$relatives" sortby="$sortby"> + <SetVar name="sex" value="@SEX" /> + <!-- 1. Block --> + <TextBox height="$height1" width="$width2"> + <Text style="bold"><GetPersonName id="" /></Text> + </TextBox> + <TextBox height="$height1" width="$width3"> + <Text style="text"><GedcomValue tag="BIRT:DATE" truncate="20" /><br/></Text> + <Text style="mini"><GedcomValue tag="BIRT:PLAC" /></Text> + </TextBox> + <TextBox height="$height1" width="$width4"> + <Text style="text"><GedcomValue tag="DEAT:DATE" truncate="20" /><br/></Text> + <Text style="mini"><GedcomValue tag="DEAT:PLAC" /></Text> + </TextBox> + <!-- If FAMC is empty all lines will be ignored. So, don't place any newline break in here --> + <Gedcom id="@FAMC"> + <TextBox height="$height1" width="$width5"> + <Gedcom id="@HUSB"> + <Text style="text"><GetPersonName id="" /></Text> + </Gedcom> + </TextBox> + <TextBox height="$height1" newline="1"> + <Gedcom id="@WIFE"> + <Text style="text"><GetPersonName id="" /></Text> + </Gedcom> + </TextBox> + </Gedcom> + <!-- one way or the other, we need a new line --> + <if condition="@FAMC==''"> + <TextBox height="2" newline="1"/> + </if> + <!-- 2. Block --> +<!-- <TextBox height="$height2" left="$leftbdp" width="$width3"> + <Text style="mini"><GedcomValue tag="BIRT:PLAC" /></Text> + </TextBox> + <TextBox height="$height2" newline="1" width="$width4"> + <Text style="mini"><GedcomValue tag="DEAT:PLAC" /></Text> + </TextBox> +--> <!-- 3. Block --> + <RepeatTag tag="FAMS"> + <Gedcom id="@FAMS"> + <TextBox height="$height2" left="$width1" width="$widthB2"> + <if condition="$sex=='M'"> + <Text style="minibold"><var var="translate_fact('WIFE')" />: </Text> + <Text style="mini"><GetPersonName id="@WIFE" /> <GedcomValue tag="MARR:DATE" /> + </Text> + </if> + <if condition="$sex=='F'"> + <Text style="minibold"><var var="translate_fact('HUSB')" />: </Text> + <Text style="mini"><GetPersonName id="@HUSB" /> <GedcomValue tag="MARR:DATE" /> + </Text> + </if> + </TextBox> + <TextBox height="$height2" width="50"> + <Text style="minibold"><var var="WT_I18N::translate('Children')" />:</Text> + </TextBox> + <TextBox height="$height2" newline="1"> + <SetVar name="morechildren" value="0" /> + <RepeatTag tag="CHIL"> + <Gedcom id="@CHIL"> + <Text style="mini"> + <!-- Print this only when more than one child exist --> + <if condition="$morechildren==1">, </if> + <GetPersonName id="" /> + </Text> + <SetVar name="morechildren" value="1" /> + </Gedcom> + </RepeatTag> + </TextBox> + </Gedcom> + </RepeatTag> + + <!-- keep distance between line --> + <TextBox height="2" newline="1" padding="0"/> + <Line /> + <TextBox height="2" newline="1" padding="0"/> + + </Relatives> + <Cell align="rightrtl" height="15" newline="1" style="label"> + <br /><var var="WT_I18N::translate('Total individuals')" />: <ListTotal /> + </Cell> + </Body> + + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now /></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/relative_report/module.php b/modules_v2/relative_report/module.php new file mode 100644 index 0000000000..c4119ffdf7 --- /dev/null +++ b/modules_v2/relative_report/module.php @@ -0,0 +1,68 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class relative_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Relatives Report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of a person and a list of their relatives.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_PUBLIC; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + global $controller; + + if ($controller && isset($controller->pid)) { + $pid='&pid='.$controller->pid; + } elseif ($controller && isset($controller->rootid)) { + $pid='&pid='.$controller->rootid; + } else { + $pid=''; + } + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'.$pid); + $menu->addIcon('cfamily'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/relative_report/report.xml b/modules_v2/relative_report/report.xml new file mode 100644 index 0000000000..6f9b9e308c --- /dev/null +++ b/modules_v2/relative_report/report.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Relatives Report')" /></Title> + <Description><var var="WT_I18N::translate('A report of a person and a list of their relatives.')" /></Description> + <Input name="pid" lookup="INDI" type="text"><var var="WT_I18N::translate('Enter Individual ID')" /></Input> + <Input name="relatives" type="select" options="child-family=>WT_I18N::translate('Parents and siblings')|spouse-family=>WT_I18N::translate('Spouses and children')|direct-ancestors=>WT_I18N::translate('Direct line ancestors')|ancestors=>WT_I18N::translate('Direct line ancestors and their families')|descendants=>WT_I18N::translate('Descendants')|all=>WT_I18N::translate('All')"><var var="WT_I18N::translate('Choose relatives')" /></Input> + <Input name="sortby" type="select" default="BIRT:DATE" options="none=>WT_I18N::translate('None')|NAME=>WT_I18N::translate('Name')|BIRT:DATE=>WT_I18N::translate('Date of birth')|DEAT:DATE=>WT_I18N::translate('Date of death')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="pageorient" type="select" default="landscape" options="landscape=>WT_I18N::translate('Landscape')|portrait=>WT_I18N::translate('Portrait')"><var var="WT_I18N::translate('Orientation')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <Style name="header" font="$fonts" size="14" style="b" /> + <Style name="pagenum" font="$fonts" size="8" /> + <Style name="text" font="$fonts" size="9" /> + <Style name="label" font="$fonts" size="9" style="b" /> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date text --> + <Style name="date" font="$fonts" size="8"/> + + <if condition="$pageorient=='landscape'"> + <!-- landscape orientation --> + <SetVar name="namewidth" value="230"/> + <SetVar name="birthwidth" value="250"/> + </if> + + <if condition="$pageorient=='portrait'"> + <!-- portrait orientation --> + <SetVar name="namewidth" value="200"/> + <SetVar name="birthwidth" value="160"/> + </if> + + <Doc pageSize="$pageSize" orientation="$pageorient" > + + <Header> + <Cell align="center" height="20" newline="1" style="header"><var var="WT_I18N::translate('Relatives Report')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" style="label" width="$namewidth"> <var var="WT_I18N::translate('Name')" /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='BIRT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" style="label" width="$birthwidth"> <var var="WT_I18N::translate('Birth')" /></Cell> + + <SetVar name="fill" value="" /> + <if condition="$sortby=='DEAT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" newline="1" style="label"> <var var="WT_I18N::translate('Death')" /></Cell> + </Header> + + <Body> + + <Relatives id="$pid" group="$relatives" sortby="$sortby"> + <TextBox height="1" newline="1"/> + <TextBox height="12" width="$namewidth"> + <Text style="text"><GetPersonName id="" /></Text> + </TextBox> + <TextBox height="12" width="$birthwidth"> + <Text style="text"> + <GedcomValue tag="BIRT:DATE" /> + <!-- Add space only if birth date exist --> + <if condition="@BIRT:DATE!=''"> </if> + <GedcomValue tag="BIRT:PLAC" /> + </Text> + </TextBox> + <TextBox height="12" newline="1"> + <Text style="text"> + <GedcomValue tag="DEAT:DATE" /> + <!-- Add space only if death date exist --> + <if condition="@DEAT:DATE!=''"> </if> + <GedcomValue tag="DEAT:PLAC" /> + </Text> + </TextBox> + <!-- page wide line, to the margin --> + <Line /> + </Relatives> + + <Cell align="rightrtl" newline="1" style="label"> + <br /><var var="WT_I18N::translate('Total individuals')" />: <ListTotal /> + </Cell> + </Body> + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now /></Cell> + </Footer> + </Doc> +</Report> diff --git a/modules_v2/relatives/module.php b/modules_v2/relatives/module.php new file mode 100644 index 0000000000..451237009d --- /dev/null +++ b/modules_v2/relatives/module.php @@ -0,0 +1,531 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class relatives_WT_Module extends WT_Module implements WT_Module_Tab { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Relatives'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab to the individual page which displays the families and close relatives of an individual.'); + } + + // Implement WT_Module_Tab + public function defaultTabOrder() { + return 20; + } + + function printFamilyHeader($url, $label) { + global $WT_IMAGES, $SEARCH_SPIDER; + + echo '<table> + <tr>'; + if (isset($WT_IMAGES["cfamily"])) { + echo '<td><img src="', $WT_IMAGES["cfamily"], '" border="0" class="icon" alt="" /></td>'; + } + echo '<td><span class="subheaders">', $label, '</span>'; + if (empty($SEARCH_SPIDER)) { + echo ' - <a href="', $url, '">', WT_I18N::translate('View Family'), '</a>'; + } + echo '</td> + </tr> + </table>'; + } + + /** + * print parents informations + * @param Family family + * @param Array people + * @param String family type + * @return html table rows + */ + function printParentsRows(&$family, &$people, $type) { + global $personcount, $WT_IMAGES, $SHOW_PEDIGREE_PLACES; + + $elderdate = ""; + //-- new father/husband + $styleadd = ""; + if (isset($people["newhusb"])) { + $styleadd = "red"; + ?> + <tr> + <td class="facts_labelblue"><?php echo $people["newhusb"]->getLabel(); ?></td> + <td class="<?php echo $this->controller->getPersonStyle($people["newhusb"]); ?>"> + <?php print_pedigree_person($people["newhusb"], 2, 0, $personcount++); ?> + </td> + </tr> + <?php + $elderdate = $people["newhusb"]->getBirthDate(); + } + //-- father/husband + if (isset($people["husb"])) { + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>"><?php echo $people["husb"]->getLabel(); ?></td> + <td class="<?php echo $this->controller->getPersonStyle($people["husb"]); ?>"> + <?php print_pedigree_person($people["husb"], 2, 0, $personcount++); ?> + </td> + </tr> + <?php + $elderdate = $people["husb"]->getBirthDate(); + } + //-- missing father + if ($type=="parents" && !isset($people["husb"]) && !isset($people["newhusb"])) { + if ($this->controller->indi->canEdit()) { + ?> + <tr> + <td class="facts_label"><?php echo WT_I18N::translate('Add a new father'); ?></td> + <td class="facts_value"><a href="javascript <?php echo WT_I18N::translate('Add a new father'); ?>" onclick="return addnewparentfamily('<?php echo $this->controller->pid; ?>', 'HUSB', '<?php echo $family->getXref(); ?>');"><?php echo WT_I18N::translate('Add a new father'); ?></a><?php echo help_link('edit_add_parent'); ?></td> + </tr> + <?php + } + } + //-- missing husband + if ($type=="spouse" && $this->controller->indi->equals($people["wife"]) && !isset($people["husb"]) && !isset($people["newhusb"])) { + if ($this->controller->indi->canEdit()) { + ?> + <tr> + <td class="facts_label"><?php echo WT_I18N::translate('Add husband'); ?></td> + <td class="facts_value"><a href="javascript:;" onclick="return addnewspouse('<?php echo $family->getXref(); ?>', 'HUSB');"><?php echo WT_I18N::translate('Add a husband to this family'); ?></a></td> + </tr> + <?php + } + } + //-- new mother/wife + $styleadd = ""; + if (isset($people["newwife"])) { + $styleadd = "red"; + ?> + <tr> + <td class="facts_labelblue"><?php echo $people["newwife"]->getLabel($elderdate); ?></td> + <td class="<?php echo $this->controller->getPersonStyle($people["newwife"]); ?>"> + <?php print_pedigree_person($people["newwife"], 2, 0, $personcount++); ?> + </td> + </tr> + <?php + } + //-- mother/wife + if (isset($people["wife"])) { + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>"><?php echo $people["wife"]->getLabel($elderdate); ?></td> + <td class="<?php echo $this->controller->getPersonStyle($people["wife"]); ?>"> + <?php print_pedigree_person($people["wife"], 2, 0, $personcount++); ?> + </td> + </tr> + <?php + } + //-- missing mother + if ($type=="parents" && !isset($people["wife"]) && !isset($people["newwife"])) { + if ($this->controller->indi->canEdit()) { + ?> + <tr> + <td class="facts_label"><?php echo WT_I18N::translate('Add a new mother'); ?></td> + <td class="facts_value"><a href="javascript:;" onclick="return addnewparentfamily('<?php echo $this->controller->pid; ?>', 'WIFE', '<?php echo $family->getXref(); ?>');"><?php echo WT_I18N::translate('Add a new mother'); ?></a><?php echo help_link('edit_add_parent'); ?></td> + </tr> + <?php + } + } + //-- missing wife + if ($type=="spouse" && $this->controller->indi->equals($people["husb"]) && !isset($people["wife"]) && !isset($people["newwife"])) { + if ($this->controller->indi->canEdit()) { + ?> + <tr> + <td class="facts_label"><?php echo WT_I18N::translate('Add wife'); ?></td> + <td class="facts_value"><a href="javascript:;" onclick="return addnewspouse('<?php echo $family->getXref(); ?>', 'WIFE');"><?php echo WT_I18N::translate('Add a wife to this family'); ?></a></td> + </tr> + <?php + } + } + //-- marriage row + if ($family->getMarriageRecord()!="" || WT_USER_CAN_EDIT) { + $styleadd = ""; + $date = $family->getMarriageDate(); + $place = $family->getMarriagePlace(); + $famid = $family->getXref(); + if (!$date && $this->controller->show_changes && ($famrec = find_updated_record($famid))!==null) { + $marrrec = get_sub_record(1, "1 MARR", $famrec); + if ($marrrec!=$family->getMarriageRecord()) { + $date = new WT_Date(get_gedcom_value("MARR:DATE", 1, $marrrec, '', false)); + $place = get_gedcom_value("MARR:PLAC", 1, $marrrec, '', false); + $styleadd = "blue"; + } + } + ?> + <tr> + <td class="facts_label"><br /> + </td> + <td class="facts_value<?php echo $styleadd; ?>"> + <?php //echo "<span class=\"details_label\">".translate_fact('NCHI').": </span>".$family->getNumberOfChildren()."<br />"; ?> + <?php $marr_type = strtoupper($family->getMarriageType()); + if ($marr_type=='CIVIL' || $marr_type=='PARTNERS' || $marr_type=='RELIGIOUS' || $marr_type=='UNKNOWN') { + $marr_fact = translate_fact("MARR_".$marr_type); + } else if ($marr_type) { + $marr_fact = translate_fact("MARR").' '.$family->getMarriageType(); + } else { + $marr_fact = translate_fact("MARR"); + } + if ($date && $date->isOK() || $place) { + echo '<span class="details_label">', $marr_fact, ': </span>'; + if ($date) { + echo $date->Display(false); + if (!empty($place)) echo ' -- '; + } + if (!empty($place)) { + $html=''; + $levels = explode(',', $place); + $tempURL = "placelist.php?action=show&"; + foreach (array_reverse($levels) as $pindex=>$ppart) { + $tempURL .= "parent[{$pindex}]=".rawurlencode($ppart).'&'; + } + $tempURL .= 'level='.count($levels); + $html .= '<a href="'.$tempURL.'"> '; + for ($level=0; $level<$SHOW_PEDIGREE_PLACES; $level++) { + if (!empty($levels[$level])) { + if ($level>0) { + $html.=", "; + } + $html.=PrintReady($levels[$level]); + } + } + $html.='</a>'; + echo $html; + } + } else if (get_sub_record(1, "1 _NMR", find_family_record($famid, WT_GED_ID))) { + $husb = $family->getHusband(); + $wife = $family->getWife(); + if (empty($wife) && !empty($husb)) echo translate_fact('_NMR', $husb); + else if (empty($husb) && !empty($wife)) echo translate_fact('_NMR', $wife); + else echo translate_fact('_NMR'); + } else if (get_sub_record(1, "1 _NMAR", find_family_record($famid, WT_GED_ID))) { + $husb = $family->getHusband(); + $wife = $family->getWife(); + if (empty($wife) && !empty($husb)) echo translate_fact('_NMAR', $husb); + else if (empty($husb) && !empty($wife)) echo translate_fact('_NMAR', $wife); + else echo translate_fact('_NMAR'); + } else if ($family->getMarriageRecord()=="" && $this->controller->indi->canEdit()) { + echo "<a href=\"#\" onclick=\"return add_new_record('".$famid."', 'MARR');\">".WT_I18N::translate('Add marriage details')."</a>"; + } else { + $factdetail = explode(' ', trim($family->getMarriageRecord())); + if (isset($factdetail) && count($factdetail) == 3) { + if (strtoupper($factdetail[2]) == "Y") { + echo '<span class="details_label">', $marr_fact, ': </span>', WT_I18N::translate('Yes'); + } else if (strtoupper($factdetail[2]) == "N") { + echo '<span class="details_label">', $marr_fact, ': </span>', WT_I18N::translate('No'); + } + } else { + echo '<span class="details_label">', $marr_fact, '</span>'; + } + } + ?> + </td> + </tr> + <?php + } + } + + /** + * print children informations + * @param Family family + * @param Array people + * @param String family type + * @return html table rows + */ + function printChildrenRows(&$family, &$people, $type) { + global $personcount, $WT_IMAGES; + + $elderdate = $family->getMarriageDate(); + $key=0; + foreach ($people["children"] as $child) { + $label = $child->getLabel(); + $styleadd = ""; + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>"><?php if ($styleadd=="red") echo $child->getLabel(); else echo $child->getLabel($elderdate, $key+1); ?></td> + <td class="<?php echo $this->controller->getPersonStyle($child); ?>"> + <?php + print_pedigree_person($child, 2, 0, $personcount++); + ?> + </td> + </tr> + <?php + $elderdate = $child->getBirthDate(); + ++$key; + } + foreach ($people["newchildren"] as $child) { + $label = $child->getLabel(); + $styleadd = "blue"; + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>"><?php if ($styleadd=="red") echo $child->getLabel(); else echo $child->getLabel($elderdate, $key+1); ?></td> + <td class="<?php echo $this->controller->getPersonStyle($child); ?>"> + <?php + print_pedigree_person($child, 2, 0, $personcount++); + ?> + </td> + </tr> + <?php + $elderdate = $child->getBirthDate(); + ++$key; + } + foreach ($people["delchildren"] as $child) { + $label = $child->getLabel(); + $styleadd = "red"; + ?> + <tr> + <td class="facts_label<?php echo $styleadd; ?>"><?php if ($styleadd=="red") echo $child->getLabel(); else echo $child->getLabel($elderdate, $key+1); ?></td> + <td class="<?php echo $this->controller->getPersonStyle($child); ?>"> + <?php + print_pedigree_person($child, 2, 0, $personcount++); + ?> + </td> + </tr> + <?php + $elderdate = $child->getBirthDate(); + ++$key; + } + if (isset($family) && $this->controller->indi->canEdit()) { + if ($type == "spouse") { + $child_u = WT_I18N::translate('Add a son or daughter'); + $child_m = WT_I18N::translate('Son'); + $child_f = WT_I18N::translate('Daughter'); + } else { + $child_u = WT_I18N::translate('Add a brother or sister'); + $child_m = WT_I18N::translate('Brother'); + $child_f = WT_I18N::translate('Sister'); + } + ?> + <tr> + <td class="facts_label"> + <?php if (WT_USER_CAN_EDIT && isset($people["children"][1])) { ?> + <a href="javascript:;" onclick="reorder_children('<?php echo $family->getXref(); ?>');tabswitch(5);"><img src="images/topdown.gif" alt="" border="0" /> <?php echo WT_I18N::translate('Re-order children'); ?></a> + <?php } ?> + </td> + <td class="facts_value"> + <a href="javascript:;" onclick="return addnewchild('<?php echo $family->getXref(); ?>');"><?php echo $child_u; ?></a> + <span style='white-space:nowrap;'> + <a href="javascript:;" onclick="return addnewchild('<?php echo $family->getXref(); ?>','M');"><?php echo WT_Person::sexImage('M', 'small', '', $child_m); ?></a> + <a href="javascript:;" onclick="return addnewchild('<?php echo $family->getXref(); ?>','F');"><?php echo WT_Person::sexImage('F', 'small', '', $child_f); ?></a> + </span> + <?php + if ($type=='spouse') { + echo help_link('add_son_daughter'); + } else { + echo help_link('add_sibling'); + } + ?> + </td> + </tr> + <?php + } + } + + // Implement WT_Module_Tab + public function getTabContent() { + global $WT_IMAGES, $SHOW_AGE_DIFF, $GEDCOM, $ABBREVIATE_CHART_LABELS, $show_full, $personcount; + + if (isset($show_full)) $saved_show_full = $show_full; // We always want to see full details here + $show_full = 1; + + $saved_ABBREVIATE_CHART_LABELS = $ABBREVIATE_CHART_LABELS; + $ABBREVIATE_CHART_LABELS = false; // Override GEDCOM configuration + + ob_start(); + ?> + <table class="facts_table"><tr><td style="width:20%; padding:4px"></td><td class="descriptionbox rela"> + <input id="checkbox_elder" type="checkbox" onclick="toggleByClassName('DIV', 'elderdate');" <?php if ($SHOW_AGE_DIFF) echo "checked=\"checked\""; ?>/> + <label for="checkbox_elder"><?php echo WT_I18N::translate('Show date differences'), help_link('age_differences'); ?></label> + </td></tr></table> + <?php + $personcount=0; + $families = $this->controller->indi->getChildFamilies(); + if (count($families)==0) { + if ($this->controller->indi->canEdit()) { + ?> + <table class="facts_table"> + <tr> + <td class="facts_value"><a href="javascript:;" onclick="return addnewparent('<?php echo $this->controller->pid; ?>', 'HUSB');"><?php echo WT_I18N::translate('Add a new father'); ?></a><?php echo help_link('edit_add_parent'); ?></td> + </tr> + <tr> + <td class="facts_value"><a href="javascript:;" onclick="return addnewparent('<?php echo $this->controller->pid; ?>', 'WIFE');"><?php echo WT_I18N::translate('Add a new mother'); ?></a><?php echo help_link('edit_add_parent'); ?></td> + </tr> + </table> + <?php + } + } + + // parents + foreach ($families as $family) { + $people = $this->controller->buildFamilyList($family, "parents"); + $this->printFamilyHeader($family->getHtmlUrl(), $this->controller->indi->getChildFamilyLabel($family)); + echo '<table class="facts_table">'; + $this->printParentsRows($family, $people, "parents"); + $this->printChildrenRows($family, $people, "parents"); + echo '</table>'; + } + + // step-parents + foreach ($this->controller->indi->getChildStepFamilies() as $family) { + $people = $this->controller->buildFamilyList($family, "step-parents"); + $this->printFamilyHeader($family->getHtmlUrl(), $this->controller->indi->getStepFamilyLabel($family)); + echo '<table class="facts_table">'; + $this->printParentsRows($family, $people, "parents"); + $this->printChildrenRows($family, $people, "parents"); + echo '</table>'; + } + + // spouses + $families = $this->controller->indi->getSpouseFamilies(); + foreach ($families as $family) { + $people = $this->controller->buildFamilyList($family, "spouse"); + $this->printFamilyHeader($family->getHtmlUrl(), $this->controller->indi->getSpouseFamilyLabel($family)); + echo '<table class="facts_table">'; + $this->printParentsRows($family, $people, "spouse"); + $this->printChildrenRows($family, $people, "spouse"); + echo '</table>'; + } + + // step-children + foreach ($this->controller->indi->getSpouseStepFamilies() as $family) { + $people = $this->controller->buildFamilyList($family, "step-children"); + $this->printFamilyHeader($family->getHtmlUrl(), $family->getFullName()); + echo '<table class="facts_table">'; + $this->printParentsRows($family, $people, "spouse"); + $this->printChildrenRows($family, $people, "spouse"); + echo '</table>'; + } + + ?> + <script type="text/javascript"> + <!-- + <?php if (!$SHOW_AGE_DIFF) echo "toggleByClassName('DIV', 'elderdate');"; ?> + //--> + </script> + <br /> + <?php + if ($this->controller->indi->canEdit()) { + ?> + <table class="facts_table"> + <?php + if (count($families)>1) { ?> + <tr> + <td class="facts_value"> + <a href="javascript:;" onclick="return reorder_families('<?php echo $this->controller->pid; ?>');"><?php echo WT_I18N::translate('Reorder families'); ?></a> + <?php echo help_link('reorder_families'); ?> + </td> + </tr> + <?php } ?> + <tr> + <td class="facts_value"> + <a href="javascript:;" onclick="return add_famc('<?php echo $this->controller->pid; ?>');"><?php echo WT_I18N::translate('Link this person to an existing family as a child'); ?></a> + <?php echo help_link('link_child'); ?> + </td> + </tr> + <?php if ($this->controller->indi->getSex()!="F") { ?> + <tr> + <td class="facts_value"> + <a href="javascript:;" onclick="return addspouse('<?php echo $this->controller->pid; ?>','WIFE');"><?php echo WT_I18N::translate('Add a new wife'); ?></a> + <?php echo help_link('add_wife'); ?> + </td> + </tr> + <tr> + <td class="facts_value"> + <a href="javascript:;" onclick="return linkspouse('<?php echo $this->controller->pid; ?>','WIFE');"><?php echo WT_I18N::translate('Add a wife using an existing person'); ?></a> + <?php echo help_link('link_new_wife'); ?> + </td> + </tr> + <tr> + <td class="facts_value"> + <a href="javascript:;" onclick="return add_fams('<?php echo $this->controller->pid; ?>','HUSB');"><?php echo WT_I18N::translate('Link this person to an existing family as a husband'); ?></a> + <?php echo help_link('link_new_husb'); ?> + </td> + </tr> + <?php } + if ($this->controller->indi->getSex()!="M") { ?> + <tr> + <td class="facts_value"> + <a href="javascript:;" onclick="return addspouse('<?php echo $this->controller->pid; ?>','HUSB');"><?php echo WT_I18N::translate('Add a new husband'); ?></a> + <?php echo help_link('add_husband'); ?> + </td> + </tr> + <tr> + <td class="facts_value"> + <a href="javascript:;" onclick="return linkspouse('<?php echo $this->controller->pid; ?>','HUSB');"><?php echo WT_I18N::translate('Add a husband using an existing person'); ?></a> + <?php echo help_link('link_husband'); ?> + </td> + </tr> + <tr> + <td class="facts_value"> + <a href="javascript:;" onclick="return add_fams('<?php echo $this->controller->pid; ?>','WIFE');"><?php echo WT_I18N::translate('Link this person to an existing family as a wife'); ?></a> + <?php echo help_link('link_wife'); ?> + </td> + </tr> + <?php } ?> +<?php if (WT_USER_CAN_ACCEPT) { // NOTE this function is restricted to ACCEPTORS because another bug prevents pending changes being shown on the close relatives tab of the indi page. Once that bug is fixed, this function can be opened up to all! ?> + <tr> + <td class="facts_value"> + <a href="javascript:;" onclick="return addopfchild('<?php echo $this->controller->pid; ?>','U');"><?php echo WT_I18N::translate('Add a child to create a one-parent family'); ?></a> + <?php echo help_link('add_opf_child'); ?> + </td> + </tr> +<?php } ?> + </table> + <?php } ?> + <br /> + <?php + + $ABBREVIATE_CHART_LABELS = $saved_ABBREVIATE_CHART_LABELS; // Restore GEDCOM configuration + unset($show_full); + if (isset($saved_show_full)) $show_full = $saved_show_full; + + return '<div id="'.$this->getName().'_content">'.ob_get_clean().'</div>'; + } + + // Implement WT_Module_Tab + public function hasTabContent() { + return true; + } + // Implement WT_Module_Tab + public function canLoadAjax() { + return true; + } + + // Implement WT_Module_Tab + public function getPreLoadContent() { + return ''; + } + + // Implement WT_Module_Tab + public function getJSCallback() { + return ''; + } +} diff --git a/modules_v2/review_changes/help_text.php b/modules_v2/review_changes/help_text.php new file mode 100644 index 0000000000..408474196d --- /dev/null +++ b/modules_v2/review_changes/help_text.php @@ -0,0 +1,43 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'review_changes': + $title=WT_I18N::translate('Pending Changes block'); + $text=WT_I18N::translate('This block will show editors a list of records with pending changes that need to be approved by a moderator. It also generates daily emails to moderators whenever pending changes exist.'); + + // TODO: Other options of this block + + $text.='</li></ul>'; + break; +} +?> diff --git a/modules_v2/review_changes/module.php b/modules_v2/review_changes/module.php new file mode 100644 index 0000000000..bf5472ef9f --- /dev/null +++ b/modules_v2/review_changes/module.php @@ -0,0 +1,197 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class review_changes_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Pending changes'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('This block will show editors a list of records with pending changes that need to be approved by a moderator. It also generates daily emails to moderators whenever pending changes exist.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $WT_IMAGES, $TEXT_DIRECTION, $WEBTREES_EMAIL; + + $changes=WT_DB::prepare( + "SELECT 1". + " FROM `##change`". + " WHERE status='pending'". + " LIMIT 1" + )->fetchOne(); + + $days =get_block_setting($block_id, 'days', 1); + $sendmail=get_block_setting($block_id, 'sendmail', true); + $block =get_block_setting($block_id, 'block', true); + if ($cfg) { + foreach (array('days', 'sendmail', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + if ($changes) { + //-- if the time difference from the last email is greater than 24 hours then send out another email + $LAST_CHANGE_EMAIL=get_site_setting('LAST_CHANGE_EMAIL'); + if (time()-$LAST_CHANGE_EMAIL > (60*60*24*$days)) { + $LAST_CHANGE_EMAIL = time(); + set_site_setting('LAST_CHANGE_EMAIL', $LAST_CHANGE_EMAIL); + if ($sendmail=="yes") { + // Which users have pending changes? + $users_with_changes=array(); + foreach (get_all_users() as $user_id=>$user_name) { + foreach (get_all_gedcoms() as $ged_id=>$ged_name) { + if (exists_pending_change($user_id, $ged_id)) { + $users_with_changes[$user_id]=$user_name; + break; + } + } + } + foreach ($users_with_changes as $user_id=>$user_name) { + //-- send message + $message = array(); + $message["to"]=$user_name; + $message["from"] = $WEBTREES_EMAIL; + $message["subject"] = WT_I18N::translate('webtrees - Review changes'); + $message["body"] = WT_I18N::translate('Online changes have been made to a genealogical database. These changes need to be reviewed and accepted before they will appear to all users. Please use the URL below to enter that webtrees site and login to review the changes.'); + $message["method"] = get_user_setting($user_id, 'contactmethod'); + $message["url"] = WT_SERVER_NAME.WT_SCRIPT_PATH; + $message["no_from"] = true; + addMessage($message); + } + } + } + if (WT_USER_CAN_EDIT) { + $id=$this->getName().$block_id; + $title=''; + if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) { + if ($ctype=="gedcom") { + $name = WT_GEDCOM; + } else { + $name = WT_USER_NAME; + } + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title .= "<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + $title.=WT_I18N::translate('Pending changes').help_link('review_changes', $this->getName()); + $content = ""; + if (WT_USER_CAN_ACCEPT) { + $content .= "<a href=\"javascript:;\" onclick=\"window.open('edit_changes.php','_blank','width=600,height=500,resizable=1,scrollbars=1'); return false;\">".WT_I18N::translate('There are pending changes for you to moderate.')."</a><br />"; + } + if ($sendmail=="yes") { + $content .= WT_I18N::translate('Last email reminder was sent ').format_timestamp($LAST_CHANGE_EMAIL)."<br />"; + $content .= WT_I18N::translate('Next email reminder will be sent after ').format_timestamp($LAST_CHANGE_EMAIL+(60*60*24*$days))."<br /><br />"; + } + $changes=WT_DB::prepare( + "SELECT xref". + " FROM `##change`". + " WHERE status='pending'". + " AND gedcom_id=?". + " GROUP BY xref" + )->execute(array(WT_GED_ID))->fetchAll(); + foreach ($changes as $change) { + $record=WT_GedcomRecord::getInstance($change->xref); + if ($record->canDisplayDetails()) { + $content.='<b>'.PrintReady($record->getFullName()).'</b> '.getLRM().'('.$record->getXref().')'.getLRM(); + switch ($record->getType()) { + case 'INDI': + case 'FAM': + case 'SOUR': + case 'OBJE': + $content.=$block ? '<br />' : ' '; + $content.='<a href="'.$record->getHtmlUrl().'&show_changes=yes'.'">'.WT_I18N::translate('View Change Diff').'</a>'; + break; + } + $content.='<br />'; + } + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'days', safe_POST_integer('num', 1, 180)); + set_block_setting($block_id, 'sendmail', safe_POST_bool('sendmail')); + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $sendmail=get_block_setting($block_id, 'sendmail', true); + $days=get_block_setting($block_id, 'days', 7); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Send out reminder emails?'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('sendmail', $sendmail); + echo '<br />'; + echo WT_I18N::translate('Reminder email frequency (days)')." <input type='text' name='days' value='".$days."' size='2' />"; + echo '</td></tr>'; + + $block=get_block_setting($block_id, 'block', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } +} diff --git a/modules_v2/sitemap/admin_index.php b/modules_v2/sitemap/admin_index.php new file mode 100644 index 0000000000..5ecdc675b4 --- /dev/null +++ b/modules_v2/sitemap/admin_index.php @@ -0,0 +1,436 @@ +<?php +/** + * Display a diff between two language files to help in translating. + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. + * + * Modifications Copyright (c) 2010 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @package webtrees + * @subpackage Languages + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +//-- make sure that they have admin status before they can use this page +//-- otherwise have them login again +if (!WT_USER_IS_ADMIN) { + if (WT_USER_ID) { + header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH); + exit; + } else { + header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH.'login.php?url=module.php?mod=sitemap'); + exit; + } +} + +global $GEDCOM, $SHOW_MARRIED_NAMES; + +$action = safe_REQUEST($_REQUEST, 'action', WT_REGEX_XREF); +$welcome = safe_REQUEST($_REQUEST, 'welcome', WT_REGEX_XREF); +$gedcom_name = safe_REQUEST($_REQUEST, 'gedcom_name'); +$filename = safe_REQUEST($_REQUEST, 'filename'); +$filenames = safe_REQUEST($_REQUEST, 'filenames'); +$index = safe_REQUEST($_REQUEST, 'index'); +$welcome_priority = safe_REQUEST($_REQUEST, 'welcome_priority', WT_REGEX_XREF); +$welcome_update = safe_REQUEST($_REQUEST, 'welcome_update', WT_REGEX_XREF); +$indi_rec = safe_REQUEST($_REQUEST, 'indi_rec', WT_REGEX_XREF); +$indirec_priority = safe_REQUEST($_REQUEST, 'indirec_priority', WT_REGEX_XREF); +$indirec_update = safe_REQUEST($_REQUEST, 'indirec_update', WT_REGEX_XREF); +$indi_lists = safe_REQUEST($_REQUEST, 'indi_lists', WT_REGEX_XREF); +$indilist_priority = safe_REQUEST($_REQUEST, 'indilist_priority', WT_REGEX_XREF); +$indilist_update = safe_REQUEST($_REQUEST, 'indilist_update', WT_REGEX_XREF); +$fam_rec = safe_REQUEST($_REQUEST, 'fam_rec', WT_REGEX_XREF); +$famrec_priority = safe_REQUEST($_REQUEST, 'famrec_priority', WT_REGEX_XREF); +$famrec_update = safe_REQUEST($_REQUEST, 'famrec_update', WT_REGEX_XREF); +$fam_lists = safe_REQUEST($_REQUEST, 'fam_lists', WT_REGEX_XREF); +$famlist_priority = safe_REQUEST($_REQUEST, 'famlist_priority', WT_REGEX_XREF); +$famlist_update = safe_REQUEST($_REQUEST, 'famlist_update', WT_REGEX_XREF); +$no_private_links = safe_REQUEST($_REQUEST, 'no_private_links', '1', '0'); + +if ($action=="sendFiles") { + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="'.$filename.'"'); + + echo "<?xml version='1.0' encoding='UTF-8' ?>\n"; + echo "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n"; + echo " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"; + echo " xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9\n"; + echo " http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">\n"; + + if (isset($welcome)) { + echo " <url>\n"; + echo " <loc>", WT_SERVER_NAME, WT_SCRIPT_PATH, "index.php?ctype=gedcom&ged=", rawurlencode($gedcom_name), "</loc>\n"; + echo " <changefreq>", $welcome_update, "</changefreq>\n"; + echo " <priority>0.", $welcome_priority, "</priority>\n"; + echo " </url>\n"; + } + $oldGEDCOM = $GEDCOM; + $GEDCOM = $gedcom_name; + // Create a temporary userid + $sitemap_user_id = createTempUser('#SiteMap#', 'visitor', $gedcom_name); // Create a temporary userid + // Temporarily become this user + $_SESSION["org_user"]=$_SESSION["wt_user"]; + $_SESSION["wt_user"]=$sitemap_user_id; + if (isset($indi_rec)) { + $statement=WT_DB::prepare("SELECT i_id, i_gedcom FROM `##individuals` WHERE i_file=?")->execute(array($index)); + while ($row=$statement->fetch(PDO::FETCH_NUM)) { + if ($no_private_links) { + if (canDisplayRecord($index, $row[1])) { + echo " <url>\n"; + echo " <loc>", WT_SERVER_NAME, WT_SCRIPT_PATH, "individual.php?pid=", $row[0], "&ged=", rawurlencode($gedcom_name), "</loc>\n"; + $arec = get_sub_record(1, "1 CHAN", $row[1], 1); + if (!empty($arec) && preg_match("/2 DATE (.*)/", $arec, $datematch)) + echo " <lastmod>", date("Y-m-d", strtotime($datematch[1])), "</lastmod>\n"; + echo " <changefreq>", $indirec_update, "</changefreq>\n"; + echo " <priority>0.", $indirec_priority, "</priority>\n"; + echo " </url>\n"; + } + } else { + echo " <url>\n"; + echo " <loc>", WT_SERVER_NAME, WT_SCRIPT_PATH, "individual.php?pid=", $row[0], "&ged=", rawurlencode($gedcom_name), "</loc>\n"; + $arec = get_sub_record(1, "1 CHAN", $row[1], 1); + if (!empty($arec) && preg_match("/2 DATE (.*)/", $arec, $datematch)) + echo " <lastmod>", date("Y-m-d", strtotime($datematch[1])), "</lastmod>\n"; + echo " <changefreq>", $indirec_update, "</changefreq>\n"; + echo " <priority>0.", $indirec_priority, "</priority>\n"; + echo " </url>\n"; + } + } + $statement->closeCursor(); + } + + if (isset($fam_rec)) { + $statement=WT_DB::prepare("SELECT f_id, f_gedcom FROM `##families` WHERE f_file=?")->execute(array($index)); + while ($row=$statement->fetch(PDO::FETCH_NUM)) { + if ($no_private_links) { + if (canDisplayRecord($index, $row[1])) { + echo " <url>\n"; + echo " <loc>", WT_SERVER_NAME, WT_SCRIPT_PATH, "family.php?famid=", $row[0], "&ged=", rawurlencode($gedcom_name), "</loc>\n"; + $arec = get_sub_record(1, "1 CHAN", $row[1], 1); + if (!empty($arec) && preg_match("/2 DATE (.*)/", $arec, $datematch)) + echo " <lastmod>", date("Y-m-d", strtotime($datematch[1])), "</lastmod>\n"; + echo " <changefreq>", $famrec_update, "</changefreq>\n"; + echo " <priority>0.", $famrec_priority, "</priority>\n"; + echo " </url>\n"; + } + } else { + echo " <url>\n"; + echo " <loc>", WT_SERVER_NAME, WT_SCRIPT_PATH, "family.php?famid=", $row[0], "&ged=", rawurlencode($gedcom_name), "</loc>\n"; + $arec = get_sub_record(1, "1 CHAN", $row[1], 1); + if (!empty($arec) && preg_match("/2 DATE (.*)/", $arec, $datematch)) + echo " <lastmod>", date("Y-m-d", strtotime($datematch[1])), "</lastmod>\n"; + echo " <changefreq>", $famrec_update, "</changefreq>\n"; + echo " <priority>0.", $famrec_priority, "</priority>\n"; + echo " </url>\n"; + } + } + $statement->closeCursor(); + } + + if (isset($fam_lists)) { + foreach (get_indilist_salpha($SHOW_MARRIED_NAMES, true, $index) as $letter=>$count) { + if ($letter!='@') { + echo " <url>\n"; + echo " <loc>", WT_SERVER_NAME, WT_SCRIPT_PATH, "famlist.php?alpha=", urlencode($letter), "&ged=", rawurlencode($gedcom_name), "</loc>\n"; + echo " <changefreq>", $famlist_update, "</changefreq>\n"; + echo " <priority>0.", $famlist_priority, "</priority>\n"; + echo " </url>\n"; + } + } + } + + if (isset($indi_lists)) { + foreach (get_indilist_salpha($SHOW_MARRIED_NAMES, false, $index) as $letter=>$count) { + if ($letter!='@') { + echo " <url>\n"; + echo " <loc>", WT_SERVER_NAME, WT_SCRIPT_PATH, "indilist.php?alpha=", urlencode($letter), "&ged=", rawurlencode($gedcom_name), "</loc>\n"; + echo " <changefreq>", $indilist_update, "</changefreq>\n"; + echo " <priority>0.", $indilist_priority, "</priority>\n"; + echo " </url>\n"; + } + } + } + echo "</urlset>"; + $_SESSION["wt_user"]=$_SESSION["org_user"]; + delete_user($sitemap_user_id); + AddToLog("deleted dummy user -> #SiteMap# <-", 'auth'); + $GEDCOM = $oldGEDCOM; + exit; +} + +if ($action=="sendIndex") { + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="SitemapIndex.xml"'); + + echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; + echo "<sitemapindex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"; + echo "xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n"; + echo "url=\"http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd\"\n"; + echo "xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n"; + + + if (isset($filenames)) { + foreach ($filenames as $ged_index=>$ged_name) { + $xml_name = str_ireplace(".ged",".xml", $ged_name); + echo " <sitemap>\n"; + echo " <loc>", WT_SERVER_NAME, WT_SCRIPT_PATH, "SM_", $xml_name, "</loc>\n"; + echo " <lastmod>", date("Y-m-d"), "</lastmod>\n "; + echo " </sitemap>\n"; + } + } + echo "</sitemapindex>\n"; + exit; +} + +print_header(WT_I18N::translate('Generate Sitemap files')); + +if ($action=="generate") { + echo "<h3>"; + echo WT_I18N::translate('Generate Sitemap files'); + echo help_link('SITEMAP','sitemap'); + echo "</h3>\n"; + echo "<table class=\"facts_table\">\n"; + echo "<tr><td class=\"topbottombar\">", WT_I18N::translate('Selected items to store in Sitemap:'), "</td></tr>\n"; + if (isset($_POST["welcome_page"])) echo "<tr><td class=\"optionbox\">", WT_I18N::translate('Home page'), "</td></tr>\n"; + if (isset($_POST["indi_recs"])) echo "<tr><td class=\"optionbox\">", WT_I18N::translate('Individual information'), "</td></tr>\n"; + if (isset($_POST["indi_list"])) echo "<tr><td class=\"optionbox\">", WT_I18N::translate('Individual List'), "</td></tr>\n"; + if (isset($_POST["fam_recs"])) echo "<tr><td class=\"optionbox\">", WT_I18N::translate('Family information'), "</td></tr>\n"; + if (isset($_POST["fam_list"])) echo "<tr><td class=\"optionbox\">", WT_I18N::translate('Family List'), "</td></tr>\n"; + if (isset($_POST["GEDCOM_Privacy"])) echo "<tr><td class=\"optionbox\">", WT_I18N::translate('No links to private information'), "</td></tr>\n"; + + echo "<tr><td class=\"topbottombar\">", WT_I18N::translate('GEDCOMs to store in Sitemap:'), "</td></tr>\n"; + foreach (get_all_gedcoms() as $ged_id=>$gedcom) { + if (isset($_POST["GEDCOM_{$ged_id}"])) echo "<tr><td class=\"optionbox\">", get_gedcom_setting($ged_id, 'title'), "</td></tr>\n"; + } + + echo "<tr><td class=\"topbottombar\">", WT_I18N::translate('The following Sitemap files have been generated and can be downloaded:'), "</td></tr>\n"; + $filecounter = 0; + foreach (get_all_gedcoms() as $ged_id=>$gedcom) { + if (isset($_POST["GEDCOM_{$ged_id}"])) { + $filecounter += 1; + $sitemapFilename = "SM_".str_ireplace(".ged",".xml",$gedcom); + echo "<tr><td class=\"optionbox\"><a href=\"module.php?mod=sitemap&mod_action=admin_index&action=sendFiles&index=", $ged_id, "&gedcom_name=", rawurlencode($gedcom), "&filename=", $sitemapFilename; + if (isset($_POST["welcome_page"])) echo "&welcome=true&welcome_priority=", $welcome_priority, "&welcome_update=", $welcome_update; + if (isset($_POST["indi_recs"])) echo "&indi_rec=true&indirec_priority=", $indirec_priority, "&indirec_update=", $indirec_update; + if (isset($_POST["indi_list"])) echo "&indi_lists=true&indilist_priority=", $indilist_priority, "&indilist_update=", $indilist_update; + if (isset($_POST["fam_recs"])) echo "&fam_rec=true&famrec_priority=", $famrec_priority, "&famrec_update=", $famrec_update; + if (isset($_POST["fam_list"])) echo "&fam_lists=true&famlist_priority=", $famlist_priority, "&famlist_update=", $famlist_update; + if (isset($_POST["GEDCOM_Privacy"])) echo "&no_private_links=1"; + echo "\"><b>", $sitemapFilename, "</b></a></td></tr>\n"; + } + } + if ($filecounter > 1) { + echo "<tr><td class=\"optionbox\"><a href=\"module.php?mod=sitemap&mod_action=admin_index&action=sendIndex"; + foreach (get_all_gedcoms() as $ged_id=>$gedcom) { + if (isset($_POST["GEDCOM_{$ged_id}"])) { + echo "&filenames[", $ged_id, "]=", $gedcom; + } + } + echo "\">SitemapIndex.xml</a></td></tr>\n"; + } + echo "<tr><td class=\"topbottombar\">", WT_I18N::translate('Place all the files in the root of your webtrees installation.'), "</td></tr>\n"; + echo "</table>\n"; + echo "<br />\n"; +} + +if ($action=="") { +?> + +<!-- "Help for this page" link --> +<div id="page_help"><?php echo help_link('SITEMAP','sitemap'); ?></div> + +<form method="post" enctype="multipart/form-data" id="sitemap" name="sitemap" action="module.php?mod=sitemap&mod_action=admin_index"> + <input type="hidden" name="action" value="generate" /> + <table id="site_map"> + <tr> + <th><?php echo WT_I18N::translate('GEDCOMs to store in Sitemap:'), help_link('SM_GEDCOM_SELECT','sitemap'); ?></th> + <td colspan="3"> +<?php + foreach (get_all_gedcoms() as $ged_id=>$gedcom) { + echo " <input type=\"checkbox\" name=\"GEDCOM_", $ged_id, "\" value=\"", $ged_id, "\" checked>", get_gedcom_setting($ged_id, 'title'), "<br />\n"; + } +?> + </td> + </tr> + <tr> + <th> + </th> + <td colspan="3"> + <input type="checkbox" name="GEDCOM_Privacy" checked><?php echo WT_I18N::translate('No links to private information'); ?> + </td> + </tr> + <tr> + <th rowspan="6"> + <?php echo WT_I18N::translate('Selected items to store in Sitemap:'), help_link('SM_ITEM_SELECT','sitemap'); ?> + </th> + <th><?php echo WT_I18N::translate('Item'); ?></th> + <th><?php echo WT_I18N::translate('Priority'); ?></th> + <th><?php echo WT_I18N::translate('Updates'); ?></th> + </tr> + <tr> + <td> + <input type="checkbox" name="welcome_page" checked><?php echo WT_I18N::translate('Home page'); ?> + </td> + <td> + <select name="welcome_priority"> + <option value="1">0.1</option> + <option value="2">0.2</option> + <option value="3">0.3</option> + <option value="4">0.4</option> + <option value="5">0.5</option> + <option value="6">0.6</option> + <option value="7" selected="selected">0.7</option> + <option value="8">0.8</option> + <option value="9">0.9</option> + </select> + </td> + <td> + <select name="welcome_update"> + <option value="always"><?php echo WT_I18N::translate('always'); ?></option> + <option value="hourly"><?php echo WT_I18N::translate('hourly'); ?></option> + <option value="daily"><?php echo WT_I18N::translate('daily'); ?></option> + <option value="weekly"><?php echo WT_I18N::translate('weekly'); ?></option> + <option value="monthly" selected="selected"><?php echo WT_I18N::translate('monthly'); ?></option> + <option value="yearly"><?php echo WT_I18N::translate('yearly'); ?></option> + <option value="never"><?php echo WT_I18N::translate('never'); ?></option> + </select> + </td> + </tr> + <tr> + <td><input type="checkbox" name="indi_recs" checked><?php echo WT_I18N::translate('Individual information'); ?></td> + <td> + <select name="indirec_priority"> + <option value="1">0.1</option> + <option value="2">0.2</option> + <option value="3">0.3</option> + <option value="4">0.4</option> + <option value="5" selected="selected">0.5</option> + <option value="6">0.6</option> + <option value="7">0.7</option> + <option value="8">0.8</option> + <option value="9">0.9</option> + </select> + </td> + <td> + <select name="indirec_update"> + <option value="always"><?php echo WT_I18N::translate('always'); ?></option> + <option value="hourly"><?php echo WT_I18N::translate('hourly'); ?></option> + <option value="daily"><?php echo WT_I18N::translate('daily'); ?></option> + <option value="weekly"><?php echo WT_I18N::translate('weekly'); ?></option> + <option value="monthly" selected="selected"><?php echo WT_I18N::translate('monthly'); ?></option> + <option value="yearly"><?php echo WT_I18N::translate('yearly'); ?></option> + <option value="never"><?php echo WT_I18N::translate('never'); ?></option> + </select> + </td> + </tr> + <tr> + <td><input type="checkbox" name="indi_list"><?php echo WT_I18N::translate('Individual List'); ?></td> + <td> + <select name="indilist_priority"> + <option value="1">0.1</option> + <option value="2">0.2</option> + <option value="3" selected="selected">0.3</option> + <option value="4">0.4</option> + <option value="5">0.5</option> + <option value="6">0.6</option> + <option value="7">0.7</option> + <option value="8">0.8</option> + <option value="9">0.9</option> + </select> + </td> + <td> + <select name="indilist_update"> + <option value="always"><?php echo WT_I18N::translate('always'); ?></option> + <option value="hourly"><?php echo WT_I18N::translate('hourly'); ?></option> + <option value="daily"><?php echo WT_I18N::translate('daily'); ?></option> + <option value="weekly"><?php echo WT_I18N::translate('weekly'); ?></option> + <option value="monthly" selected="selected"><?php echo WT_I18N::translate('monthly'); ?></option> + <option value="yearly"><?php echo WT_I18N::translate('yearly'); ?></option> + <option value="never"><?php echo WT_I18N::translate('never'); ?></option> + </select> + </td> + </tr> + <tr> + <td><input type="checkbox" name="fam_recs" checked><?php echo WT_I18N::translate('Family information'); ?></td> + <td> + <select name="famrec_priority"> + <option value="1">0.1</option> + <option value="2">0.2</option> + <option value="3">0.3</option> + <option value="4">0.4</option> + <option value="5" selected="selected">0.5</option> + <option value="6">0.6</option> + <option value="7">0.7</option> + <option value="8">0.8</option> + <option value="9">0.9</option> + </select> + </td> + <td> + <select name="famrec_update"> + <option value="always"><?php echo WT_I18N::translate('always'); ?></option> + <option value="hourly"><?php echo WT_I18N::translate('hourly'); ?></option> + <option value="daily"><?php echo WT_I18N::translate('daily'); ?></option> + <option value="weekly"><?php echo WT_I18N::translate('weekly'); ?></option> + <option value="monthly" selected="selected"><?php echo WT_I18N::translate('monthly'); ?></option> + <option value="yearly"><?php echo WT_I18N::translate('yearly'); ?></option> + <option value="never"><?php echo WT_I18N::translate('never'); ?></option> + </select> + </td> + </tr> + <tr> + <td><input type="checkbox" name="fam_list"><?php echo WT_I18N::translate('Family List'); ?></td> + <td> + <select name="famlist_priority"> + <option value="1">0.1</option> + <option value="2">0.2</option> + <option value="3" selected="selected">0.3</option> + <option value="4">0.4</option> + <option value="5">0.5</option> + <option value="6">0.6</option> + <option value="7">0.7</option> + <option value="8">0.8</option> + <option value="9">0.9</option> + </select> + </td> + <td> + <select name="famlist_update"> + <option value="always"><?php echo WT_I18N::translate('always'); ?></option> + <option value="hourly"><?php echo WT_I18N::translate('hourly'); ?></option> + <option value="daily"><?php echo WT_I18N::translate('daily'); ?></option> + <option value="weekly"><?php echo WT_I18N::translate('weekly'); ?></option> + <option value="monthly" selected="selected"><?php echo WT_I18N::translate('monthly'); ?></option> + <option value="yearly"><?php echo WT_I18N::translate('yearly'); ?></option> + <option value="never"><?php echo WT_I18N::translate('never'); ?></option> + </select> + </td> + </tr> + </table> + <input id="savebutton" type="submit" value="<?php echo WT_I18N::translate('Generate'); ?>" /> +</form> + +<?php +} +print_footer(); diff --git a/modules_v2/sitemap/help_text.php b/modules_v2/sitemap/help_text.php new file mode 100644 index 0000000000..e0cef4a953 --- /dev/null +++ b/modules_v2/sitemap/help_text.php @@ -0,0 +1,48 @@ +<?php +/** + * Sitemap Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} +switch ($help) { + +case 'SITEMAP': + $title=WT_I18N::translate('Sitemap information'); + $text=WT_I18N::translate('This module generates Sitemap files for use by search engines. Currently, only the Google search engine supports Sitemap files.<br /><br />There is a Sitemap file for each GEDCOM on your site, and when your site has more than one GEDCOM there is also an index Sitemap file that points to each of the GEDCOMs. The Sitemap files contain links to pages of your site that you want the search engine to index.<br /><br />After this module has generated the Sitemap files, you should inspect them and make whatever changes are necessary. You should copy these files to the server directory where webtrees is installed, and then log into the <a href=\"https://www.google.com/webmasters/sitemaps/\" target=\"_blank\">Google webmaster tools</a> site to make Google aware of their presence.<br /><br />For more information on Google and Sitemap files, visit the <a href=\"https://www.google.com/webmasters/sitemaps/docs/en/about.html\" target=\"_blank\">Google webmaster tools</a> site.'); + break; + +case 'SM_GEDCOM_SELECT': + $title=WT_I18N::translate('Select GEDCOMs'); + $text=WT_I18N::translate('Select the GEDCOMs for which you want to create a Sitemap file. You must select at least one.<br /><br />When the <b>No links to private information</b> option is selected, only links to data that is publicly available will be included.'); + break; + +case 'SM_ITEM_SELECT': + $title=WT_I18N::translate('Select items'); + $text=WT_I18N::translate('Select the elements to be included in the Sitemap file.<br /><br />A priority can be specified for all selected elements. This priority is relative to the other priorities in the file. The update frequency can also be specified. This is an indication of how frequently the data in these items might change. This can influence the time between visits by the search engine, and thus will influence the amount of traffic the site generates.'); + break; +} diff --git a/modules_v2/sitemap/module.php b/modules_v2/sitemap/module.php new file mode 100644 index 0000000000..efbd44f1f9 --- /dev/null +++ b/modules_v2/sitemap/module.php @@ -0,0 +1,58 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require_once WT_ROOT.'includes/functions/functions_export.php'; + +class sitemap_WT_Module extends WT_Module implements WT_Module_Config{ + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Sitemap'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Generate sitemap files for search engines.'); + } + + // Extend WT_Module + public function modAction($mod_action) { + switch($mod_action) { + case 'admin_index': + // TODO: these files should be methods in this class + require WT_ROOT.WT_MODULES_DIR.$this->getName().'/'.$mod_action.'.php'; + break; + } + } + + // Implement WT_Module_Config + public function getConfigLink() { + return 'module.php?mod='.$this->getName().'&mod_action=admin_index'; + } +} diff --git a/modules_v2/source_report/module.php b/modules_v2/source_report/module.php new file mode 100644 index 0000000000..01153ba265 --- /dev/null +++ b/modules_v2/source_report/module.php @@ -0,0 +1,59 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class source_report_WT_Module extends WT_Module implements WT_Module_Report { + // Extend class WT_Module + public function getTitle() { + // This text also appears in the .XML file - update both together + return /* I18N: Name of a report */ WT_I18N::translate('Sources report'); + } + + // Extend class WT_Module + public function getDescription() { + // This text also appears in the .XML file - update both together + return /* I18N: Description of a report */ WT_I18N::translate('A report of individuals which are supported by a given source.'); + } + + // Extend class WT_Module + public function defaultAccessLevel() { + return WT_PRIV_USER; + } + + // Implement WT_Module_Report - a module can provide many reports + public function getReportMenus() { + $menus=array(); + $menu=new WT_Menu($this->getTitle(), 'reportengine.php?ged='.WT_GEDURL.'&action=setup&report='.WT_MODULES_DIR.$this->getName().'/report.xml'); + $menu->addIcon('menu_source'); + $menu->addClass('submenuitem', 'submenuitem_hover', 'submenu', 'icon_small_reports'); + $menus[]=$menu; + + return $menus; + } +} diff --git a/modules_v2/source_report/report.xml b/modules_v2/source_report/report.xml new file mode 100644 index 0000000000..087b5ae4c4 --- /dev/null +++ b/modules_v2/source_report/report.xml @@ -0,0 +1,278 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Report> + <!-- $Id$ --> + <Title><var var="WT_I18N::translate('Sources report')" /></Title> + <Description><var var="WT_I18N::translate('A report of individuals which are supported by a given source.')" /></Description> + <Input name="sid" lookup="SOUR" default="" type="text"><var var="WT_I18N::translate('Find Source ID')" /></Input> + <Input name="sortby" type="select" default="BIRT:DATE" options="NAME=>WT_I18N::translate('Name')|BIRT:DATE=>WT_I18N::translate('Date of birth')|DEAT:DATE=>WT_I18N::translate('Date of death')"><var var="WT_I18N::translate('Sort by')" /></Input> + <Input name="pageSize" type="select" default="A4" options="letter=>WT_I18N::translate_c('paper size','Letter')|A3=>WT_I18N::translate_c('paper size', 'A3')|A4=>WT_I18N::translate_c('paper size','A4')|legal=>WT_I18N::translate_c('paper size','Legal')"><var var="WT_I18N::translate('Page size')" /></Input> + <Input name="fonts" type="select" default="dejavusans" options="arialunicid0=>WT_I18N::translate_c('font name', 'Arial')|dejavusans=>WT_I18N::translate_c('font name', 'DejaVu')|helvetica=>WT_I18N::translate_c('font name', 'Helvetica')"><var var="WT_I18N::translate('Font')"/></Input> + + <!-- Header --> + <Style name="header" font="$fonts" size="18" style="b" /> + <!-- Source Title --> + <Style name="header2" font="$fonts" size="14" style="b" /> + <!-- Name of the List Type. INDI or FAM --> + <Style name="listtype" font="$fonts" size="12" style="b" /> + <!-- Page numbers text --> + <Style name="pagenum" font="$fonts" size="8" /> + <!-- Generated by style - required style name by the generator --> + <Style name="genby" font="$fonts" size="8" /> + <!-- Date Text - CSS Style name --> + <Style name="date" font="$fonts" size="8"/> + <!-- Column list labels - CSS Style name --> + <Style name="list_label" font="$fonts" size="9" style="b"/> + <!-- List values - CSS Style name --> + <Style name="list_value" font="$fonts" size="8"/> + + <SetVar name="nameindi" value="194" /> + <SetVar name="namefam" value="300" /> + <SetVar name="dateevent" value="110" /> + <SetVar name="fact" value="110" /> + <SetVar name="age" value="38" /> + <SetVar name="placeevent" value="107" /> + <SetVar name="vspace" value="5" /> + <SetVar name="printedsource" value="0" /> + <SetVar name="ignore" value="CHAN,CHIL,FAMC,FAMS,HUSB,NAME,NOTE,OBJE,RESN,SEX,SOUR,TITL,WIFE,_UID,_WT_OBJE_SORT"/> + + <Doc pageSize="$pageSize" orientation="landscape"> + <Header> + <Cell align="center" newline="1" style="header"><var var="WT_I18N::translate('Sources')" /></Cell> + <Cell align="rightrtl" newline="1" style="pagenum"><var var="WT_I18N::translate('Page')" /> <PageNum /> <var var="WT_I18N::translate('of')" /> <TotalPages /></Cell> + <!-- Source Title --> + <Gedcom id="$sid"> + <Cell align="center" newline="1" style="header2"><GedcomValue tag="TITL" /></Cell> + </Gedcom> + </Header> + + <Line /> + <Body> + <!-- List type --> + <Cell align="center" newline="1" style="listtype"><var var="WT_I18N::translate('Individuals')" /></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + + <!-- Individual Name --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='NAME'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" style="list_label" width="$nameindi"><var var="WT_I18N::translate('Name')" /></Cell> + <!-- Birth date --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='BIRT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" style="list_label" width="$dateevent"><var var="translate_fact('BIRT:DATE')" /></Cell> + <!-- Birth place --> + <Cell border="1" style="list_label" width="$placeevent"><var var="translate_fact('BIRT:PLAC')" /></Cell> + <!-- Death date --> + <SetVar name="fill" value="" /> + <if condition="$sortby=='DEAT:DATE'"> + <SetVar name="fill" value="#AAAAAA" /> + </if> + <Cell bgcolor="$fill" border="1" style="list_label" width="$dateevent"><var var="translate_fact('DEAT:DATE')" /></Cell> + <Cell border="1" style="list_label" width="$age"><var var="translate_fact('AGE')" /></Cell> + <!-- Death place --> + <Cell border="1" style="list_label" width="$placeevent"><var var="translate_fact('DEAT:PLAC')" /></Cell> + <!-- Detailed source text --> + <Cell border="1" newline="1" style="list_label"><var var="translate_fact('SOUR:PAGE')" /></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + + <!-- Individual List --> + <List list="individual" filter1=":SOUR CONTAINS @$sid@" sortby="$sortby"> + <SetVar name="moresource" value="0" /> + <SetVar name="printsource" value="0" /> + <!-- Printed List counter --> + <SetVar name="printedsource" value="$printedsource + 1" /> + <!-- Individual Name --> + <Cell style="list_value" width="$nameindi"><GetPersonName id="" /> + <Gedcom id="@FAMC"> + <br /> <var var="WT_I18N::translate('Father')" />: <GetPersonName id="@HUSB"/> + <br /> <var var="WT_I18N::translate('Mother')" />: <GetPersonName id="@WIFE"/> + </Gedcom> + </Cell> + <!-- Birth --> + <Cell style="list_value" width="$dateevent"><GedcomValue tag="BIRT:DATE" /></Cell> + <Cell style="list_value" width="$placeevent"><GedcomValue tag="BIRT:PLAC" /></Cell> + <!-- Death --> + <Cell style="list_value" width="$dateevent"><GedcomValue tag="DEAT:DATE"/></Cell> + <Cell style="list_value" width="$age"><AgeAtDeath /></Cell> + <Cell style="list_value" width="$placeevent"><GedcomValue tag="DEAT:PLAC" /></Cell> + <Cell style="list_value" newline="1"> + <Facts ignore="$ignore"> + <SetVar name="printfact" value="0" /> + <RepeatTag tag="@fact:SOUR"> + <Gedcom id="@SOUR"> + <if condition="@ID==$sid"> + <SetVar name="printfact" value="1" /> + </if> + </Gedcom> + </RepeatTag> + <if condition="$printfact==1"> + <SetVar name="printsource" value="0" /> + <!-- Intend the fact line if more then one fact has source --> + <if condition="$moresource==1"> + <br /> + </if> + <!-- Detailed source text --> + <RepeatTag tag="@fact:SOUR"> + <Gedcom id="@SOUR"> + <if condition="@ID==$sid"> + <SetVar name="printsource" value="1" /> + </if> + </Gedcom> + <if condition="$printsource==1"> + <if condition="@fact=='CHR'"> + <varLetter var="BIRT" /> <GedcomValue tag="SOUR:PAGE"/> + <if condition="@SOUR:DATA:TEXT!=''"> + <br /><GedcomValue tag="SOUR:DATA:TEXT"/> + </if> + </if> + <if condition="@fact=='BURI'"> + <varLetter var="DEAT" /> <GedcomValue tag="SOUR:PAGE"/> + <if condition="@SOUR:DATA:TEXT!=''"> + <br /><GedcomValue tag="SOUR:DATA:TEXT"/> + </if> + </if> + <SetVar name="printsource" value="0" /> + </if> + </RepeatTag> + <SetVar name="moresource" value="1" /> + </if> + <SetVar name="printfact" value="0" /> + </Facts> + </Cell> + <Line /> + </List> + + <!-- Print the list counter --> + <if condition="$printedsource==0"> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total individuals')"/>: 0</Cell> + </if> + <if condition="$printedsource > 0"> + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total individuals')"/>: <var var="printedsource" /></Cell> + </if> + <NewPage /> + <!-- Family List --> + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="center" newline="1" style="listtype"><var var="WT_I18N::translate('Families')" /></Cell> + <TextBox height="$vspace" newline="1" padding="0"/> + <!-- Family Name --> + <Cell border="1" style="list_label" width="$namefam"><var var="WT_I18N::translate('Name')" /></Cell> + <!-- Name of the fact that contains the source --> + <Cell border="1" style="list_label" width="$fact"><var var="WT_I18N::translate('Event')" /></Cell> + <!-- Date of the fact --> + <Cell bgcolor="#AAAAAA" border="1" style="list_label" width="$dateevent"><var var="translate_fact('DATE')" /></Cell> + <!-- Date of the fact --> + <Cell border="1" style="list_label" width="$placeevent"><var var="translate_fact('PLAC')" /></Cell> + <!-- Detailed source text --> + <Cell border="1" newline="1" style="list_label"><var var="translate_fact('SOUR:PAGE')" /></Cell> + + <!-- Family List --> + <TextBox height="$vspace" newline="1" padding="0"/> + <SetVar name="printedsource" value="0" /> + <List list="family" filter1=":SOUR CONTAINS @$sid@" sortby="MARR:DATE"> + <SetVar name="moresource" value="0" /> + <SetVar name="printsource" value="0" /> + <!-- Printed List counter --> + <SetVar name="printedsource" value="$printedsource + 1" /> + + <!-- Family Name --> + <Cell style="list_value" width="$namefam"><GetPersonName id="" /> + <Gedcom id="@HUSB:@FAMC"> + <br /> <var var="WT_I18N::translate('Husband\'s parents')" />: <GetPersonName id=""/> + </Gedcom> + <Gedcom id="@WIFE:@FAMC"> + <br /> <var var="WT_I18N::translate('Wife\'s parents')" />: <GetPersonName id=""/> + </Gedcom> + </Cell> + <Facts ignore="$ignore"> + <SetVar name="printfact" value="0" /> + <RepeatTag tag="@fact:SOUR"> + <Gedcom id="@SOUR"> + <if condition="@ID==$sid"> + <SetVar name="printfact" value="1" /> + </if> + </Gedcom> + </RepeatTag> + + <if condition="$printfact==1"> + <SetVar name="printsource" value="0" /> + <!-- Intend the fact line if more then one fact has source --> + <if condition="$moresource==1"> + <Cell style="list_value" width="$namefam"> </Cell> + </if> + + <!-- Name of the fact that contains the source --> + <Cell style="list_value" width="$fact"> + <if condition="@fact=='MARR'"> + <!-- Print different type of marriages --> + <if condition="@MARR:TYPE==''"> + <var var="@fact" /> + </if> + <if condition="@MARR:TYPE=='Religious'"> + <var var="WT_I18N::translate('Religious marriage')" /> + </if> + <if condition="@MARR:TYPE=='Civil'"> + <var var="WT_I18N::translate('Civil marriage')" /> + </if> + <if condition="@MARR:TYPE=='Partners'"> + <var var="WT_I18N::translate('Registered partnership')" /> + </if> + </if> + <if condition="@fact!='MARR'"> + <var var="@fact" /> + </if> + <RepeatTag tag="@fact:NOTE"> + <if condition="@NOTE!=''"> + <br /><GedcomValue tag="NOTE"/> + </if> + </RepeatTag> + </Cell> + + <!-- Date of the fact --> + <Cell style="list_value" width="$dateevent"><GedcomValue tag="@fact:DATE"/></Cell> + <!-- Place of the fact --> + <Cell style="list_value" width="$placeevent"><GedcomValue tag="@fact:PLAC"/></Cell> + <!-- Detailed source text --> + <Cell style="list_value" newline="1"> + <RepeatTag tag="@fact:SOUR"> + <Gedcom id="@SOUR"> + <if condition="@ID==$sid"> + <SetVar name="printsource" value="1" /> + </if> + </Gedcom> + <if condition="$printsource==1"> + <GedcomValue tag="SOUR:PAGE"/> + <if condition="@SOUR:DATA:TEXT!=''"> + <br /><GedcomValue tag="SOUR:DATA:TEXT"/> + </if> + <SetVar name="printsource" value="0" /> + </if> + </RepeatTag> + </Cell> + <SetVar name="moresource" value="1" /> + </if> + <SetVar name="printfact" value="0" /> + </Facts> + <Line /> + </List> + + <!-- Print the list counter --> + <if condition="$printedsource==0"> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total families')"/>: 0</Cell> + </if> + <if condition="$printedsource > 0"> + <TextBox height="$vspace" newline="1" padding="0"/> + <Cell align="rightrtl" newline="1" style="list_label"><var var="WT_I18N::translate('Total families')"/>: <var var="printedsource" /></Cell> + </if> + <TextBox height="$vspace" newline="1" padding="0"/> + </Body> + + <Footer> + <Cell align="rightrtl" newline="1" style="date"><Now/></Cell> + </Footer> + + </Doc> +</Report> diff --git a/modules_v2/sources_tab/module.php b/modules_v2/sources_tab/module.php new file mode 100644 index 0000000000..6970206534 --- /dev/null +++ b/modules_v2/sources_tab/module.php @@ -0,0 +1,143 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class sources_tab_WT_Module extends WT_Module implements WT_Module_Tab { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Sources'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab to the individual page which displays the sources linked to an individual.'); + } + + // Implement WT_Module_Tab + public function defaultTabOrder() { + return 30; + } + + protected $sourceCount = null; + + // Implement WT_Module_Tab + public function getTabContent() { + global $FACT_COUNT, $SHOW_LEVEL2_NOTES, $NAV_SOURCES; + + /*if (isset($_COOKIE['row_sour2'])) $SHOW_LEVEL2_SOURCES = ($_COOKIE['row_sour2']); + else*/ $SHOW_LEVEL2_SOURCES = $SHOW_LEVEL2_NOTES; + + ob_start(); + ?> + <table class="facts_table"> + <?php + if (!$this->controller->indi->canDisplayDetails()) { + echo "<tr><td class=\"facts_value\">"; + print_privacy_error(); + echo "</td></tr>"; + } else { + ?> + <tr> + <td></td> + <td class="descriptionbox rela"> + <input id="checkbox_sour2" type="checkbox" <?php if ($SHOW_LEVEL2_SOURCES) echo " checked=\"checked\""; ?> onclick="toggleByClassName('TR', 'row_sour2');" /> + <label for="checkbox_sour2"><?php echo WT_I18N::translate('Show all sources'), help_link('show_fact_sources'); ?></label> + + </td> + </tr> + <?php + $otheritems = $this->controller->getOtherFacts(); + foreach ($otheritems as $key => $event) { + if ($event->getTag()=="SOUR") print_main_sources($event->getGedcomRecord(), 1, $this->controller->pid, $event->getLineNumber()); + $FACT_COUNT++; + } + } + // 2nd level sources [ 1712181 ] + $this->controller->indi->add_family_facts(false); + foreach ($this->controller->getIndiFacts() as $key => $factrec) { + print_main_sources($factrec->getGedcomRecord(), 2, $this->controller->pid, $factrec->getLineNumber(), true); + } + if ($this->get_source_count()==0) echo "<tr><td id=\"no_tab3\" colspan=\"2\" class=\"facts_value\">".WT_I18N::translate('There are no Source citations for this individual.')."</td></tr>"; + //-- New Source Link + if ($this->controller->indi->canEdit()) { + ?> + <tr> + <td class="facts_label"><?php echo WT_I18N::translate('Add Source Citation'), help_link('add_source'); ?></td> + <td class="facts_value"> + <a href="javascript:;" onclick="add_new_record('<?php echo $this->controller->pid; ?>','SOUR'); return false;"><?php echo WT_I18N::translate('Add a new source citation'); ?></a> + <br /> + </td> + </tr> + <?php + } + ?> + </table> + <br /> + <?php + if (!$SHOW_LEVEL2_SOURCES) { + ?> + <script type="text/javascript"> + <!-- + toggleByClassName('TR', 'row_sour2'); + //--> + </script> + <?php + } + return '<div id="'.$this->getName().'_content">'.ob_get_clean().'</div>'; + } + + function get_source_count() { + if ($this->sourceCount===null) { + $ct = preg_match_all("/\d SOUR @(.*)@/", $this->controller->indi->getGedcomRecord(), $match, PREG_SET_ORDER); + foreach ($this->controller->indi->getSpouseFamilies() as $sfam) + $ct += preg_match("/\d SOUR /", $sfam->getGedcomRecord()); + $this->sourceCount = $ct; + } + return $this->sourceCount; + } + + // Implement WT_Module_Tab + public function hasTabContent() { + return WT_USER_CAN_EDIT || $this->get_source_count()>0; + } + // Implement WT_Module_Tab + public function canLoadAjax() { + return true; + } + + // Implement WT_Module_Tab + public function getPreLoadContent() { + return ''; + } + + // Implement WT_Module_Tab + public function getJSCallback() { + return ''; + } +} diff --git a/modules_v2/stories/help_text.php b/modules_v2/stories/help_text.php new file mode 100644 index 0000000000..31bc9e4348 --- /dev/null +++ b/modules_v2/stories/help_text.php @@ -0,0 +1,54 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'add_story': + $title=''; + $text=''; + break; + +case 'story_title': + $title=''; + $text=''; + break; + +case 'delete_story': + $title=''; + $text=''; + break; + +case 'edit_story': + $title=''; + $text=''; + break; + +} diff --git a/modules_v2/stories/module.php b/modules_v2/stories/module.php new file mode 100644 index 0000000000..e9a38d0a45 --- /dev/null +++ b/modules_v2/stories/module.php @@ -0,0 +1,382 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class stories_WT_Module extends WT_Module implements WT_Module_Block, WT_Module_Tab, WT_Module_Config { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Stories'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('Add a narrative story to a person.'); + } + + // Extend WT_Module + public function modAction($mod_action) { + switch($mod_action) { + case 'admin_edit': + $this->edit(); + break; + case 'admin_delete': + $this->delete(); + $this->config(); + break; + case 'admin_config': + $this->config(); + break; + case 'show_list': + $this->show_list(); + break; + default: + die("Internal error - unknown action: $mod_action"); + } + } + + // Implement WT_Module_Config + public function getConfigLink() { + return 'module.php?mod='.$this->getName().'&mod_action=admin_config'; + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return false; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return false; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + } + + // Implement class WT_Module_Tab + public function defaultTabOrder() { + return 55; + } + + // Implement class WT_Module_Tab + public function getTabContent() { + $block_ids= + WT_DB::prepare( + "SELECT block_id". + " FROM `##block`". + " WHERE module_name=?". + " AND xref=?". + " AND gedcom_id=?" + )->execute(array( + $this->getName(), + $xref=$this->controller->indi->getXref(), + WT_GED_ID + ))->fetchOneColumn(); + + $html=''; + foreach ($block_ids as $block_id) { + // Only show this block for certain languages + $languages=get_block_setting($block_id, 'languages'); + if (!$languages || in_array(WT_LOCALE, explode(',', $languages))) { + $html.='<div class="news_title center">'.get_block_setting($block_id, 'title').'</div>'; + $html.='<div>'.get_block_setting($block_id, 'story_body').'</div><br />'; + if (WT_USER_CAN_EDIT) { + $html.='<div><a href="module.php?mod='.$this->getName().'&mod_action=admin_edit&block_id='.$block_id.'">'; + $html.=WT_I18N::translate('Edit story').'</a></div><br />'; + } + } + } + if (WT_USER_GEDCOM_ADMIN && !$html) { + $html.='<div class="news_title center">'.$this->getTitle().'</div>'; + $html.='<div><a href="module.php?mod='.$this->getName().'&mod_action=admin_edit&xref='.$this->controller->indi->getXref().'">'; + $html.=WT_I18N::translate('Add story').'</a>'.help_link('add_story', $this->getName()).'</div><br />'; + } + return $html; + } + + // Implement class WT_Module_Tab + public function hasTabContent() { + return $this->getTabContent() <> ''; + } + + // Implement class WT_Module_Tab + public function canLoadAjax() { + return false; + } + + // Implement class WT_Module_Tab + public function getPreLoadContent() { + return ''; + } + + // Implement class WT_Module_Tab + public function getJSCallback() { + return ''; + } + + // Action from the configuration page + private function edit() { + global $TEXT_DIRECTION, $ENABLE_AUTOCOMPLETE; + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + if (WT_USER_CAN_EDIT) { + + if (safe_POST_bool('save')) { + $block_id=safe_POST('block_id'); + if ($block_id) { + WT_DB::prepare( + "UPDATE `##block` SET gedcom_id=?, xref=? WHERE block_id=?" + )->execute(array(safe_POST('gedcom_id'), safe_POST('xref'), $block_id)); + } else { + WT_DB::prepare( + "INSERT INTO `##block` (gedcom_id, xref, module_name, block_order) VALUES (?, ?, ?, ?)" + )->execute(array( + safe_POST('gedcom_id', array_keys(get_all_gedcoms())), + safe_POST('xref'), + $this->getName(), + 0 + )); + $block_id=WT_DB::getInstance()->lastInsertId(); + } + set_block_setting($block_id, 'title', safe_POST('title', WT_REGEX_UNSAFE)); // allow html + set_block_setting($block_id, 'story_body', safe_POST('story_body', WT_REGEX_UNSAFE)); // allow html + $languages=array(); + foreach (WT_I18N::installed_languages() as $code=>$name) { + if (safe_POST_bool('lang_'.$code)) { + $languages[]=$code; + } + } + set_block_setting($block_id, 'languages', implode(',', $languages)); + $this->config(); + } else { + $block_id=safe_GET('block_id'); + if ($block_id) { + print_header(WT_I18N::translate('Edit story')); + $title=get_block_setting($block_id, 'title'); + $story_body=get_block_setting($block_id, 'story_body'); + $gedcom_id=WT_DB::prepare( + "SELECT gedcom_id FROM `##block` WHERE block_id=?" + )->execute(array($block_id))->fetchOne(); + $xref=WT_DB::prepare( + "SELECT xref FROM `##block` WHERE block_id=?" + )->execute(array($block_id))->fetchOne(); + } else { + print_header(WT_I18N::translate('Add story')); + $title=''; + $story_body=''; + $gedcom_id=WT_GED_ID; + $xref=safe_GET('xref', WT_REGEX_XREF); + } + ?> + <script type="text/javascript"> + var pastefield; + function paste_id(value) { + pastefield.value=value; + } + </script> + <?php + if ($ENABLE_AUTOCOMPLETE) { + require WT_ROOT.'/js/autocomplete.js.htm'; + } + // "Help for this page" link + echo '<div id="page_help">', help_link('add_story', $this->getName()), '</div>'; + echo '<form name="story" method="post" action="#">'; + echo '<input type="hidden" name="save" value="1" />'; + echo '<input type="hidden" name="block_id" value="', $block_id, '" />'; + echo '<input type="hidden" name="gedcom_id" value="', WT_GED_ID, '" />'; + echo '<table id="story_module">'; + echo '<tr><th>'; + echo WT_I18N::translate('Story title'), help_link('story_title', $this->getName()); + echo '</th></tr><tr><td><textarea name="title" rows="1" cols="90" tabindex="2">', htmlspecialchars($title), '</textarea></td></tr>'; + echo '<tr><th>'; + echo WT_I18N::translate('Story'), help_link('add_story', $this->getName()); + echo '</th></tr><tr><td>'; + if (array_key_exists('ckeditor', WT_Module::getActiveModules())) { + // use CKeditor module + require_once WT_ROOT.WT_MODULES_DIR.'ckeditor/ckeditor.php'; + $oCKeditor = new CKEditor(); + $oCKeditor->basePath = WT_MODULES_DIR.'ckeditor/'; + $oCKeditor->config['width'] = 900; + $oCKeditor->config['height'] = 400; + $oCKeditor->config['AutoDetectLanguage'] = false ; + $oCKeditor->config['DefaultLanguage'] = 'en'; + $oCKeditor->editor('story_body', $story_body); + } else { + //use standard textarea + echo '<textarea name="story_body" rows="10" cols="90" tabindex="2">', htmlspecialchars($story_body), '</textarea>'; + } + echo '</td></tr>'; + echo '</table><table id="story_module2">'; + echo '<tr>'; + echo '<th>', WT_I18N::translate('Person'), '</th>'; + echo '<th>', WT_I18N::translate('Show this block for which languages?'), '</th>'; + echo '</tr>'; + echo '<tr>'; + echo '<td class="optionbox ', $TEXT_DIRECTION, '">'; + echo '<input type="text" name="xref" id="pid" size="4" value="'.$xref.'" />'; + print_findindi_link("pid", "xref"); + if ($xref) { + $person=WT_Person::getInstance($xref); + if ($person) { + echo ' ', $person->format_list('span'); + } + } + echo '</td>'; + $languages=get_block_setting($block_id, 'languages'); + echo '<td class="optionbox ', $TEXT_DIRECTION, '">'; + echo edit_language_checkboxes('lang_', $languages); + echo '</td></tr></table>'; + echo '<p><input type="submit" value="', WT_I18N::translate('Save'), '" tabindex="5"/>'; + echo ' <input type="button" value="', WT_I18N::translate('Cancel'), '" onclick="window.location=\''.$this->getConfigLink().'\';" tabindex="6" />'; + echo '</p>'; + echo '</form>'; + + print_footer(); + exit; + } + } else { + header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH); + exit; + } + } + + private function delete() { + if (WT_USER_CAN_EDIT) { + $block_id=safe_GET('block_id'); + + $block_order=WT_DB::prepare( + "SELECT block_order FROM `##block` WHERE block_id=?" + )->execute(array($block_id))->fetchOne(); + + WT_DB::prepare( + "DELETE FROM `##block_setting` WHERE block_id=?" + )->execute(array($block_id)); + + WT_DB::prepare( + "DELETE FROM `##block` WHERE block_id=?" + )->execute(array($block_id)); + } else { + header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH); + exit; + } + } + + private function config() { + global $WT_IMAGES, $TEXT_DIRECTION; + + if (WT_USER_CAN_EDIT) { + print_header($this->getTitle()); + + $stories=WT_DB::prepare( + "SELECT block_id, xref". + " FROM `##block` b". + " WHERE module_name=?". + " AND gedcom_id=?". + " ORDER BY xref" + )->execute(array($this->getName(), WT_GED_ID))->fetchAll(); + + echo '<table class="list_table">'; + echo '<tr><td class="list_label" colspan="4">'; + echo '<a href="module.php?mod=', $this->getName(), '&mod_action=admin_edit">', WT_I18N::translate('Add story'), '</a>'; + echo help_link('add_story', $this->getName()); + echo '</td></tr>'; + if (count($stories)>0) { + echo '<tr><td class="list_label center width50">', WT_I18N::translate('Story title'), help_link('story_title', $this->getName()); + echo '</td><td class="list_label center width30">', WT_I18N::translate('Person'); + echo '</td><td class="list_label center width10">', WT_I18N::translate('Edit story'), help_link('edit_story', $this->getName()); + echo '</td><td class="list_label center width10">', WT_I18N::translate('Delete'), help_link('delete_story', $this->getName()), '</tr>'; + } + foreach ($stories as $story) { + $indi=WT_Person::getInstance($story->xref); + if ($indi) { + $name="<a href=\"".$indi->getHtmlUrl()."#stories\">".$indi->getFullName()."</a>"; + } else { + $name=$story->xref; + } + echo '<tr><td class="optionbox center">'; + echo get_block_setting($story->block_id, 'title'); + echo '<td class="list_value_wrap">', $name, '</td>'; + echo '<td class="optionbox center"><a href="module.php?mod=', $this->getName(), '&mod_action=admin_edit&block_id=', $story->block_id, '">', WT_I18N::translate('Edit'), '</a></td>'; + echo '<td class="optionbox center"><a href="module.php?mod=', $this->getName(), '&mod_action=admin_delete&block_id=', $story->block_id, '" onclick="return confirm(\'', WT_I18N::translate('Are you sure you want to delete this story?'), '\');">', WT_I18N::translate('Delete'), '</a>'; + echo '</td></tr>'; + } + echo '</table>'; + print_footer(); + } else { + header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH); + exit; + } + } + // Following function allows Story list to be added manually as a menu item in header.php if required, using link such as "module.php?mod=stories&mod_action=show_list" + // No privacy restrictions included here though - so use with care! + private function show_list() { + global $WT_IMAGES, $TEXT_DIRECTION; + + print_header($this->getTitle()); + + $stories=WT_DB::prepare( + "SELECT block_id, xref". + " FROM `##block` b". + " WHERE module_name=?". + " AND gedcom_id=?". + " ORDER BY xref" + )->execute(array($this->getName(), WT_GED_ID))->fetchAll(); + + echo '<table class="list_table width90">'; + if (count($stories)>0) { + echo '<tr><td class="list_label">', WT_I18N::translate('Story title'); + echo '</td><td class="list_label">', WT_I18N::translate('Person'); + } + foreach ($stories as $story) { + $indi=WT_Person::getInstance($story->xref); + if ($indi) { + $name="<a href=\"".$indi->getHtmlUrl()."#stories\">".$indi->getFullName()."</a>"; + } else { + $name=$story->xref; + } + if ($indi->canDisplayDetails()) { + echo '<tr><td class="list_value">'; + echo get_block_setting($story->block_id, 'title'); + echo '<td class="list_value_wrap">', $name, '</td>'; + echo '</td></tr>'; + } + } + echo '</table>'; + print_footer(); + } +} diff --git a/modules_v2/theme_select/module.php b/modules_v2/theme_select/module.php new file mode 100644 index 0000000000..cdf0a9c63f --- /dev/null +++ b/modules_v2/theme_select/module.php @@ -0,0 +1,78 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class theme_select_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Theme Select'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The Theme Select block displays the Theme selector even when the Change Theme feature is disabled.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + $id=$this->getName().$block_id; + $title=WT_I18N::translate('Change theme').help_link('change_theme'); + $menu=WT_MenuBar::getThemeMenu(); + if ($menu) { + $content='<br /><div class="center theme_form">'.WT_MenuBar::getThemeMenu()->getMenuAsDropdown().'</div><br />'; + + if ($template) { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } else { + return $content; + } + } else { + return ''; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + } +} diff --git a/modules_v2/todays_events/help_text.php b/modules_v2/todays_events/help_text.php new file mode 100644 index 0000000000..b289501282 --- /dev/null +++ b/modules_v2/todays_events/help_text.php @@ -0,0 +1,35 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +} +?> diff --git a/modules_v2/todays_events/module.php b/modules_v2/todays_events/module.php new file mode 100644 index 0000000000..dd7e942bf2 --- /dev/null +++ b/modules_v2/todays_events/module.php @@ -0,0 +1,163 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class todays_events_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('On This Day'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The On This Day, in Your History... block shows anniversaries of events for today. You can configure the amount of detail shown.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $TEXT_DIRECTION, $WT_IMAGES; + + $filter =get_block_setting($block_id, 'filter', true); + $onlyBDM =get_block_setting($block_id, 'onlyBDM', true); + $infoStyle =get_block_setting($block_id, 'infoStyle','table'); + $sortStyle =get_block_setting($block_id, 'sortStyle','alpha'); + $block =get_block_setting($block_id, 'block', true); + if ($cfg) { + foreach (array('filter', 'onlyBDM', 'infoStyle', 'sortStyle', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + $todayjd=WT_CLIENT_JD; + + $id=$this->getName().$block_id; + $title=''; + if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) { + if ($ctype=="gedcom") { + $name = WT_GEDCOM; + } else { + $name = WT_USER_NAME; + } + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title .= "<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + $title.=WT_I18N::translate('On This Day ...'); + + $content = ""; + switch ($infoStyle) { + case 'list': + // Output style 1: Old format, no visible tables, much smaller text. Better suited to right side of page. + $content .= print_events_list($todayjd, $todayjd, $onlyBDM ? 'BIRT MARR DEAT' : '', $filter, $sortStyle); + break; + case 'table': + // Style 2: New format, tables, big text, etc. Not too good on right side of page + ob_start(); + $content .= print_events_table($todayjd, $todayjd, $onlyBDM ? 'BIRT MARR DEAT' : '', $filter, $sortStyle); + $content .= ob_get_clean(); + break; + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'filter', safe_POST_bool('filter')); + set_block_setting($block_id, 'onlyBDM', safe_POST_bool('onlyBDM')); + set_block_setting($block_id, 'infoStyle', safe_POST('infoStyle', array('list', 'table'), 'table')); + set_block_setting($block_id, 'sortStyle', safe_POST('sortStyle', array('alpha', 'anniv'), 'alpha')); + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $filter=get_block_setting($block_id, 'filter', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show only events of living people?'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('filter', $filter); + echo '</td></tr>'; + + $onlyBDM=get_block_setting($block_id, 'onlyBDM', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show only Births, Deaths, and Marriages?'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('onlyBDM', $onlyBDM); + echo '</td></tr>'; + + $infoStyle=get_block_setting($block_id, 'infoStyle', 'table'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Presentation style'); + echo '</td><td class="optionbox">'; + echo select_edit_control('infoStyle', array('list'=>WT_I18N::translate('list'), 'table'=>WT_I18N::translate('table')), null, $infoStyle, ''); + echo '</td></tr>'; + + $sortStyle=get_block_setting($block_id, 'sortStyle', 'alpha'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Sort Style'); + echo '</td><td class="optionbox">'; + echo select_edit_control('sortStyle', array('alpha'=>WT_I18N::translate('alphabetically'), 'anniv'=>WT_I18N::translate('By Anniversary')), null, $sortStyle, ''); + echo '</td></tr>'; + + $block=get_block_setting($block_id, 'block', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } +} diff --git a/modules_v2/todo/help_text.php b/modules_v2/todo/help_text.php new file mode 100644 index 0000000000..f0291df971 --- /dev/null +++ b/modules_v2/todo/help_text.php @@ -0,0 +1,55 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'todo': + $title=WT_I18N::translate('"To Do" block'); + $text=WT_I18N::translate('This block helps you keep track of <b>_TODO</b> tasks in the database.<br /><br />To add "To Do" tasks to your records, you may first need amend the GEDCOM configuration so that the <b>_TODO</b> fact is in the list of facts that can be added to the records of individuals, families, sources, and repositories. Each of these lists, which you will find in the Edit Options section of the GEDCOM configuration, is independent. The order of the list entries is not important; you can add the new entries at the beginning of each list.'); + break; + +case 'todo_show_future': + $title=WT_I18N::translate('Show future tasks'); + $text=WT_I18N::translate('Show "To Do" tasks that have a date in the future. Otherwise only items with a date in the past are shown.'); + break; + +case 'todo_show_other': + $title=WT_I18N::translate('Show other users\' tasks'); + $text=WT_I18N::translate('Show "To Do" tasks assigned to other users'); + break; + +case 'todo_show_unassigned': + $title=WT_I18N::translate('Show unassigned tasks'); + $text=WT_I18N::translate('Show "To Do" tasks that are not assigned to any user'); + break; + +} +?>
\ No newline at end of file diff --git a/modules_v2/todo/module.php b/modules_v2/todo/module.php new file mode 100644 index 0000000000..b257709dff --- /dev/null +++ b/modules_v2/todo/module.php @@ -0,0 +1,179 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class todo_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('"To Do" tasks'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The To Do block lists all outstanding _TODO facts in the database.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $WT_IMAGES; + + $show_unassigned=get_block_setting($block_id, 'show_unassigned', true); + $show_other =get_block_setting($block_id, 'show_other', true); + $show_future =get_block_setting($block_id, 'show_future', true); + $block =get_block_setting($block_id, 'block', true); + if ($cfg) { + foreach (array('show_unassigned', 'show_other', 'show_future', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + $id=$this->getName().$block_id; + $title=''; + if ($ctype=='gedcom' && WT_USER_GEDCOM_ADMIN || $ctype=='user' && WT_USER_ID) { + if ($ctype=='gedcom') { + $name = WT_GEDCOM; + } else { + $name = WT_USER_NAME; + } + $title.="<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title.="<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + $title.=WT_I18N::translate('"To Do" tasks').help_link('todo', $this->getName()); + $content=''; + + require_once WT_ROOT.'js/sorttable.js.htm'; + + $table_id = 'ID'.floor(microtime()*1000000); // sorttable requires a unique ID + $content .= '<table id="'.$table_id.'" class="sortable list_table center">'; + $content .= '<tr>'; + $content .= '<th class="list_label">'.translate_fact('DATE').'</th>'; + $content .= '<th class="list_label">'.WT_I18N::translate('Record').'</th>'; + if ($show_unassigned || $show_other) { + $content .= '<th class="list_label">'.WT_I18N::translate('User name').'</th>'; + } + $content .= '<th class="list_label">'.translate_fact('TEXT').'</th>'; + $content .= '</tr>'; + + $found=false; + $end_jd=$show_future ? 99999999 : WT_CLIENT_JD; + foreach (get_calendar_events(0, $end_jd, '_TODO', WT_GED_ID) as $todo) { + $record=WT_GedcomRecord::getInstance($todo['id']); + if ($record && $record->canDisplayDetails()) { + $user_name=get_gedcom_value('_WT_USER', 2, $todo['factrec']); + if ($user_name==WT_USER_NAME || !$user_name && $show_unassigned || $user_name && $show_other) { + $content.='<tr valign="top">'; + $content.='<td class="list_value_wrap">'.str_replace('<a', '<a name="'.$todo['date']->MinJD().'"', $todo['date']->Display(false)).'</td>'; + $name=$record->getListName(); + $content.='<td class="list_value_wrap" align="'.get_align(WT_GEDCOM).'"><a href="'.$record->getHtmlUrl().'">'.PrintReady($name).'</a></td>'; + if ($show_unassigned || $show_other) { + $content.='<td class="list_value_wrap">'.$user_name.'</td>'; + } + $text=get_gedcom_value('_TODO', 1, $todo['factrec']); + $content.='<td class="list_value_wrap" align="'.get_align($text).'">'.PrintReady($text).'</td>'; + $content.='</tr>'; + $found=true; + } + } + } + + $content .= '</table>'; + if (!$found) { + $content.='<p>'.WT_I18N::translate('There are no "To Do" tasks.').'</p>'; + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'show_other', safe_POST_bool('show_other')); + set_block_setting($block_id, 'show_unassigned', safe_POST_bool('show_unassigned')); + set_block_setting($block_id, 'show_future', safe_POST_bool('show_future')); + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $show_other=get_block_setting($block_id, 'show_other', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show other users\' tasks'), help_link('todo_show_other', $this->getName()); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('show_other', $show_other); + echo '</td></tr>'; + + $show_unassigned=get_block_setting($block_id, 'show_unassigned', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show unassigned tasks'), help_link('todo_show_unassigned', $this->getName()); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('show_unassigned', $show_unassigned); + echo '</td></tr>'; + + $show_future=get_block_setting($block_id, 'show_future', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show future tasks'), help_link('todo_show_future', $this->getName()); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('show_future', $show_future); + echo '</td></tr>'; + + $block=get_block_setting($block_id, 'block', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } +} diff --git a/modules_v2/top10_givnnames/help_text.php b/modules_v2/top10_givnnames/help_text.php new file mode 100644 index 0000000000..bdc524239a --- /dev/null +++ b/modules_v2/top10_givnnames/help_text.php @@ -0,0 +1,44 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'recent_changes': + $title=WT_I18N::translate('Top 10 Given Names'); + $text=WT_I18N::translate('This block shows a table of the 10 most frequently occurring given names in the database. The actual number of given names shown in this block is configurable.'); + $text.='<ul><li>'; + + // TODO: Other options of this block + + $text.='</li></ul>'; + break; +} +?>
\ No newline at end of file diff --git a/modules_v2/top10_givnnames/module.php b/modules_v2/top10_givnnames/module.php new file mode 100644 index 0000000000..18350393a9 --- /dev/null +++ b/modules_v2/top10_givnnames/module.php @@ -0,0 +1,172 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class top10_givnnames_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Top 10 Given Names'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('This block shows a table of the 10 most frequently occurring given names in the database. The actual number of given names shown in this block is configurable.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $TEXT_DIRECTION, $ctype, $WT_IMAGES; + + $num=get_block_setting($block_id, 'num', 10); + $infoStyle=get_block_setting($block_id, 'infoStyle', 'table'); + $showUnknown=get_block_setting($block_id, 'showUnknown', true); + $block=get_block_setting($block_id, 'block', false); + if ($cfg) { + foreach (array('num', 'infoStyle', 'showUnknown', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + $stats=new WT_Stats(WT_GEDCOM); + + $id=$this->getName().$block_id; + $title=''; + if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) { + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title .= "<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + // I18N: There are separate lists of male/female names, containing %d names each + $title .= WT_I18N::plural('Top Given Name', 'Top %d Given Names', $num, $num); + $title .= help_link('index_common_given_names'); + + $content = '<div class="normal_inner_block">'; + //Select List or Table + switch ($infoStyle) { + case "list": // Output style 1: Simple list style. Better suited to left side of page. + if ($TEXT_DIRECTION=='ltr') $padding = 'padding-left: 15px'; + else $padding = 'padding-right: 15px'; + $params=array(1,$num,'rcount'); + //List Female names + $totals=$stats->commonGivenFemaleTotals($params); + if ($totals) { + $content.='<b>'.WT_I18N::translate('Females').'</b><div class="wrap" style="'.$padding.'">'.$totals.'</div><br />'; + } + //List Male names + $totals=$stats->commonGivenMaleTotals($params); + if ($totals) { + $content.='<b>'.WT_I18N::translate('Males').'</b><div class="wrap" style="'.$padding.'">'.$totals.'</div><br />'; + } + //List Unknown names + $totals=$stats->commonGivenUnknownTotals($params); + if ($totals && $showUnknown) { + $content.='<b>'.WT_I18N::translate('Unknown').'</b><div class="wrap" style="'.$padding.'">'.$totals.'</div><br />'; + } + break; + case "table": // Style 2: Tabular format. Narrow, 2 or 3 column table, good on right side of page + $params=array(1,$num,'rcount'); + $content.='<table class="center"><tr valign="top"><td>'.$stats->commonGivenFemaleTable($params).'</td>'; + $content.='<td>'.$stats->commonGivenMaleTable($params).'</td>'; + if ($showUnknown) { + $content.='<td>'.$stats->commonGivenUnknownTable($params).'</td>'; + } + $content.='</tr></table>'; + break; + } + $content .= "</div>"; + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'num', safe_POST_integer('num', 1, 10000, 10)); + set_block_setting($block_id, 'infoStyle', safe_POST('infoStyle', array('list', 'table'), 'table')); + set_block_setting($block_id, 'showUnknown', safe_POST_bool('showUnknown')); + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $num=get_block_setting($block_id, 'num', 10); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Number of items to show'); + echo '</td><td class="optionbox">'; + echo '<input type="text" name="num" size="2" value="', $num, '" />'; + echo '</td></tr>'; + + $infoStyle=get_block_setting($block_id, 'infoStyle', 'table'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Presentation style'), help_link('style', $this->getName()); + echo '</td><td class="optionbox">'; + echo select_edit_control('infoStyle', array('list'=>WT_I18N::translate('List'), 'table'=>WT_I18N::translate('Table')), null, $infoStyle, ''); + echo '</td></tr>'; + + $showUnknown=get_block_setting($block_id, 'showUnknown', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show unknown gender'), help_link('showUnknown'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('showUnknown', $showUnknown); + echo '</td></tr>'; + + $block=get_block_setting($block_id, 'block', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } +} diff --git a/modules_v2/top10_pageviews/help_text.php b/modules_v2/top10_pageviews/help_text.php new file mode 100644 index 0000000000..5ea153b375 --- /dev/null +++ b/modules_v2/top10_pageviews/help_text.php @@ -0,0 +1,44 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'recent_changes': + $title=WT_I18N::translate('Most Viewed Items'); + $text=WT_I18N::translate('This block will show the 10 records that have been viewed the most. This block requires that Hit Counters be enabled in the GEDCOM configuration settings.'); + $text.='<ul><li>'; + + // TODO: Other options of this block + + $text.='</li></ul>'; + break; +} +?>
\ No newline at end of file diff --git a/modules_v2/top10_pageviews/module.php b/modules_v2/top10_pageviews/module.php new file mode 100644 index 0000000000..96d1e22fd3 --- /dev/null +++ b/modules_v2/top10_pageviews/module.php @@ -0,0 +1,166 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class top10_pageviews_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Most Viewed Items'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('This block will show the 10 records that have been viewed the most. This block requires that Hit Counters be enabled in the GEDCOM configuration settings.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $WT_IMAGES, $SHOW_COUNTER, $TEXT_DIRECTION; + + $count_placement=get_block_setting($block_id, 'count_placement', 'before'); + $num=(int)get_block_setting($block_id, 'num', 10); + $block=get_block_setting($block_id, 'block', false); + if ($cfg) { + foreach (array('count_placement', 'num', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + $id=$this->getName().$block_id; + $title=''; + if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) { + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title .= "<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + $title .= WT_I18N::translate('Most Viewed Items'); + $title .= help_link('index_top10_pageviews'); + $content = ""; + + // if the counter file does not exist then don't do anything + if (!$SHOW_COUNTER) { + if (WT_USER_IS_ADMIN) { + $content .= "<span class=\"error\">".WT_I18N::translate('Hit counters must be enabled in the GEDCOM configuration, Display and Layout section, Hide and Show group.')."</span>"; + } + } else { + // load the lines from the file + $top10=WT_DB::prepare( + "SELECT page_parameter, page_count". + " FROM `##hit_counter`". + " WHERE gedcom_id=? AND page_name IN ('individual.php','family.php','source.php','repo.php','note.php','mediaviewer.php')". + " ORDER BY page_count DESC LIMIT ".$num + )->execute(array(WT_GED_ID))->FetchAssoc(); + + + if ($top10) { + if ($block) { + $content .= "<table width=\"90%\">"; + } else { + $content .= "<table>"; + } + foreach ($top10 as $id=>$count) { + $record=WT_GedcomRecord::getInstance($id); + if ($record && $record->canDisplayDetails()) { + $content .= '<tr valign="top">'; + if ($count_placement=='before') { + $content .= '<td dir="ltr" align="right">['.$count.']</td>'; + } + $content .= '<td class="name2" ><a href="'.$record->getHtmlUrl().'">'.PrintReady($record->getFullName()).'</a></td>'; + if ($count_placement=='after') { + $content .= '<td dir="ltr" align="right">['.$count.']</td>'; + } + $content .= '</tr>'; + } + } + $content .= "</table>"; + } else { + $content .= "<b>".WT_I18N::translate('There are currently no hits to show.')."</b>"; + } + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return false; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'num', safe_POST_integer('num', 1, 10000)); + set_block_setting($block_id, 'count_placement', safe_POST('count_placement', array('before', 'after'), 'before')); + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $num=get_block_setting($block_id, 'num', 10); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Number of items to show'); + echo '</td><td class="optionbox">'; + echo '<input type="text" name="num" size="2" value="', $num, '" />'; + echo '</td></tr>'; + + $count_placement=get_block_setting($block_id, 'count_placement', 'left'); + echo "<tr><td class=\"descriptionbox wrap width33\">"; + echo WT_I18N::translate('Place counts before or after name?'); + echo "</td><td class=\"optionbox\">"; + echo select_edit_control('count_placement', array('before'=>WT_I18N::translate('before'), 'after'=>WT_I18N::translate('after')), null, $count_placement, ''); + echo '</td></tr>'; + + $block=get_block_setting($block_id, 'block', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } +} diff --git a/modules_v2/top10_surnames/help_text.php b/modules_v2/top10_surnames/help_text.php new file mode 100644 index 0000000000..2f1d456e6d --- /dev/null +++ b/modules_v2/top10_surnames/help_text.php @@ -0,0 +1,40 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'top_surnames': + $title=WT_I18N::translate('Top surnames block'); + $text =WT_I18N::translate('This block displays the most frequently occurring surnames in the database. The configuration settings for this block allow changes to the number of names displayed, the presentation style, and the use of scroll bars with long lists. By using the GEDCOM administration function, an administrator can also configure names to remove from this list.'); + $text.='</p>'; + break; +} +?> diff --git a/modules_v2/top10_surnames/module.php b/modules_v2/top10_surnames/module.php new file mode 100644 index 0000000000..12e554dec1 --- /dev/null +++ b/modules_v2/top10_surnames/module.php @@ -0,0 +1,183 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class top10_surnames_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Top surnames'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('This block displays the most frequently occurring surnames in the database. The actual number of surnames shown in this block is configurable. Using the GEDCOM administration function, you can also configure names to remove from this list.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $WT_IMAGES, $SURNAME_LIST_STYLE; + + $COMMON_NAMES_REMOVE=get_gedcom_setting(WT_GED_ID, 'COMMON_NAMES_REMOVE'); + $COMMON_NAMES_THRESHOLD=get_gedcom_setting(WT_GED_ID, 'COMMON_NAMES_THRESHOLD'); + + $num=get_block_setting($block_id, 'num', 10); + $infoStyle=get_block_setting($block_id, 'infoStyle', 'table'); + $block=get_block_setting($block_id, 'block', false); + if ($cfg) { + foreach (array('num', 'infoStyle', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + // This next function is a bit out of date, and doesn't cope well with surname variants + $top_surnames=get_top_surnames(WT_GED_ID, $COMMON_NAMES_THRESHOLD, $num); + + // Remove names found in the "Remove Names" list + if ($COMMON_NAMES_REMOVE) { + foreach (preg_split("/[,; ]+/", $COMMON_NAMES_REMOVE) as $delname) { + unset($top_surnames[$delname]); + unset($top_surnames[utf8_strtoupper($delname)]); + } + } + + $all_surnames=array(); + $i=0; + foreach (array_keys($top_surnames) as $top_surname) { + $all_surnames=array_merge($all_surnames, get_indilist_surns($top_surname, '', false, false, WT_GED_ID)); + if (++$i == $num) break; + } + if ($i < $num) $num=$i; + $id=$this->getName().$block_id; + $title=''; + if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) { + if ($ctype=="gedcom") { + $name = WT_GEDCOM; + } else { + $name = WT_USER_NAME; + } + $title .= "<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title .= "<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + // I18N: There are separate lists of male/female names, containing %d names each + $title .= WT_I18N::plural('Top surname', 'Top %d surnames', $num, $num); + $title .= help_link('top_surnames', $this->getName()); + switch ($infoStyle) { + case 'tagcloud': + uksort($all_surnames,'utf8_strcasecmp'); + $content=format_surname_tagcloud($all_surnames, 'indilist', true); + break; + case 'list': + uasort($all_surnames,array('top10_surnames_WT_Module', 'top_surname_sort')); + $content=format_surname_list($all_surnames, '1', true, 'indilist'); + break; + case 'array': + uasort($all_surnames,array('top10_surnames_WT_Module', 'top_surname_sort')); + $content=format_surname_list($all_surnames, '2', true, 'indilist'); + break; + case 'table': + default: + uasort($all_surnames, array('top10_surnames_WT_Module', 'top_surname_sort')); + $content=format_surname_table($all_surnames, 'indilist'); + break; + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'num', safe_POST_integer('num', 1, 10000, 10)); + set_block_setting($block_id, 'infoStyle', safe_POST('infoStyle', array('list', 'array', 'table', 'tagcloud'), 'table')); + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $num=get_block_setting($block_id, 'num', 10); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Number of items to show'); + echo '</td><td class="optionbox">'; + echo '<input type="text" name="num" size="2" value="', $num, '" />'; + echo '</td></tr>'; + + $infoStyle=get_block_setting($block_id, 'infoStyle', 'table'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Presentation style'); + echo '</td><td class="optionbox">'; + echo select_edit_control('infoStyle', array('list'=>WT_I18N::translate('bullet list'), 'array'=>WT_I18N::translate('compact list'), 'table'=>WT_I18N::translate('table'), 'tagcloud'=>WT_I18N::translate('tag cloud')), null, $infoStyle, ''); + echo '</td></tr>'; + + $block=get_block_setting($block_id, 'block', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } + + public static function top_surname_sort($a, $b) { + $counta=0; + foreach ($a as $x) { + $counta+=count($x); + } + $countb=0; + foreach ($b as $x) { + $countb+=count($x); + } + return $countb - $counta; + } +} diff --git a/modules_v2/tree/module.php b/modules_v2/tree/module.php new file mode 100644 index 0000000000..3708871ba7 --- /dev/null +++ b/modules_v2/tree/module.php @@ -0,0 +1,82 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class tree_WT_Module extends WT_Module implements WT_Module_Tab { + // Extend WT_Module + public function getTitle() { + return WT_I18N::translate('Tree'); + } + + // Extend WT_Module + public function getDescription() { + return WT_I18N::translate('Adds a tab to the individual page which displays the interactive tree for the given individual.'); + } + + // Implement WT_Module_Tab + public function defaultTabOrder() { + return 70; + } + + // Implement WT_Module_Tab + public function getJSCallback() { + return + 'if (jQuery("#tabs li:eq("+jQuery("#tabs").tabs("option", "selected")+") a").attr("title")=="'.$this->getName().'") {'. + ' treetab.sizeLines();'. + ' var outdiv = document.getElementById("out_treetab");'. + ' var parent = document.getElementById("subtab");'. + ' if (!parent) parent = document.getElementById("tabs");'. + ' outdiv.style.width = (parent.offsetWidth-30) + "px";'. + '}'; + } + + // Implement WT_Module_Tab + public function getTabContent() { + ob_start(); + $inav = new WT_TreeNav($this->controller->pid,'treetab'); + $inav->generations = 5; + $inav->zoomLevel = -1; + $inav->drawViewport('treetab', "auto", "600px"); + return '<div id="'.$this->getName().'_content">'.ob_get_clean().'</div>'; + } + + // Implement WT_Module_Tab + public function hasTabContent() { + return true; + } + // Implement WT_Module_Tab + public function canLoadAjax() { + return true; + } + + // Implement WT_Module_Tab + public function getPreLoadContent() { + return ''; + } +} diff --git a/modules_v2/upcoming_events/help_text.php b/modules_v2/upcoming_events/help_text.php new file mode 100644 index 0000000000..b289501282 --- /dev/null +++ b/modules_v2/upcoming_events/help_text.php @@ -0,0 +1,35 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +} +?> diff --git a/modules_v2/upcoming_events/module.php b/modules_v2/upcoming_events/module.php new file mode 100644 index 0000000000..c50f8e172f --- /dev/null +++ b/modules_v2/upcoming_events/module.php @@ -0,0 +1,172 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +require_once WT_ROOT.'includes/functions/functions_print_lists.php'; + +class upcoming_events_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Upcoming Events'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The Upcoming Events block shows anniversaries of events that will occur in the near future. You can configure the amount of detail shown, and the administrator can configure how far into the future this block will look.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $WT_IMAGES; + + $days =get_block_setting($block_id, 'days', 7); + $filter =get_block_setting($block_id, 'filter', true); + $onlyBDM =get_block_setting($block_id, 'onlyBDM', false); + $infoStyle=get_block_setting($block_id, 'infoStyle', 'table'); + $sortStyle=get_block_setting($block_id, 'sortStyle', 'alpha'); + $block =get_block_setting($block_id, 'block', true); + if ($cfg) { + foreach (array('days', 'filter', 'onlyBDM', 'infoStyle', 'sortStyle', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + $startjd=WT_CLIENT_JD+1; + $endjd =WT_CLIENT_JD+$days; + + // Output starts here + $id=$this->getName().$block_id; + $title=''; + if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) { + $title.="<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\">"; + $title.="<img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } + $title.= WT_I18N::translate('Upcoming Events'); + + $content = ""; + switch ($infoStyle) { + case "list": + // Output style 1: Old format, no visible tables, much smaller text. Better suited to right side of page. + $content.=print_events_list($startjd, $endjd, $onlyBDM?'BIRT MARR DEAT':'', $filter, $sortStyle); + break; + case "table": + // Style 2: New format, tables, big text, etc. Not too good on right side of page + ob_start(); + $content.=print_events_table($startjd, $endjd, $onlyBDM?'BIRT MARR DEAT':'', $filter, $sortStyle); + $content.=ob_get_clean(); + break; + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'days', safe_POST_integer('days', 1, 30, 7)); + set_block_setting($block_id, 'filter', safe_POST_bool('filter')); + set_block_setting($block_id, 'onlyBDM', safe_POST_bool('onlyBDM')); + set_block_setting($block_id, 'infoStyle', safe_POST('infoStyle', array('list', 'table'), 'table')); + set_block_setting($block_id, 'sortStyle', safe_POST('sortStyle', array('alpha', 'anniv'), 'alpha')); + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $days=get_block_setting($block_id, 'days', 7); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Number of days to show'); + echo '</td><td class="optionbox">'; + echo '<input type="text" name="days" size="2" value="', $days, '" />'; + echo ' <i>', WT_I18N::plural('maximum %d day', 'maximum %d days', 30, 30) ,'</i>'; + echo '</td></tr>'; + + $filter=get_block_setting($block_id, 'filter', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show only events of living people?'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('filter', $filter); + echo '</td></tr>'; + + $onlyBDM=get_block_setting($block_id, 'onlyBDM', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Show only Births, Deaths, and Marriages?'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('onlyBDM', $onlyBDM); + echo '</td></tr>'; + + $infoStyle=get_block_setting($block_id, 'infoStyle', 'table'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Presentation style'); + echo '</td><td class="optionbox">'; + echo select_edit_control('infoStyle', array('list'=>WT_I18N::translate('list'), 'table'=>WT_I18N::translate('table')), null, $infoStyle, ''); + echo '</td></tr>'; + + $sortStyle=get_block_setting($block_id, 'sortStyle', 'alpha'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Sort Style'); + echo '</td><td class="optionbox">'; + echo select_edit_control('sortStyle', array('alpha'=>WT_I18N::translate('alphabetically'), 'anniv'=>WT_I18N::translate('By Anniversary')), null, $sortStyle, ''); + echo '</td></tr>'; + + $block=get_block_setting($block_id, 'block', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } +} diff --git a/modules_v2/user_blog/db_schema/db_schema_0_1.php b/modules_v2/user_blog/db_schema/db_schema_0_1.php new file mode 100644 index 0000000000..d588ba8e26 --- /dev/null +++ b/modules_v2/user_blog/db_schema/db_schema_0_1.php @@ -0,0 +1,58 @@ +<?php +/** + * Update the news/blog module database schema from version 0 to version 1 + * + * Version 0: empty database + * Version 1: create the tables, as per PGV 4.2.1 + * + * The script should assume that it can be interrupted at + * any point, and be able to continue by re-running the script. + * Fatal errors, however, should be allowed to throw exceptions, + * which will be caught by the framework. + * It shouldn't do anything that might take more than a few + * seconds, for systems with low timeout values. + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2009 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { +header('HTTP/1.0 403 Forbidden'); +exit; +} + +define('WT_NB_DB_SCHEMA_0_1', ''); + +WT_DB::exec( + "CREATE TABLE IF NOT EXISTS `##news` (". + " n_id INTEGER AUTO_INCREMENT NOT NULL,". + " n_username VARCHAR(100) NOT NULL,". + " n_date INTEGER NOT NULL,". + " n_title VARCHAR(255) NOT NULL,". + " n_text TEXT NOT NULL,". + " PRIMARY KEY (n_id),". + " KEY ix1 (n_username)". + ") COLLATE utf8_unicode_ci ENGINE=InnoDB" +); + +// Update the version to indicate success +set_site_setting($schema_name, $next_version); diff --git a/modules_v2/user_blog/module.php b/modules_v2/user_blog/module.php new file mode 100644 index 0000000000..1f81938078 --- /dev/null +++ b/modules_v2/user_blog/module.php @@ -0,0 +1,127 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +// Create tables, if not already present +try { + WT_DB::updateSchema(WT_MODULES_DIR, 'user_blog/db_schema/', 'NB_SCHEMA_VERSION', 1); +} catch (PDOException $ex) { + // The schema update scripts should never fail. If they do, there is no clean recovery. + die($ex); +} + +class user_blog_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('User Journal'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The User Journal block lets the user keep notes or a journal online.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $WT_IMAGES, $TEXT_DIRECTION; + + switch (safe_GET('action')) { + case 'deletenews': + $news_id=safe_GET('news_id'); + if ($news_id) { + deleteNews($news_id); + } + break; + } + $block=get_block_setting($block_id, 'block', true); + if ($cfg) { + foreach (array('block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + $usernews = getUserNews(WT_USER_ID); + + $id=$this->getName().$block_id; + $title=WT_I18N::translate('My Journal').help_link('mypage_myjournal'); + $content = ""; + if (count($usernews)==0) { + $content .= WT_I18N::translate('You have not created any Journal items.').' '; + } + foreach ($usernews as $key=>$news) { + $day = date("j", $news["date"]); + $mon = date("M", $news["date"]); + $year = date("Y", $news["date"]); + $content .= "<div class=\"person_box\">"; + $content .= "<span class=\"news_title\">".$news["title"]."</span><br />"; + $content .= "<span class=\"news_date\">".format_timestamp($news["date"])."</span><br /><br />"; + if ($news["text"]==strip_tags($news["text"])) { + // No HTML? + $news["text"]=nl2br($news["text"]); + } + $content .= $news["text"]."<br /><br />"; + $content .= "<a href=\"javascript:;\" onclick=\"editnews('$key'); return false;\">".WT_I18N::translate('Edit')."</a> | "; + $content .= "<a href=\"index.php?action=deletenews&news_id={$key}&ctype={$ctype}\" onclick=\"return confirm('".WT_I18N::translate('Are you sure you want to delete this Journal entry?')."');\">".WT_I18N::translate('Delete')."</a><br />"; + $content .= "</div><br />"; + } + if (WT_USER_ID) { + $content .= "<br /><a href=\"javascript:;\" onclick=\"addnews('".WT_USER_ID."'); return false;\">".WT_I18N::translate('Add a new Journal entry')."</a>"; + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return false; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + } +} diff --git a/modules_v2/user_favorites/db_schema/db_schema_0_1.php b/modules_v2/user_favorites/db_schema/db_schema_0_1.php new file mode 100644 index 0000000000..5dff92e48a --- /dev/null +++ b/modules_v2/user_favorites/db_schema/db_schema_0_1.php @@ -0,0 +1,61 @@ +<?php +/** + * Update the favorite module database schema from version 0 to version 1 + * + * Version 0: empty database + * Version 1: create the tables, as per PGV 4.2.1 + * + * The script should assume that it can be interrupted at + * any point, and be able to continue by re-running the script. + * Fatal errors, however, should be allowed to throw exceptions, + * which will be caught by the framework. + * It shouldn't do anything that might take more than a few + * seconds, for systems with low timeout values. + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * Derived from PhpGedView + * Copyright (C) 2009 Greg Roach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES')) { +header('HTTP/1.0 403 Forbidden'); +exit; +} + +define('WT_FV_DB_SCHEMA_0_1', ''); + +WT_DB::exec( + "CREATE TABLE IF NOT EXISTS `##favorites` (". + " fv_id INTEGER AUTO_INCREMENT NOT NULL,". + " fv_username VARCHAR(32) NOT NULL,". + " fv_gid VARCHAR(20) NULL,". + " fv_type VARCHAR(15) NULL,". + " fv_file VARCHAR(100) NULL,". + " fv_url VARCHAR(255) NULL,". + " fv_title VARCHAR(255) NULL,". + " fv_note TEXT NULL,". + " PRIMARY KEY (fv_id),". + " KEY ix1 (fv_username)". + ") COLLATE utf8_unicode_ci ENGINE=InnoDB" +); + +// Update the version to indicate success +set_site_setting($schema_name, $next_version); diff --git a/modules_v2/user_favorites/help_text.php b/modules_v2/user_favorites/help_text.php new file mode 100644 index 0000000000..cee92bfc72 --- /dev/null +++ b/modules_v2/user_favorites/help_text.php @@ -0,0 +1,44 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'recent_changes': + $title=WT_I18N::translate('User Favorites'); + $text=WT_I18N::translate('The User Favorites block shows the user a list of his favorite people in the database so that he can easily link to them.'); + $text.='<ul><li>'; + + // TODO: Other options of this block + + $text.='</li></ul>'; + break; +} +?>
\ No newline at end of file diff --git a/modules_v2/user_favorites/module.php b/modules_v2/user_favorites/module.php new file mode 100644 index 0000000000..457add2570 --- /dev/null +++ b/modules_v2/user_favorites/module.php @@ -0,0 +1,365 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +// Create tables, if not already present +try { + WT_DB::updateSchema(WT_MODULES_DIR, 'user_favorites/db_schema/', 'FV_SCHEMA_VERSION', 1); +} catch (PDOException $ex) { + // The schema update scripts should never fail. If they do, there is no clean recovery. + die($ex); +} + +class user_favorites_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('User Favorites'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The User Favorites block shows the user a list of his favorite people in the database so that he can easily link to them.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $WT_IMAGES, $GEDCOM, $TEXT_DIRECTION, $MEDIA_DIRECTORY, $MULTI_MEDIA, $MEDIA_DIRECTORY_LEVELS, $ctype; + global $show_full, $PEDIGREE_FULL_DETAILS, $BROWSERTYPE, $ENABLE_AUTOCOMPLETE; + + $action=safe_GET('action'); + switch ($action) { + case 'deletefav': + $fv_id=safe_GET('fv_id'); + if ($fv_id) { + self::deleteFavorite($fv_id); + } + unset($_GET['action']); + break; + case 'addfav': + $gid =safe_GET('gid'); + $favnote =safe_GET('favnote'); + $url =safe_GET('url', WT_REGEX_URL); + $favtitle=safe_GET('favtitle'); + + if ($gid) { + $indirec = find_gedcom_record($gid, WT_GED_ID); + $ct = preg_match('/0 @(.*)@ (.*)/', $indirec, $match); + if ($indirec && $ct>0) { + $favorite = array(); + $favorite['username'] = WT_USER_NAME; + $favorite['gid'] = $gid; + $favorite['type'] = trim($match[2]); + $favorite['file'] = WT_GEDCOM; + $favorite['url'] = ''; + $favorite['note'] = $favnote; + $favorite['title'] = ''; + self::addFavorite($favorite); + } + } + $url=safe_GET('url'); + if ($url) { + if (empty($favtitle)) $favtitle = $url; + $favorite = array(); + $favorite['username'] = WT_USER_NAME; + $favorite['gid'] = ''; + $favorite['type'] = 'URL'; + $favorite['file'] = WT_GEDCOM; + $favorite['url'] = $url; + $favorite['note'] = $favnote; + $favorite['title'] = $favtitle; + self::addFavorite($favorite); + } + unset($_GET['action']); + break; + } + + $block=get_block_setting($block_id, 'block', false); + if ($cfg) { + foreach (array('block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + // Override GEDCOM configuration temporarily + if (isset($show_full)) $saveShowFull = $show_full; + $savePedigreeFullDetails = $PEDIGREE_FULL_DETAILS; + $show_full = 1; + $PEDIGREE_FULL_DETAILS = 1; + + $userfavs = self::getUserFavorites(WT_USER_NAME); + if (!is_array($userfavs)) $userfavs = array(); + + $id=$this->getName().$block_id; + $title=WT_I18N::translate('My Favorites').help_link('mypage_favorites'); + if ($TEXT_DIRECTION=="rtl") $title .= getRLM(); + $title .= "(".count($userfavs).")"; + if ($TEXT_DIRECTION=="rtl") $title .= getRLM(); + + if ($ENABLE_AUTOCOMPLETE) { + $content = '<script type="text/javascript" src="js/jquery/jquery.min.js"></script> + <script type="text/javascript" src="js/jquery/jquery.autocomplete.js"></script> + <script type="text/javascript" src="js/jquery/jquery.ajaxQueue.js"></script> + <script type="text/javascript"> + jQuery.noConflict(); // @see http://docs.jquery.com/Using_jQuery_with_Other_Libraries/ + jQuery(document).ready(function($) { + $("input[name^=gid]").autocomplete("autocomplete.php", { + extraParams: {field:"IFSRO"}, + formatItem: function(row, i) { + return row[0] + " (" + row[1] + ")"; + }, + formatResult: function(row) { + return row[1]; + }, + width: 400, + minChars: 2 + }); + }); + </script>'; + } else $content = ''; + + if ($block) { + $style = 2; // 1 means "regular box", 2 means "wide box" + $tableWidth = ($BROWSERTYPE=="msie") ? "95%" : "99%"; // IE needs to have room for vertical scroll bar inside the box + $cellSpacing = "1px"; + } else { + $style = 2; + $tableWidth = "99%"; + $cellSpacing = "3px"; + } + if (count($userfavs)==0) { + $content .= WT_I18N::translate('You have not selected any favorites.<br /><br />To add an individual, a family, or a source to your favorites, click on the <b>Add a new favorite</b> link to reveal some fields where you can enter or search for an ID number. Instead of an ID number, you can enter a URL and a title.'); + } else { + $mygedcom = $GEDCOM; + $current_gedcom = $GEDCOM; + $content .= "<table width=\"{$tableWidth}\" style=\"border:none\" cellspacing=\"{$cellSpacing}\" class=\"center $TEXT_DIRECTION\">"; + foreach ($userfavs as $key=>$favorite) { + if (isset($favorite["id"])) $key=$favorite["id"]; + $removeFavourite = "<a class=\"font9\" href=\"index.php?ctype={$ctype}&action=deletefav&fv_id={$key}\" onclick=\"return confirm('".WT_I18N::translate('Are you sure you want to remove this item from your list of Favorites?')."');\">".WT_I18N::translate('Remove')."</a><br />"; + $current_gedcom = $GEDCOM; + $GEDCOM = $favorite["file"]; + $content .= "<tr><td>"; + if ($favorite["type"]=="URL") { + $content .= "<div id=\"boxurl".$key.".0\" class=\"person_box\">"; + if ($ctype=="user" || WT_USER_IS_ADMIN) $content .= $removeFavourite; + $content .= "<a href=\"".$favorite["url"]."\">".PrintReady($favorite["title"])."</a>"; + $content .= "<br />".PrintReady($favorite["note"]); + } else { + load_gedcom_settings(get_id_from_gedcom($GEDCOM)); + $indirec = find_gedcom_record($favorite["gid"], WT_GED_ID); + if ($favorite["type"]=="INDI") { + $content .= "<div id=\"box".$favorite["gid"].".0\" class=\"person_box"; + if (strpos($indirec, "\n1 SEX F")!==false) $content .= "F"; + elseif (strpos($indirec, "\n1 SEX M")!==false) $content .= ""; + else $content .= "NN"; + $content .= "\">"; + if ($ctype=="user" || WT_USER_IS_ADMIN) $content .= $removeFavourite; + ob_start(); + print_pedigree_person(WT_Person::getInstance($favorite["gid"]), $style, 1, $key); + $content .= ob_get_clean(); + $content .= PrintReady($favorite["note"]); + } else { + $record=WT_GedcomRecord::getInstance($favorite['gid']); + $content .= "<div id=\"box".$favorite["gid"].".0\" class=\"person_box\">"; + if ($ctype=="user" || WT_USER_IS_ADMIN) $content .= $removeFavourite; + if ($record) { + $content.=$record->format_list('span'); + } else { + $content.=WT_I18N::translate('No such ID exists in this GEDCOM file.'); + } + $content .= "<br />".PrintReady($favorite["note"]); + } + } + $content .= "</div>"; + $content .= "</td></tr>"; + $GEDCOM = $mygedcom; + } + load_gedcom_settings(WT_GED_ID); + $content .= "</table>"; + } + $content .= ' + <script type="text/javascript"> + var pastefield; + function paste_id(value) { + pastefield.value=value; + } + </script> + <br /> + '; + $uniqueID = floor(microtime() * 1000000); + $content .= "<b><a href=\"javascript: ".WT_I18N::translate('Add a new favorite')." \" onclick=\"expand_layer('add_user_fav{$uniqueID}'); return false;\"><img id=\"add_user_fav_img\" src=\"".$WT_IMAGES["plus"]."\" border=\"0\" alt=\"\" /> ".WT_I18N::translate('Add a new favorite')."</a></b>"; + $content .= help_link('index_add_favorites'); + $content .= "<br /><div id=\"add_user_fav{$uniqueID}\" style=\"display: none;\">"; + $content .= "<form name=\"addufavform\" method=\"get\" action=\"index.php\">"; + $content .= "<input type=\"hidden\" name=\"action\" value=\"addfav\" />"; + $content .= "<input type=\"hidden\" name=\"ctype\" value=\"$ctype\" />"; + $content .= "<input type=\"hidden\" name=\"ged\" value=\"$GEDCOM\" />"; + $content .= "<table width=\"{$tableWidth}\" style=\"border:none\" cellspacing=\"{$cellSpacing}\" class=\"center $TEXT_DIRECTION\">"; + $content .= "<tr><td>".WT_I18N::translate('Enter a Person, Family, or Source ID')." <br />"; + $content .= "<input class=\"pedigree_form\" type=\"text\" name=\"gid\" id=\"gid{$uniqueID}\" size=\"5\" value=\"\" />"; + + $content .= print_findindi_link("gid{$uniqueID}",'',true); + $content .= print_findfamily_link("gid{$uniqueID}",'',true); + $content .= print_findsource_link("gid{$uniqueID}",'',true); + $content .= print_findrepository_link("gid{$uniqueID}",'',true); + $content .= print_findnote_link("gid{$uniqueID}",'',true); + $content .= print_findmedia_link("gid{$uniqueID}",'1','',true); + + $content .= "<br />".WT_I18N::translate('OR<br />Enter a URL and a title'); + $content .= "<table><tr><td>".translate_fact('URL')."</td><td><input type=\"text\" name=\"url\" size=\"40\" value=\"\" /></td></tr>"; + $content .= "<tr><td>".WT_I18N::translate('Title:')."</td><td><input type=\"text\" name=\"favtitle\" size=\"40\" value=\"\" /></td></tr></table>"; + if ($block) $content .= "</td></tr><tr><td><br />"; + else $content .= "</td><td>"; + $content .= WT_I18N::translate('Enter an optional note about this favorite'); + $content .= "<br /><textarea name=\"favnote\" rows=\"6\" cols=\"50\"></textarea>"; + $content .= "</td></tr></table>"; + $content .= "<br /><input type=\"submit\" value=\"".WT_I18N::translate('Add')."\" style=\"font-size: 8pt; \" />"; + $content .= "</form></div>"; + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + // Restore GEDCOM configuration + unset($show_full); + if (isset($saveShowFull)) $show_full = $saveShowFull; + $PEDIGREE_FULL_DETAILS = $savePedigreeFullDetails; + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return false; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $block=get_block_setting($block_id, 'block', false); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } + + /** + * deleteFavorite + * deletes a favorite in the database + * @param int $fv_id the id of the favorite to delete + */ + public static function deleteFavorite($fv_id) { + return (bool) + WT_DB::prepare("DELETE FROM `##favorites` WHERE fv_id=?") + ->execute(array($fv_id)); + } + + /** + * stores a new favorite in the database + * @param array $favorite the favorite array of the favorite to add + */ + public static function addFavorite($favorite) { + // -- make sure a favorite is added + if (empty($favorite["gid"]) && empty($favorite["url"])) + return false; + + //-- make sure this is not a duplicate entry + $sql = "SELECT 1 FROM `##favorites` WHERE"; + if (!empty($favorite["gid"])) { + $sql.=" fv_gid=?"; + $vars=array($favorite["gid"]); + } else { + $sql.=" fv_url=?"; + $vars=array($favorite["url"]); + } + $sql.=" AND fv_file=? AND fv_username=?"; + $vars[]=$favorite["file"]; + $vars[]=$favorite["username"]; + + if (WT_DB::prepare($sql)->execute($vars)->fetchOne()) { + return false; + } + + //-- add the favorite to the database + return (bool) + WT_DB::prepare("INSERT INTO `##favorites` (fv_username, fv_gid, fv_type, fv_file, fv_url, fv_title, fv_note) VALUES (?, ? ,? ,? ,? ,? ,?)") + ->execute(array($favorite["username"], $favorite["gid"], $favorite["type"], $favorite["file"], $favorite["url"], $favorite["title"], $favorite["note"])); + } + + /** + * Get a user's favorites + * Return an array of a users messages + * @param string $username the username to get the favorites for + */ + public static function getUserFavorites($username) { + $rows= + WT_DB::prepare("SELECT * FROM `##favorites` WHERE fv_username=?") + ->execute(array($username)) + ->fetchAll(); + + $favorites = array(); + foreach ($rows as $row) { + if (get_id_from_gedcom($row->fv_file)) { // If gedcom exists + $favorites[]=array( + "id"=>$row->fv_id, + "username"=>$row->fv_username, + "gid"=>$row->fv_gid, + "type"=>$row->fv_type, + "file"=>$row->fv_file, + "title"=>$row->fv_title, + "note"=>$row->fv_note, + "url"=>$row->fv_url + ); + } + } + return $favorites; + } +} diff --git a/modules_v2/user_messages/help_text.php b/modules_v2/user_messages/help_text.php new file mode 100644 index 0000000000..27886290f2 --- /dev/null +++ b/modules_v2/user_messages/help_text.php @@ -0,0 +1,44 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'recent_changes': + $title=WT_I18N::translate('User Messages'); + $text=WT_I18N::translate('The User Messages block shows a list of the messages that have been sent to the active user.'); + $text.='<ul><li>'; + + // TODO: Other options of this block + + $text.='</li></ul>'; + break; +} +?>
\ No newline at end of file diff --git a/modules_v2/user_messages/module.php b/modules_v2/user_messages/module.php new file mode 100644 index 0000000000..ea742fb232 --- /dev/null +++ b/modules_v2/user_messages/module.php @@ -0,0 +1,193 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class user_messages_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('User Messages'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The User Messages block shows a list of the messages that have been sent to the active user.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $TEXT_DIRECTION, $WT_IMAGES; + + require_once WT_ROOT.'includes/functions/functions_print_facts.php'; + + // Block actions + $action=safe_GET('action'); + $message_id=safe_GET('message_id'); + if ($action=='deletemessage') { + if (is_array($message_id)) { + foreach ($message_id as $msg_id) { + deleteMessage($msg_id); + } + } else { + deleteMessage($message_id); + } + } + $block=get_block_setting($block_id, 'block', true); + if ($cfg) { + foreach (array('block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + $usermessages = getUserMessages(WT_USER_ID); + + $id=$this->getName().$block_id; + $title=WT_I18N::translate('My Messages').help_link('mypage_message'); + if ($TEXT_DIRECTION=="rtl") $title .= getRLM(); + $title .= "(".count($usermessages).")"; + if ($TEXT_DIRECTION=="rtl") $title .= getRLM(); + + $content = ""; + $content .= "<form name=\"messageform\" action=\"index.php?ctype={$ctype}\" method=\"get\" onsubmit=\"return confirm('".WT_I18N::translate('Are you sure you want to delete this message? It cannot be retrieved later.')."');\">"; + if (get_user_count()>1) { + $content .= '<br />'.WT_I18N::translate('Send Message')." <select name=\"touser\">"; + $content .= '<option value="">' . WT_I18N::translate('<select>') . '</option>'; + foreach (get_all_users() as $user_id=>$user_name) { + if ($user_id!=WT_USER_ID && get_user_setting($user_id, 'verified_by_admin') && get_user_setting($user_id, 'contactmethod')!='none') { + $content .= "<option value=\"".$user_name."\">".PrintReady(getUserFullName($user_id))." "; + if ($TEXT_DIRECTION=="ltr") { + $content .= stripLRMRLM(getLRM()." - ".$user_name.getLRM()); + } else { + $content .= stripLRMRLM(getRLM()." - ".$user_name.getRLM()); + } + $content .= "</option>"; + } + } + $content .= "</select> <input type=\"button\" value=\"".WT_I18N::translate('Send')."\" onclick=\"message(document.messageform.touser.options[document.messageform.touser.selectedIndex].value, 'messaging2', ''); return false;\" /><br /><br />"; + } + if (count($usermessages)==0) { + $content .= WT_I18N::translate('You have no pending messages.')."<br />"; + } else { + $content .= WT_JS_START.'function select_all() {'; + foreach ($usermessages as $message) { + $content .= 'var cb=document.getElementById("cb_message'.$message["id"].'");'; + $content .= 'cb.checked=!cb.checked;'; + } + $content .= 'return false;}'.WT_JS_END; + $content .= "<input type=\"hidden\" name=\"action\" value=\"deletemessage\" />"; + $content .= "<table class=\"list_table\"><tr>"; + $content .= "<td class=\"list_label\">".WT_I18N::translate('Delete')."<br /><a href=\"javascript:;\" onclick=\"return select_all();\">".WT_I18N::translate('All')."</a></td>"; + $content .= "<td class=\"list_label\">".WT_I18N::translate('Subject:')."</td>"; + $content .= "<td class=\"list_label\">".WT_I18N::translate('Date Sent:')."</td>"; + $content .= "<td class=\"list_label\">".WT_I18N::translate('Email Address:')."</td>"; + $content .= "</tr>"; + foreach ($usermessages as $key=>$message) { + if (isset($message["id"])) $key = $message["id"]; + $content .= "<tr>"; + $content .= "<td class=\"list_value_wrap\"><input type=\"checkbox\" id=\"cb_message$key\" name=\"message_id[]\" value=\"$key\" /></td>"; + $showmsg=preg_replace("/(\w)\/(\w)/","\$1/<span style=\"font-size:1px;\"> </span>\$2",PrintReady($message["subject"])); + $showmsg=str_replace("@","@<span style=\"font-size:1px;\"> </span>",$showmsg); + $content .= "<td class=\"list_value_wrap\"><a href=\"javascript:;\" onclick=\"expand_layer('message{$key}'); return false;\"><img id=\"message{$key}_img\" src=\"".$WT_IMAGES["plus"]."\" border=\"0\" alt=\"".WT_I18N::translate('Show Details')."\" title=\"".WT_I18N::translate('Show Details')."\" /> <b>".$showmsg."</b></a></td>"; + $content .= "<td class=\"list_value_wrap\">".$message["created"]."</td>"; + $content .= "<td class=\"list_value_wrap\">"; + $user_id=get_user_id($message["from"]); + if ($user_id) { + $content .= PrintReady(getUserFullName($user_id)); + if ($TEXT_DIRECTION=="ltr") { + $content .= " " . getLRM() . " - ".htmlspecialchars(getUserEmail($user_id)) . getLRM(); + } else { + $content .= " " . getRLM() . " - ".htmlspecialchars(getUserEmail($user_id)) . getRLM(); + } + } else { + $content .= "<a href=\"mailto:".$message["from"]."\">".str_replace("@","@<span style=\"font-size:1px;\"> </span>",$message["from"])."</a>"; + } + $content .= "</td>"; + $content .= "</tr>"; + $content .= "<tr><td class=\"list_value_wrap\" colspan=\"5\"><div id=\"message$key\" style=\"display: none;\">"; + $message["body"] = nl2br(htmlspecialchars($message["body"])); + $message["body"] = expand_urls($message["body"]); + + $content .= PrintReady($message["body"])."<br /><br />"; + if (strpos($message["subject"], "RE:")===false) { + $message["subject"]="RE:".$message["subject"]; + } + if ($user_id) { + $content .= "<a href=\"javascript:;\" onclick=\"reply('".$user_id."', '".$message["subject"]."'); return false;\">".WT_I18N::translate('Reply')."</a> | "; + } + $content .= "<a href=\"index.php?action=deletemessage&message_id={$key}\" onclick=\"return confirm('".WT_I18N::translate('Are you sure you want to delete this message? It cannot be retrieved later.')."');\">".WT_I18N::translate('Delete')."</a></div></td></tr>"; + } + $content .= "</table>"; + $content .= "<input type=\"submit\" value=\"".WT_I18N::translate('Delete Selected Messages')."\" /><br />"; + } + $content .= "</form>"; + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return false; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $block=get_block_setting($block_id, 'block', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } +} diff --git a/modules_v2/user_welcome/module.php b/modules_v2/user_welcome/module.php new file mode 100644 index 0000000000..a9e97e5d54 --- /dev/null +++ b/modules_v2/user_welcome/module.php @@ -0,0 +1,91 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class user_welcome_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('User Welcome'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The User Welcome block shows the user the current date and time, quick links to modify his account or go to his own Pedigree chart, and a link to customize his My Page.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $WT_IMAGES, $hitCount, $SHOW_COUNTER; + + $id=$this->getName().$block_id; + $title=/* I18N: A greeting; %s is the user's name */ WT_I18N::translate('Welcome %s', getUserFullName(WT_USER_ID)); + + $content = "<table class=\"blockcontent\" cellspacing=\"0\" cellpadding=\"0\" style=\" width: 100%; direction:ltr;\"><tr>"; + $content .= "<td class=\"tab_active_bottom\" colspan=\"3\" ></td></tr><tr>"; + if (get_user_setting(WT_USER_ID, 'editaccount')) { + $content .= "<td class=\"center details2\" style=\" width: 33%; clear: none; vertical-align: top; margin-top: 2px;\"><a href=\"edituser.php\"><img class=\"block\" src=\"".$WT_IMAGES["mypage"]."\" border=\"0\" alt=\"".WT_I18N::translate('My account')."\" /><br />".WT_I18N::translate('My account')."</a></td>"; + } + if (WT_USER_GEDCOM_ID) { + $content .= "<td class=\"center details2\" style=\" width: 33%; clear: none; vertical-align: top; margin-top: 2px;\"><a href=\"pedigree.php?rootid=".WT_USER_GEDCOM_ID."&ged=".WT_GEDURL."\"><img class=\"block\" src=\"".$WT_IMAGES["pedigree"]."\" border=\"0\" alt=\"".WT_I18N::translate('My Pedigree')."\" title=\"".WT_I18N::translate('My Pedigree')."\" /><br />".WT_I18N::translate('My Pedigree')."</a></td>"; + $content .= "<td class=\"center details2\" style=\" width: 33%; clear: none; vertical-align: top; margin-top: 2px;\"><a href=\"individual.php?pid=".WT_USER_GEDCOM_ID."&ged=".WT_GEDURL."\"><img class=\"block\" src=\"".$WT_IMAGES["indis"]."\" border=\"0\" alt=\"".WT_I18N::translate('My individual record')."\" /><br />".WT_I18N::translate('My individual record')."</a></td>"; + } + $content .= "</tr><tr><td class=\"center\" colspan=\"3\">"; + $content .= "<a href=\"javascript:;\" onclick=\"window.open('index_edit.php?name=".WT_USER_NAME."&ctype=user"."', '_blank', 'top=50,left=10,width=705,height=355,scrollbars=1,resizable=1');\">".WT_I18N::translate('Customize My Page')."</a>"; + $content .= help_link('mypage_customize'); + $content .= "<br />".format_timestamp(client_time())."<br />"; + if ($SHOW_COUNTER) + $content .= WT_I18N::translate('Hit Count:')." ".$hitCount."<br />"; + $content .= "</td></tr></table>"; + + if ($template) { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return false; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return false; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + } +} diff --git a/modules_v2/yahrzeit/help_text.php b/modules_v2/yahrzeit/help_text.php new file mode 100644 index 0000000000..30a72d1cd0 --- /dev/null +++ b/modules_v2/yahrzeit/help_text.php @@ -0,0 +1,45 @@ +<?php +/** + * Module help text. + * + * This file is included from the application help_text.php script. + * It simply needs to set $title and $text for the help topic $help_topic + * + * webtrees: Web based Family History software + * Copyright (C) 2010 webtrees development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @version $Id$ + */ + +if (!defined('WT_WEBTREES') || !defined('WT_SCRIPT_NAME') || WT_SCRIPT_NAME!='help_text.php') { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +switch ($help) { +case 'yahrzeit': + $title=WT_I18N::translate('Yahrzeiten block'); + $text=WT_I18N::translate('This block shows you Yahrzeiten that are coming up in the near future.<br /><br />Yahrzeiten (singular: Yahrzeit) are anniversaries of a person\'s death. These anniversaries are observed in the Jewish tradition; they are no longer in common use in other traditions. «Yahrzeit» can also be spelled «Jahrzeit» or «Yartzeit».<br /><br />The Administrator determines how far ahead the block will look. You can further refine the block\'s display of upcoming Yahrzeiten through configuration options.'); + $text.='<ul><li>'; + $text.=WT_I18N::translate('Number of days to show: This is the number of days that <b>webtrees</b> should use when searching for events'); + $text.=' (<i>'.WT_I18N::plural('maximum %d day', 'maximum %d days', 30, 30).'</i>).'; + $text.='</li><li>'; + $text.=WT_I18N::translate('Presentation style: Either a simple text "List" or a "Table" format.'); + $text.='</li></ul>'; + break; +} +?> diff --git a/modules_v2/yahrzeit/module.php b/modules_v2/yahrzeit/module.php new file mode 100644 index 0000000000..b13b460fa5 --- /dev/null +++ b/modules_v2/yahrzeit/module.php @@ -0,0 +1,257 @@ +<?php +// Classes and libraries for module system +// +// webtrees: Web based Family History software +// Copyright (C) 2011 webtrees development team. +// +// Derived from PhpGedView +// Copyright (C) 2010 John Finlay +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// @version $Id$ + +if (!defined('WT_WEBTREES')) { + header('HTTP/1.0 403 Forbidden'); + exit; +} + +class yahrzeit_WT_Module extends WT_Module implements WT_Module_Block { + // Extend class WT_Module + public function getTitle() { + return WT_I18N::translate('Upcoming Yahrzeiten'); + } + + // Extend class WT_Module + public function getDescription() { + return WT_I18N::translate('The Upcoming Yahrzeiten block shows anniversaries of death dates that will occur in the near future. You can configure the period shown, and the Administrator can configure how far into the future this block will look.'); + } + + // Implement class WT_Module_Block + public function getBlock($block_id, $template=true, $cfg=null) { + global $ctype, $TEXT_DIRECTION, $WT_IMAGES, $SHOW_MARRIED_NAMES; + + $days=get_block_setting($block_id, 'days', 7); + $infoStyle=get_block_setting($block_id, 'infoStyle', 'table'); + $block=get_block_setting($block_id, 'block', true); + if ($cfg) { + foreach (array('days', 'infoStyle', 'block') as $name) { + if (array_key_exists($name, $cfg)) { + $$name=$cfg[$name]; + } + } + } + + $startjd=WT_CLIENT_JD; + $endjd =WT_CLIENT_JD+$days-1; + + $id=$this->getName().$block_id; + if ($ctype=='gedcom' && WT_USER_GEDCOM_ADMIN || $ctype=='user' && WT_USER_ID) { + $title="<a href=\"javascript: configure block\" onclick=\"window.open('index_edit.php?action=configure&ctype={$ctype}&block_id={$block_id}', '_blank', 'top=50,left=50,width=600,height=350,scrollbars=1,resizable=1'); return false;\"><img class=\"adminicon\" src=\"".$WT_IMAGES["admin"]."\" width=\"15\" height=\"15\" border=\"0\" alt=\"".WT_I18N::translate('Configure')."\" /></a>"; + } else { + $title=''; + } + $title.= WT_I18N::translate('Upcoming Yahrzeiten').help_link('yahrzeit', $this->getName()); + $content=''; + + // The standard anniversary rules cover most of the Yahrzeit rules, we just + // need to handle a few special cases. + // Fetch normal anniversaries... + $yahrzeits=array(); + for ($jd=$startjd-1; $jd<=$endjd+30;++$jd) { + foreach (get_anniversary_events($jd, 'DEAT _YART') as $fact) { + // Extract hebrew dates only + if ($fact['date']->date1->CALENDAR_ESCAPE()=='@#DHEBREW@' && $fact['date']->MinJD()==$fact['date']->MaxJD()) { + // Apply privacy + if (canDisplayRecord(WT_GED_ID, find_person_record($fact['id'], WT_GED_ID)) && canDisplayFact($fact['id'], WT_GED_ID, $fact['factrec'])) { + $yahrzeits[]=$fact; + } + } + } + } + + // ...then adjust dates + foreach ($yahrzeits as $key=>$yahrzeit) { + if (strpos('1 DEAT', $yahrzeit['factrec'])!==false) { // Just DEAT, not _YART + $today=new WT_Date_Jewish($yahrzeit['jd']); + $hd=$yahrzeit['date']->MinDate(); + $hd1=new WT_Date_Jewish($hd); + $hd1->y+=1; + $hd1->SetJDFromYMD(); + // Special rules. See http://www.hebcal.com/help/anniv.html + // Everything else is taken care of by our standard anniversary rules. + if ($hd->d==30 && $hd->m==2 && $hd->y!=0 && $hd1->DaysInMonth()<30) { // 30 CSH + // Last day in CSH + $yahrzeit[$key]['jd']=WT_Date_Jewish::YMDtoJD($today->y, 3, 1)-1; + } + if ($hd->d==30 && $hd->m==3 && $hd->y!=0 && $hd1->DaysInMonth()<30) { // 30 KSL + // Last day in KSL + $yahrzeit[$key]['jd']=WT_Date_Jewish::YMDtoJD($today->y, 4, 1)-1; + } + if ($hd->d==30 && $hd->m==6 && $hd->y!=0 && $today->DaysInMonth()<30 && !$today->IsLeapYear()) { // 30 ADR + // Last day in SHV + $yahrzeit[$key]['jd']=WT_Date_Jewish::YMDtoJD($today->y, 6, 1)-1; + } + } + } + + switch ($infoStyle) { + case 'list': + foreach ($yahrzeits as $yahrzeit) + if ($yahrzeit['jd']>=$startjd && $yahrzeit['jd']<$startjd+$days) { + $ind=person::GetInstance($yahrzeit['id']); + $content .= "<a href=\"".$ind->getHtmlUrl()."\" class=\"list_item name2\">".$ind->getFullName()."</a>".$ind->getSexImage(); + $content .= "<div class=\"indent\">"; + $content .= $yahrzeit['date']->Display(true); + $content .= ', '.WT_I18N::translate('%s year anniversary', $yahrzeit['anniv']); + $content .= "</div>"; + } + break; + case 'table': + default: + require_once WT_ROOT.'js/sorttable.js.htm'; + $table_id = "ID".floor(microtime()*1000000); // sorttable requires a unique ID + $content .= "<table id=\"{$table_id}\" class=\"sortable list_table center\">"; + $content .= "<tr>"; + $content .= "<th class=\"list_label\">".translate_fact('NAME')."</th>"; + $content .= "<th style=\"display:none\">GIVN</th>"; + $content .= "<th class=\"list_label\">".translate_fact('DATE')."</th>"; + $content .= '<th class="list_label"><img src="'.$WT_IMAGES['reminder'].'" alt="'.WT_I18N::translate('Anniversary').'" title="'.WT_I18N::translate('Anniversary').'" border="0" /></th>'; + $content .= "<th class=\"list_label\">".translate_fact('_YART')."</th>"; + $content .= "</tr>"; + + $count=0; + foreach ($yahrzeits as $yahrzeit) { + if ($yahrzeit['jd']>=$startjd && $yahrzeit['jd']<$startjd+$days) { + ++$count; + $ind=WT_person::GetInstance($yahrzeit['id']); + $content .= "<tr>"; + // Record name(s) + $name=$ind->getFullName(); + $url=$ind->getHtmlUrl(); + $content .= "<td class=\"list_value_wrap\" align=\"".get_align($name)."\">"; + $content .= "<a href=\"".$url."\" class=\"list_item name2\" dir=\"".$TEXT_DIRECTION."\">".PrintReady($name)."</a>"; + $content .= $ind->getSexImage(); + $addname=$ind->getAddName(); + if ($addname) { + $content .= "<br /><a href=\"".$url."\" class=\"list_item\">".PrintReady($addname)."</a>"; + } + $content .= "</td>"; + + // GIVN for sorting + $content .= "<td style=\"display:none\">"; + $exp = explode(",", str_replace('<', ',', $name).","); + $content .= $exp[1]; + $content .= "</td>"; + + $today=new WT_Date_Jewish($yahrzeit['jd']); + $td=new WT_Date($today->Format('%@ %A %O %E')); + + // death/yahrzeit event date + $content .= "<td class=\"list_value_wrap\">"; + $content .= "<a name='{$yahrzeit['jd']}'>".$yahrzeit['date']->Display(true, NULL, array())."</a>"; + $content .= "</td>"; + + // Anniversary + $content .= "<td class=\"list_value_wrap rela\">"; + $anniv = $yahrzeit['anniv']; + if ($anniv==0) { + $content .= '<a name="0"> </a>'; + } else { + $content .= "<a name=\"{$anniv}\">{$anniv}</a>"; + } + + // upcomming yahrzeit dates + $content .= "<td class=\"list_value_wrap\">"; + $content .= "<a href=\"".$url."\" class=\"list_item url\">".$td->Display(true, NULL, array('gregorian'))."</a>"; // hCalendar:url + $content .= " </td>"; + + $content .= "</tr>"; + } + } + + // table footer + $content .= "<tr class=\"sortbottom\">"; + $content .= "<td class=\"list_label\">"; + $content .= '<a href="javascript:;" onclick="sortByOtherCol(this,1)"><img src="images/topdown.gif" alt="" border="0" /> '.translate_fact('GIVN').'</a><br />'; + $content .= WT_I18N::translate('Total Names').": ".$count; + $content .= '</td>'; + $content .= '<td style="display:none">GIVN</td>'; + $content .= '<td> </td><td> </td><td> </td></tr>'; + $content .= '</table>'; + break; + } + + if ($template) { + if ($block) { + require WT_THEME_DIR.'templates/block_small_temp.php'; + } else { + require WT_THEME_DIR.'templates/block_main_temp.php'; + } + } else { + return $content; + } + } + + // Implement class WT_Module_Block + public function loadAjax() { + return true; + } + + // Implement class WT_Module_Block + public function isUserBlock() { + return true; + } + + // Implement class WT_Module_Block + public function isGedcomBlock() { + return true; + } + + // Implement class WT_Module_Block + public function configureBlock($block_id) { + if (safe_POST_bool('save')) { + set_block_setting($block_id, 'days', safe_POST_integer('days', 1, 30, 7)); + set_block_setting($block_id, 'infoStyle', safe_POST('infoStyle', array('list', 'table'), 'table')); + set_block_setting($block_id, 'block', safe_POST_bool('block')); + echo WT_JS_START, 'window.opener.location.href=window.opener.location.href;window.close();', WT_JS_END; + exit; + } + + require_once WT_ROOT.'includes/functions/functions_edit.php'; + + $days=get_block_setting($block_id, 'days', 7); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Number of days to show'); + echo '</td><td class="optionbox">'; + echo '<input type="text" name="days" size="2" value="'.$days.'" />'; + echo ' <i>', WT_I18N::plural('maximum %d day', 'maximum %d days', 30, 30) ,'</i>'; + echo '</td></tr>'; + + $infoStyle=get_block_setting($block_id, 'infoStyle', 'table'); + echo '<tr><td class="descriptionbox wrap width33">'; + echo WT_I18N::translate('Presentation style'); + echo '</td><td class="optionbox">'; + echo select_edit_control('infoStyle', array('list'=>WT_I18N::translate('List'), 'table'=>WT_I18N::translate('Table')), null, $infoStyle, ''); + echo '</td></tr>'; + + $block=get_block_setting($block_id, 'block', true); + echo '<tr><td class="descriptionbox wrap width33">'; + echo /* I18N: label for a yes/no option */ WT_I18N::translate('Add a scrollbar when block contents grow'); + echo '</td><td class="optionbox">'; + echo edit_field_yes_no('block', $block); + echo '</td></tr>'; + } +} |
