diff options
Diffstat (limited to 'studio/static/js/wymeditor')
191 files changed, 15002 insertions, 0 deletions
diff --git a/studio/static/js/wymeditor/iframe/.svn/entries b/studio/static/js/wymeditor/iframe/.svn/entries new file mode 100644 index 0000000..247ae9d --- /dev/null +++ b/studio/static/js/wymeditor/iframe/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/iframe +svn://svn.wymeditor.org/wymeditor + + + +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +default +dir + diff --git a/studio/static/js/wymeditor/iframe/default/.svn/entries b/studio/static/js/wymeditor/iframe/default/.svn/entries new file mode 100644 index 0000000..cb122d2 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/entries @@ -0,0 +1,402 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/iframe/default +svn://svn.wymeditor.org/wymeditor + + + +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +lbl-pre.png +file + + + + +2011-07-13T16:45:39.000000Z +7ad78e30f68e5007ed479516f583e10f +2007-05-02T09:28:40.695596Z +253 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +177 + +lbl-blockquote.png +file + + + + +2011-07-13T16:45:39.000000Z +5cd5fb5fe87078c1cae941dad05db2e2 +2007-05-02T09:28:40.695596Z +253 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +196 + +lbl-h1.png +file + + + + +2011-07-13T16:45:39.000000Z +b3782df976443f4a0086893d4da991d2 +2007-05-02T09:28:40.695596Z +253 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +166 + +lbl-h2.png +file + + + + +2011-07-13T16:45:39.000000Z +6e4bfdbfc57415b8c650347bd1704154 +2007-05-02T09:28:40.695596Z +253 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +172 + +wymiframe.html +file + + + + +2011-07-13T16:45:39.000000Z +b079d0914f6a73d4812a4967b2d9bd3c +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +867 + +lbl-h3.png +file + + + + +2011-07-13T16:45:39.000000Z +8915729f6e8b98436f9a1a0723bc2d6a +2007-05-02T09:28:40.695596Z +253 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +170 + +lbl-h4.png +file + + + + +2011-07-13T16:45:39.000000Z +03bfccf7f8d474142bafeabf86b4732f +2007-05-02T09:28:40.695596Z +253 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +172 + +lbl-h5.png +file + + + + +2011-07-13T16:45:39.000000Z +c0f5d3d29f3cf277960182af39f5028a +2007-05-02T09:28:40.695596Z +253 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +172 + +lbl-h6.png +file + + + + +2011-07-13T16:45:39.000000Z +f19136291f975688a3784353ac0fc83c +2007-05-02T09:28:40.695596Z +253 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +171 + +wymiframe.css +file + + + + +2011-07-13T16:45:39.000000Z +bb4ed9368fc143f7af3936d7e51d8d57 +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +3273 + +lbl-p.png +file + + + + +2011-07-13T16:45:39.000000Z +afe885e1e018a8aecee52a08e605c565 +2007-05-02T09:28:40.695596Z +253 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +3607 + diff --git a/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-blockquote.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-blockquote.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-blockquote.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h1.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h1.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h1.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h2.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h2.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h2.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h3.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h3.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h3.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h4.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h4.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h4.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h5.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h5.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h5.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h6.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h6.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-h6.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-p.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-p.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-p.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-pre.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-pre.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/prop-base/lbl-pre.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-blockquote.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-blockquote.png.svn-base Binary files differnew file mode 100644 index 0000000..65ea205 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-blockquote.png.svn-base diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h1.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h1.png.svn-base Binary files differnew file mode 100644 index 0000000..dea1da3 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h1.png.svn-base diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h2.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h2.png.svn-base Binary files differnew file mode 100644 index 0000000..f4b4274 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h2.png.svn-base diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h3.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h3.png.svn-base Binary files differnew file mode 100644 index 0000000..bd99f76 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h3.png.svn-base diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h4.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h4.png.svn-base Binary files differnew file mode 100644 index 0000000..e06ab3d --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h4.png.svn-base diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h5.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h5.png.svn-base Binary files differnew file mode 100644 index 0000000..360fc60 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h5.png.svn-base diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h6.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h6.png.svn-base Binary files differnew file mode 100644 index 0000000..73e644a --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-h6.png.svn-base diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-p.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-p.png.svn-base Binary files differnew file mode 100644 index 0000000..7f2bf34 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-p.png.svn-base diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-pre.png.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-pre.png.svn-base Binary files differnew file mode 100644 index 0000000..e026e47 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/lbl-pre.png.svn-base diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/wymiframe.css.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/wymiframe.css.svn-base new file mode 100644 index 0000000..769520c --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/wymiframe.css.svn-base @@ -0,0 +1,90 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * wymeditor.css + * Main editor css file. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Daniel Reszka (d.reszka a-t wymeditor dotorg) +*/ + +/* VISUAL FEEDBACK */ + +/* basic */ + body { background: #e1e8f1;} + +/* make HTML blocs visible */ + p, + h1, + h2, + h3, + h4, + h5, + h6, + ul, + ol, + table, + blockquote, + pre { background: #FFFFFF no-repeat 2px 2px; + padding:8px 5px 5px; + margin:10px; } + td { background: #F0F4F8; } + th { background: #ffffcc; } + ul, + ol { border-left:20px solid #B9C4D0; padding:0px 5px; } + caption { background: #E4E4B0; padding: 5px; font-weight: bold; } + table { font-size: 12px; width: 500px; } + td { width: 25%; } + blockquote { margin-left: 30px; } + pre { background-color:transparent; border: 1px solid white; } + +/* Gecko min height fix */ + p { min-height: 1em; } /*min-height is needed under Firefox, because empty parargraphs */ + *+html p { min-height: auto; } /* but we have to remove it under IE7 because it triggers the 'haslayout' mode */ + td { height: 1.6em; } + +/* labels */ + p { background-image: url(lbl-p.png); } + h1 { background-image: url(lbl-h1.png); } + h2 { background-image: url(lbl-h2.png); } + h3 { background-image: url(lbl-h3.png); } + h4 { background-image: url(lbl-h4.png); } + h5 { background-image: url(lbl-h5.png); } + h6 { background-image: url(lbl-h6.png); } + blockquote{ background-image: url(lbl-blockquote.png); } + pre { background-image: url(lbl-pre.png); } + +/* specific HTML elements */ + caption { text-align: left; } + img { margin-right: 5px; + border-style: solid; + border-color: gray; + border-width: 0; } + a img { border-width: 1px; border-color: blue; } + acronym { border: 1px solid gray; } + span { background-color: #eef; } + +/* visual feedback for non-valid nesting of elements*/ + h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6, h1 p, h1 pre, h1 address, + h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6, h2 p, h2 pre, h2 address, + h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6, h3 p, h3 pre, h3 address, + h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6, h4 p, h4 pre, h4 address, + h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6, h5 p, h5 pre, h5 address, + h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6, h6 p, h6 pre, h6 address, + p h1, p h2, p h3, p h4, p h5, p h6, p pre, p address, + pre h1, pre h2, pre h3, pre h4, pre h5, pre h6, pre p, pre pre, pre address, + address h1, address h2, address h3, address h4, address h5, address h6, + address p, address pre, address address + { background-color: #ff9999 !important; + border: 1px solid red !important; + font-size: 12px !important; + font-weight: normal; } diff --git a/studio/static/js/wymeditor/iframe/default/.svn/text-base/wymiframe.html.svn-base b/studio/static/js/wymeditor/iframe/default/.svn/text-base/wymiframe.html.svn-base new file mode 100644 index 0000000..91a690c --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/.svn/text-base/wymiframe.html.svn-base @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<!-- + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * wymiframe.html + * Iframe used by designMode. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) +--> +<html> +<head> +<title>WYMeditor iframe</title> +<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> +<link rel="stylesheet" type="text/css" media="screen" href="wymiframe.css" /> +</head> +<body class="wym_iframe"></body> +</html> diff --git a/studio/static/js/wymeditor/iframe/default/lbl-blockquote.png b/studio/static/js/wymeditor/iframe/default/lbl-blockquote.png Binary files differnew file mode 100644 index 0000000..65ea205 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/lbl-blockquote.png diff --git a/studio/static/js/wymeditor/iframe/default/lbl-h1.png b/studio/static/js/wymeditor/iframe/default/lbl-h1.png Binary files differnew file mode 100644 index 0000000..dea1da3 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/lbl-h1.png diff --git a/studio/static/js/wymeditor/iframe/default/lbl-h2.png b/studio/static/js/wymeditor/iframe/default/lbl-h2.png Binary files differnew file mode 100644 index 0000000..f4b4274 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/lbl-h2.png diff --git a/studio/static/js/wymeditor/iframe/default/lbl-h3.png b/studio/static/js/wymeditor/iframe/default/lbl-h3.png Binary files differnew file mode 100644 index 0000000..bd99f76 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/lbl-h3.png diff --git a/studio/static/js/wymeditor/iframe/default/lbl-h4.png b/studio/static/js/wymeditor/iframe/default/lbl-h4.png Binary files differnew file mode 100644 index 0000000..e06ab3d --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/lbl-h4.png diff --git a/studio/static/js/wymeditor/iframe/default/lbl-h5.png b/studio/static/js/wymeditor/iframe/default/lbl-h5.png Binary files differnew file mode 100644 index 0000000..360fc60 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/lbl-h5.png diff --git a/studio/static/js/wymeditor/iframe/default/lbl-h6.png b/studio/static/js/wymeditor/iframe/default/lbl-h6.png Binary files differnew file mode 100644 index 0000000..73e644a --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/lbl-h6.png diff --git a/studio/static/js/wymeditor/iframe/default/lbl-p.png b/studio/static/js/wymeditor/iframe/default/lbl-p.png Binary files differnew file mode 100644 index 0000000..7f2bf34 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/lbl-p.png diff --git a/studio/static/js/wymeditor/iframe/default/lbl-pre.png b/studio/static/js/wymeditor/iframe/default/lbl-pre.png Binary files differnew file mode 100644 index 0000000..e026e47 --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/lbl-pre.png diff --git a/studio/static/js/wymeditor/iframe/default/wymiframe.css b/studio/static/js/wymeditor/iframe/default/wymiframe.css new file mode 100644 index 0000000..769520c --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/wymiframe.css @@ -0,0 +1,90 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * wymeditor.css + * Main editor css file. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Daniel Reszka (d.reszka a-t wymeditor dotorg) +*/ + +/* VISUAL FEEDBACK */ + +/* basic */ + body { background: #e1e8f1;} + +/* make HTML blocs visible */ + p, + h1, + h2, + h3, + h4, + h5, + h6, + ul, + ol, + table, + blockquote, + pre { background: #FFFFFF no-repeat 2px 2px; + padding:8px 5px 5px; + margin:10px; } + td { background: #F0F4F8; } + th { background: #ffffcc; } + ul, + ol { border-left:20px solid #B9C4D0; padding:0px 5px; } + caption { background: #E4E4B0; padding: 5px; font-weight: bold; } + table { font-size: 12px; width: 500px; } + td { width: 25%; } + blockquote { margin-left: 30px; } + pre { background-color:transparent; border: 1px solid white; } + +/* Gecko min height fix */ + p { min-height: 1em; } /*min-height is needed under Firefox, because empty parargraphs */ + *+html p { min-height: auto; } /* but we have to remove it under IE7 because it triggers the 'haslayout' mode */ + td { height: 1.6em; } + +/* labels */ + p { background-image: url(lbl-p.png); } + h1 { background-image: url(lbl-h1.png); } + h2 { background-image: url(lbl-h2.png); } + h3 { background-image: url(lbl-h3.png); } + h4 { background-image: url(lbl-h4.png); } + h5 { background-image: url(lbl-h5.png); } + h6 { background-image: url(lbl-h6.png); } + blockquote{ background-image: url(lbl-blockquote.png); } + pre { background-image: url(lbl-pre.png); } + +/* specific HTML elements */ + caption { text-align: left; } + img { margin-right: 5px; + border-style: solid; + border-color: gray; + border-width: 0; } + a img { border-width: 1px; border-color: blue; } + acronym { border: 1px solid gray; } + span { background-color: #eef; } + +/* visual feedback for non-valid nesting of elements*/ + h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6, h1 p, h1 pre, h1 address, + h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6, h2 p, h2 pre, h2 address, + h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6, h3 p, h3 pre, h3 address, + h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6, h4 p, h4 pre, h4 address, + h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6, h5 p, h5 pre, h5 address, + h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6, h6 p, h6 pre, h6 address, + p h1, p h2, p h3, p h4, p h5, p h6, p pre, p address, + pre h1, pre h2, pre h3, pre h4, pre h5, pre h6, pre p, pre pre, pre address, + address h1, address h2, address h3, address h4, address h5, address h6, + address p, address pre, address address + { background-color: #ff9999 !important; + border: 1px solid red !important; + font-size: 12px !important; + font-weight: normal; } diff --git a/studio/static/js/wymeditor/iframe/default/wymiframe.html b/studio/static/js/wymeditor/iframe/default/wymiframe.html new file mode 100644 index 0000000..91a690c --- /dev/null +++ b/studio/static/js/wymeditor/iframe/default/wymiframe.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<!-- + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * wymiframe.html + * Iframe used by designMode. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) +--> +<html> +<head> +<title>WYMeditor iframe</title> +<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> +<link rel="stylesheet" type="text/css" media="screen" href="wymiframe.css" /> +</head> +<body class="wym_iframe"></body> +</html> diff --git a/studio/static/js/wymeditor/jquery.wymeditor.explorer.js b/studio/static/js/wymeditor/jquery.wymeditor.explorer.js new file mode 100644 index 0000000..c177bee --- /dev/null +++ b/studio/static/js/wymeditor/jquery.wymeditor.explorer.js @@ -0,0 +1,218 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.explorer.js + * MSIE specific class and functions. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Bermi Ferrer (wymeditor a-t bermi dotorg) + * Frédéric Palluel-Lafleur (fpalluel a-t gmail dotcom) + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + */ + +WYMeditor.WymClassExplorer = function(wym) { + + this._wym = wym; + this._class = "className"; + this._newLine = "\r\n"; + +}; + +WYMeditor.WymClassExplorer.prototype.initIframe = function(iframe) { + + //This function is executed twice, though it is called once! + //But MSIE needs that, otherwise designMode won't work. + //Weird. + + this._iframe = iframe; + this._doc = iframe.contentWindow.document; + + //add css rules from options + var styles = this._doc.styleSheets[0]; + var aCss = eval(this._options.editorStyles); + + this.addCssRules(this._doc, aCss); + + this._doc.title = this._wym._index; + + //set the text direction + jQuery('html', this._doc).attr('dir', this._options.direction); + + //init html value + jQuery(this._doc.body).html(this._wym._html); + + //handle events + var wym = this; + + this._doc.body.onfocus = function() + {wym._doc.designMode = "on"; wym._doc = iframe.contentWindow.document;}; + this._doc.onbeforedeactivate = function() {wym.saveCaret();}; + this._doc.onkeyup = function() { + wym.saveCaret(); + wym.keyup(); + }; + this._doc.onclick = function() {wym.saveCaret();}; + + this._doc.body.onbeforepaste = function() { + wym._iframe.contentWindow.event.returnValue = false; + }; + + this._doc.body.onpaste = function() { + wym._iframe.contentWindow.event.returnValue = false; + wym.paste(window.clipboardData.getData("Text")); + }; + + //callback can't be executed twice, so we check + if(this._initialized) { + + //pre-bind functions + if(jQuery.isFunction(this._options.preBind)) this._options.preBind(this); + + //bind external events + this._wym.bindEvents(); + + //post-init functions + if(jQuery.isFunction(this._options.postInit)) this._options.postInit(this); + + //add event listeners to doc elements, e.g. images + this.listen(); + } + + this._initialized = true; + + //init designMode + this._doc.designMode="on"; + try{ + // (bermi's note) noticed when running unit tests on IE6 + // Is this really needed, it trigger an unexisting property on IE6 + this._doc = iframe.contentWindow.document; + }catch(e){} +}; + +(function(editorLoadSkin) { + WYMeditor.WymClassExplorer.prototype.loadSkin = function() { + // Mark container items as unselectable (#203) + // Fix for issue explained: http://stackoverflow.com/questions/1470932/ie8-iframe-designmode-loses-selection + jQuery(this._box).find(this._options.containerSelector) + .attr('unselectable', 'on'); + + editorLoadSkin.call(this); + }; +})(WYMeditor.editor.prototype.loadSkin); + +WYMeditor.WymClassExplorer.prototype._exec = function(cmd,param) { + + switch(cmd) { + + case WYMeditor.INDENT: case WYMeditor.OUTDENT: + + var container = this.findUp(this.container(), WYMeditor.LI); + if(container) { + var ancestor = container.parentNode.parentNode; + if(container.parentNode.childNodes.length>1 + || ancestor.tagName.toLowerCase() == WYMeditor.OL + || ancestor.tagName.toLowerCase() == WYMeditor.UL) + this._doc.execCommand(cmd); + } + break; + default: + if(param) this._doc.execCommand(cmd,false,param); + else this._doc.execCommand(cmd); + break; + } + +}; + +WYMeditor.WymClassExplorer.prototype.selected = function() { + + var caretPos = this._iframe.contentWindow.document.caretPos; + if(caretPos!=null) { + if(caretPos.parentElement!=undefined) + return(caretPos.parentElement()); + } +}; + +WYMeditor.WymClassExplorer.prototype.saveCaret = function() { + + this._doc.caretPos = this._doc.selection.createRange(); +}; + +WYMeditor.WymClassExplorer.prototype.addCssRule = function(styles, oCss) { + // IE doesn't handle combined selectors (#196) + var selectors = oCss.name.split(','); + for (var i in selectors) { + styles.addRule(selectors[i], oCss.css); + } +}; + +WYMeditor.WymClassExplorer.prototype.insert = function(html) { + + // Get the current selection + var range = this._doc.selection.createRange(); + + // Check if the current selection is inside the editor + if ( jQuery(range.parentElement()).parents( this._options.iframeBodySelector ).is('*') ) { + try { + // Overwrite selection with provided html + range.pasteHTML(html); + } catch (e) { } + } else { + // Fall back to the internal paste function if there's no selection + this.paste(html); + } +}; + +WYMeditor.WymClassExplorer.prototype.wrap = function(left, right) { + + // Get the current selection + var range = this._doc.selection.createRange(); + + // Check if the current selection is inside the editor + if ( jQuery(range.parentElement()).parents( this._options.iframeBodySelector ).is('*') ) { + try { + // Overwrite selection with provided html + range.pasteHTML(left + range.text + right); + } catch (e) { } + } +}; + +WYMeditor.WymClassExplorer.prototype.unwrap = function() { + + // Get the current selection + var range = this._doc.selection.createRange(); + + // Check if the current selection is inside the editor + if ( jQuery(range.parentElement()).parents( this._options.iframeBodySelector ).is('*') ) { + try { + // Unwrap selection + var text = range.text; + this._exec( 'Cut' ); + range.pasteHTML( text ); + } catch (e) { } + } +}; + +//keyup handler +WYMeditor.WymClassExplorer.prototype.keyup = function() { + this._selected_image = null; +}; + +WYMeditor.WymClassExplorer.prototype.setFocusToNode = function(node, toStart) { + var range = this._doc.selection.createRange(); + toStart = toStart ? true : false; + + range.moveToElementText(node); + range.collapse(toStart); + range.select(); + node.focus(); +}; + diff --git a/studio/static/js/wymeditor/jquery.wymeditor.js b/studio/static/js/wymeditor/jquery.wymeditor.js new file mode 100644 index 0000000..d7c6359 --- /dev/null +++ b/studio/static/js/wymeditor/jquery.wymeditor.js @@ -0,0 +1,3860 @@ +/** + * @version 0.5-rc1 + * + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File: jquery.wymeditor.js + * + * Main JS file with core classes and functions. + * See the documentation for more info. + * + * About: authors + * + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Volker Mische (vmx a-t gmx dotde) + * Scott Lewis (lewiscot a-t gmail dotcom) + * Bermi Ferrer (wymeditor a-t bermi dotorg) + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + */ + +/* + Namespace: WYMeditor + Global WYMeditor namespace. +*/ +if(!WYMeditor) var WYMeditor = {}; + +//Wrap the Firebug console in WYMeditor.console +(function() { + if ( !window.console || !console.firebug ) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", + "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; + + WYMeditor.console = {}; + for (var i = 0; i < names.length; ++i) + WYMeditor.console[names[i]] = function() {} + + } else WYMeditor.console = window.console; +})(); + +jQuery.extend(WYMeditor, { + +/* + Constants: Global WYMeditor constants. + + VERSION - Defines WYMeditor version. + INSTANCES - An array of loaded WYMeditor.editor instances. + STRINGS - An array of loaded WYMeditor language pairs/values. + SKINS - An array of loaded WYMeditor skins. + NAME - The "name" attribute. + INDEX - A string replaced by the instance index. + WYM_INDEX - A string used to get/set the instance index. + BASE_PATH - A string replaced by WYMeditor's base path. + SKIN_PATH - A string replaced by WYMeditor's skin path. + WYM_PATH - A string replaced by WYMeditor's main JS file path. + SKINS_DEFAULT_PATH - The skins default base path. + SKINS_DEFAULT_CSS - The skins default CSS file. + LANG_DEFAULT_PATH - The language files default path. + IFRAME_BASE_PATH - A string replaced by the designmode iframe's base path. + IFRAME_DEFAULT - The iframe's default base path. + JQUERY_PATH - A string replaced by the computed jQuery path. + DIRECTION - A string replaced by the text direction (rtl or ltr). + LOGO - A string replaced by WYMeditor logo. + TOOLS - A string replaced by the toolbar's HTML. + TOOLS_ITEMS - A string replaced by the toolbar items. + TOOL_NAME - A string replaced by a toolbar item's name. + TOOL_TITLE - A string replaced by a toolbar item's title. + TOOL_CLASS - A string replaced by a toolbar item's class. + CLASSES - A string replaced by the classes panel's HTML. + CLASSES_ITEMS - A string replaced by the classes items. + CLASS_NAME - A string replaced by a class item's name. + CLASS_TITLE - A string replaced by a class item's title. + CONTAINERS - A string replaced by the containers panel's HTML. + CONTAINERS_ITEMS - A string replaced by the containers items. + CONTAINER_NAME - A string replaced by a container item's name. + CONTAINER_TITLE - A string replaced by a container item's title. + CONTAINER_CLASS - A string replaced by a container item's class. + HTML - A string replaced by the HTML view panel's HTML. + IFRAME - A string replaced by the designmode iframe. + STATUS - A string replaced by the status panel's HTML. + DIALOG_TITLE - A string replaced by a dialog's title. + DIALOG_BODY - A string replaced by a dialog's HTML body. + BODY - The BODY element. + STRING - The "string" type. + BODY,DIV,P, + H1,H2,H3,H4,H5,H6, + PRE,BLOCKQUOTE, + A,BR,IMG, + TABLE,TD,TH, + UL,OL,LI - HTML elements string representation. + CLASS,HREF,SRC, + TITLE,REL,ALT - HTML attributes string representation. + DIALOG_LINK - A link dialog type. + DIALOG_IMAGE - An image dialog type. + DIALOG_TABLE - A table dialog type. + DIALOG_PASTE - A 'Paste from Word' dialog type. + BOLD - Command: (un)set selection to <strong>. + ITALIC - Command: (un)set selection to <em>. + CREATE_LINK - Command: open the link dialog or (un)set link. + INSERT_IMAGE - Command: open the image dialog or insert an image. + INSERT_TABLE - Command: open the table dialog. + PASTE - Command: open the paste dialog. + INDENT - Command: nest a list item. + OUTDENT - Command: unnest a list item. + TOGGLE_HTML - Command: display/hide the HTML view. + FORMAT_BLOCK - Command: set a block element to another type. + PREVIEW - Command: open the preview dialog. + UNLINK - Command: unset a link. + INSERT_UNORDEREDLIST- Command: insert an unordered list. + INSERT_ORDEREDLIST - Command: insert an ordered list. + MAIN_CONTAINERS - An array of the main HTML containers used in WYMeditor. + BLOCKS - An array of the HTML block elements. + KEY - Standard key codes. + NODE - Node types. + +*/ + + VERSION : "0.5-rc1", + INSTANCES : [], + STRINGS : [], + SKINS : [], + NAME : "name", + INDEX : "{Wym_Index}", + WYM_INDEX : "wym_index", + BASE_PATH : "{Wym_Base_Path}", + CSS_PATH : "{Wym_Css_Path}", + WYM_PATH : "{Wym_Wym_Path}", + SKINS_DEFAULT_PATH : "skins/", + SKINS_DEFAULT_CSS : "skin.css", + SKINS_DEFAULT_JS : "skin.js", + LANG_DEFAULT_PATH : "lang/", + IFRAME_BASE_PATH : "{Wym_Iframe_Base_Path}", + IFRAME_DEFAULT : "iframe/default/", + JQUERY_PATH : "{Wym_Jquery_Path}", + DIRECTION : "{Wym_Direction}", + LOGO : "{Wym_Logo}", + TOOLS : "{Wym_Tools}", + TOOLS_ITEMS : "{Wym_Tools_Items}", + TOOL_NAME : "{Wym_Tool_Name}", + TOOL_TITLE : "{Wym_Tool_Title}", + TOOL_CLASS : "{Wym_Tool_Class}", + CLASSES : "{Wym_Classes}", + CLASSES_ITEMS : "{Wym_Classes_Items}", + CLASS_NAME : "{Wym_Class_Name}", + CLASS_TITLE : "{Wym_Class_Title}", + CONTAINERS : "{Wym_Containers}", + CONTAINERS_ITEMS : "{Wym_Containers_Items}", + CONTAINER_NAME : "{Wym_Container_Name}", + CONTAINER_TITLE : "{Wym_Containers_Title}", + CONTAINER_CLASS : "{Wym_Container_Class}", + HTML : "{Wym_Html}", + IFRAME : "{Wym_Iframe}", + STATUS : "{Wym_Status}", + DIALOG_TITLE : "{Wym_Dialog_Title}", + DIALOG_BODY : "{Wym_Dialog_Body}", + STRING : "string", + BODY : "body", + DIV : "div", + P : "p", + H1 : "h1", + H2 : "h2", + H3 : "h3", + H4 : "h4", + H5 : "h5", + H6 : "h6", + PRE : "pre", + BLOCKQUOTE : "blockquote", + A : "a", + BR : "br", + IMG : "img", + TABLE : "table", + TD : "td", + TH : "th", + UL : "ul", + OL : "ol", + LI : "li", + CLASS : "class", + HREF : "href", + SRC : "src", + TITLE : "title", + REL : "rel", + ALT : "alt", + DIALOG_LINK : "Link", + DIALOG_IMAGE : "Image", + DIALOG_TABLE : "Table", + DIALOG_PASTE : "Paste_From_Word", + BOLD : "Bold", + ITALIC : "Italic", + CREATE_LINK : "CreateLink", + INSERT_IMAGE : "InsertImage", + INSERT_TABLE : "InsertTable", + INSERT_HTML : "InsertHTML", + PASTE : "Paste", + INDENT : "Indent", + OUTDENT : "Outdent", + TOGGLE_HTML : "ToggleHtml", + FORMAT_BLOCK : "FormatBlock", + PREVIEW : "Preview", + UNLINK : "Unlink", + INSERT_UNORDEREDLIST: "InsertUnorderedList", + INSERT_ORDEREDLIST : "InsertOrderedList", + + MAIN_CONTAINERS : new Array("p","h1","h2","h3","h4","h5","h6","pre","blockquote"), + + BLOCKS : new Array("address", "blockquote", "div", "dl", + "fieldset", "form", "h1", "h2", "h3", "h4", "h5", "h6", "hr", + "noscript", "ol", "p", "pre", "table", "ul", "dd", "dt", + "li", "tbody", "td", "tfoot", "th", "thead", "tr"), + + KEY : { + BACKSPACE: 8, + ENTER: 13, + END: 35, + HOME: 36, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + CURSOR: new Array(37, 38, 39, 40), + DELETE: 46 + }, + + NODE : { + ELEMENT: 1, + ATTRIBUTE: 2, + TEXT: 3 + }, + + /* + Class: WYMeditor.editor + WYMeditor editor main class, instanciated for each editor occurrence. + */ + + editor : function(elem, options) { + + /* + Constructor: WYMeditor.editor + + Initializes main values (index, elements, paths, ...) + and call WYMeditor.editor.init which initializes the editor. + + Parameters: + + elem - The HTML element to be replaced by the editor. + options - The hash of options. + + Returns: + + Nothing. + + See Also: + + <WYMeditor.editor.init> + */ + + //store the instance in the INSTANCES array and store the index + this._index = WYMeditor.INSTANCES.push(this) - 1; + //store the element replaced by the editor + this._element = elem; + //store the options + this._options = options; + //store the element's inner value + this._html = jQuery(elem).val(); + + //store the HTML option, if any + if(this._options.html) this._html = this._options.html; + //get or compute the base path (where the main JS file is located) + this._options.basePath = this._options.basePath + || this.computeBasePath(); + //get or set the skin path (where the skin files are located) + this._options.skinPath = this._options.skinPath + || this._options.basePath + WYMeditor.SKINS_DEFAULT_PATH + + this._options.skin + '/'; + //get or compute the main JS file location + this._options.wymPath = this._options.wymPath + || this.computeWymPath(); + //get or set the language files path + this._options.langPath = this._options.langPath + || this._options.basePath + WYMeditor.LANG_DEFAULT_PATH; + //get or set the designmode iframe's base path + this._options.iframeBasePath = this._options.iframeBasePath + || this._options.basePath + WYMeditor.IFRAME_DEFAULT; + //get or compute the jQuery JS file location + this._options.jQueryPath = this._options.jQueryPath + || this.computeJqueryPath(); + + //initialize the editor instance + this.init(); + + } + +}); + + +/********** JQUERY **********/ + +/** + * Replace an HTML element by WYMeditor + * + * @example jQuery(".wymeditor").wymeditor( + * { + * + * } + * ); + * @desc Example description here + * + * @name WYMeditor + * @description WYMeditor is a web-based WYSIWYM XHTML editor + * @param Hash hash A hash of parameters + * @option Integer iExample Description here + * @option String sExample Description here + * + * @type jQuery + * @cat Plugins/WYMeditor + * @author Jean-Francois Hovinne + */ +jQuery.fn.wymeditor = function(options) { + + options = jQuery.extend({ + + html: "", + + basePath: false, + + skinPath: false, + + wymPath: false, + + iframeBasePath: false, + + jQueryPath: false, + + styles: false, + + stylesheet: false, + + skin: "default", + initSkin: true, + loadSkin: true, + + lang: "en", + + direction: "ltr", + + boxHtml: "<div class='wym_box'>" + + "<div class='wym_area_top'>" + + WYMeditor.TOOLS + + "</div>" + + "<div class='wym_area_left'></div>" + + "<div class='wym_area_right'>" + + WYMeditor.CONTAINERS + + WYMeditor.CLASSES + + "</div>" + + "<div class='wym_area_main'>" + + WYMeditor.HTML + + WYMeditor.IFRAME + + WYMeditor.STATUS + + "</div>" + + "<div class='wym_area_bottom'>" + + WYMeditor.LOGO + + "</div>" + + "</div>", + + logoHtml: "<a class='wym_wymeditor_link' " + + "href='http://www.wymeditor.org/'>WYMeditor</a>", + + iframeHtml:"<div class='wym_iframe wym_section'>" + + "<iframe " + + "src='" + + WYMeditor.IFRAME_BASE_PATH + + "wymiframe.html' " + + "onload='this.contentWindow.parent.WYMeditor.INSTANCES[" + + WYMeditor.INDEX + "].initIframe(this)'" + + "></iframe>" + + "</div>", + + editorStyles: [], + + toolsHtml: "<div class='wym_tools wym_section'>" + + "<h2>{Tools}</h2>" + + "<ul>" + + WYMeditor.TOOLS_ITEMS + + "</ul>" + + "</div>", + + toolsItemHtml: "<li class='" + + WYMeditor.TOOL_CLASS + + "'><a href='#' name='" + + WYMeditor.TOOL_NAME + + "' title='" + + WYMeditor.TOOL_TITLE + + "'>" + + WYMeditor.TOOL_TITLE + + "</a></li>", + + toolsItems: [ + {'name': 'Bold', 'title': 'Strong', 'css': 'wym_tools_strong'}, + {'name': 'Italic', 'title': 'Emphasis', 'css': 'wym_tools_emphasis'}, + {'name': 'Superscript', 'title': 'Superscript', + 'css': 'wym_tools_superscript'}, + {'name': 'Subscript', 'title': 'Subscript', + 'css': 'wym_tools_subscript'}, + {'name': 'InsertOrderedList', 'title': 'Ordered_List', + 'css': 'wym_tools_ordered_list'}, + {'name': 'InsertUnorderedList', 'title': 'Unordered_List', + 'css': 'wym_tools_unordered_list'}, + {'name': 'Indent', 'title': 'Indent', 'css': 'wym_tools_indent'}, + {'name': 'Outdent', 'title': 'Outdent', 'css': 'wym_tools_outdent'}, + {'name': 'Undo', 'title': 'Undo', 'css': 'wym_tools_undo'}, + {'name': 'Redo', 'title': 'Redo', 'css': 'wym_tools_redo'}, + {'name': 'CreateLink', 'title': 'Link', 'css': 'wym_tools_link'}, + {'name': 'Unlink', 'title': 'Unlink', 'css': 'wym_tools_unlink'}, + {'name': 'InsertImage', 'title': 'Image', 'css': 'wym_tools_image'}, + {'name': 'InsertTable', 'title': 'Table', 'css': 'wym_tools_table'}, + {'name': 'Paste', 'title': 'Paste_From_Word', + 'css': 'wym_tools_paste'}, + {'name': 'ToggleHtml', 'title': 'HTML', 'css': 'wym_tools_html'}, + {'name': 'Preview', 'title': 'Preview', 'css': 'wym_tools_preview'} + ], + + containersHtml: "<div class='wym_containers wym_section'>" + + "<h2>{Containers}</h2>" + + "<ul>" + + WYMeditor.CONTAINERS_ITEMS + + "</ul>" + + "</div>", + + containersItemHtml:"<li class='" + + WYMeditor.CONTAINER_CLASS + + "'>" + + "<a href='#' name='" + + WYMeditor.CONTAINER_NAME + + "'>" + + WYMeditor.CONTAINER_TITLE + + "</a></li>", + + containersItems: [ + {'name': 'P', 'title': 'Paragraph', 'css': 'wym_containers_p'}, + {'name': 'H1', 'title': 'Heading_1', 'css': 'wym_containers_h1'}, + {'name': 'H2', 'title': 'Heading_2', 'css': 'wym_containers_h2'}, + {'name': 'H3', 'title': 'Heading_3', 'css': 'wym_containers_h3'}, + {'name': 'H4', 'title': 'Heading_4', 'css': 'wym_containers_h4'}, + {'name': 'H5', 'title': 'Heading_5', 'css': 'wym_containers_h5'}, + {'name': 'H6', 'title': 'Heading_6', 'css': 'wym_containers_h6'}, + {'name': 'PRE', 'title': 'Preformatted', 'css': 'wym_containers_pre'}, + {'name': 'BLOCKQUOTE', 'title': 'Blockquote', + 'css': 'wym_containers_blockquote'}, + {'name': 'TH', 'title': 'Table_Header', 'css': 'wym_containers_th'} + ], + + classesHtml: "<div class='wym_classes wym_section'>" + + "<h2>{Classes}</h2><ul>" + + WYMeditor.CLASSES_ITEMS + + "</ul></div>", + + classesItemHtml: "<li class='wym_classes_" + + WYMeditor.CLASS_NAME + + "'><a href='#' name='" + + WYMeditor.CLASS_NAME + + "'>" + + WYMeditor.CLASS_TITLE + + "</a></li>", + + classesItems: [], + + statusHtml: "<div class='wym_status wym_section'>" + + "<h2>{Status}</h2>" + + "</div>", + + htmlHtml: "<div class='wym_html wym_section'>" + + "<h2>{Source_Code}</h2>" + + "<textarea class='wym_html_val'></textarea>" + + "</div>", + + boxSelector: ".wym_box", + toolsSelector: ".wym_tools", + toolsListSelector: " ul", + containersSelector:".wym_containers", + classesSelector: ".wym_classes", + htmlSelector: ".wym_html", + iframeSelector: ".wym_iframe iframe", + iframeBodySelector:".wym_iframe", + statusSelector: ".wym_status", + toolSelector: ".wym_tools a", + containerSelector: ".wym_containers a", + classSelector: ".wym_classes a", + htmlValSelector: ".wym_html_val", + + hrefSelector: ".wym_href", + srcSelector: ".wym_src", + titleSelector: ".wym_title", + relSelector: ".wym_rel", + altSelector: ".wym_alt", + textSelector: ".wym_text", + + rowsSelector: ".wym_rows", + colsSelector: ".wym_cols", + captionSelector: ".wym_caption", + summarySelector: ".wym_summary", + + submitSelector: "form", + cancelSelector: ".wym_cancel", + previewSelector: "", + + dialogTypeSelector: ".wym_dialog_type", + dialogLinkSelector: ".wym_dialog_link", + dialogImageSelector: ".wym_dialog_image", + dialogTableSelector: ".wym_dialog_table", + dialogPasteSelector: ".wym_dialog_paste", + dialogPreviewSelector: ".wym_dialog_preview", + + updateSelector: ".wymupdate", + updateEvent: "click", + + dialogFeatures: "menubar=no,titlebar=no,toolbar=no,resizable=no" + + ",width=560,height=300,top=0,left=0", + dialogFeaturesPreview: "menubar=no,titlebar=no,toolbar=no,resizable=no" + + ",scrollbars=yes,width=560,height=300,top=0,left=0", + + dialogHtml: "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'" + + " 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>" + + "<html dir='" + + WYMeditor.DIRECTION + + "'><head>" + + "<link rel='stylesheet' type='text/css' media='screen'" + + " href='" + + WYMeditor.CSS_PATH + + "' />" + + "<title>" + + WYMeditor.DIALOG_TITLE + + "</title>" + + "<script type='text/javascript'" + + " src='" + + WYMeditor.JQUERY_PATH + + "'></script>" + + "<script type='text/javascript'" + + " src='" + + WYMeditor.WYM_PATH + + "'></script>" + + "</head>" + + WYMeditor.DIALOG_BODY + + "</html>", + + dialogLinkHtml: "<body class='wym_dialog wym_dialog_link'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + ">" + + "<form>" + + "<fieldset>" + + "<input type='hidden' class='wym_dialog_type' value='" + + WYMeditor.DIALOG_LINK + + "' />" + + "<legend>{Link}</legend>" + + "<div class='row'>" + + "<label>{URL}</label>" + + "<input type='text' class='wym_href' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Title}</label>" + + "<input type='text' class='wym_title' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Relationship}</label>" + + "<input type='text' class='wym_rel' value='' size='40' />" + + "</div>" + + "<div class='row row-indent'>" + + "<input class='wym_submit' type='submit'" + + " value='{Submit}' />" + + "<input class='wym_cancel' type='button'" + + "value='{Cancel}' />" + + "</div>" + + "</fieldset>" + + "</form>" + + "</body>", + + dialogImageHtml: "<body class='wym_dialog wym_dialog_image'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + ">" + + "<form>" + + "<fieldset>" + + "<input type='hidden' class='wym_dialog_type' value='" + + WYMeditor.DIALOG_IMAGE + + "' />" + + "<legend>{Image}</legend>" + + "<div class='row'>" + + "<label>{URL}</label>" + + "<input type='text' class='wym_src' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Alternative_Text}</label>" + + "<input type='text' class='wym_alt' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Title}</label>" + + "<input type='text' class='wym_title' value='' size='40' />" + + "</div>" + + "<div class='row row-indent'>" + + "<input class='wym_submit' type='submit'" + + " value='{Submit}' />" + + "<input class='wym_cancel' type='button'" + + "value='{Cancel}' />" + + "</div>" + + "</fieldset>" + + "</form>" + + "</body>", + + dialogTableHtml: "<body class='wym_dialog wym_dialog_table'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + ">" + + "<form>" + + "<fieldset>" + + "<input type='hidden' class='wym_dialog_type' value='" + + WYMeditor.DIALOG_TABLE + + "' />" + + "<legend>{Table}</legend>" + + "<div class='row'>" + + "<label>{Caption}</label>" + + "<input type='text' class='wym_caption' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Summary}</label>" + + "<input type='text' class='wym_summary' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Number_Of_Rows}</label>" + + "<input type='text' class='wym_rows' value='3' size='3' />" + + "</div>" + + "<div class='row'>" + + "<label>{Number_Of_Cols}</label>" + + "<input type='text' class='wym_cols' value='2' size='3' />" + + "</div>" + + "<div class='row row-indent'>" + + "<input class='wym_submit' type='submit'" + + " value='{Submit}' />" + + "<input class='wym_cancel' type='button'" + + "value='{Cancel}' />" + + "</div>" + + "</fieldset>" + + "</form>" + + "</body>", + + dialogPasteHtml: "<body class='wym_dialog wym_dialog_paste'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + ">" + + "<form>" + + "<input type='hidden' class='wym_dialog_type' value='" + + WYMeditor.DIALOG_PASTE + + "' />" + + "<fieldset>" + + "<legend>{Paste_From_Word}</legend>" + + "<div class='row'>" + + "<textarea class='wym_text' rows='10' cols='50'></textarea>" + + "</div>" + + "<div class='row'>" + + "<input class='wym_submit' type='submit'" + + " value='{Submit}' />" + + "<input class='wym_cancel' type='button'" + + "value='{Cancel}' />" + + "</div>" + + "</fieldset>" + + "</form>" + + "</body>", + + dialogPreviewHtml: "<body class='wym_dialog wym_dialog_preview'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + "></body>", + + dialogStyles: [], + + stringDelimiterLeft: "{", + stringDelimiterRight:"}", + + preInit: null, + preBind: null, + postInit: null, + + preInitDialog: null, + postInitDialog: null + + }, options); + + return this.each(function() { + + new WYMeditor.editor(jQuery(this),options); + }); +}; + +/* @name extend + * @description Returns the WYMeditor instance based on its index + */ +jQuery.extend({ + wymeditors: function(i) { + return (WYMeditor.INSTANCES[i]); + } +}); + + +/********** WYMeditor **********/ + +/* @name Wymeditor + * @description WYMeditor class + */ + +/* @name init + * @description Initializes a WYMeditor instance + */ +WYMeditor.editor.prototype.init = function() { + + //load subclass - browser specific + //unsupported browsers: do nothing + if (jQuery.browser.msie) { + var WymClass = new WYMeditor.WymClassExplorer(this); + } + else if (jQuery.browser.mozilla) { + var WymClass = new WYMeditor.WymClassMozilla(this); + } + else if (jQuery.browser.opera) { + var WymClass = new WYMeditor.WymClassOpera(this); + } + else if (jQuery.browser.safari) { + var WymClass = new WYMeditor.WymClassSafari(this); + } + + if(WymClass) { + + if(jQuery.isFunction(this._options.preInit)) this._options.preInit(this); + + var SaxListener = new WYMeditor.XhtmlSaxListener(); + jQuery.extend(SaxListener, WymClass); + this.parser = new WYMeditor.XhtmlParser(SaxListener); + + if(this._options.styles || this._options.stylesheet){ + this.configureEditorUsingRawCss(); + } + + this.helper = new WYMeditor.XmlHelper(); + + //extend the Wymeditor object + //don't use jQuery.extend since 1.1.4 + //jQuery.extend(this, WymClass); + for (var prop in WymClass) { this[prop] = WymClass[prop]; } + + //load wymbox + this._box = jQuery(this._element).hide().after(this._options.boxHtml).next().addClass('wym_box_' + this._index); + + //store the instance index in wymbox and element replaced by editor instance + //but keep it compatible with jQuery < 1.2.3, see #122 + if( jQuery.isFunction( jQuery.fn.data ) ) { + jQuery.data(this._box.get(0), WYMeditor.WYM_INDEX, this._index); + jQuery.data(this._element.get(0), WYMeditor.WYM_INDEX, this._index); + } + + var h = WYMeditor.Helper; + + //construct the iframe + var iframeHtml = this._options.iframeHtml; + iframeHtml = h.replaceAll(iframeHtml, WYMeditor.INDEX, this._index); + iframeHtml = h.replaceAll(iframeHtml, WYMeditor.IFRAME_BASE_PATH, this._options.iframeBasePath); + + //construct wymbox + var boxHtml = jQuery(this._box).html(); + + boxHtml = h.replaceAll(boxHtml, WYMeditor.LOGO, this._options.logoHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.TOOLS, this._options.toolsHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.CONTAINERS,this._options.containersHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.CLASSES, this._options.classesHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.HTML, this._options.htmlHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.IFRAME, iframeHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.STATUS, this._options.statusHtml); + + //construct tools list + var aTools = eval(this._options.toolsItems); + var sTools = ""; + + for(var i = 0; i < aTools.length; i++) { + var oTool = aTools[i]; + if(oTool.name && oTool.title) + var sTool = this._options.toolsItemHtml; + var sTool = h.replaceAll(sTool, WYMeditor.TOOL_NAME, oTool.name); + sTool = h.replaceAll(sTool, WYMeditor.TOOL_TITLE, this._options.stringDelimiterLeft + + oTool.title + + this._options.stringDelimiterRight); + sTool = h.replaceAll(sTool, WYMeditor.TOOL_CLASS, oTool.css); + sTools += sTool; + } + + boxHtml = h.replaceAll(boxHtml, WYMeditor.TOOLS_ITEMS, sTools); + + //construct classes list + var aClasses = eval(this._options.classesItems); + var sClasses = ""; + + for(var i = 0; i < aClasses.length; i++) { + var oClass = aClasses[i]; + if(oClass.name && oClass.title) + var sClass = this._options.classesItemHtml; + sClass = h.replaceAll(sClass, WYMeditor.CLASS_NAME, oClass.name); + sClass = h.replaceAll(sClass, WYMeditor.CLASS_TITLE, oClass.title); + sClasses += sClass; + } + + boxHtml = h.replaceAll(boxHtml, WYMeditor.CLASSES_ITEMS, sClasses); + + //construct containers list + var aContainers = eval(this._options.containersItems); + var sContainers = ""; + + for(var i = 0; i < aContainers.length; i++) { + var oContainer = aContainers[i]; + if(oContainer.name && oContainer.title) + var sContainer = this._options.containersItemHtml; + sContainer = h.replaceAll(sContainer, WYMeditor.CONTAINER_NAME, oContainer.name); + sContainer = h.replaceAll(sContainer, WYMeditor.CONTAINER_TITLE, + this._options.stringDelimiterLeft + + oContainer.title + + this._options.stringDelimiterRight); + sContainer = h.replaceAll(sContainer, WYMeditor.CONTAINER_CLASS, oContainer.css); + sContainers += sContainer; + } + + boxHtml = h.replaceAll(boxHtml, WYMeditor.CONTAINERS_ITEMS, sContainers); + + //l10n + boxHtml = this.replaceStrings(boxHtml); + + //load html in wymbox + jQuery(this._box).html(boxHtml); + + //hide the html value + jQuery(this._box).find(this._options.htmlSelector).hide(); + + //enable the skin + this.loadSkin(); + + } +}; + +WYMeditor.editor.prototype.bindEvents = function() { + + //copy the instance + var wym = this; + + //handle click event on tools buttons + jQuery(this._box).find(this._options.toolSelector).click(function() { + wym._iframe.contentWindow.focus(); //See #154 + wym.exec(jQuery(this).attr(WYMeditor.NAME)); + return(false); + }); + + //handle click event on containers buttons + jQuery(this._box).find(this._options.containerSelector).click(function() { + wym.container(jQuery(this).attr(WYMeditor.NAME)); + return(false); + }); + + //handle keyup event on html value: set the editor value + //handle focus/blur events to check if the element has focus, see #147 + jQuery(this._box).find(this._options.htmlValSelector) + .keyup(function() { jQuery(wym._doc.body).html(jQuery(this).val());}) + .focus(function() { jQuery(this).toggleClass('hasfocus'); }) + .blur(function() { jQuery(this).toggleClass('hasfocus'); }); + + //handle click event on classes buttons + jQuery(this._box).find(this._options.classSelector).click(function() { + + var aClasses = eval(wym._options.classesItems); + var sName = jQuery(this).attr(WYMeditor.NAME); + + var oClass = WYMeditor.Helper.findByName(aClasses, sName); + + if(oClass) { + var jqexpr = oClass.expr; + wym.toggleClass(sName, jqexpr); + } + wym._iframe.contentWindow.focus(); //See #154 + return(false); + }); + + //handle event on update element + jQuery(this._options.updateSelector) + .bind(this._options.updateEvent, function() { + wym.update(); + }); +}; + +WYMeditor.editor.prototype.ready = function() { + return(this._doc != null); +}; + + +/********** METHODS **********/ + +/* @name box + * @description Returns the WYMeditor container + */ +WYMeditor.editor.prototype.box = function() { + return(this._box); +}; + +/* @name html + * @description Get/Set the html value + */ +WYMeditor.editor.prototype.html = function(html) { + + if(typeof html === 'string') jQuery(this._doc.body).html(html); + else return(jQuery(this._doc.body).html()); +}; + +/* @name xhtml + * @description Cleans up the HTML + */ +WYMeditor.editor.prototype.xhtml = function() { + return this.parser.parse(this.html()); +}; + +/* @name exec + * @description Executes a button command + */ +WYMeditor.editor.prototype.exec = function(cmd) { + + //base function for execCommand + //open a dialog or exec + switch(cmd) { + case WYMeditor.CREATE_LINK: + var container = this.container(); + if(container || this._selected_image) this.dialog(WYMeditor.DIALOG_LINK); + break; + + case WYMeditor.INSERT_IMAGE: + this.dialog(WYMeditor.DIALOG_IMAGE); + break; + + case WYMeditor.INSERT_TABLE: + this.dialog(WYMeditor.DIALOG_TABLE); + break; + + case WYMeditor.PASTE: + this.dialog(WYMeditor.DIALOG_PASTE); + break; + + case WYMeditor.TOGGLE_HTML: + this.update(); + this.toggleHtml(); + break; + + case WYMeditor.PREVIEW: + this.dialog(WYMeditor.PREVIEW, this._options.dialogFeaturesPreview); + break; + + default: + this._exec(cmd); + break; + } +}; + +/* @name container + * @description Get/Set the selected container + */ +WYMeditor.editor.prototype.container = function(sType) { + + if(sType) { + + var container = null; + + if(sType.toLowerCase() == WYMeditor.TH) { + + container = this.container(); + + //find the TD or TH container + switch(container.tagName.toLowerCase()) { + + case WYMeditor.TD: case WYMeditor.TH: + break; + default: + var aTypes = new Array(WYMeditor.TD,WYMeditor.TH); + container = this.findUp(this.container(), aTypes); + break; + } + + //if it exists, switch + if(container!=null) { + + sType = (container.tagName.toLowerCase() == WYMeditor.TD)? WYMeditor.TH: WYMeditor.TD; + this.switchTo(container,sType); + this.update(); + } + } else { + + //set the container type + var aTypes=new Array(WYMeditor.P,WYMeditor.H1,WYMeditor.H2,WYMeditor.H3,WYMeditor.H4,WYMeditor.H5, + WYMeditor.H6,WYMeditor.PRE,WYMeditor.BLOCKQUOTE); + container = this.findUp(this.container(), aTypes); + + if(container) { + + var newNode = null; + + //blockquotes must contain a block level element + if(sType.toLowerCase() == WYMeditor.BLOCKQUOTE) { + + var blockquote = this.findUp(this.container(), WYMeditor.BLOCKQUOTE); + + if(blockquote == null) { + + newNode = this._doc.createElement(sType); + container.parentNode.insertBefore(newNode,container); + newNode.appendChild(container); + this.setFocusToNode(newNode.firstChild); + + } else { + + var nodes = blockquote.childNodes; + var lgt = nodes.length; + var firstNode = null; + + if(lgt > 0) firstNode = nodes.item(0); + for(var x=0; x<lgt; x++) { + blockquote.parentNode.insertBefore(nodes.item(0),blockquote); + } + blockquote.parentNode.removeChild(blockquote); + if(firstNode) this.setFocusToNode(firstNode); + } + } + + else this.switchTo(container,sType); + + this.update(); + } + } + } + else return(this.selected()); +}; + +/* @name toggleClass + * @description Toggles class on selected element, or one of its parents + */ +WYMeditor.editor.prototype.toggleClass = function(sClass, jqexpr) { + + var container = (this._selected_image + ? this._selected_image + : jQuery(this.selected())); + container = jQuery(container).parentsOrSelf(jqexpr); + jQuery(container).toggleClass(sClass); + + if(!jQuery(container).attr(WYMeditor.CLASS)) jQuery(container).removeAttr(this._class); + +}; + +/* @name findUp + * @description Returns the first parent or self container, based on its type + */ +WYMeditor.editor.prototype.findUp = function(node, filter) { + + //filter is a string or an array of strings + + if(node) { + + var tagname = node.tagName.toLowerCase(); + + if(typeof(filter) == WYMeditor.STRING) { + + while(tagname != filter && tagname != WYMeditor.BODY) { + + node = node.parentNode; + tagname = node.tagName.toLowerCase(); + } + + } else { + + var bFound = false; + + while(!bFound && tagname != WYMeditor.BODY) { + for(var i = 0; i < filter.length; i++) { + if(tagname == filter[i]) { + bFound = true; + break; + } + } + if(!bFound) { + node = node.parentNode; + tagname = node.tagName.toLowerCase(); + } + } + } + + if(tagname != WYMeditor.BODY) return(node); + else return(null); + + } else return(null); +}; + +/* @name switchTo + * @description Switch the node's type + */ +WYMeditor.editor.prototype.switchTo = function(node,sType) { + + var newNode = this._doc.createElement(sType); + var html = jQuery(node).html(); + node.parentNode.replaceChild(newNode,node); + jQuery(newNode).html(html); + this.setFocusToNode(newNode); +}; + +WYMeditor.editor.prototype.replaceStrings = function(sVal) { + //check if the language file has already been loaded + //if not, get it via a synchronous ajax call + if(!WYMeditor.STRINGS[this._options.lang]) { + try { + eval(jQuery.ajax({url:this._options.langPath + + this._options.lang + '.js', async:false}).responseText); + } catch(e) { + WYMeditor.console.error("WYMeditor: error while parsing language file."); + return sVal; + } + } + + //replace all the strings in sVal and return it + for (var key in WYMeditor.STRINGS[this._options.lang]) { + sVal = WYMeditor.Helper.replaceAll(sVal, this._options.stringDelimiterLeft + key + + this._options.stringDelimiterRight, + WYMeditor.STRINGS[this._options.lang][key]); + }; + return(sVal); +}; + +WYMeditor.editor.prototype.encloseString = function(sVal) { + + return(this._options.stringDelimiterLeft + + sVal + + this._options.stringDelimiterRight); +}; + +/* @name status + * @description Prints a status message + */ +WYMeditor.editor.prototype.status = function(sMessage) { + + //print status message + jQuery(this._box).find(this._options.statusSelector).html(sMessage); +}; + +/* @name update + * @description Updates the element and textarea values + */ +WYMeditor.editor.prototype.update = function() { + var html; + + // Dirty fix to remove stray line breaks (#189) + jQuery(this._doc.body).children(WYMeditor.BR).remove(); + + html = this.xhtml(); + jQuery(this._element).val(html); + jQuery(this._box).find(this._options.htmlValSelector).not('.hasfocus').val(html); //#147 +}; + +/* @name dialog + * @description Opens a dialog box + */ +WYMeditor.editor.prototype.dialog = function( dialogType, dialogFeatures, bodyHtml ) { + + var features = dialogFeatures || this._wym._options.dialogFeatures; + var wDialog = window.open('', 'dialog', features); + + if(wDialog) { + + var sBodyHtml = ""; + + switch( dialogType ) { + + case(WYMeditor.DIALOG_LINK): + sBodyHtml = this._options.dialogLinkHtml; + break; + case(WYMeditor.DIALOG_IMAGE): + sBodyHtml = this._options.dialogImageHtml; + break; + case(WYMeditor.DIALOG_TABLE): + sBodyHtml = this._options.dialogTableHtml; + break; + case(WYMeditor.DIALOG_PASTE): + sBodyHtml = this._options.dialogPasteHtml; + break; + case(WYMeditor.PREVIEW): + sBodyHtml = this._options.dialogPreviewHtml; + break; + + default: + sBodyHtml = bodyHtml; + } + + var h = WYMeditor.Helper; + + //construct the dialog + var dialogHtml = this._options.dialogHtml; + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.BASE_PATH, this._options.basePath); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.DIRECTION, this._options.direction); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.CSS_PATH, this._options.skinPath + WYMeditor.SKINS_DEFAULT_CSS); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.WYM_PATH, this._options.wymPath); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.JQUERY_PATH, this._options.jQueryPath); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.DIALOG_TITLE, this.encloseString( dialogType )); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.DIALOG_BODY, sBodyHtml); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.INDEX, this._index); + + dialogHtml = this.replaceStrings(dialogHtml); + + var doc = wDialog.document; + doc.write(dialogHtml); + doc.close(); + } +}; + +/* @name toggleHtml + * @description Shows/Hides the HTML + */ +WYMeditor.editor.prototype.toggleHtml = function() { + jQuery(this._box).find(this._options.htmlSelector).toggle(); +}; + +WYMeditor.editor.prototype.uniqueStamp = function() { + var now = new Date(); + return("wym-" + now.getTime()); +}; + +/* @name paste + * @description Paste text into the editor below the carret, + * used for "Paste from Word". + * @param String str String to insert, two or more newlines separates + * paragraphs. May contain inline HTML. + */ +WYMeditor.editor.prototype.paste = function(str) { + var container = this.selected(), + html = '', + paragraphs, + focusNode; + + // Split string into paragraphs by two or more newlines + paragraphs = str.split(new RegExp(this._newLine + '{2,}', 'g')); + + // Build html + for (var i=0, l=paragraphs.length; i < l; i++) { + html += '<p>' + + ( paragraphs[i].split(this._newLine).join('<br />') ) + + '</p>'; + } + + // Insert where appropriate + if (container && container.tagName.toLowerCase() != WYMeditor.BODY) { + // No .last() pre jQuery 1.4 + //focusNode = jQuery(html).insertAfter(container).last()[0]; + paragraphs = jQuery(html, this._doc).insertAfter(container); + focusNode = paragraphs[paragraphs.length - 1]; + } else { + paragraphs = jQuery(html, this._doc).appendTo(this._doc.body); + focusNode = paragraphs[paragraphs.length - 1]; + } + + // Do some minor cleanup (#131) + if (jQuery(container).text() == '') { + jQuery(container).remove(); + } + // And remove br (if editor was empty) + jQuery('body > br', this._doc).remove(); + + // Restore focus + this.setFocusToNode(focusNode); +}; + +WYMeditor.editor.prototype.insert = function(html) { + // Do we have a selection? + var selection = this._iframe.contentWindow.getSelection(), + range, + node; + if (selection.focusNode != null) { + // Overwrite selection with provided html + range = selection.getRangeAt(0); + node = range.createContextualFragment(html); + range.deleteContents(); + range.insertNode(node); + } else { + // Fall back to the internal paste function if there's no selection + this.paste(html) + } +}; + +WYMeditor.editor.prototype.wrap = function(left, right) { + this.insert(left + this._iframe.contentWindow.getSelection().toString() + right); +}; + +WYMeditor.editor.prototype.unwrap = function() { + this.insert(this._iframe.contentWindow.getSelection().toString()); +}; + +WYMeditor.editor.prototype.setFocusToNode = function(node, toStart) { + var range = this._doc.createRange(), + selection = this._iframe.contentWindow.getSelection(); + toStart = toStart ? 0 : 1; + + range.selectNodeContents(node); + selection.addRange(range); + selection.collapse(node, toStart); + this._iframe.contentWindow.focus(); +}; + +WYMeditor.editor.prototype.addCssRules = function(doc, aCss) { + var styles = doc.styleSheets[0]; + if(styles) { + for(var i = 0; i < aCss.length; i++) { + var oCss = aCss[i]; + if(oCss.name && oCss.css) this.addCssRule(styles, oCss); + } + } +}; + +/********** CONFIGURATION **********/ + +WYMeditor.editor.prototype.computeBasePath = function() { + return jQuery(jQuery.grep(jQuery('script'), function(s){ + return (s.src && s.src.match(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/ )) + })).attr('src').replace(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/, ''); +}; + +WYMeditor.editor.prototype.computeWymPath = function() { + return jQuery(jQuery.grep(jQuery('script'), function(s){ + return (s.src && s.src.match(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/ )) + })).attr('src'); +}; + +WYMeditor.editor.prototype.computeJqueryPath = function() { + return jQuery(jQuery.grep(jQuery('script'), function(s){ + return (s.src && s.src.match(/jquery(-(.*)){0,1}(\.pack|\.min|\.packed)?\.js(\?.*)?$/ )) + })).attr('src'); +}; + +WYMeditor.editor.prototype.computeCssPath = function() { + return jQuery(jQuery.grep(jQuery('link'), function(s){ + return (s.href && s.href.match(/wymeditor\/skins\/(.*)screen\.css(\?.*)?$/ )) + })).attr('href'); +}; + +WYMeditor.editor.prototype.configureEditorUsingRawCss = function() { + + var CssParser = new WYMeditor.WymCssParser(); + if(this._options.stylesheet){ + CssParser.parse(jQuery.ajax({url: this._options.stylesheet,async:false}).responseText); + }else{ + CssParser.parse(this._options.styles, false); + } + + if(this._options.classesItems.length == 0) { + this._options.classesItems = CssParser.css_settings.classesItems; + } + if(this._options.editorStyles.length == 0) { + this._options.editorStyles = CssParser.css_settings.editorStyles; + } + if(this._options.dialogStyles.length == 0) { + this._options.dialogStyles = CssParser.css_settings.dialogStyles; + } +}; + +/********** EVENTS **********/ + +WYMeditor.editor.prototype.listen = function() { + //don't use jQuery.find() on the iframe body + //because of MSIE + jQuery + expando issue (#JQ1143) + //jQuery(this._doc.body).find("*").bind("mouseup", this.mouseup); + + jQuery(this._doc.body).bind("mousedown", this.mousedown); +}; + +WYMeditor.editor.prototype.mousedown = function(evt) { + var wym = WYMeditor.INSTANCES[this.ownerDocument.title]; + wym._selected_image = (evt.target.tagName.toLowerCase() == WYMeditor.IMG) ? evt.target : null; +}; + +/********** SKINS **********/ + +/* + * Function: WYMeditor.loadCss + * Loads a stylesheet in the document. + * + * Parameters: + * href - The CSS path. + */ +WYMeditor.loadCss = function(href) { + + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = href; + + var head = jQuery('head').get(0); + head.appendChild(link); +}; + +/* + * Function: WYMeditor.editor.loadSkin + * Loads the skin CSS and initialization script (if needed). + */ +WYMeditor.editor.prototype.loadSkin = function() { + + //does the user want to automatically load the CSS (default: yes)? + //we also test if it hasn't been already loaded by another instance + //see below for a better (second) test + if(this._options.loadSkin && !WYMeditor.SKINS[this._options.skin]) { + + //check if it hasn't been already loaded + //so we don't load it more than once + //(we check the existing <link> elements) + + var found = false; + var rExp = new RegExp(this._options.skin + + '\/' + WYMeditor.SKINS_DEFAULT_CSS + '$'); + + jQuery('link').each( function() { + if(this.href.match(rExp)) found = true; + }); + + //load it, using the skin path + if(!found) WYMeditor.loadCss( this._options.skinPath + + WYMeditor.SKINS_DEFAULT_CSS ); + } + + //put the classname (ex. wym_skin_default) on wym_box + jQuery(this._box).addClass( "wym_skin_" + this._options.skin ); + + //does the user want to use some JS to initialize the skin (default: yes)? + //also check if it hasn't already been loaded by another instance + if(this._options.initSkin && !WYMeditor.SKINS[this._options.skin]) { + + eval(jQuery.ajax({url:this._options.skinPath + + WYMeditor.SKINS_DEFAULT_JS, async:false}).responseText); + } + + //init the skin, if needed + if(WYMeditor.SKINS[this._options.skin] + && WYMeditor.SKINS[this._options.skin].init) + WYMeditor.SKINS[this._options.skin].init(this); + +}; + + +/********** DIALOGS **********/ + +WYMeditor.INIT_DIALOG = function(index) { + + var wym = window.opener.WYMeditor.INSTANCES[index]; + var doc = window.document; + var selected = wym.selected(); + var dialogType = jQuery(wym._options.dialogTypeSelector).val(); + var sStamp = wym.uniqueStamp(); + + switch(dialogType) { + + case WYMeditor.DIALOG_LINK: + //ensure that we select the link to populate the fields + if(selected && selected.tagName && selected.tagName.toLowerCase != WYMeditor.A) + selected = jQuery(selected).parentsOrSelf(WYMeditor.A); + + //fix MSIE selection if link image has been clicked + if(!selected && wym._selected_image) + selected = jQuery(wym._selected_image).parentsOrSelf(WYMeditor.A); + break; + + } + + //pre-init functions + if(jQuery.isFunction(wym._options.preInitDialog)) + wym._options.preInitDialog(wym,window); + + //add css rules from options + var styles = doc.styleSheets[0]; + var aCss = eval(wym._options.dialogStyles); + + wym.addCssRules(doc, aCss); + + //auto populate fields if selected container (e.g. A) + if(selected) { + jQuery(wym._options.hrefSelector).val(jQuery(selected).attr(WYMeditor.HREF)); + jQuery(wym._options.srcSelector).val(jQuery(selected).attr(WYMeditor.SRC)); + jQuery(wym._options.titleSelector).val(jQuery(selected).attr(WYMeditor.TITLE)); + jQuery(wym._options.relSelector).val(jQuery(selected).attr(WYMeditor.REL)); + jQuery(wym._options.altSelector).val(jQuery(selected).attr(WYMeditor.ALT)); + } + + //auto populate image fields if selected image + if(wym._selected_image) { + jQuery(wym._options.dialogImageSelector + " " + wym._options.srcSelector) + .val(jQuery(wym._selected_image).attr(WYMeditor.SRC)); + jQuery(wym._options.dialogImageSelector + " " + wym._options.titleSelector) + .val(jQuery(wym._selected_image).attr(WYMeditor.TITLE)); + jQuery(wym._options.dialogImageSelector + " " + wym._options.altSelector) + .val(jQuery(wym._selected_image).attr(WYMeditor.ALT)); + } + + jQuery(wym._options.dialogLinkSelector + " " + + wym._options.submitSelector).submit(function() { + + var sUrl = jQuery(wym._options.hrefSelector).val(); + if(sUrl.length > 0) { + var link; + + if (selected[0] && selected[0].tagName.toLowerCase() == WYMeditor.A) { + link = selected; + } else { + wym._exec(WYMeditor.CREATE_LINK, sStamp); + link = jQuery("a[href=" + sStamp + "]", wym._doc.body); + } + + link.attr(WYMeditor.HREF, sUrl) + .attr(WYMeditor.TITLE, jQuery(wym._options.titleSelector).val()) + .attr(WYMeditor.REL, jQuery(wym._options.relSelector).val()); + + } + window.close(); + }); + + jQuery(wym._options.dialogImageSelector + " " + + wym._options.submitSelector).submit(function() { + + var sUrl = jQuery(wym._options.srcSelector).val(); + if(sUrl.length > 0) { + + wym._exec(WYMeditor.INSERT_IMAGE, sStamp); + + jQuery("img[src$=" + sStamp + "]", wym._doc.body) + .attr(WYMeditor.SRC, sUrl) + .attr(WYMeditor.TITLE, jQuery(wym._options.titleSelector).val()) + .attr(WYMeditor.ALT, jQuery(wym._options.altSelector).val()); + } + window.close(); + }); + + jQuery(wym._options.dialogTableSelector + " " + + wym._options.submitSelector).submit(function() { + + var iRows = jQuery(wym._options.rowsSelector).val(); + var iCols = jQuery(wym._options.colsSelector).val(); + + if(iRows > 0 && iCols > 0) { + + var table = wym._doc.createElement(WYMeditor.TABLE); + var newRow = null; + var newCol = null; + + var sCaption = jQuery(wym._options.captionSelector).val(); + + //we create the caption + var newCaption = table.createCaption(); + newCaption.innerHTML = sCaption; + + //we create the rows and cells + for(x=0; x<iRows; x++) { + newRow = table.insertRow(x); + for(y=0; y<iCols; y++) {newRow.insertCell(y);} + } + + //set the summary attr + jQuery(table).attr('summary', + jQuery(wym._options.summarySelector).val()); + + //append the table after the selected container + var node = jQuery(wym.findUp(wym.container(), + WYMeditor.MAIN_CONTAINERS)).get(0); + if(!node || !node.parentNode) jQuery(wym._doc.body).append(table); + else jQuery(node).after(table); + } + window.close(); + }); + + jQuery(wym._options.dialogPasteSelector + " " + + wym._options.submitSelector).submit(function() { + + var sText = jQuery(wym._options.textSelector).val(); + wym.paste(sText); + window.close(); + }); + + jQuery(wym._options.dialogPreviewSelector + " " + + wym._options.previewSelector) + .html(wym.xhtml()); + + //cancel button + jQuery(wym._options.cancelSelector).mousedown(function() { + window.close(); + }); + + //pre-init functions + if(jQuery.isFunction(wym._options.postInitDialog)) + wym._options.postInitDialog(wym,window); + +}; + +/********** XHTML LEXER/PARSER **********/ + +/* +* @name xml +* @description Use these methods to generate XML and XHTML compliant tags and +* escape tag attributes correctly +* @author Bermi Ferrer - http://bermi.org +* @author David Heinemeier Hansson http://loudthinking.com +*/ +WYMeditor.XmlHelper = function() +{ + this._entitiesDiv = document.createElement('div'); + return this; +}; + + +/* +* @name tag +* @description +* Returns an empty HTML tag of type *name* which by default is XHTML +* compliant. Setting *open* to true will create an open tag compatible +* with HTML 4.0 and below. Add HTML attributes by passing an attributes +* array to *options*. For attributes with no value like (disabled and +* readonly), give it a value of true in the *options* array. +* +* Examples: +* +* this.tag('br') +* # => <br /> +* this.tag ('br', false, true) +* # => <br> +* this.tag ('input', jQuery({type:'text',disabled:true }) ) +* # => <input type="text" disabled="disabled" /> +*/ +WYMeditor.XmlHelper.prototype.tag = function(name, options, open) +{ + options = options || false; + open = open || false; + return '<'+name+(options ? this.tagOptions(options) : '')+(open ? '>' : ' />'); +}; + +/* +* @name contentTag +* @description +* Returns a XML block tag of type *name* surrounding the *content*. Add +* XML attributes by passing an attributes array to *options*. For attributes +* with no value like (disabled and readonly), give it a value of true in +* the *options* array. You can use symbols or strings for the attribute names. +* +* this.contentTag ('p', 'Hello world!' ) +* # => <p>Hello world!</p> +* this.contentTag('div', this.contentTag('p', "Hello world!"), jQuery({class : "strong"})) +* # => <div class="strong"><p>Hello world!</p></div> +* this.contentTag("select", options, jQuery({multiple : true})) +* # => <select multiple="multiple">...options...</select> +*/ +WYMeditor.XmlHelper.prototype.contentTag = function(name, content, options) +{ + options = options || false; + return '<'+name+(options ? this.tagOptions(options) : '')+'>'+content+'</'+name+'>'; +}; + +/* +* @name cdataSection +* @description +* Returns a CDATA section for the given +content+. CDATA sections +* are used to escape blocks of text containing characters which would +* otherwise be recognized as markup. CDATA sections begin with the string +* <tt><![CDATA[</tt> and } with (and may not contain) the string +* <tt>]]></tt>. +*/ +WYMeditor.XmlHelper.prototype.cdataSection = function(content) +{ + return '<![CDATA['+content+']]>'; +}; + + +/* +* @name escapeOnce +* @description +* Returns the escaped +xml+ without affecting existing escaped entities. +* +* this.escapeOnce( "1 > 2 & 3") +* # => "1 > 2 & 3" +*/ +WYMeditor.XmlHelper.prototype.escapeOnce = function(xml) +{ + return this._fixDoubleEscape(this.escapeEntities(xml)); +}; + +/* +* @name _fixDoubleEscape +* @description +* Fix double-escaped entities, such as &amp;, &#123;, etc. +*/ +WYMeditor.XmlHelper.prototype._fixDoubleEscape = function(escaped) +{ + return escaped.replace(/&([a-z]+|(#\d+));/ig, "&$1;"); +}; + +/* +* @name tagOptions +* @description +* Takes an array like the one generated by Tag.parseAttributes +* [["src", "http://www.editam.com/?a=b&c=d&f=g"], ["title", "Editam, <Simplified> CMS"]] +* or an object like {src:"http://www.editam.com/?a=b&c=d&f=g", title:"Editam, <Simplified> CMS"} +* and returns a string properly escaped like +* ' src = "http://www.editam.com/?a=b&c=d&f=g" title = "Editam, <Simplified> CMS"' +* which is valid for strict XHTML +*/ +WYMeditor.XmlHelper.prototype.tagOptions = function(options) +{ + var xml = this; + xml._formated_options = ''; + + for (var key in options) { + var formated_options = ''; + var value = options[key]; + if(typeof value != 'function' && value.length > 0) { + + if(parseInt(key) == key && typeof value == 'object'){ + key = value.shift(); + value = value.pop(); + } + if(key != '' && value != ''){ + xml._formated_options += ' '+key+'="'+xml.escapeOnce(value)+'"'; + } + } + } + return xml._formated_options; +}; + +/* +* @name escapeEntities +* @description +* Escapes XML/HTML entities <, >, & and ". If seccond parameter is set to false it +* will not escape ". If set to true it will also escape ' +*/ +WYMeditor.XmlHelper.prototype.escapeEntities = function(string, escape_quotes) +{ + this._entitiesDiv.innerHTML = string; + this._entitiesDiv.textContent = string; + var result = this._entitiesDiv.innerHTML; + if(typeof escape_quotes == 'undefined'){ + if(escape_quotes != false) result = result.replace('"', '"'); + if(escape_quotes == true) result = result.replace('"', '''); + } + return result; +}; + +/* +* Parses a string conatining tag attributes and values an returns an array formated like +* [["src", "http://www.editam.com"], ["title", "Editam, Simplified CMS"]] +*/ +WYMeditor.XmlHelper.prototype.parseAttributes = function(tag_attributes) +{ + // Use a compounded regex to match single quoted, double quoted and unquoted attribute pairs + var result = []; + var matches = tag_attributes.split(/((=\s*")(")("))|((=\s*\')(\')(\'))|((=\s*[^>\s]*))/g); + if(matches.toString() != tag_attributes){ + for (var k in matches) { + var v = matches[k]; + if(typeof v != 'function' && v.length != 0){ + var re = new RegExp('(\\w+)\\s*'+v); + if(match = tag_attributes.match(re) ){ + var value = v.replace(/^[\s=]+/, ""); + var delimiter = value.charAt(0); + delimiter = delimiter == '"' ? '"' : (delimiter=="'"?"'":''); + if(delimiter != ''){ + value = delimiter == '"' ? value.replace(/^"|"+$/g, '') : value.replace(/^'|'+$/g, ''); + } + tag_attributes = tag_attributes.replace(match[0],''); + result.push([match[1] , value]); + } + } + } + } + return result; +}; + +/** +* XhtmlValidator for validating tag attributes +* +* @author Bermi Ferrer - http://bermi.org +*/ +WYMeditor.XhtmlValidator = { + "_attributes": + { + "core": + { + "except":[ + "base", + "head", + "html", + "meta", + "param", + "script", + "style", + "title" + ], + "attributes":[ + "class", + "id", + "style", + "title", + "accesskey", + "tabindex" + ] + }, + "language": + { + "except":[ + "base", + "br", + "hr", + "iframe", + "param", + "script" + ], + "attributes": + { + "dir":[ + "ltr", + "rtl" + ], + "0":"lang", + "1":"xml:lang" + } + }, + "keyboard": + { + "attributes": + { + "accesskey":/^(\w){1}$/, + "tabindex":/^(\d)+$/ + } + } + }, + "_events": + { + "window": + { + "only":[ + "body" + ], + "attributes":[ + "onload", + "onunload" + ] + }, + "form": + { + "only":[ + "form", + "input", + "textarea", + "select", + "a", + "label", + "button" + ], + "attributes":[ + "onchange", + "onsubmit", + "onreset", + "onselect", + "onblur", + "onfocus" + ] + }, + "keyboard": + { + "except":[ + "base", + "bdo", + "br", + "frame", + "frameset", + "head", + "html", + "iframe", + "meta", + "param", + "script", + "style", + "title" + ], + "attributes":[ + "onkeydown", + "onkeypress", + "onkeyup" + ] + }, + "mouse": + { + "except":[ + "base", + "bdo", + "br", + "head", + "html", + "meta", + "param", + "script", + "style", + "title" + ], + "attributes":[ + "onclick", + "ondblclick", + "onmousedown", + "onmousemove", + "onmouseover", + "onmouseout", + "onmouseup" + ] + } + }, + "_tags": + { + "a": + { + "attributes": + { + "0":"charset", + "1":"coords", + "2":"href", + "3":"hreflang", + "4":"name", + "5":"rel", + "6":"rev", + "shape":/^(rect|rectangle|circ|circle|poly|polygon)$/, + "7":"type" + } + }, + "0":"abbr", + "1":"acronym", + "2":"address", + "area": + { + "attributes": + { + "0":"alt", + "1":"coords", + "2":"href", + "nohref":/^(true|false)$/, + "shape":/^(rect|rectangle|circ|circle|poly|polygon)$/ + }, + "required":[ + "alt" + ] + }, + "3":"b", + "base": + { + "attributes":[ + "href" + ], + "required":[ + "href" + ] + }, + "bdo": + { + "attributes": + { + "dir":/^(ltr|rtl)$/ + }, + "required":[ + "dir" + ] + }, + "4":"big", + "blockquote": + { + "attributes":[ + "cite" + ] + }, + "5":"body", + "6":"br", + "button": + { + "attributes": + { + "disabled":/^(disabled)$/, + "type":/^(button|reset|submit)$/, + "0":"value" + }, + "inside":"form" + }, + "7":"caption", + "8":"cite", + "9":"code", + "col": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "span":/^(\d)+$/, + "valign":/^(top|middle|bottom|baseline)$/, + "2":"width" + }, + "inside":"colgroup" + }, + "colgroup": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "span":/^(\d)+$/, + "valign":/^(top|middle|bottom|baseline)$/, + "2":"width" + } + }, + "10":"dd", + "del": + { + "attributes": + { + "0":"cite", + "datetime":/^([0-9]){8}/ + } + }, + "11":"div", + "12":"dfn", + "13":"dl", + "14":"dt", + "15":"em", + "fieldset": + { + "inside":"form" + }, + "form": + { + "attributes": + { + "0":"action", + "1":"accept", + "2":"accept-charset", + "3":"enctype", + "method":/^(get|post)$/ + }, + "required":[ + "action" + ] + }, + "head": + { + "attributes":[ + "profile" + ] + }, + "16":"h1", + "17":"h2", + "18":"h3", + "19":"h4", + "20":"h5", + "21":"h6", + "22":"hr", + "html": + { + "attributes":[ + "xmlns" + ] + }, + "23":"i", + "img": + { + "attributes":[ + "alt", + "src", + "height", + "ismap", + "longdesc", + "usemap", + "width" + ], + "required":[ + "alt", + "src" + ] + }, + "input": + { + "attributes": + { + "0":"accept", + "1":"alt", + "checked":/^(checked)$/, + "disabled":/^(disabled)$/, + "maxlength":/^(\d)+$/, + "2":"name", + "readonly":/^(readonly)$/, + "size":/^(\d)+$/, + "3":"src", + "type":/^(button|checkbox|file|hidden|image|password|radio|reset|submit|text)$/, + "4":"value" + }, + "inside":"form" + }, + "ins": + { + "attributes": + { + "0":"cite", + "datetime":/^([0-9]){8}/ + } + }, + "24":"kbd", + "label": + { + "attributes":[ + "for" + ], + "inside":"form" + }, + "25":"legend", + "26":"li", + "link": + { + "attributes": + { + "0":"charset", + "1":"href", + "2":"hreflang", + "media":/^(all|braille|print|projection|screen|speech|,|;| )+$/i, + //next comment line required by Opera! + /*"rel":/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i,*/ + "rel":/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i, + "rev":/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i, + "3":"type" + }, + "inside":"head" + }, + "map": + { + "attributes":[ + "id", + "name" + ], + "required":[ + "id" + ] + }, + "meta": + { + "attributes": + { + "0":"content", + "http-equiv":/^(content\-type|expires|refresh|set\-cookie)$/i, + "1":"name", + "2":"scheme" + }, + "required":[ + "content" + ] + }, + "27":"noscript", + "object": + { + "attributes":[ + "archive", + "classid", + "codebase", + "codetype", + "data", + "declare", + "height", + "name", + "standby", + "type", + "usemap", + "width" + ] + }, + "28":"ol", + "optgroup": + { + "attributes": + { + "0":"label", + "disabled": /^(disabled)$/ + }, + "required":[ + "label" + ] + }, + "option": + { + "attributes": + { + "0":"label", + "disabled":/^(disabled)$/, + "selected":/^(selected)$/, + "1":"value" + }, + "inside":"select" + }, + "29":"p", + "param": + { + "attributes": + { + "0":"type", + "valuetype":/^(data|ref|object)$/, + "1":"valuetype", + "2":"value" + }, + "required":[ + "name" + ] + }, + "30":"pre", + "q": + { + "attributes":[ + "cite" + ] + }, + "31":"samp", + "script": + { + "attributes": + { + "type":/^(text\/ecmascript|text\/javascript|text\/jscript|text\/vbscript|text\/vbs|text\/xml)$/, + "0":"charset", + "defer":/^(defer)$/, + "1":"src" + }, + "required":[ + "type" + ] + }, + "select": + { + "attributes": + { + "disabled":/^(disabled)$/, + "multiple":/^(multiple)$/, + "0":"name", + "1":"size" + }, + "inside":"form" + }, + "32":"small", + "33":"span", + "34":"strong", + "style": + { + "attributes": + { + "0":"type", + "media":/^(screen|tty|tv|projection|handheld|print|braille|aural|all)$/ + }, + "required":[ + "type" + ] + }, + "35":"sub", + "36":"sup", + "table": + { + "attributes": + { + "0":"border", + "1":"cellpadding", + "2":"cellspacing", + "frame":/^(void|above|below|hsides|lhs|rhs|vsides|box|border)$/, + "rules":/^(none|groups|rows|cols|all)$/, + "3":"summary", + "4":"width" + } + }, + "tbody": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "td": + { + "attributes": + { + "0":"abbr", + "align":/^(left|right|center|justify|char)$/, + "1":"axis", + "2":"char", + "3":"charoff", + "colspan":/^(\d)+$/, + "4":"headers", + "rowspan":/^(\d)+$/, + "scope":/^(col|colgroup|row|rowgroup)$/, + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "textarea": + { + "attributes":[ + "cols", + "rows", + "disabled", + "name", + "readonly" + ], + "required":[ + "cols", + "rows" + ], + "inside":"form" + }, + "tfoot": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "valign":/^(top|middle|bottom)$/, + "2":"baseline" + } + }, + "th": + { + "attributes": + { + "0":"abbr", + "align":/^(left|right|center|justify|char)$/, + "1":"axis", + "2":"char", + "3":"charoff", + "colspan":/^(\d)+$/, + "4":"headers", + "rowspan":/^(\d)+$/, + "scope":/^(col|colgroup|row|rowgroup)$/, + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "thead": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "37":"title", + "tr": + { + "attributes": + { + "align":/^(right|left|center|justify|char)$/, + "0":"char", + "1":"charoff", + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "38":"tt", + "39":"ul", + "40":"var" + }, + + // Temporary skiped attributes + skiped_attributes : [], + skiped_attribute_values : [], + + getValidTagAttributes: function(tag, attributes) + { + var valid_attributes = {}; + var possible_attributes = this.getPossibleTagAttributes(tag); + for(var attribute in attributes) { + var value = attributes[attribute]; + var h = WYMeditor.Helper; + if(!h.contains(this.skiped_attributes, attribute) && !h.contains(this.skiped_attribute_values, value)){ + if (typeof value != 'function' && h.contains(possible_attributes, attribute)) { + if (this.doesAttributeNeedsValidation(tag, attribute)) { + if(this.validateAttribute(tag, attribute, value)){ + valid_attributes[attribute] = value; + } + }else{ + valid_attributes[attribute] = value; + } + } + } + } + return valid_attributes; + }, + getUniqueAttributesAndEventsForTag : function(tag) + { + var result = []; + + if (this._tags[tag] && this._tags[tag]['attributes']) { + for (k in this._tags[tag]['attributes']) { + result.push(parseInt(k) == k ? this._tags[tag]['attributes'][k] : k); + } + } + return result; + }, + getDefaultAttributesAndEventsForTags : function() + { + var result = []; + for (var key in this._events){ + result.push(this._events[key]); + } + for (var key in this._attributes){ + result.push(this._attributes[key]); + } + return result; + }, + isValidTag : function(tag) + { + if(this._tags[tag]){ + return true; + } + for(var key in this._tags){ + if(this._tags[key] == tag){ + return true; + } + } + return false; + }, + getDefaultAttributesAndEventsForTag : function(tag) + { + var default_attributes = []; + if (this.isValidTag(tag)) { + var default_attributes_and_events = this.getDefaultAttributesAndEventsForTags(); + + for(var key in default_attributes_and_events) { + var defaults = default_attributes_and_events[key]; + if(typeof defaults == 'object'){ + var h = WYMeditor.Helper; + if ((defaults['except'] && h.contains(defaults['except'], tag)) || (defaults['only'] && !h.contains(defaults['only'], tag))) { + continue; + } + + var tag_defaults = defaults['attributes'] ? defaults['attributes'] : defaults['events']; + for(var k in tag_defaults) { + default_attributes.push(typeof tag_defaults[k] != 'string' ? k : tag_defaults[k]); + } + } + } + } + return default_attributes; + }, + doesAttributeNeedsValidation: function(tag, attribute) + { + return this._tags[tag] && ((this._tags[tag]['attributes'] && this._tags[tag]['attributes'][attribute]) || (this._tags[tag]['required'] && + WYMeditor.Helper.contains(this._tags[tag]['required'], attribute))); + }, + validateAttribute : function(tag, attribute, value) + { + if ( this._tags[tag] && + (this._tags[tag]['attributes'] && this._tags[tag]['attributes'][attribute] && value.length > 0 && !value.match(this._tags[tag]['attributes'][attribute])) || // invalid format + (this._tags[tag] && this._tags[tag]['required'] && WYMeditor.Helper.contains(this._tags[tag]['required'], attribute) && value.length == 0) // required attribute + ) { + return false; + } + return typeof this._tags[tag] != 'undefined'; + }, + getPossibleTagAttributes : function(tag) + { + if (!this._possible_tag_attributes) { + this._possible_tag_attributes = {}; + } + if (!this._possible_tag_attributes[tag]) { + this._possible_tag_attributes[tag] = this.getUniqueAttributesAndEventsForTag(tag).concat(this.getDefaultAttributesAndEventsForTag(tag)); + } + return this._possible_tag_attributes[tag]; + } +}; + + +/** +* Compounded regular expression. Any of +* the contained patterns could match and +* when one does, it's label is returned. +* +* Constructor. Starts with no patterns. +* @param boolean case True for case sensitive, false +* for insensitive. +* @access public +* @author Marcus Baker (http://lastcraft.com) +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.ParallelRegex = function(case_sensitive) +{ + this._case = case_sensitive; + this._patterns = []; + this._labels = []; + this._regex = null; + return this; +}; + + +/** +* Adds a pattern with an optional label. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string label Label of regex to be returned +* on a match. +* @access public +*/ +WYMeditor.ParallelRegex.prototype.addPattern = function(pattern, label) +{ + label = label || true; + var count = this._patterns.length; + this._patterns[count] = pattern; + this._labels[count] = label; + this._regex = null; +}; + +/** +* Attempts to match all patterns at once against +* a string. +* @param string subject String to match against. +* +* @return boolean True on success. +* @return string match First matched portion of +* subject. +* @access public +*/ +WYMeditor.ParallelRegex.prototype.match = function(subject) +{ + if (this._patterns.length == 0) { + return [false, '']; + } + var matches = subject.match(this._getCompoundedRegex()); + + if(!matches){ + return [false, '']; + } + var match = matches[0]; + for (var i = 1; i < matches.length; i++) { + if (matches[i]) { + return [this._labels[i-1], match]; + } + } + return [true, matches[0]]; +}; + +/** +* Compounds the patterns into a single +* regular expression separated with the +* "or" operator. Caches the regex. +* Will automatically escape (, ) and / tokens. +* @param array patterns List of patterns in order. +* @access private +*/ +WYMeditor.ParallelRegex.prototype._getCompoundedRegex = function() +{ + if (this._regex == null) { + for (var i = 0, count = this._patterns.length; i < count; i++) { + this._patterns[i] = '(' + this._untokenizeRegex(this._tokenizeRegex(this._patterns[i]).replace(/([\/\(\)])/g,'\\$1')) + ')'; + } + this._regex = new RegExp(this._patterns.join("|") ,this._getPerlMatchingFlags()); + } + return this._regex; +}; + +/** +* Escape lookahead/lookbehind blocks +*/ +WYMeditor.ParallelRegex.prototype._tokenizeRegex = function(regex) +{ + return regex. + replace(/\(\?(i|m|s|x|U)\)/, '~~~~~~Tk1\$1~~~~~~'). + replace(/\(\?(\-[i|m|s|x|U])\)/, '~~~~~~Tk2\$1~~~~~~'). + replace(/\(\?\=(.*)\)/, '~~~~~~Tk3\$1~~~~~~'). + replace(/\(\?\!(.*)\)/, '~~~~~~Tk4\$1~~~~~~'). + replace(/\(\?\<\=(.*)\)/, '~~~~~~Tk5\$1~~~~~~'). + replace(/\(\?\<\!(.*)\)/, '~~~~~~Tk6\$1~~~~~~'). + replace(/\(\?\:(.*)\)/, '~~~~~~Tk7\$1~~~~~~'); +}; + +/** +* Unscape lookahead/lookbehind blocks +*/ +WYMeditor.ParallelRegex.prototype._untokenizeRegex = function(regex) +{ + return regex. + replace(/~~~~~~Tk1(.{1})~~~~~~/, "(?\$1)"). + replace(/~~~~~~Tk2(.{2})~~~~~~/, "(?\$1)"). + replace(/~~~~~~Tk3(.*)~~~~~~/, "(?=\$1)"). + replace(/~~~~~~Tk4(.*)~~~~~~/, "(?!\$1)"). + replace(/~~~~~~Tk5(.*)~~~~~~/, "(?<=\$1)"). + replace(/~~~~~~Tk6(.*)~~~~~~/, "(?<!\$1)"). + replace(/~~~~~~Tk7(.*)~~~~~~/, "(?:\$1)"); +}; + + +/** +* Accessor for perl regex mode flags to use. +* @return string Perl regex flags. +* @access private +*/ +WYMeditor.ParallelRegex.prototype._getPerlMatchingFlags = function() +{ + return (this._case ? "m" : "mi"); +}; + + + +/** +* States for a stack machine. +* +* Constructor. Starts in named state. +* @param string start Starting state name. +* @access public +* @author Marcus Baker (http://lastcraft.com) +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.StateStack = function(start) +{ + this._stack = [start]; + return this; +}; + +/** +* Accessor for current state. +* @return string State. +* @access public +*/ +WYMeditor.StateStack.prototype.getCurrent = function() +{ + return this._stack[this._stack.length - 1]; +}; + +/** +* Adds a state to the stack and sets it +* to be the current state. +* @param string state New state. +* @access public +*/ +WYMeditor.StateStack.prototype.enter = function(state) +{ + this._stack.push(state); +}; + +/** +* Leaves the current state and reverts +* to the previous one. +* @return boolean False if we drop off +* the bottom of the list. +* @access public +*/ +WYMeditor.StateStack.prototype.leave = function() +{ + if (this._stack.length == 1) { + return false; + } + this._stack.pop(); + return true; +}; + + +// GLOBALS +WYMeditor.LEXER_ENTER = 1; +WYMeditor.LEXER_MATCHED = 2; +WYMeditor.LEXER_UNMATCHED = 3; +WYMeditor.LEXER_EXIT = 4; +WYMeditor.LEXER_SPECIAL = 5; + + +/** +* Accepts text and breaks it into tokens. +* Some optimisation to make the sure the +* content is only scanned by the PHP regex +* parser once. Lexer modes must not start +* with leading underscores. +* +* Sets up the lexer in case insensitive matching +* by default. +* @param Parser parser Handling strategy by reference. +* @param string start Starting handler. +* @param boolean case True for case sensitive. +* @access public +* @author Marcus Baker (http://lastcraft.com) +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.Lexer = function(parser, start, case_sensitive) +{ + start = start || 'accept'; + this._case = case_sensitive || false; + this._regexes = {}; + this._parser = parser; + this._mode = new WYMeditor.StateStack(start); + this._mode_handlers = {}; + this._mode_handlers[start] = start; + return this; +}; + +/** +* Adds a token search pattern for a particular +* parsing mode. The pattern does not change the +* current mode. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string mode Should only apply this +* pattern when dealing with +* this type of input. +* @access public +*/ +WYMeditor.Lexer.prototype.addPattern = function(pattern, mode) +{ + var mode = mode || "accept"; + if (typeof this._regexes[mode] == 'undefined') { + this._regexes[mode] = new WYMeditor.ParallelRegex(this._case); + } + this._regexes[mode].addPattern(pattern); + if (typeof this._mode_handlers[mode] == 'undefined') { + this._mode_handlers[mode] = mode; + } +}; + +/** +* Adds a pattern that will enter a new parsing +* mode. Useful for entering parenthesis, strings, +* tags, etc. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string mode Should only apply this +* pattern when dealing with +* this type of input. +* @param string new_mode Change parsing to this new +* nested mode. +* @access public +*/ +WYMeditor.Lexer.prototype.addEntryPattern = function(pattern, mode, new_mode) +{ + if (typeof this._regexes[mode] == 'undefined') { + this._regexes[mode] = new WYMeditor.ParallelRegex(this._case); + } + this._regexes[mode].addPattern(pattern, new_mode); + if (typeof this._mode_handlers[new_mode] == 'undefined') { + this._mode_handlers[new_mode] = new_mode; + } +}; + +/** +* Adds a pattern that will exit the current mode +* and re-enter the previous one. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string mode Mode to leave. +* @access public +*/ +WYMeditor.Lexer.prototype.addExitPattern = function(pattern, mode) +{ + if (typeof this._regexes[mode] == 'undefined') { + this._regexes[mode] = new WYMeditor.ParallelRegex(this._case); + } + this._regexes[mode].addPattern(pattern, "__exit"); + if (typeof this._mode_handlers[mode] == 'undefined') { + this._mode_handlers[mode] = mode; + } +}; + +/** +* Adds a pattern that has a special mode. Acts as an entry +* and exit pattern in one go, effectively calling a special +* parser handler for this token only. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string mode Should only apply this +* pattern when dealing with +* this type of input. +* @param string special Use this mode for this one token. +* @access public +*/ +WYMeditor.Lexer.prototype.addSpecialPattern = function(pattern, mode, special) +{ + if (typeof this._regexes[mode] == 'undefined') { + this._regexes[mode] = new WYMeditor.ParallelRegex(this._case); + } + this._regexes[mode].addPattern(pattern, '_'+special); + if (typeof this._mode_handlers[special] == 'undefined') { + this._mode_handlers[special] = special; + } +}; + +/** +* Adds a mapping from a mode to another handler. +* @param string mode Mode to be remapped. +* @param string handler New target handler. +* @access public +*/ +WYMeditor.Lexer.prototype.mapHandler = function(mode, handler) +{ + this._mode_handlers[mode] = handler; +}; + +/** +* Splits the page text into tokens. Will fail +* if the handlers report an error or if no +* content is consumed. If successful then each +* unparsed and parsed token invokes a call to the +* held listener. +* @param string raw Raw HTML text. +* @return boolean True on success, else false. +* @access public +*/ +WYMeditor.Lexer.prototype.parse = function(raw) +{ + if (typeof this._parser == 'undefined') { + return false; + } + + var length = raw.length; + var parsed; + while (typeof (parsed = this._reduce(raw)) == 'object') { + var raw = parsed[0]; + var unmatched = parsed[1]; + var matched = parsed[2]; + var mode = parsed[3]; + + if (! this._dispatchTokens(unmatched, matched, mode)) { + return false; + } + + if (raw == '') { + return true; + } + if (raw.length == length) { + return false; + } + length = raw.length; + } + if (! parsed ) { + return false; + } + + return this._invokeParser(raw, WYMeditor.LEXER_UNMATCHED); +}; + +/** +* Sends the matched token and any leading unmatched +* text to the parser changing the lexer to a new +* mode if one is listed. +* @param string unmatched Unmatched leading portion. +* @param string matched Actual token match. +* @param string mode Mode after match. A boolean +* false mode causes no change. +* @return boolean False if there was any error +* from the parser. +* @access private +*/ +WYMeditor.Lexer.prototype._dispatchTokens = function(unmatched, matched, mode) +{ + mode = mode || false; + + if (! this._invokeParser(unmatched, WYMeditor.LEXER_UNMATCHED)) { + return false; + } + + if (typeof mode == 'boolean') { + return this._invokeParser(matched, WYMeditor.LEXER_MATCHED); + } + if (this._isModeEnd(mode)) { + if (! this._invokeParser(matched, WYMeditor.LEXER_EXIT)) { + return false; + } + return this._mode.leave(); + } + if (this._isSpecialMode(mode)) { + this._mode.enter(this._decodeSpecial(mode)); + if (! this._invokeParser(matched, WYMeditor.LEXER_SPECIAL)) { + return false; + } + return this._mode.leave(); + } + this._mode.enter(mode); + + return this._invokeParser(matched, WYMeditor.LEXER_ENTER); +}; + +/** +* Tests to see if the new mode is actually to leave +* the current mode and pop an item from the matching +* mode stack. +* @param string mode Mode to test. +* @return boolean True if this is the exit mode. +* @access private +*/ +WYMeditor.Lexer.prototype._isModeEnd = function(mode) +{ + return (mode === "__exit"); +}; + +/** +* Test to see if the mode is one where this mode +* is entered for this token only and automatically +* leaves immediately afterwoods. +* @param string mode Mode to test. +* @return boolean True if this is the exit mode. +* @access private +*/ +WYMeditor.Lexer.prototype._isSpecialMode = function(mode) +{ + return (mode.substring(0,1) == "_"); +}; + +/** +* Strips the magic underscore marking single token +* modes. +* @param string mode Mode to decode. +* @return string Underlying mode name. +* @access private +*/ +WYMeditor.Lexer.prototype._decodeSpecial = function(mode) +{ + return mode.substring(1); +}; + +/** +* Calls the parser method named after the current +* mode. Empty content will be ignored. The lexer +* has a parser handler for each mode in the lexer. +* @param string content Text parsed. +* @param boolean is_match Token is recognised rather +* than unparsed data. +* @access private +*/ +WYMeditor.Lexer.prototype._invokeParser = function(content, is_match) +{ + + if (content === '') { + return true; + } + var current = this._mode.getCurrent(); + var handler = this._mode_handlers[current]; + var result; + eval('result = this._parser.' + handler + '(content, is_match);'); + return result; +}; + +/** +* Tries to match a chunk of text and if successful +* removes the recognised chunk and any leading +* unparsed data. Empty strings will not be matched. +* @param string raw The subject to parse. This is the +* content that will be eaten. +* @return array/boolean Three item list of unparsed +* content followed by the +* recognised token and finally the +* action the parser is to take. +* True if no match, false if there +* is a parsing error. +* @access private +*/ +WYMeditor.Lexer.prototype._reduce = function(raw) +{ + var matched = this._regexes[this._mode.getCurrent()].match(raw); + var match = matched[1]; + var action = matched[0]; + if (action) { + var unparsed_character_count = raw.indexOf(match); + var unparsed = raw.substr(0, unparsed_character_count); + raw = raw.substring(unparsed_character_count + match.length); + return [raw, unparsed, match, action]; + } + return true; +}; + + + +/** +* This are the rules for breaking the XHTML code into events +* handled by the provided parser. +* +* @author Marcus Baker (http://lastcraft.com) +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.XhtmlLexer = function(parser) +{ + jQuery.extend(this, new WYMeditor.Lexer(parser, 'Text')); + + this.mapHandler('Text', 'Text'); + + this.addTokens(); + + this.init(); + + return this; +}; + + +WYMeditor.XhtmlLexer.prototype.init = function() +{ +}; + +WYMeditor.XhtmlLexer.prototype.addTokens = function() +{ + this.addCommentTokens('Text'); + this.addScriptTokens('Text'); + this.addCssTokens('Text'); + this.addTagTokens('Text'); +}; + +WYMeditor.XhtmlLexer.prototype.addCommentTokens = function(scope) +{ + this.addEntryPattern("<!--", scope, 'Comment'); + this.addExitPattern("-->", 'Comment'); +}; + +WYMeditor.XhtmlLexer.prototype.addScriptTokens = function(scope) +{ + this.addEntryPattern("<script", scope, 'Script'); + this.addExitPattern("</script>", 'Script'); +}; + +WYMeditor.XhtmlLexer.prototype.addCssTokens = function(scope) +{ + this.addEntryPattern("<style", scope, 'Css'); + this.addExitPattern("</style>", 'Css'); +}; + +WYMeditor.XhtmlLexer.prototype.addTagTokens = function(scope) +{ + this.addSpecialPattern("<\\s*[a-z0-9:\-]+\\s*>", scope, 'OpeningTag'); + this.addEntryPattern("<[a-z0-9:\-]+"+'[\\\/ \\\>]+', scope, 'OpeningTag'); + this.addInTagDeclarationTokens('OpeningTag'); + + this.addSpecialPattern("</\\s*[a-z0-9:\-]+\\s*>", scope, 'ClosingTag'); + +}; + +WYMeditor.XhtmlLexer.prototype.addInTagDeclarationTokens = function(scope) +{ + this.addSpecialPattern('\\s+', scope, 'Ignore'); + + this.addAttributeTokens(scope); + + this.addExitPattern('/>', scope); + this.addExitPattern('>', scope); + +}; + +WYMeditor.XhtmlLexer.prototype.addAttributeTokens = function(scope) +{ + this.addSpecialPattern("\\s*[a-z-_0-9]*:?[a-z-_0-9]+\\s*(?=\=)\\s*", scope, 'TagAttributes'); + + this.addEntryPattern('=\\s*"', scope, 'DoubleQuotedAttribute'); + this.addPattern("\\\\\"", 'DoubleQuotedAttribute'); + this.addExitPattern('"', 'DoubleQuotedAttribute'); + + this.addEntryPattern("=\\s*'", scope, 'SingleQuotedAttribute'); + this.addPattern("\\\\'", 'SingleQuotedAttribute'); + this.addExitPattern("'", 'SingleQuotedAttribute'); + + this.addSpecialPattern('=\\s*[^>\\s]*', scope, 'UnquotedAttribute'); +}; + + + +/** +* XHTML Parser. +* +* This XHTML parser will trigger the events available on on +* current SaxListener +* +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.XhtmlParser = function(Listener, mode) +{ + var mode = mode || 'Text'; + this._Lexer = new WYMeditor.XhtmlLexer(this); + this._Listener = Listener; + this._mode = mode; + this._matches = []; + this._last_match = ''; + this._current_match = ''; + + return this; +}; + +WYMeditor.XhtmlParser.prototype.parse = function(raw) +{ + this._Lexer.parse(this.beforeParsing(raw)); + return this.afterParsing(this._Listener.getResult()); +}; + +WYMeditor.XhtmlParser.prototype.beforeParsing = function(raw) +{ + if(raw.match(/class="MsoNormal"/) || raw.match(/ns = "urn:schemas-microsoft-com/)){ + // Usefull for cleaning up content pasted from other sources (MSWord) + this._Listener.avoidStylingTagsAndAttributes(); + } + return this._Listener.beforeParsing(raw); +}; + +WYMeditor.XhtmlParser.prototype.afterParsing = function(parsed) +{ + if(this._Listener._avoiding_tags_implicitly){ + this._Listener.allowStylingTagsAndAttributes(); + } + return this._Listener.afterParsing(parsed); +}; + + +WYMeditor.XhtmlParser.prototype.Ignore = function(match, state) +{ + return true; +}; + +WYMeditor.XhtmlParser.prototype.Text = function(text) +{ + this._Listener.addContent(text); + return true; +}; + +WYMeditor.XhtmlParser.prototype.Comment = function(match, status) +{ + return this._addNonTagBlock(match, status, 'addComment'); +}; + +WYMeditor.XhtmlParser.prototype.Script = function(match, status) +{ + return this._addNonTagBlock(match, status, 'addScript'); +}; + +WYMeditor.XhtmlParser.prototype.Css = function(match, status) +{ + return this._addNonTagBlock(match, status, 'addCss'); +}; + +WYMeditor.XhtmlParser.prototype._addNonTagBlock = function(match, state, type) +{ + switch (state){ + case WYMeditor.LEXER_ENTER: + this._non_tag = match; + break; + case WYMeditor.LEXER_UNMATCHED: + this._non_tag += match; + break; + case WYMeditor.LEXER_EXIT: + switch(type) { + case 'addComment': + this._Listener.addComment(this._non_tag+match); + break; + case 'addScript': + this._Listener.addScript(this._non_tag+match); + break; + case 'addCss': + this._Listener.addCss(this._non_tag+match); + break; + } + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.OpeningTag = function(match, state) +{ + switch (state){ + case WYMeditor.LEXER_ENTER: + this._tag = this.normalizeTag(match); + this._tag_attributes = {}; + break; + case WYMeditor.LEXER_SPECIAL: + this._callOpenTagListener(this.normalizeTag(match)); + break; + case WYMeditor.LEXER_EXIT: + this._callOpenTagListener(this._tag, this._tag_attributes); + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.ClosingTag = function(match, state) +{ + this._callCloseTagListener(this.normalizeTag(match)); + return true; +}; + +WYMeditor.XhtmlParser.prototype._callOpenTagListener = function(tag, attributes) +{ + var attributes = attributes || {}; + this.autoCloseUnclosedBeforeNewOpening(tag); + + if(this._Listener.isBlockTag(tag)){ + this._Listener._tag_stack.push(tag); + this._Listener.fixNestingBeforeOpeningBlockTag(tag, attributes); + this._Listener.openBlockTag(tag, attributes); + this._increaseOpenTagCounter(tag); + }else if(this._Listener.isInlineTag(tag)){ + this._Listener.inlineTag(tag, attributes); + }else{ + this._Listener.openUnknownTag(tag, attributes); + this._increaseOpenTagCounter(tag); + } + this._Listener.last_tag = tag; + this._Listener.last_tag_opened = true; + this._Listener.last_tag_attributes = attributes; +}; + +WYMeditor.XhtmlParser.prototype._callCloseTagListener = function(tag) +{ + if(this._decreaseOpenTagCounter(tag)){ + this.autoCloseUnclosedBeforeTagClosing(tag); + + if(this._Listener.isBlockTag(tag)){ + var expected_tag = this._Listener._tag_stack.pop(); + if(expected_tag == false){ + return; + }else if(expected_tag != tag){ + tag = expected_tag; + } + this._Listener.closeBlockTag(tag); + }else{ + this._Listener.closeUnknownTag(tag); + } + }else{ + this._Listener.closeUnopenedTag(tag); + } + this._Listener.last_tag = tag; + this._Listener.last_tag_opened = false; +}; + +WYMeditor.XhtmlParser.prototype._increaseOpenTagCounter = function(tag) +{ + this._Listener._open_tags[tag] = this._Listener._open_tags[tag] || 0; + this._Listener._open_tags[tag]++; +}; + +WYMeditor.XhtmlParser.prototype._decreaseOpenTagCounter = function(tag) +{ + if(this._Listener._open_tags[tag]){ + this._Listener._open_tags[tag]--; + if(this._Listener._open_tags[tag] == 0){ + this._Listener._open_tags[tag] = undefined; + } + return true; + } + return false; +}; + +WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeNewOpening = function(new_tag) +{ + this._autoCloseUnclosed(new_tag, false); +}; + +WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeTagClosing = function(tag) +{ + this._autoCloseUnclosed(tag, true); +}; + +WYMeditor.XhtmlParser.prototype._autoCloseUnclosed = function(new_tag, closing) +{ + var closing = closing || false; + if(this._Listener._open_tags){ + for (var tag in this._Listener._open_tags) { + var counter = this._Listener._open_tags[tag]; + if(counter > 0 && this._Listener.shouldCloseTagAutomatically(tag, new_tag, closing)){ + this._callCloseTagListener(tag, true); + } + } + } +}; + +WYMeditor.XhtmlParser.prototype.getTagReplacements = function() +{ + return this._Listener.getTagReplacements(); +}; + +WYMeditor.XhtmlParser.prototype.normalizeTag = function(tag) +{ + tag = tag.replace(/^([\s<\/>]*)|([\s<\/>]*)$/gm,'').toLowerCase(); + var tags = this._Listener.getTagReplacements(); + if(tags[tag]){ + return tags[tag]; + } + return tag; +}; + +WYMeditor.XhtmlParser.prototype.TagAttributes = function(match, state) +{ + if(WYMeditor.LEXER_SPECIAL == state){ + this._current_attribute = match; + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.DoubleQuotedAttribute = function(match, state) +{ + if(WYMeditor.LEXER_UNMATCHED == state){ + this._tag_attributes[this._current_attribute] = match; + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.SingleQuotedAttribute = function(match, state) +{ + if(WYMeditor.LEXER_UNMATCHED == state){ + this._tag_attributes[this._current_attribute] = match; + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.UnquotedAttribute = function(match, state) +{ + this._tag_attributes[this._current_attribute] = match.replace(/^=/,''); + return true; +}; + + + +/** +* XHTML Sax parser. +* +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.XhtmlSaxListener = function() +{ + this.output = ''; + this.helper = new WYMeditor.XmlHelper(); + this._open_tags = {}; + this.validator = WYMeditor.XhtmlValidator; + this._tag_stack = []; + this.avoided_tags = []; + + this.entities = { + ' ':' ','¡':'¡','¢':'¢', + '£':'£','¤':'¤','¥':'¥', + '¦':'¦','§':'§','¨':'¨', + '©':'©','ª':'ª','«':'«', + '¬':'¬','­':'­','®':'®', + '¯':'¯','°':'°','±':'±', + '²':'²','³':'³','´':'´', + 'µ':'µ','¶':'¶','·':'·', + '¸':'¸','¹':'¹','º':'º', + '»':'»','¼':'¼','½':'½', + '¾':'¾','¿':'¿','À':'À', + 'Á':'Á','Â':'Â','Ã':'Ã', + 'Ä':'Ä','Å':'Å','Æ':'Æ', + 'Ç':'Ç','È':'È','É':'É', + 'Ê':'Ê','Ë':'Ë','Ì':'Ì', + 'Í':'Í','Î':'Î','Ï':'Ï', + 'Ð':'Ð','Ñ':'Ñ','Ò':'Ò', + 'Ó':'Ó','Ô':'Ô','Õ':'Õ', + 'Ö':'Ö','×':'×','Ø':'Ø', + 'Ù':'Ù','Ú':'Ú','Û':'Û', + 'Ü':'Ü','Ý':'Ý','Þ':'Þ', + 'ß':'ß','à':'à','á':'á', + 'â':'â','ã':'ã','ä':'ä', + 'å':'å','æ':'æ','ç':'ç', + 'è':'è','é':'é','ê':'ê', + 'ë':'ë','ì':'ì','í':'í', + 'î':'î','ï':'ï','ð':'ð', + 'ñ':'ñ','ò':'ò','ó':'ó', + 'ô':'ô','õ':'õ','ö':'ö', + '÷':'÷','ø':'ø','ù':'ù', + 'ú':'ú','û':'û','ü':'ü', + 'ý':'ý','þ':'þ','ÿ':'ÿ', + 'Œ':'Œ','œ':'œ','Š':'Š', + 'š':'š','Ÿ':'Ÿ','ƒ':'ƒ', + 'ˆ':'ˆ','˜':'˜','Α':'Α', + 'Β':'Β','Γ':'Γ','Δ':'Δ', + 'Ε':'Ε','Ζ':'Ζ','Η':'Η', + 'Θ':'Θ','Ι':'Ι','Κ':'Κ', + 'Λ':'Λ','Μ':'Μ','Ν':'Ν', + 'Ξ':'Ξ','Ο':'Ο','Π':'Π', + 'Ρ':'Ρ','Σ':'Σ','Τ':'Τ', + 'Υ':'Υ','Φ':'Φ','Χ':'Χ', + 'Ψ':'Ψ','Ω':'Ω','α':'α', + 'β':'β','γ':'γ','δ':'δ', + 'ε':'ε','ζ':'ζ','η':'η', + 'θ':'θ','ι':'ι','κ':'κ', + 'λ':'λ','μ':'μ','ν':'ν', + 'ξ':'ξ','ο':'ο','π':'π', + 'ρ':'ρ','ς':'ς','σ':'σ', + 'τ':'τ','υ':'υ','φ':'φ', + 'χ':'χ','ψ':'ψ','ω':'ω', + 'ϑ':'ϑ','ϒ':'ϒ','ϖ':'ϖ', + ' ':' ',' ':' ',' ':' ', + '‌':'‌','‍':'‍','‎':'‎', + '‏':'‏','–':'–','—':'—', + '‘':'‘','’':'’','‚':'‚', + '“':'“','”':'”','„':'„', + '†':'†','‡':'‡','•':'•', + '…':'…','‰':'‰','′':'′', + '″':'″','‹':'‹','›':'›', + '‾':'‾','⁄':'⁄','€':'€', + 'ℑ':'ℑ','℘':'℘','ℜ':'ℜ', + '™':'™','ℵ':'ℵ','←':'←', + '↑':'↑','→':'→','↓':'↓', + '↔':'↔','↵':'↵','⇐':'⇐', + '⇑':'⇑','⇒':'⇒','⇓':'⇓', + '⇔':'⇔','∀':'∀','∂':'∂', + '∃':'∃','∅':'∅','∇':'∇', + '∈':'∈','∉':'∉','∋':'∋', + '∏':'∏','∑':'∑','−':'−', + '∗':'∗','√':'√','∝':'∝', + '∞':'∞','∠':'∠','∧':'∧', + '∨':'∨','∩':'∩','∪':'∪', + '∫':'∫','∴':'∴','∼':'∼', + '≅':'≅','≈':'≈','≠':'≠', + '≡':'≡','≤':'≤','≥':'≥', + '⊂':'⊂','⊃':'⊃','⊄':'⊄', + '⊆':'⊆','⊇':'⊇','⊕':'⊕', + '⊗':'⊗','⊥':'⊥','⋅':'⋅', + '⌈':'⌈','⌉':'⌉','⌊':'⌊', + '⌋':'⌋','⟨':'〈','⟩':'〉', + '◊':'◊','♠':'♠','♣':'♣', + '♥':'♥','♦':'♦'}; + + this.block_tags = ["a", "abbr", "acronym", "address", "area", "b", + "base", "bdo", "big", "blockquote", "body", "button", + "caption", "cite", "code", "col", "colgroup", "dd", "del", "div", + "dfn", "dl", "dt", "em", "fieldset", "form", "head", "h1", "h2", + "h3", "h4", "h5", "h6", "html", "i", "ins", + "kbd", "label", "legend", "li", "map", "noscript", + "object", "ol", "optgroup", "option", "p", "param", "pre", "q", + "samp", "script", "select", "small", "span", "strong", "style", + "sub", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", + "thead", "title", "tr", "tt", "ul", "var", "extends"]; + + + this.inline_tags = ["br", "hr", "img", "input"]; + + return this; +}; + +WYMeditor.XhtmlSaxListener.prototype.shouldCloseTagAutomatically = function(tag, now_on_tag, closing) +{ + var closing = closing || false; + if(tag == 'td'){ + if((closing && now_on_tag == 'tr') || (!closing && now_on_tag == 'td')){ + return true; + } + } + if(tag == 'option'){ + if((closing && now_on_tag == 'select') || (!closing && now_on_tag == 'option')){ + return true; + } + } + return false; +}; + +WYMeditor.XhtmlSaxListener.prototype.beforeParsing = function(raw) +{ + this.output = ''; + return raw; +}; + +WYMeditor.XhtmlSaxListener.prototype.afterParsing = function(xhtml) +{ + xhtml = this.replaceNamedEntities(xhtml); + xhtml = this.joinRepeatedEntities(xhtml); + xhtml = this.removeEmptyTags(xhtml); + xhtml = this.removeBrInPre(xhtml); + return xhtml; +}; + +WYMeditor.XhtmlSaxListener.prototype.replaceNamedEntities = function(xhtml) +{ + for (var entity in this.entities) { + xhtml = xhtml.replace(new RegExp(entity, 'g'), this.entities[entity]); + } + return xhtml; +}; + +WYMeditor.XhtmlSaxListener.prototype.joinRepeatedEntities = function(xhtml) +{ + var tags = 'em|strong|sub|sup|acronym|pre|del|address'; + return xhtml.replace(new RegExp('<\/('+tags+')><\\1>' ,''),''). + replace(new RegExp('(\s*<('+tags+')>\s*){2}(.*)(\s*<\/\\2>\s*){2}' ,''),'<\$2>\$3<\$2>'); +}; + +WYMeditor.XhtmlSaxListener.prototype.removeEmptyTags = function(xhtml) +{ + return xhtml.replace(new RegExp('<('+this.block_tags.join("|").replace(/\|td/,'').replace(/\|th/, '')+')>(<br \/>| | |\\s)*<\/\\1>' ,'g'),''); +}; + +WYMeditor.XhtmlSaxListener.prototype.removeBrInPre = function(xhtml) +{ + var matches = xhtml.match(new RegExp('<pre[^>]*>(.*?)<\/pre>','gmi')); + if(matches) { + for(var i=0; i<matches.length; i++) { + xhtml = xhtml.replace(matches[i], matches[i].replace(new RegExp('<br \/>', 'g'), String.fromCharCode(13,10))); + } + } + return xhtml; +}; + +WYMeditor.XhtmlSaxListener.prototype.getResult = function() +{ + return this.output; +}; + +WYMeditor.XhtmlSaxListener.prototype.getTagReplacements = function() +{ + return {'b':'strong', 'i':'em'}; +}; + +WYMeditor.XhtmlSaxListener.prototype.addContent = function(text) +{ + this.output += text; +}; + +WYMeditor.XhtmlSaxListener.prototype.addComment = function(text) +{ + if(this.remove_comments){ + this.output += text; + } +}; + +WYMeditor.XhtmlSaxListener.prototype.addScript = function(text) +{ + if(!this.remove_scripts){ + this.output += text; + } +}; + +WYMeditor.XhtmlSaxListener.prototype.addCss = function(text) +{ + if(!this.remove_embeded_styles){ + this.output += text; + } +}; + +WYMeditor.XhtmlSaxListener.prototype.openBlockTag = function(tag, attributes) +{ + this.output += this.helper.tag(tag, this.validator.getValidTagAttributes(tag, attributes), true); +}; + +WYMeditor.XhtmlSaxListener.prototype.inlineTag = function(tag, attributes) +{ + this.output += this.helper.tag(tag, this.validator.getValidTagAttributes(tag, attributes)); +}; + +WYMeditor.XhtmlSaxListener.prototype.openUnknownTag = function(tag, attributes) +{ + //this.output += this.helper.tag(tag, attributes, true); +}; + +WYMeditor.XhtmlSaxListener.prototype.closeBlockTag = function(tag) +{ + this.output = this.output.replace(/<br \/>$/, '')+this._getClosingTagContent('before', tag)+"</"+tag+">"+this._getClosingTagContent('after', tag); +}; + +WYMeditor.XhtmlSaxListener.prototype.closeUnknownTag = function(tag) +{ + //this.output += "</"+tag+">"; +}; + +WYMeditor.XhtmlSaxListener.prototype.closeUnopenedTag = function(tag) +{ + this.output += "</"+tag+">"; +}; + +WYMeditor.XhtmlSaxListener.prototype.avoidStylingTagsAndAttributes = function() +{ + this.avoided_tags = ['div','span']; + this.validator.skiped_attributes = ['style']; + this.validator.skiped_attribute_values = ['MsoNormal','main1']; // MS Word attributes for class + this._avoiding_tags_implicitly = true; +}; + +WYMeditor.XhtmlSaxListener.prototype.allowStylingTagsAndAttributes = function() +{ + this.avoided_tags = []; + this.validator.skiped_attributes = []; + this.validator.skiped_attribute_values = []; + this._avoiding_tags_implicitly = false; +}; + +WYMeditor.XhtmlSaxListener.prototype.isBlockTag = function(tag) +{ + return !WYMeditor.Helper.contains(this.avoided_tags, tag) && WYMeditor.Helper.contains(this.block_tags, tag); +}; + +WYMeditor.XhtmlSaxListener.prototype.isInlineTag = function(tag) +{ + return !WYMeditor.Helper.contains(this.avoided_tags, tag) && WYMeditor.Helper.contains(this.inline_tags, tag); +}; + +WYMeditor.XhtmlSaxListener.prototype.insertContentAfterClosingTag = function(tag, content) +{ + this._insertContentWhenClosingTag('after', tag, content); +}; + +WYMeditor.XhtmlSaxListener.prototype.insertContentBeforeClosingTag = function(tag, content) +{ + this._insertContentWhenClosingTag('before', tag, content); +}; + +WYMeditor.XhtmlSaxListener.prototype.fixNestingBeforeOpeningBlockTag = function(tag, attributes) +{ + if(tag != 'li' && (tag == 'ul' || tag == 'ol') && this.last_tag && !this.last_tag_opened && this.last_tag == 'li'){ + this.output = this.output.replace(/<\/li>$/, ''); + this.insertContentAfterClosingTag(tag, '</li>'); + } +}; + +WYMeditor.XhtmlSaxListener.prototype._insertContentWhenClosingTag = function(position, tag, content) +{ + if(!this['_insert_'+position+'_closing']){ + this['_insert_'+position+'_closing'] = []; + } + if(!this['_insert_'+position+'_closing'][tag]){ + this['_insert_'+position+'_closing'][tag] = []; + } + this['_insert_'+position+'_closing'][tag].push(content); +}; + +WYMeditor.XhtmlSaxListener.prototype._getClosingTagContent = function(position, tag) +{ + if( this['_insert_'+position+'_closing'] && + this['_insert_'+position+'_closing'][tag] && + this['_insert_'+position+'_closing'][tag].length > 0){ + return this['_insert_'+position+'_closing'][tag].pop(); + } + return ''; +}; + + +/********** CSS PARSER **********/ + + +WYMeditor.WymCssLexer = function(parser, only_wym_blocks) +{ + var only_wym_blocks = (typeof only_wym_blocks == 'undefined' ? true : only_wym_blocks); + + jQuery.extend(this, new WYMeditor.Lexer(parser, (only_wym_blocks?'Ignore':'WymCss'))); + + this.mapHandler('WymCss', 'Ignore'); + + if(only_wym_blocks == true){ + this.addEntryPattern("/\\\x2a[<\\s]*WYMeditor[>\\s]*\\\x2a/", 'Ignore', 'WymCss'); + this.addExitPattern("/\\\x2a[<\/\\s]*WYMeditor[>\\s]*\\\x2a/", 'WymCss'); + } + + this.addSpecialPattern("[\\sa-z1-6]*\\\x2e[a-z-_0-9]+", 'WymCss', 'WymCssStyleDeclaration'); + + this.addEntryPattern("/\\\x2a", 'WymCss', 'WymCssComment'); + this.addExitPattern("\\\x2a/", 'WymCssComment'); + + this.addEntryPattern("\x7b", 'WymCss', 'WymCssStyle'); + this.addExitPattern("\x7d", 'WymCssStyle'); + + this.addEntryPattern("/\\\x2a", 'WymCssStyle', 'WymCssFeedbackStyle'); + this.addExitPattern("\\\x2a/", 'WymCssFeedbackStyle'); + + return this; +}; + +WYMeditor.WymCssParser = function() +{ + this._in_style = false; + this._has_title = false; + this.only_wym_blocks = true; + this.css_settings = {'classesItems':[], 'editorStyles':[], 'dialogStyles':[]}; + return this; +}; + +WYMeditor.WymCssParser.prototype.parse = function(raw, only_wym_blocks) +{ + var only_wym_blocks = (typeof only_wym_blocks == 'undefined' ? this.only_wym_blocks : only_wym_blocks); + this._Lexer = new WYMeditor.WymCssLexer(this, only_wym_blocks); + this._Lexer.parse(raw); +}; + +WYMeditor.WymCssParser.prototype.Ignore = function(match, state) +{ + return true; +}; + +WYMeditor.WymCssParser.prototype.WymCssComment = function(text, status) +{ + if(text.match(/end[a-z0-9\s]*wym[a-z0-9\s]*/mi)){ + return false; + } + if(status == WYMeditor.LEXER_UNMATCHED){ + if(!this._in_style){ + this._has_title = true; + this._current_item = {'title':WYMeditor.Helper.trim(text)}; + }else{ + if(this._current_item[this._current_element]){ + if(!this._current_item[this._current_element].expressions){ + this._current_item[this._current_element].expressions = [text]; + }else{ + this._current_item[this._current_element].expressions.push(text); + } + } + } + this._in_style = true; + } + return true; +}; + +WYMeditor.WymCssParser.prototype.WymCssStyle = function(match, status) +{ + if(status == WYMeditor.LEXER_UNMATCHED){ + match = WYMeditor.Helper.trim(match); + if(match != ''){ + this._current_item[this._current_element].style = match; + } + }else if (status == WYMeditor.LEXER_EXIT){ + this._in_style = false; + this._has_title = false; + this.addStyleSetting(this._current_item); + } + return true; +}; + +WYMeditor.WymCssParser.prototype.WymCssFeedbackStyle = function(match, status) +{ + if(status == WYMeditor.LEXER_UNMATCHED){ + this._current_item[this._current_element].feedback_style = match.replace(/^([\s\/\*]*)|([\s\/\*]*)$/gm,''); + } + return true; +}; + +WYMeditor.WymCssParser.prototype.WymCssStyleDeclaration = function(match) +{ + match = match.replace(/^([\s\.]*)|([\s\.*]*)$/gm, ''); + + var tag = ''; + if(match.indexOf('.') > 0){ + var parts = match.split('.'); + this._current_element = parts[1]; + var tag = parts[0]; + }else{ + this._current_element = match; + } + + if(!this._has_title){ + this._current_item = {'title':(!tag?'':tag.toUpperCase()+': ')+this._current_element}; + this._has_title = true; + } + + if(!this._current_item[this._current_element]){ + this._current_item[this._current_element] = {'name':this._current_element}; + } + if(tag){ + if(!this._current_item[this._current_element].tags){ + this._current_item[this._current_element].tags = [tag]; + }else{ + this._current_item[this._current_element].tags.push(tag); + } + } + return true; +}; + +WYMeditor.WymCssParser.prototype.addStyleSetting = function(style_details) +{ + for (var name in style_details){ + var details = style_details[name]; + if(typeof details == 'object' && name != 'title'){ + + this.css_settings.classesItems.push({ + 'name': WYMeditor.Helper.trim(details.name), + 'title': style_details.title, + 'expr' : WYMeditor.Helper.trim((details.expressions||details.tags).join(', ')) + }); + if(details.feedback_style){ + this.css_settings.editorStyles.push({ + 'name': '.'+ WYMeditor.Helper.trim(details.name), + 'css': details.feedback_style + }); + } + if(details.style){ + this.css_settings.dialogStyles.push({ + 'name': '.'+ WYMeditor.Helper.trim(details.name), + 'css': details.style + }); + } + } + } +}; + +/********** HELPERS **********/ + +// Returns true if it is a text node with whitespaces only +jQuery.fn.isPhantomNode = function() { + if (this[0].nodeType == 3) + return !(/[^\t\n\r ]/.test(this[0].data)); + + return false; +}; + +WYMeditor.isPhantomNode = function(n) { + if (n.nodeType == 3) + return !(/[^\t\n\r ]/.test(n.data)); + + return false; +}; + +WYMeditor.isPhantomString = function(str) { + return !(/[^\t\n\r ]/.test(str)); +}; + +// Returns the Parents or the node itself +// jqexpr = a jQuery expression +jQuery.fn.parentsOrSelf = function(jqexpr) { + var n = this; + + if (n[0].nodeType == 3) + n = n.parents().slice(0,1); + +// if (n.is(jqexpr)) // XXX should work, but doesn't (probably a jQuery bug) + if (n.filter(jqexpr).size() == 1) + return n; + else + return n.parents(jqexpr).slice(0,1); +}; + +// String & array helpers + +WYMeditor.Helper = { + + //replace all instances of 'old' by 'rep' in 'str' string + replaceAll: function(str, old, rep) { + var rExp = new RegExp(old, "g"); + return(str.replace(rExp, rep)); + }, + + //insert 'inserted' at position 'pos' in 'str' string + insertAt: function(str, inserted, pos) { + return(str.substr(0,pos) + inserted + str.substring(pos)); + }, + + //trim 'str' string + trim: function(str) { + return str.replace(/^(\s*)|(\s*)$/gm,''); + }, + + //return true if 'arr' array contains 'elem', or false + contains: function(arr, elem) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] === elem) return true; + } + return false; + }, + + //return 'item' position in 'arr' array, or -1 + indexOf: function(arr, item) { + var ret=-1; + for(var i = 0; i < arr.length; i++) { + if (arr[i] == item) { + ret = i; + break; + } + } + return(ret); + }, + + //return 'item' object in 'arr' array, checking its 'name' property, or null + findByName: function(arr, name) { + for(var i = 0; i < arr.length; i++) { + var item = arr[i]; + if(item.name == name) return(item); + } + return(null); + } +}; + + diff --git a/studio/static/js/wymeditor/jquery.wymeditor.min.js b/studio/static/js/wymeditor/jquery.wymeditor.min.js new file mode 100644 index 0000000..b57a18e --- /dev/null +++ b/studio/static/js/wymeditor/jquery.wymeditor.min.js @@ -0,0 +1 @@ +if(!WYMeditor){var WYMeditor={}}(function(){if(!window.console||!console.firebug){var b=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];WYMeditor.console={};for(var a=0;a<b.length;++a){WYMeditor.console[b[a]]=function(){}}}else{WYMeditor.console=window.console}})();jQuery.extend(WYMeditor,{VERSION:"0.5-rc1",INSTANCES:[],STRINGS:[],SKINS:[],NAME:"name",INDEX:"{Wym_Index}",WYM_INDEX:"wym_index",BASE_PATH:"{Wym_Base_Path}",CSS_PATH:"{Wym_Css_Path}",WYM_PATH:"{Wym_Wym_Path}",SKINS_DEFAULT_PATH:"skins/",SKINS_DEFAULT_CSS:"skin.css",SKINS_DEFAULT_JS:"skin.js",LANG_DEFAULT_PATH:"lang/",IFRAME_BASE_PATH:"{Wym_Iframe_Base_Path}",IFRAME_DEFAULT:"iframe/default/",JQUERY_PATH:"{Wym_Jquery_Path}",DIRECTION:"{Wym_Direction}",LOGO:"{Wym_Logo}",TOOLS:"{Wym_Tools}",TOOLS_ITEMS:"{Wym_Tools_Items}",TOOL_NAME:"{Wym_Tool_Name}",TOOL_TITLE:"{Wym_Tool_Title}",TOOL_CLASS:"{Wym_Tool_Class}",CLASSES:"{Wym_Classes}",CLASSES_ITEMS:"{Wym_Classes_Items}",CLASS_NAME:"{Wym_Class_Name}",CLASS_TITLE:"{Wym_Class_Title}",CONTAINERS:"{Wym_Containers}",CONTAINERS_ITEMS:"{Wym_Containers_Items}",CONTAINER_NAME:"{Wym_Container_Name}",CONTAINER_TITLE:"{Wym_Containers_Title}",CONTAINER_CLASS:"{Wym_Container_Class}",HTML:"{Wym_Html}",IFRAME:"{Wym_Iframe}",STATUS:"{Wym_Status}",DIALOG_TITLE:"{Wym_Dialog_Title}",DIALOG_BODY:"{Wym_Dialog_Body}",STRING:"string",BODY:"body",DIV:"div",P:"p",H1:"h1",H2:"h2",H3:"h3",H4:"h4",H5:"h5",H6:"h6",PRE:"pre",BLOCKQUOTE:"blockquote",A:"a",BR:"br",IMG:"img",TABLE:"table",TD:"td",TH:"th",UL:"ul",OL:"ol",LI:"li",CLASS:"class",HREF:"href",SRC:"src",TITLE:"title",REL:"rel",ALT:"alt",DIALOG_LINK:"Link",DIALOG_IMAGE:"Image",DIALOG_TABLE:"Table",DIALOG_PASTE:"Paste_From_Word",BOLD:"Bold",ITALIC:"Italic",CREATE_LINK:"CreateLink",INSERT_IMAGE:"InsertImage",INSERT_TABLE:"InsertTable",INSERT_HTML:"InsertHTML",PASTE:"Paste",INDENT:"Indent",OUTDENT:"Outdent",TOGGLE_HTML:"ToggleHtml",FORMAT_BLOCK:"FormatBlock",PREVIEW:"Preview",UNLINK:"Unlink",INSERT_UNORDEREDLIST:"InsertUnorderedList",INSERT_ORDEREDLIST:"InsertOrderedList",MAIN_CONTAINERS:new Array("p","h1","h2","h3","h4","h5","h6","pre","blockquote"),BLOCKS:new Array("address","blockquote","div","dl","fieldset","form","h1","h2","h3","h4","h5","h6","hr","noscript","ol","p","pre","table","ul","dd","dt","li","tbody","td","tfoot","th","thead","tr"),KEY:{BACKSPACE:8,ENTER:13,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,CURSOR:new Array(37,38,39,40),DELETE:46},NODE:{ELEMENT:1,ATTRIBUTE:2,TEXT:3},editor:function(b,a){this._index=WYMeditor.INSTANCES.push(this)-1;this._element=b;this._options=a;this._html=jQuery(b).val();if(this._options.html){this._html=this._options.html}this._options.basePath=this._options.basePath||this.computeBasePath();this._options.skinPath=this._options.skinPath||this._options.basePath+WYMeditor.SKINS_DEFAULT_PATH+this._options.skin+"/";this._options.wymPath=this._options.wymPath||this.computeWymPath();this._options.langPath=this._options.langPath||this._options.basePath+WYMeditor.LANG_DEFAULT_PATH;this._options.iframeBasePath=this._options.iframeBasePath||this._options.basePath+WYMeditor.IFRAME_DEFAULT;this._options.jQueryPath=this._options.jQueryPath||this.computeJqueryPath();this.init()}});jQuery.fn.wymeditor=function(a){a=jQuery.extend({html:"",basePath:false,skinPath:false,wymPath:false,iframeBasePath:false,jQueryPath:false,styles:false,stylesheet:false,skin:"default",initSkin:true,loadSkin:true,lang:"en",direction:"ltr",boxHtml:"<div class='wym_box'><div class='wym_area_top'>"+WYMeditor.TOOLS+"</div><div class='wym_area_left'></div><div class='wym_area_right'>"+WYMeditor.CONTAINERS+WYMeditor.CLASSES+"</div><div class='wym_area_main'>"+WYMeditor.HTML+WYMeditor.IFRAME+WYMeditor.STATUS+"</div><div class='wym_area_bottom'>"+WYMeditor.LOGO+"</div></div>",logoHtml:"<a class='wym_wymeditor_link' href='http://www.wymeditor.org/'>WYMeditor</a>",iframeHtml:"<div class='wym_iframe wym_section'><iframe src='"+WYMeditor.IFRAME_BASE_PATH+"wymiframe.html' onload='this.contentWindow.parent.WYMeditor.INSTANCES["+WYMeditor.INDEX+"].initIframe(this)'></iframe></div>",editorStyles:[],toolsHtml:"<div class='wym_tools wym_section'><h2>{Tools}</h2><ul>"+WYMeditor.TOOLS_ITEMS+"</ul></div>",toolsItemHtml:"<li class='"+WYMeditor.TOOL_CLASS+"'><a href='#' name='"+WYMeditor.TOOL_NAME+"' title='"+WYMeditor.TOOL_TITLE+"'>"+WYMeditor.TOOL_TITLE+"</a></li>",toolsItems:[{name:"Bold",title:"Strong",css:"wym_tools_strong"},{name:"Italic",title:"Emphasis",css:"wym_tools_emphasis"},{name:"Superscript",title:"Superscript",css:"wym_tools_superscript"},{name:"Subscript",title:"Subscript",css:"wym_tools_subscript"},{name:"InsertOrderedList",title:"Ordered_List",css:"wym_tools_ordered_list"},{name:"InsertUnorderedList",title:"Unordered_List",css:"wym_tools_unordered_list"},{name:"Indent",title:"Indent",css:"wym_tools_indent"},{name:"Outdent",title:"Outdent",css:"wym_tools_outdent"},{name:"Undo",title:"Undo",css:"wym_tools_undo"},{name:"Redo",title:"Redo",css:"wym_tools_redo"},{name:"CreateLink",title:"Link",css:"wym_tools_link"},{name:"Unlink",title:"Unlink",css:"wym_tools_unlink"},{name:"InsertImage",title:"Image",css:"wym_tools_image"},{name:"InsertTable",title:"Table",css:"wym_tools_table"},{name:"Paste",title:"Paste_From_Word",css:"wym_tools_paste"},{name:"ToggleHtml",title:"HTML",css:"wym_tools_html"},{name:"Preview",title:"Preview",css:"wym_tools_preview"}],containersHtml:"<div class='wym_containers wym_section'><h2>{Containers}</h2><ul>"+WYMeditor.CONTAINERS_ITEMS+"</ul></div>",containersItemHtml:"<li class='"+WYMeditor.CONTAINER_CLASS+"'><a href='#' name='"+WYMeditor.CONTAINER_NAME+"'>"+WYMeditor.CONTAINER_TITLE+"</a></li>",containersItems:[{name:"P",title:"Paragraph",css:"wym_containers_p"},{name:"H1",title:"Heading_1",css:"wym_containers_h1"},{name:"H2",title:"Heading_2",css:"wym_containers_h2"},{name:"H3",title:"Heading_3",css:"wym_containers_h3"},{name:"H4",title:"Heading_4",css:"wym_containers_h4"},{name:"H5",title:"Heading_5",css:"wym_containers_h5"},{name:"H6",title:"Heading_6",css:"wym_containers_h6"},{name:"PRE",title:"Preformatted",css:"wym_containers_pre"},{name:"BLOCKQUOTE",title:"Blockquote",css:"wym_containers_blockquote"},{name:"TH",title:"Table_Header",css:"wym_containers_th"}],classesHtml:"<div class='wym_classes wym_section'><h2>{Classes}</h2><ul>"+WYMeditor.CLASSES_ITEMS+"</ul></div>",classesItemHtml:"<li class='wym_classes_"+WYMeditor.CLASS_NAME+"'><a href='#' name='"+WYMeditor.CLASS_NAME+"'>"+WYMeditor.CLASS_TITLE+"</a></li>",classesItems:[],statusHtml:"<div class='wym_status wym_section'><h2>{Status}</h2></div>",htmlHtml:"<div class='wym_html wym_section'><h2>{Source_Code}</h2><textarea class='wym_html_val'></textarea></div>",boxSelector:".wym_box",toolsSelector:".wym_tools",toolsListSelector:" ul",containersSelector:".wym_containers",classesSelector:".wym_classes",htmlSelector:".wym_html",iframeSelector:".wym_iframe iframe",iframeBodySelector:".wym_iframe",statusSelector:".wym_status",toolSelector:".wym_tools a",containerSelector:".wym_containers a",classSelector:".wym_classes a",htmlValSelector:".wym_html_val",hrefSelector:".wym_href",srcSelector:".wym_src",titleSelector:".wym_title",relSelector:".wym_rel",altSelector:".wym_alt",textSelector:".wym_text",rowsSelector:".wym_rows",colsSelector:".wym_cols",captionSelector:".wym_caption",summarySelector:".wym_summary",submitSelector:"form",cancelSelector:".wym_cancel",previewSelector:"",dialogTypeSelector:".wym_dialog_type",dialogLinkSelector:".wym_dialog_link",dialogImageSelector:".wym_dialog_image",dialogTableSelector:".wym_dialog_table",dialogPasteSelector:".wym_dialog_paste",dialogPreviewSelector:".wym_dialog_preview",updateSelector:".wymupdate",updateEvent:"click",dialogFeatures:"menubar=no,titlebar=no,toolbar=no,resizable=no,width=560,height=300,top=0,left=0",dialogFeaturesPreview:"menubar=no,titlebar=no,toolbar=no,resizable=no,scrollbars=yes,width=560,height=300,top=0,left=0",dialogHtml:"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'><html dir='"+WYMeditor.DIRECTION+"'><head><link rel='stylesheet' type='text/css' media='screen' href='"+WYMeditor.CSS_PATH+"' /><title>"+WYMeditor.DIALOG_TITLE+"</title><script type='text/javascript' src='"+WYMeditor.JQUERY_PATH+"'><\/script><script type='text/javascript' src='"+WYMeditor.WYM_PATH+"'><\/script></head>"+WYMeditor.DIALOG_BODY+"</html>",dialogLinkHtml:"<body class='wym_dialog wym_dialog_link' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'><form><fieldset><input type='hidden' class='wym_dialog_type' value='"+WYMeditor.DIALOG_LINK+"' /><legend>{Link}</legend><div class='row'><label>{URL}</label><input type='text' class='wym_href' value='' size='40' /></div><div class='row'><label>{Title}</label><input type='text' class='wym_title' value='' size='40' /></div><div class='row'><label>{Relationship}</label><input type='text' class='wym_rel' value='' size='40' /></div><div class='row row-indent'><input class='wym_submit' type='submit' value='{Submit}' /><input class='wym_cancel' type='button'value='{Cancel}' /></div></fieldset></form></body>",dialogImageHtml:"<body class='wym_dialog wym_dialog_image' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'><form><fieldset><input type='hidden' class='wym_dialog_type' value='"+WYMeditor.DIALOG_IMAGE+"' /><legend>{Image}</legend><div class='row'><label>{URL}</label><input type='text' class='wym_src' value='' size='40' /></div><div class='row'><label>{Alternative_Text}</label><input type='text' class='wym_alt' value='' size='40' /></div><div class='row'><label>{Title}</label><input type='text' class='wym_title' value='' size='40' /></div><div class='row row-indent'><input class='wym_submit' type='submit' value='{Submit}' /><input class='wym_cancel' type='button'value='{Cancel}' /></div></fieldset></form></body>",dialogTableHtml:"<body class='wym_dialog wym_dialog_table' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'><form><fieldset><input type='hidden' class='wym_dialog_type' value='"+WYMeditor.DIALOG_TABLE+"' /><legend>{Table}</legend><div class='row'><label>{Caption}</label><input type='text' class='wym_caption' value='' size='40' /></div><div class='row'><label>{Summary}</label><input type='text' class='wym_summary' value='' size='40' /></div><div class='row'><label>{Number_Of_Rows}</label><input type='text' class='wym_rows' value='3' size='3' /></div><div class='row'><label>{Number_Of_Cols}</label><input type='text' class='wym_cols' value='2' size='3' /></div><div class='row row-indent'><input class='wym_submit' type='submit' value='{Submit}' /><input class='wym_cancel' type='button'value='{Cancel}' /></div></fieldset></form></body>",dialogPasteHtml:"<body class='wym_dialog wym_dialog_paste' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'><form><input type='hidden' class='wym_dialog_type' value='"+WYMeditor.DIALOG_PASTE+"' /><fieldset><legend>{Paste_From_Word}</legend><div class='row'><textarea class='wym_text' rows='10' cols='50'></textarea></div><div class='row'><input class='wym_submit' type='submit' value='{Submit}' /><input class='wym_cancel' type='button'value='{Cancel}' /></div></fieldset></form></body>",dialogPreviewHtml:"<body class='wym_dialog wym_dialog_preview' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'></body>",dialogStyles:[],stringDelimiterLeft:"{",stringDelimiterRight:"}",preInit:null,preBind:null,postInit:null,preInitDialog:null,postInitDialog:null},a);return this.each(function(){new WYMeditor.editor(jQuery(this),a)})};jQuery.extend({wymeditors:function(a){return(WYMeditor.INSTANCES[a])}});WYMeditor.editor.prototype.init=function(){if(jQuery.browser.msie){var WymClass=new WYMeditor.WymClassExplorer(this)}else{if(jQuery.browser.mozilla){var WymClass=new WYMeditor.WymClassMozilla(this)}else{if(jQuery.browser.opera){var WymClass=new WYMeditor.WymClassOpera(this)}else{if(jQuery.browser.safari){var WymClass=new WYMeditor.WymClassSafari(this)}}}}if(WymClass){if(jQuery.isFunction(this._options.preInit)){this._options.preInit(this)}var SaxListener=new WYMeditor.XhtmlSaxListener();jQuery.extend(SaxListener,WymClass);this.parser=new WYMeditor.XhtmlParser(SaxListener);if(this._options.styles||this._options.stylesheet){this.configureEditorUsingRawCss()}this.helper=new WYMeditor.XmlHelper();for(var prop in WymClass){this[prop]=WymClass[prop]}this._box=jQuery(this._element).hide().after(this._options.boxHtml).next().addClass("wym_box_"+this._index);if(jQuery.isFunction(jQuery.fn.data)){jQuery.data(this._box.get(0),WYMeditor.WYM_INDEX,this._index);jQuery.data(this._element.get(0),WYMeditor.WYM_INDEX,this._index)}var h=WYMeditor.Helper;var iframeHtml=this._options.iframeHtml;iframeHtml=h.replaceAll(iframeHtml,WYMeditor.INDEX,this._index);iframeHtml=h.replaceAll(iframeHtml,WYMeditor.IFRAME_BASE_PATH,this._options.iframeBasePath);var boxHtml=jQuery(this._box).html();boxHtml=h.replaceAll(boxHtml,WYMeditor.LOGO,this._options.logoHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.TOOLS,this._options.toolsHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.CONTAINERS,this._options.containersHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.CLASSES,this._options.classesHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.HTML,this._options.htmlHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.IFRAME,iframeHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.STATUS,this._options.statusHtml);var aTools=eval(this._options.toolsItems);var sTools="";for(var i=0;i<aTools.length;i++){var oTool=aTools[i];if(oTool.name&&oTool.title){var sTool=this._options.toolsItemHtml}var sTool=h.replaceAll(sTool,WYMeditor.TOOL_NAME,oTool.name);sTool=h.replaceAll(sTool,WYMeditor.TOOL_TITLE,this._options.stringDelimiterLeft+oTool.title+this._options.stringDelimiterRight);sTool=h.replaceAll(sTool,WYMeditor.TOOL_CLASS,oTool.css);sTools+=sTool}boxHtml=h.replaceAll(boxHtml,WYMeditor.TOOLS_ITEMS,sTools);var aClasses=eval(this._options.classesItems);var sClasses="";for(var i=0;i<aClasses.length;i++){var oClass=aClasses[i];if(oClass.name&&oClass.title){var sClass=this._options.classesItemHtml}sClass=h.replaceAll(sClass,WYMeditor.CLASS_NAME,oClass.name);sClass=h.replaceAll(sClass,WYMeditor.CLASS_TITLE,oClass.title);sClasses+=sClass}boxHtml=h.replaceAll(boxHtml,WYMeditor.CLASSES_ITEMS,sClasses);var aContainers=eval(this._options.containersItems);var sContainers="";for(var i=0;i<aContainers.length;i++){var oContainer=aContainers[i];if(oContainer.name&&oContainer.title){var sContainer=this._options.containersItemHtml}sContainer=h.replaceAll(sContainer,WYMeditor.CONTAINER_NAME,oContainer.name);sContainer=h.replaceAll(sContainer,WYMeditor.CONTAINER_TITLE,this._options.stringDelimiterLeft+oContainer.title+this._options.stringDelimiterRight);sContainer=h.replaceAll(sContainer,WYMeditor.CONTAINER_CLASS,oContainer.css);sContainers+=sContainer}boxHtml=h.replaceAll(boxHtml,WYMeditor.CONTAINERS_ITEMS,sContainers);boxHtml=this.replaceStrings(boxHtml);jQuery(this._box).html(boxHtml);jQuery(this._box).find(this._options.htmlSelector).hide();this.loadSkin()}};WYMeditor.editor.prototype.bindEvents=function(){var wym=this;jQuery(this._box).find(this._options.toolSelector).click(function(){wym._iframe.contentWindow.focus();wym.exec(jQuery(this).attr(WYMeditor.NAME));return(false)});jQuery(this._box).find(this._options.containerSelector).click(function(){wym.container(jQuery(this).attr(WYMeditor.NAME));return(false)});jQuery(this._box).find(this._options.htmlValSelector).keyup(function(){jQuery(wym._doc.body).html(jQuery(this).val())}).focus(function(){jQuery(this).toggleClass("hasfocus")}).blur(function(){jQuery(this).toggleClass("hasfocus")});jQuery(this._box).find(this._options.classSelector).click(function(){var aClasses=eval(wym._options.classesItems);var sName=jQuery(this).attr(WYMeditor.NAME);var oClass=WYMeditor.Helper.findByName(aClasses,sName);if(oClass){var jqexpr=oClass.expr;wym.toggleClass(sName,jqexpr)}wym._iframe.contentWindow.focus();return(false)});jQuery(this._options.updateSelector).bind(this._options.updateEvent,function(){wym.update()})};WYMeditor.editor.prototype.ready=function(){return(this._doc!=null)};WYMeditor.editor.prototype.box=function(){return(this._box)};WYMeditor.editor.prototype.html=function(a){if(typeof a==="string"){jQuery(this._doc.body).html(a)}else{return(jQuery(this._doc.body).html())}};WYMeditor.editor.prototype.xhtml=function(){return this.parser.parse(this.html())};WYMeditor.editor.prototype.exec=function(b){switch(b){case WYMeditor.CREATE_LINK:var a=this.container();if(a||this._selected_image){this.dialog(WYMeditor.DIALOG_LINK)}break;case WYMeditor.INSERT_IMAGE:this.dialog(WYMeditor.DIALOG_IMAGE);break;case WYMeditor.INSERT_TABLE:this.dialog(WYMeditor.DIALOG_TABLE);break;case WYMeditor.PASTE:this.dialog(WYMeditor.DIALOG_PASTE);break;case WYMeditor.TOGGLE_HTML:this.update();this.toggleHtml();break;case WYMeditor.PREVIEW:this.dialog(WYMeditor.PREVIEW,this._options.dialogFeaturesPreview);break;default:this._exec(b);break}};WYMeditor.editor.prototype.container=function(a){if(a){var d=null;if(a.toLowerCase()==WYMeditor.TH){d=this.container();switch(d.tagName.toLowerCase()){case WYMeditor.TD:case WYMeditor.TH:break;default:var e=new Array(WYMeditor.TD,WYMeditor.TH);d=this.findUp(this.container(),e);break}if(d!=null){a=(d.tagName.toLowerCase()==WYMeditor.TD)?WYMeditor.TH:WYMeditor.TD;this.switchTo(d,a);this.update()}}else{var e=new Array(WYMeditor.P,WYMeditor.H1,WYMeditor.H2,WYMeditor.H3,WYMeditor.H4,WYMeditor.H5,WYMeditor.H6,WYMeditor.PRE,WYMeditor.BLOCKQUOTE);d=this.findUp(this.container(),e);if(d){var i=null;if(a.toLowerCase()==WYMeditor.BLOCKQUOTE){var f=this.findUp(this.container(),WYMeditor.BLOCKQUOTE);if(f==null){i=this._doc.createElement(a);d.parentNode.insertBefore(i,d);i.appendChild(d);this.setFocusToNode(i.firstChild)}else{var c=f.childNodes;var g=c.length;var b=null;if(g>0){b=c.item(0)}for(var h=0;h<g;h++){f.parentNode.insertBefore(c.item(0),f)}f.parentNode.removeChild(f);if(b){this.setFocusToNode(b)}}}else{this.switchTo(d,a)}this.update()}}}else{return(this.selected())}};WYMeditor.editor.prototype.toggleClass=function(c,b){var a=(this._selected_image?this._selected_image:jQuery(this.selected()));a=jQuery(a).parentsOrSelf(b);jQuery(a).toggleClass(c);if(!jQuery(a).attr(WYMeditor.CLASS)){jQuery(a).removeAttr(this._class)}};WYMeditor.editor.prototype.findUp=function(d,c){if(d){var e=d.tagName.toLowerCase();if(typeof(c)==WYMeditor.STRING){while(e!=c&&e!=WYMeditor.BODY){d=d.parentNode;e=d.tagName.toLowerCase()}}else{var b=false;while(!b&&e!=WYMeditor.BODY){for(var a=0;a<c.length;a++){if(e==c[a]){b=true;break}}if(!b){d=d.parentNode;e=d.tagName.toLowerCase()}}}if(e!=WYMeditor.BODY){return(d)}else{return(null)}}else{return(null)}};WYMeditor.editor.prototype.switchTo=function(c,d){var b=this._doc.createElement(d);var a=jQuery(c).html();c.parentNode.replaceChild(b,c);jQuery(b).html(a);this.setFocusToNode(b)};WYMeditor.editor.prototype.replaceStrings=function(sVal){if(!WYMeditor.STRINGS[this._options.lang]){try{eval(jQuery.ajax({url:this._options.langPath+this._options.lang+".js",async:false}).responseText)}catch(e){WYMeditor.console.error("WYMeditor: error while parsing language file.");return sVal}}for(var key in WYMeditor.STRINGS[this._options.lang]){sVal=WYMeditor.Helper.replaceAll(sVal,this._options.stringDelimiterLeft+key+this._options.stringDelimiterRight,WYMeditor.STRINGS[this._options.lang][key])}return(sVal)};WYMeditor.editor.prototype.encloseString=function(a){return(this._options.stringDelimiterLeft+a+this._options.stringDelimiterRight)};WYMeditor.editor.prototype.status=function(a){jQuery(this._box).find(this._options.statusSelector).html(a)};WYMeditor.editor.prototype.update=function(){var a;jQuery(this._doc.body).children(WYMeditor.BR).remove();a=this.xhtml();jQuery(this._element).val(a);jQuery(this._box).find(this._options.htmlValSelector).not(".hasfocus").val(a)};WYMeditor.editor.prototype.dialog=function(j,c,f){var a=c||this._wym._options.dialogFeatures;var d=window.open("","dialog",a);if(d){var b="";switch(j){case (WYMeditor.DIALOG_LINK):b=this._options.dialogLinkHtml;break;case (WYMeditor.DIALOG_IMAGE):b=this._options.dialogImageHtml;break;case (WYMeditor.DIALOG_TABLE):b=this._options.dialogTableHtml;break;case (WYMeditor.DIALOG_PASTE):b=this._options.dialogPasteHtml;break;case (WYMeditor.PREVIEW):b=this._options.dialogPreviewHtml;break;default:b=f}var e=WYMeditor.Helper;var g=this._options.dialogHtml;g=e.replaceAll(g,WYMeditor.BASE_PATH,this._options.basePath);g=e.replaceAll(g,WYMeditor.DIRECTION,this._options.direction);g=e.replaceAll(g,WYMeditor.CSS_PATH,this._options.skinPath+WYMeditor.SKINS_DEFAULT_CSS);g=e.replaceAll(g,WYMeditor.WYM_PATH,this._options.wymPath);g=e.replaceAll(g,WYMeditor.JQUERY_PATH,this._options.jQueryPath);g=e.replaceAll(g,WYMeditor.DIALOG_TITLE,this.encloseString(j));g=e.replaceAll(g,WYMeditor.DIALOG_BODY,b);g=e.replaceAll(g,WYMeditor.INDEX,this._index);g=this.replaceStrings(g);var i=d.document;i.write(g);i.close()}};WYMeditor.editor.prototype.toggleHtml=function(){jQuery(this._box).find(this._options.htmlSelector).toggle()};WYMeditor.editor.prototype.uniqueStamp=function(){var a=new Date();return("wym-"+a.getTime())};WYMeditor.editor.prototype.paste=function(g){var b=this.selected(),d="",e,f;e=g.split(new RegExp(this._newLine+"{2,}","g"));for(var c=0,a=e.length;c<a;c++){d+="<p>"+(e[c].split(this._newLine).join("<br />"))+"</p>"}if(b&&b.tagName.toLowerCase()!=WYMeditor.BODY){e=jQuery(d,this._doc).insertAfter(b);f=e[e.length-1]}else{e=jQuery(d,this._doc).appendTo(this._doc.body);f=e[e.length-1]}if(jQuery(b).text()==""){jQuery(b).remove()}jQuery("body > br",this._doc).remove();this.setFocusToNode(f)};WYMeditor.editor.prototype.insert=function(b){var c=this._iframe.contentWindow.getSelection(),a,d;if(c.focusNode!=null){a=c.getRangeAt(0);d=a.createContextualFragment(b);a.deleteContents();a.insertNode(d)}else{this.paste(b)}};WYMeditor.editor.prototype.wrap=function(b,a){this.insert(b+this._iframe.contentWindow.getSelection().toString()+a)};WYMeditor.editor.prototype.unwrap=function(){this.insert(this._iframe.contentWindow.getSelection().toString())};WYMeditor.editor.prototype.setFocusToNode=function(d,b){var a=this._doc.createRange(),c=this._iframe.contentWindow.getSelection();b=b?0:1;a.selectNodeContents(d);c.addRange(a);c.collapse(d,b);this._iframe.contentWindow.focus()};WYMeditor.editor.prototype.addCssRules=function(e,c){var b=e.styleSheets[0];if(b){for(var a=0;a<c.length;a++){var d=c[a];if(d.name&&d.css){this.addCssRule(b,d)}}}};WYMeditor.editor.prototype.computeBasePath=function(){return jQuery(jQuery.grep(jQuery("script"),function(a){return(a.src&&a.src.match(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/))})).attr("src").replace(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/,"")};WYMeditor.editor.prototype.computeWymPath=function(){return jQuery(jQuery.grep(jQuery("script"),function(a){return(a.src&&a.src.match(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/))})).attr("src")};WYMeditor.editor.prototype.computeJqueryPath=function(){return jQuery(jQuery.grep(jQuery("script"),function(a){return(a.src&&a.src.match(/jquery(-(.*)){0,1}(\.pack|\.min|\.packed)?\.js(\?.*)?$/))})).attr("src")};WYMeditor.editor.prototype.computeCssPath=function(){return jQuery(jQuery.grep(jQuery("link"),function(a){return(a.href&&a.href.match(/wymeditor\/skins\/(.*)screen\.css(\?.*)?$/))})).attr("href")};WYMeditor.editor.prototype.configureEditorUsingRawCss=function(){var a=new WYMeditor.WymCssParser();if(this._options.stylesheet){a.parse(jQuery.ajax({url:this._options.stylesheet,async:false}).responseText)}else{a.parse(this._options.styles,false)}if(this._options.classesItems.length==0){this._options.classesItems=a.css_settings.classesItems}if(this._options.editorStyles.length==0){this._options.editorStyles=a.css_settings.editorStyles}if(this._options.dialogStyles.length==0){this._options.dialogStyles=a.css_settings.dialogStyles}};WYMeditor.editor.prototype.listen=function(){jQuery(this._doc.body).bind("mousedown",this.mousedown)};WYMeditor.editor.prototype.mousedown=function(a){var b=WYMeditor.INSTANCES[this.ownerDocument.title];b._selected_image=(a.target.tagName.toLowerCase()==WYMeditor.IMG)?a.target:null};WYMeditor.loadCss=function(a){var c=document.createElement("link");c.rel="stylesheet";c.href=a;var b=jQuery("head").get(0);b.appendChild(c)};WYMeditor.editor.prototype.loadSkin=function(){if(this._options.loadSkin&&!WYMeditor.SKINS[this._options.skin]){var found=false;var rExp=new RegExp(this._options.skin+"/"+WYMeditor.SKINS_DEFAULT_CSS+"$");jQuery("link").each(function(){if(this.href.match(rExp)){found=true}});if(!found){WYMeditor.loadCss(this._options.skinPath+WYMeditor.SKINS_DEFAULT_CSS)}}jQuery(this._box).addClass("wym_skin_"+this._options.skin);if(this._options.initSkin&&!WYMeditor.SKINS[this._options.skin]){eval(jQuery.ajax({url:this._options.skinPath+WYMeditor.SKINS_DEFAULT_JS,async:false}).responseText)}if(WYMeditor.SKINS[this._options.skin]&&WYMeditor.SKINS[this._options.skin].init){WYMeditor.SKINS[this._options.skin].init(this)}};WYMeditor.INIT_DIALOG=function(index){var wym=window.opener.WYMeditor.INSTANCES[index];var doc=window.document;var selected=wym.selected();var dialogType=jQuery(wym._options.dialogTypeSelector).val();var sStamp=wym.uniqueStamp();switch(dialogType){case WYMeditor.DIALOG_LINK:if(selected&&selected.tagName&&selected.tagName.toLowerCase!=WYMeditor.A){selected=jQuery(selected).parentsOrSelf(WYMeditor.A)}if(!selected&&wym._selected_image){selected=jQuery(wym._selected_image).parentsOrSelf(WYMeditor.A)}break}if(jQuery.isFunction(wym._options.preInitDialog)){wym._options.preInitDialog(wym,window)}var styles=doc.styleSheets[0];var aCss=eval(wym._options.dialogStyles);wym.addCssRules(doc,aCss);if(selected){jQuery(wym._options.hrefSelector).val(jQuery(selected).attr(WYMeditor.HREF));jQuery(wym._options.srcSelector).val(jQuery(selected).attr(WYMeditor.SRC));jQuery(wym._options.titleSelector).val(jQuery(selected).attr(WYMeditor.TITLE));jQuery(wym._options.relSelector).val(jQuery(selected).attr(WYMeditor.REL));jQuery(wym._options.altSelector).val(jQuery(selected).attr(WYMeditor.ALT))}if(wym._selected_image){jQuery(wym._options.dialogImageSelector+" "+wym._options.srcSelector).val(jQuery(wym._selected_image).attr(WYMeditor.SRC));jQuery(wym._options.dialogImageSelector+" "+wym._options.titleSelector).val(jQuery(wym._selected_image).attr(WYMeditor.TITLE));jQuery(wym._options.dialogImageSelector+" "+wym._options.altSelector).val(jQuery(wym._selected_image).attr(WYMeditor.ALT))}jQuery(wym._options.dialogLinkSelector+" "+wym._options.submitSelector).submit(function(){var sUrl=jQuery(wym._options.hrefSelector).val();if(sUrl.length>0){var link;if(selected[0]&&selected[0].tagName.toLowerCase()==WYMeditor.A){link=selected}else{wym._exec(WYMeditor.CREATE_LINK,sStamp);link=jQuery("a[href="+sStamp+"]",wym._doc.body)}link.attr(WYMeditor.HREF,sUrl).attr(WYMeditor.TITLE,jQuery(wym._options.titleSelector).val()).attr(WYMeditor.REL,jQuery(wym._options.relSelector).val())}window.close()});jQuery(wym._options.dialogImageSelector+" "+wym._options.submitSelector).submit(function(){var sUrl=jQuery(wym._options.srcSelector).val();if(sUrl.length>0){wym._exec(WYMeditor.INSERT_IMAGE,sStamp);jQuery("img[src$="+sStamp+"]",wym._doc.body).attr(WYMeditor.SRC,sUrl).attr(WYMeditor.TITLE,jQuery(wym._options.titleSelector).val()).attr(WYMeditor.ALT,jQuery(wym._options.altSelector).val())}window.close()});jQuery(wym._options.dialogTableSelector+" "+wym._options.submitSelector).submit(function(){var iRows=jQuery(wym._options.rowsSelector).val();var iCols=jQuery(wym._options.colsSelector).val();if(iRows>0&&iCols>0){var table=wym._doc.createElement(WYMeditor.TABLE);var newRow=null;var newCol=null;var sCaption=jQuery(wym._options.captionSelector).val();var newCaption=table.createCaption();newCaption.innerHTML=sCaption;for(x=0;x<iRows;x++){newRow=table.insertRow(x);for(y=0;y<iCols;y++){newRow.insertCell(y)}}jQuery(table).attr("summary",jQuery(wym._options.summarySelector).val());var node=jQuery(wym.findUp(wym.container(),WYMeditor.MAIN_CONTAINERS)).get(0);if(!node||!node.parentNode){jQuery(wym._doc.body).append(table)}else{jQuery(node).after(table)}}window.close()});jQuery(wym._options.dialogPasteSelector+" "+wym._options.submitSelector).submit(function(){var sText=jQuery(wym._options.textSelector).val();wym.paste(sText);window.close()});jQuery(wym._options.dialogPreviewSelector+" "+wym._options.previewSelector).html(wym.xhtml());jQuery(wym._options.cancelSelector).mousedown(function(){window.close()});if(jQuery.isFunction(wym._options.postInitDialog)){wym._options.postInitDialog(wym,window)}};WYMeditor.XmlHelper=function(){this._entitiesDiv=document.createElement("div");return this};WYMeditor.XmlHelper.prototype.tag=function(c,b,a){b=b||false;a=a||false;return"<"+c+(b?this.tagOptions(b):"")+(a?">":" />")};WYMeditor.XmlHelper.prototype.contentTag=function(b,c,a){a=a||false;return"<"+b+(a?this.tagOptions(a):"")+">"+c+"</"+b+">"};WYMeditor.XmlHelper.prototype.cdataSection=function(a){return"<![CDATA["+a+"]]>"};WYMeditor.XmlHelper.prototype.escapeOnce=function(a){return this._fixDoubleEscape(this.escapeEntities(a))};WYMeditor.XmlHelper.prototype._fixDoubleEscape=function(a){return a.replace(/&([a-z]+|(#\d+));/ig,"&$1;")};WYMeditor.XmlHelper.prototype.tagOptions=function(b){var a=this;a._formated_options="";for(var c in b){var d="";var e=b[c];if(typeof e!="function"&&e.length>0){if(parseInt(c)==c&&typeof e=="object"){c=e.shift();e=e.pop()}if(c!=""&&e!=""){a._formated_options+=" "+c+'="'+a.escapeOnce(e)+'"'}}}return a._formated_options};WYMeditor.XmlHelper.prototype.escapeEntities=function(c,b){this._entitiesDiv.innerHTML=c;this._entitiesDiv.textContent=c;var a=this._entitiesDiv.innerHTML;if(typeof b=="undefined"){if(b!=false){a=a.replace('"',""")}if(b==true){a=a.replace('"',"'")}}return a};WYMeditor.XmlHelper.prototype.parseAttributes=function(h){var a=[];var g=h.split(/((=\s*")(")("))|((=\s*\')(\')(\'))|((=\s*[^>\s]*))/g);if(g.toString()!=h){for(var d in g){var c=g[d];if(typeof c!="function"&&c.length!=0){var e=new RegExp("(\\w+)\\s*"+c);if(match=h.match(e)){var f=c.replace(/^[\s=]+/,"");var b=f.charAt(0);b=b=='"'?'"':(b=="'"?"'":"");if(b!=""){f=b=='"'?f.replace(/^"|"+$/g,""):f.replace(/^'|'+$/g,"")}h=h.replace(match[0],"");a.push([match[1],f])}}}}return a};WYMeditor.XhtmlValidator={_attributes:{core:{except:["base","head","html","meta","param","script","style","title"],attributes:["class","id","style","title","accesskey","tabindex"]},language:{except:["base","br","hr","iframe","param","script"],attributes:{dir:["ltr","rtl"],"0":"lang","1":"xml:lang"}},keyboard:{attributes:{accesskey:/^(\w){1}$/,tabindex:/^(\d)+$/}}},_events:{window:{only:["body"],attributes:["onload","onunload"]},form:{only:["form","input","textarea","select","a","label","button"],attributes:["onchange","onsubmit","onreset","onselect","onblur","onfocus"]},keyboard:{except:["base","bdo","br","frame","frameset","head","html","iframe","meta","param","script","style","title"],attributes:["onkeydown","onkeypress","onkeyup"]},mouse:{except:["base","bdo","br","head","html","meta","param","script","style","title"],attributes:["onclick","ondblclick","onmousedown","onmousemove","onmouseover","onmouseout","onmouseup"]}},_tags:{a:{attributes:{"0":"charset","1":"coords","2":"href","3":"hreflang","4":"name","5":"rel","6":"rev",shape:/^(rect|rectangle|circ|circle|poly|polygon)$/,"7":"type"}},"0":"abbr","1":"acronym","2":"address",area:{attributes:{"0":"alt","1":"coords","2":"href",nohref:/^(true|false)$/,shape:/^(rect|rectangle|circ|circle|poly|polygon)$/},required:["alt"]},"3":"b",base:{attributes:["href"],required:["href"]},bdo:{attributes:{dir:/^(ltr|rtl)$/},required:["dir"]},"4":"big",blockquote:{attributes:["cite"]},"5":"body","6":"br",button:{attributes:{disabled:/^(disabled)$/,type:/^(button|reset|submit)$/,"0":"value"},inside:"form"},"7":"caption","8":"cite","9":"code",col:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",span:/^(\d)+$/,valign:/^(top|middle|bottom|baseline)$/,"2":"width"},inside:"colgroup"},colgroup:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",span:/^(\d)+$/,valign:/^(top|middle|bottom|baseline)$/,"2":"width"}},"10":"dd",del:{attributes:{"0":"cite",datetime:/^([0-9]){8}/}},"11":"div","12":"dfn","13":"dl","14":"dt","15":"em",fieldset:{inside:"form"},form:{attributes:{"0":"action","1":"accept","2":"accept-charset","3":"enctype",method:/^(get|post)$/},required:["action"]},head:{attributes:["profile"]},"16":"h1","17":"h2","18":"h3","19":"h4","20":"h5","21":"h6","22":"hr",html:{attributes:["xmlns"]},"23":"i",img:{attributes:["alt","src","height","ismap","longdesc","usemap","width"],required:["alt","src"]},input:{attributes:{"0":"accept","1":"alt",checked:/^(checked)$/,disabled:/^(disabled)$/,maxlength:/^(\d)+$/,"2":"name",readonly:/^(readonly)$/,size:/^(\d)+$/,"3":"src",type:/^(button|checkbox|file|hidden|image|password|radio|reset|submit|text)$/,"4":"value"},inside:"form"},ins:{attributes:{"0":"cite",datetime:/^([0-9]){8}/}},"24":"kbd",label:{attributes:["for"],inside:"form"},"25":"legend","26":"li",link:{attributes:{"0":"charset","1":"href","2":"hreflang",media:/^(all|braille|print|projection|screen|speech|,|;| )+$/i,rel:/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i,rev:/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i,"3":"type"},inside:"head"},map:{attributes:["id","name"],required:["id"]},meta:{attributes:{"0":"content","http-equiv":/^(content\-type|expires|refresh|set\-cookie)$/i,"1":"name","2":"scheme"},required:["content"]},"27":"noscript",object:{attributes:["archive","classid","codebase","codetype","data","declare","height","name","standby","type","usemap","width"]},"28":"ol",optgroup:{attributes:{"0":"label",disabled:/^(disabled)$/},required:["label"]},option:{attributes:{"0":"label",disabled:/^(disabled)$/,selected:/^(selected)$/,"1":"value"},inside:"select"},"29":"p",param:{attributes:{"0":"type",valuetype:/^(data|ref|object)$/,"1":"valuetype","2":"value"},required:["name"]},"30":"pre",q:{attributes:["cite"]},"31":"samp",script:{attributes:{type:/^(text\/ecmascript|text\/javascript|text\/jscript|text\/vbscript|text\/vbs|text\/xml)$/,"0":"charset",defer:/^(defer)$/,"1":"src"},required:["type"]},select:{attributes:{disabled:/^(disabled)$/,multiple:/^(multiple)$/,"0":"name","1":"size"},inside:"form"},"32":"small","33":"span","34":"strong",style:{attributes:{"0":"type",media:/^(screen|tty|tv|projection|handheld|print|braille|aural|all)$/},required:["type"]},"35":"sub","36":"sup",table:{attributes:{"0":"border","1":"cellpadding","2":"cellspacing",frame:/^(void|above|below|hsides|lhs|rhs|vsides|box|border)$/,rules:/^(none|groups|rows|cols|all)$/,"3":"summary","4":"width"}},tbody:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",valign:/^(top|middle|bottom|baseline)$/}},td:{attributes:{"0":"abbr",align:/^(left|right|center|justify|char)$/,"1":"axis","2":"char","3":"charoff",colspan:/^(\d)+$/,"4":"headers",rowspan:/^(\d)+$/,scope:/^(col|colgroup|row|rowgroup)$/,valign:/^(top|middle|bottom|baseline)$/}},textarea:{attributes:["cols","rows","disabled","name","readonly"],required:["cols","rows"],inside:"form"},tfoot:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",valign:/^(top|middle|bottom)$/,"2":"baseline"}},th:{attributes:{"0":"abbr",align:/^(left|right|center|justify|char)$/,"1":"axis","2":"char","3":"charoff",colspan:/^(\d)+$/,"4":"headers",rowspan:/^(\d)+$/,scope:/^(col|colgroup|row|rowgroup)$/,valign:/^(top|middle|bottom|baseline)$/}},thead:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",valign:/^(top|middle|bottom|baseline)$/}},"37":"title",tr:{attributes:{align:/^(right|left|center|justify|char)$/,"0":"char","1":"charoff",valign:/^(top|middle|bottom|baseline)$/}},"38":"tt","39":"ul","40":"var"},skiped_attributes:[],skiped_attribute_values:[],getValidTagAttributes:function(a,b){var c={};var g=this.getPossibleTagAttributes(a);for(var e in b){var f=b[e];var d=WYMeditor.Helper;if(!d.contains(this.skiped_attributes,e)&&!d.contains(this.skiped_attribute_values,f)){if(typeof f!="function"&&d.contains(g,e)){if(this.doesAttributeNeedsValidation(a,e)){if(this.validateAttribute(a,e,f)){c[e]=f}}else{c[e]=f}}}}return c},getUniqueAttributesAndEventsForTag:function(b){var a=[];if(this._tags[b]&&this._tags[b]["attributes"]){for(k in this._tags[b]["attributes"]){a.push(parseInt(k)==k?this._tags[b]["attributes"][k]:k)}}return a},getDefaultAttributesAndEventsForTags:function(){var a=[];for(var b in this._events){a.push(this._events[b])}for(var b in this._attributes){a.push(this._attributes[b])}return a},isValidTag:function(a){if(this._tags[a]){return true}for(var b in this._tags){if(this._tags[b]==a){return true}}return false},getDefaultAttributesAndEventsForTag:function(a){var i=[];if(this.isValidTag(a)){var g=this.getDefaultAttributesAndEventsForTags();for(var d in g){var f=g[d];if(typeof f=="object"){var e=WYMeditor.Helper;if((f.except&&e.contains(f.except,a))||(f.only&&!e.contains(f.only,a))){continue}var c=f.attributes?f.attributes:f.events;for(var b in c){i.push(typeof c[b]!="string"?b:c[b])}}}}return i},doesAttributeNeedsValidation:function(a,b){return this._tags[a]&&((this._tags[a]["attributes"]&&this._tags[a]["attributes"][b])||(this._tags[a]["required"]&&WYMeditor.Helper.contains(this._tags[a]["required"],b)))},validateAttribute:function(a,b,c){if(this._tags[a]&&(this._tags[a]["attributes"]&&this._tags[a]["attributes"][b]&&c.length>0&&!c.match(this._tags[a]["attributes"][b]))||(this._tags[a]&&this._tags[a]["required"]&&WYMeditor.Helper.contains(this._tags[a]["required"],b)&&c.length==0)){return false}return typeof this._tags[a]!="undefined"},getPossibleTagAttributes:function(a){if(!this._possible_tag_attributes){this._possible_tag_attributes={}}if(!this._possible_tag_attributes[a]){this._possible_tag_attributes[a]=this.getUniqueAttributesAndEventsForTag(a).concat(this.getDefaultAttributesAndEventsForTag(a))}return this._possible_tag_attributes[a]}};WYMeditor.ParallelRegex=function(a){this._case=a;this._patterns=[];this._labels=[];this._regex=null;return this};WYMeditor.ParallelRegex.prototype.addPattern=function(c,a){a=a||true;var b=this._patterns.length;this._patterns[b]=c;this._labels[b]=a;this._regex=null};WYMeditor.ParallelRegex.prototype.match=function(c){if(this._patterns.length==0){return[false,""]}var d=c.match(this._getCompoundedRegex());if(!d){return[false,""]}var a=d[0];for(var b=1;b<d.length;b++){if(d[b]){return[this._labels[b-1],a]}}return[true,d[0]]};WYMeditor.ParallelRegex.prototype._getCompoundedRegex=function(){if(this._regex==null){for(var a=0,b=this._patterns.length;a<b;a++){this._patterns[a]="("+this._untokenizeRegex(this._tokenizeRegex(this._patterns[a]).replace(/([\/\(\)])/g,"\\$1"))+")"}this._regex=new RegExp(this._patterns.join("|"),this._getPerlMatchingFlags())}return this._regex};WYMeditor.ParallelRegex.prototype._tokenizeRegex=function(a){return a.replace(/\(\?(i|m|s|x|U)\)/,"~~~~~~Tk1$1~~~~~~").replace(/\(\?(\-[i|m|s|x|U])\)/,"~~~~~~Tk2$1~~~~~~").replace(/\(\?\=(.*)\)/,"~~~~~~Tk3$1~~~~~~").replace(/\(\?\!(.*)\)/,"~~~~~~Tk4$1~~~~~~").replace(/\(\?\<\=(.*)\)/,"~~~~~~Tk5$1~~~~~~").replace(/\(\?\<\!(.*)\)/,"~~~~~~Tk6$1~~~~~~").replace(/\(\?\:(.*)\)/,"~~~~~~Tk7$1~~~~~~")};WYMeditor.ParallelRegex.prototype._untokenizeRegex=function(a){return a.replace(/~~~~~~Tk1(.{1})~~~~~~/,"(?$1)").replace(/~~~~~~Tk2(.{2})~~~~~~/,"(?$1)").replace(/~~~~~~Tk3(.*)~~~~~~/,"(?=$1)").replace(/~~~~~~Tk4(.*)~~~~~~/,"(?!$1)").replace(/~~~~~~Tk5(.*)~~~~~~/,"(?<=$1)").replace(/~~~~~~Tk6(.*)~~~~~~/,"(?<!$1)").replace(/~~~~~~Tk7(.*)~~~~~~/,"(?:$1)")};WYMeditor.ParallelRegex.prototype._getPerlMatchingFlags=function(){return(this._case?"m":"mi")};WYMeditor.StateStack=function(a){this._stack=[a];return this};WYMeditor.StateStack.prototype.getCurrent=function(){return this._stack[this._stack.length-1]};WYMeditor.StateStack.prototype.enter=function(a){this._stack.push(a)};WYMeditor.StateStack.prototype.leave=function(){if(this._stack.length==1){return false}this._stack.pop();return true};WYMeditor.LEXER_ENTER=1;WYMeditor.LEXER_MATCHED=2;WYMeditor.LEXER_UNMATCHED=3;WYMeditor.LEXER_EXIT=4;WYMeditor.LEXER_SPECIAL=5;WYMeditor.Lexer=function(c,b,a){b=b||"accept";this._case=a||false;this._regexes={};this._parser=c;this._mode=new WYMeditor.StateStack(b);this._mode_handlers={};this._mode_handlers[b]=b;return this};WYMeditor.Lexer.prototype.addPattern=function(a,b){var b=b||"accept";if(typeof this._regexes[b]=="undefined"){this._regexes[b]=new WYMeditor.ParallelRegex(this._case)}this._regexes[b].addPattern(a);if(typeof this._mode_handlers[b]=="undefined"){this._mode_handlers[b]=b}};WYMeditor.Lexer.prototype.addEntryPattern=function(b,c,a){if(typeof this._regexes[c]=="undefined"){this._regexes[c]=new WYMeditor.ParallelRegex(this._case)}this._regexes[c].addPattern(b,a);if(typeof this._mode_handlers[a]=="undefined"){this._mode_handlers[a]=a}};WYMeditor.Lexer.prototype.addExitPattern=function(a,b){if(typeof this._regexes[b]=="undefined"){this._regexes[b]=new WYMeditor.ParallelRegex(this._case)}this._regexes[b].addPattern(a,"__exit");if(typeof this._mode_handlers[b]=="undefined"){this._mode_handlers[b]=b}};WYMeditor.Lexer.prototype.addSpecialPattern=function(b,c,a){if(typeof this._regexes[c]=="undefined"){this._regexes[c]=new WYMeditor.ParallelRegex(this._case)}this._regexes[c].addPattern(b,"_"+a);if(typeof this._mode_handlers[a]=="undefined"){this._mode_handlers[a]=a}};WYMeditor.Lexer.prototype.mapHandler=function(b,a){this._mode_handlers[b]=a};WYMeditor.Lexer.prototype.parse=function(d){if(typeof this._parser=="undefined"){return false}var e=d.length;var c;while(typeof(c=this._reduce(d))=="object"){var d=c[0];var b=c[1];var a=c[2];var f=c[3];if(!this._dispatchTokens(b,a,f)){return false}if(d==""){return true}if(d.length==e){return false}e=d.length}if(!c){return false}return this._invokeParser(d,WYMeditor.LEXER_UNMATCHED)};WYMeditor.Lexer.prototype._dispatchTokens=function(b,a,c){c=c||false;if(!this._invokeParser(b,WYMeditor.LEXER_UNMATCHED)){return false}if(typeof c=="boolean"){return this._invokeParser(a,WYMeditor.LEXER_MATCHED)}if(this._isModeEnd(c)){if(!this._invokeParser(a,WYMeditor.LEXER_EXIT)){return false}return this._mode.leave()}if(this._isSpecialMode(c)){this._mode.enter(this._decodeSpecial(c));if(!this._invokeParser(a,WYMeditor.LEXER_SPECIAL)){return false}return this._mode.leave()}this._mode.enter(c);return this._invokeParser(a,WYMeditor.LEXER_ENTER)};WYMeditor.Lexer.prototype._isModeEnd=function(a){return(a==="__exit")};WYMeditor.Lexer.prototype._isSpecialMode=function(a){return(a.substring(0,1)=="_")};WYMeditor.Lexer.prototype._decodeSpecial=function(a){return a.substring(1)};WYMeditor.Lexer.prototype._invokeParser=function(content,is_match){if(content===""){return true}var current=this._mode.getCurrent();var handler=this._mode_handlers[current];var result;eval("result = this._parser."+handler+"(content, is_match);");return result};WYMeditor.Lexer.prototype._reduce=function(c){var a=this._regexes[this._mode.getCurrent()].match(c);var b=a[1];var e=a[0];if(e){var f=c.indexOf(b);var d=c.substr(0,f);c=c.substring(f+b.length);return[c,d,b,e]}return true};WYMeditor.XhtmlLexer=function(a){jQuery.extend(this,new WYMeditor.Lexer(a,"Text"));this.mapHandler("Text","Text");this.addTokens();this.init();return this};WYMeditor.XhtmlLexer.prototype.init=function(){};WYMeditor.XhtmlLexer.prototype.addTokens=function(){this.addCommentTokens("Text");this.addScriptTokens("Text");this.addCssTokens("Text");this.addTagTokens("Text")};WYMeditor.XhtmlLexer.prototype.addCommentTokens=function(a){this.addEntryPattern("<!--",a,"Comment");this.addExitPattern("-->","Comment")};WYMeditor.XhtmlLexer.prototype.addScriptTokens=function(a){this.addEntryPattern("<script",a,"Script");this.addExitPattern("<\/script>","Script")};WYMeditor.XhtmlLexer.prototype.addCssTokens=function(a){this.addEntryPattern("<style",a,"Css");this.addExitPattern("</style>","Css")};WYMeditor.XhtmlLexer.prototype.addTagTokens=function(a){this.addSpecialPattern("<\\s*[a-z0-9:-]+\\s*>",a,"OpeningTag");this.addEntryPattern("<[a-z0-9:-]+[\\/ \\>]+",a,"OpeningTag");this.addInTagDeclarationTokens("OpeningTag");this.addSpecialPattern("</\\s*[a-z0-9:-]+\\s*>",a,"ClosingTag")};WYMeditor.XhtmlLexer.prototype.addInTagDeclarationTokens=function(a){this.addSpecialPattern("\\s+",a,"Ignore");this.addAttributeTokens(a);this.addExitPattern("/>",a);this.addExitPattern(">",a)};WYMeditor.XhtmlLexer.prototype.addAttributeTokens=function(a){this.addSpecialPattern("\\s*[a-z-_0-9]*:?[a-z-_0-9]+\\s*(?==)\\s*",a,"TagAttributes");this.addEntryPattern('=\\s*"',a,"DoubleQuotedAttribute");this.addPattern('\\\\"',"DoubleQuotedAttribute");this.addExitPattern('"',"DoubleQuotedAttribute");this.addEntryPattern("=\\s*'",a,"SingleQuotedAttribute");this.addPattern("\\\\'","SingleQuotedAttribute");this.addExitPattern("'","SingleQuotedAttribute");this.addSpecialPattern("=\\s*[^>\\s]*",a,"UnquotedAttribute")};WYMeditor.XhtmlParser=function(a,b){var b=b||"Text";this._Lexer=new WYMeditor.XhtmlLexer(this);this._Listener=a;this._mode=b;this._matches=[];this._last_match="";this._current_match="";return this};WYMeditor.XhtmlParser.prototype.parse=function(a){this._Lexer.parse(this.beforeParsing(a));return this.afterParsing(this._Listener.getResult())};WYMeditor.XhtmlParser.prototype.beforeParsing=function(a){if(a.match(/class="MsoNormal"/)||a.match(/ns = "urn:schemas-microsoft-com/)){this._Listener.avoidStylingTagsAndAttributes()}return this._Listener.beforeParsing(a)};WYMeditor.XhtmlParser.prototype.afterParsing=function(a){if(this._Listener._avoiding_tags_implicitly){this._Listener.allowStylingTagsAndAttributes()}return this._Listener.afterParsing(a)};WYMeditor.XhtmlParser.prototype.Ignore=function(a,b){return true};WYMeditor.XhtmlParser.prototype.Text=function(a){this._Listener.addContent(a);return true};WYMeditor.XhtmlParser.prototype.Comment=function(b,a){return this._addNonTagBlock(b,a,"addComment")};WYMeditor.XhtmlParser.prototype.Script=function(b,a){return this._addNonTagBlock(b,a,"addScript")};WYMeditor.XhtmlParser.prototype.Css=function(b,a){return this._addNonTagBlock(b,a,"addCss")};WYMeditor.XhtmlParser.prototype._addNonTagBlock=function(a,c,b){switch(c){case WYMeditor.LEXER_ENTER:this._non_tag=a;break;case WYMeditor.LEXER_UNMATCHED:this._non_tag+=a;break;case WYMeditor.LEXER_EXIT:switch(b){case"addComment":this._Listener.addComment(this._non_tag+a);break;case"addScript":this._Listener.addScript(this._non_tag+a);break;case"addCss":this._Listener.addCss(this._non_tag+a);break}}return true};WYMeditor.XhtmlParser.prototype.OpeningTag=function(a,b){switch(b){case WYMeditor.LEXER_ENTER:this._tag=this.normalizeTag(a);this._tag_attributes={};break;case WYMeditor.LEXER_SPECIAL:this._callOpenTagListener(this.normalizeTag(a));break;case WYMeditor.LEXER_EXIT:this._callOpenTagListener(this._tag,this._tag_attributes)}return true};WYMeditor.XhtmlParser.prototype.ClosingTag=function(a,b){this._callCloseTagListener(this.normalizeTag(a));return true};WYMeditor.XhtmlParser.prototype._callOpenTagListener=function(a,b){var b=b||{};this.autoCloseUnclosedBeforeNewOpening(a);if(this._Listener.isBlockTag(a)){this._Listener._tag_stack.push(a);this._Listener.fixNestingBeforeOpeningBlockTag(a,b);this._Listener.openBlockTag(a,b);this._increaseOpenTagCounter(a)}else{if(this._Listener.isInlineTag(a)){this._Listener.inlineTag(a,b)}else{this._Listener.openUnknownTag(a,b);this._increaseOpenTagCounter(a)}}this._Listener.last_tag=a;this._Listener.last_tag_opened=true;this._Listener.last_tag_attributes=b};WYMeditor.XhtmlParser.prototype._callCloseTagListener=function(a){if(this._decreaseOpenTagCounter(a)){this.autoCloseUnclosedBeforeTagClosing(a);if(this._Listener.isBlockTag(a)){var b=this._Listener._tag_stack.pop();if(b==false){return}else{if(b!=a){a=b}}this._Listener.closeBlockTag(a)}else{this._Listener.closeUnknownTag(a)}}else{this._Listener.closeUnopenedTag(a)}this._Listener.last_tag=a;this._Listener.last_tag_opened=false};WYMeditor.XhtmlParser.prototype._increaseOpenTagCounter=function(a){this._Listener._open_tags[a]=this._Listener._open_tags[a]||0;this._Listener._open_tags[a]++};WYMeditor.XhtmlParser.prototype._decreaseOpenTagCounter=function(a){if(this._Listener._open_tags[a]){this._Listener._open_tags[a]--;if(this._Listener._open_tags[a]==0){this._Listener._open_tags[a]=undefined}return true}return false};WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeNewOpening=function(a){this._autoCloseUnclosed(a,false)};WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeTagClosing=function(a){this._autoCloseUnclosed(a,true)};WYMeditor.XhtmlParser.prototype._autoCloseUnclosed=function(c,d){var d=d||false;if(this._Listener._open_tags){for(var a in this._Listener._open_tags){var b=this._Listener._open_tags[a];if(b>0&&this._Listener.shouldCloseTagAutomatically(a,c,d)){this._callCloseTagListener(a,true)}}}};WYMeditor.XhtmlParser.prototype.getTagReplacements=function(){return this._Listener.getTagReplacements()};WYMeditor.XhtmlParser.prototype.normalizeTag=function(a){a=a.replace(/^([\s<\/>]*)|([\s<\/>]*)$/gm,"").toLowerCase();var b=this._Listener.getTagReplacements();if(b[a]){return b[a]}return a};WYMeditor.XhtmlParser.prototype.TagAttributes=function(a,b){if(WYMeditor.LEXER_SPECIAL==b){this._current_attribute=a}return true};WYMeditor.XhtmlParser.prototype.DoubleQuotedAttribute=function(a,b){if(WYMeditor.LEXER_UNMATCHED==b){this._tag_attributes[this._current_attribute]=a}return true};WYMeditor.XhtmlParser.prototype.SingleQuotedAttribute=function(a,b){if(WYMeditor.LEXER_UNMATCHED==b){this._tag_attributes[this._current_attribute]=a}return true};WYMeditor.XhtmlParser.prototype.UnquotedAttribute=function(a,b){this._tag_attributes[this._current_attribute]=a.replace(/^=/,"");return true};WYMeditor.XhtmlSaxListener=function(){this.output="";this.helper=new WYMeditor.XmlHelper();this._open_tags={};this.validator=WYMeditor.XhtmlValidator;this._tag_stack=[];this.avoided_tags=[];this.entities={" ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","­":"­","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Á":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Å":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","Ì":"Ì","Í":"Í","Î":"Î","Ï":"Ï","Ð":"Ð","Ñ":"Ñ","Ò":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ý":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","å":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ","Œ":"Œ","œ":"œ","Š":"Š","š":"š","Ÿ":"Ÿ","ƒ":"ƒ","ˆ":"ˆ","˜":"˜","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ"," ":" "," ":" "," ":" ","‌":"‌","‍":"‍","‎":"‎","‏":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"”","„":"„","†":"†","‡":"‡","•":"•","…":"…","‰":"‰","′":"′","″":"″","‹":"‹","›":"›","‾":"‾","⁄":"⁄","€":"€","ℑ":"ℑ","℘":"℘","ℜ":"ℜ","™":"™","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","−":"−","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"};this.block_tags=["a","abbr","acronym","address","area","b","base","bdo","big","blockquote","body","button","caption","cite","code","col","colgroup","dd","del","div","dfn","dl","dt","em","fieldset","form","head","h1","h2","h3","h4","h5","h6","html","i","ins","kbd","label","legend","li","map","noscript","object","ol","optgroup","option","p","param","pre","q","samp","script","select","small","span","strong","style","sub","sup","table","tbody","td","textarea","tfoot","th","thead","title","tr","tt","ul","var","extends"];this.inline_tags=["br","hr","img","input"];return this};WYMeditor.XhtmlSaxListener.prototype.shouldCloseTagAutomatically=function(a,c,b){var b=b||false;if(a=="td"){if((b&&c=="tr")||(!b&&c=="td")){return true}}if(a=="option"){if((b&&c=="select")||(!b&&c=="option")){return true}}return false};WYMeditor.XhtmlSaxListener.prototype.beforeParsing=function(a){this.output="";return a};WYMeditor.XhtmlSaxListener.prototype.afterParsing=function(a){a=this.replaceNamedEntities(a);a=this.joinRepeatedEntities(a);a=this.removeEmptyTags(a);a=this.removeBrInPre(a);return a};WYMeditor.XhtmlSaxListener.prototype.replaceNamedEntities=function(b){for(var a in this.entities){b=b.replace(new RegExp(a,"g"),this.entities[a])}return b};WYMeditor.XhtmlSaxListener.prototype.joinRepeatedEntities=function(b){var a="em|strong|sub|sup|acronym|pre|del|address";return b.replace(new RegExp("</("+a+")><\\1>",""),"").replace(new RegExp("(s*<("+a+")>s*){2}(.*)(s*</\\2>s*){2}",""),"<$2>$3<$2>")};WYMeditor.XhtmlSaxListener.prototype.removeEmptyTags=function(a){return a.replace(new RegExp("<("+this.block_tags.join("|").replace(/\|td/,"").replace(/\|th/,"")+")>(<br />| | |\\s)*</\\1>","g"),"")};WYMeditor.XhtmlSaxListener.prototype.removeBrInPre=function(c){var b=c.match(new RegExp("<pre[^>]*>(.*?)</pre>","gmi"));if(b){for(var a=0;a<b.length;a++){c=c.replace(b[a],b[a].replace(new RegExp("<br />","g"),String.fromCharCode(13,10)))}}return c};WYMeditor.XhtmlSaxListener.prototype.getResult=function(){return this.output};WYMeditor.XhtmlSaxListener.prototype.getTagReplacements=function(){return{b:"strong",i:"em"}};WYMeditor.XhtmlSaxListener.prototype.addContent=function(a){this.output+=a};WYMeditor.XhtmlSaxListener.prototype.addComment=function(a){if(this.remove_comments){this.output+=a}};WYMeditor.XhtmlSaxListener.prototype.addScript=function(a){if(!this.remove_scripts){this.output+=a}};WYMeditor.XhtmlSaxListener.prototype.addCss=function(a){if(!this.remove_embeded_styles){this.output+=a}};WYMeditor.XhtmlSaxListener.prototype.openBlockTag=function(a,b){this.output+=this.helper.tag(a,this.validator.getValidTagAttributes(a,b),true)};WYMeditor.XhtmlSaxListener.prototype.inlineTag=function(a,b){this.output+=this.helper.tag(a,this.validator.getValidTagAttributes(a,b))};WYMeditor.XhtmlSaxListener.prototype.openUnknownTag=function(a,b){};WYMeditor.XhtmlSaxListener.prototype.closeBlockTag=function(a){this.output=this.output.replace(/<br \/>$/,"")+this._getClosingTagContent("before",a)+"</"+a+">"+this._getClosingTagContent("after",a)};WYMeditor.XhtmlSaxListener.prototype.closeUnknownTag=function(a){};WYMeditor.XhtmlSaxListener.prototype.closeUnopenedTag=function(a){this.output+="</"+a+">"};WYMeditor.XhtmlSaxListener.prototype.avoidStylingTagsAndAttributes=function(){this.avoided_tags=["div","span"];this.validator.skiped_attributes=["style"];this.validator.skiped_attribute_values=["MsoNormal","main1"];this._avoiding_tags_implicitly=true};WYMeditor.XhtmlSaxListener.prototype.allowStylingTagsAndAttributes=function(){this.avoided_tags=[];this.validator.skiped_attributes=[];this.validator.skiped_attribute_values=[];this._avoiding_tags_implicitly=false};WYMeditor.XhtmlSaxListener.prototype.isBlockTag=function(a){return !WYMeditor.Helper.contains(this.avoided_tags,a)&&WYMeditor.Helper.contains(this.block_tags,a)};WYMeditor.XhtmlSaxListener.prototype.isInlineTag=function(a){return !WYMeditor.Helper.contains(this.avoided_tags,a)&&WYMeditor.Helper.contains(this.inline_tags,a)};WYMeditor.XhtmlSaxListener.prototype.insertContentAfterClosingTag=function(a,b){this._insertContentWhenClosingTag("after",a,b)};WYMeditor.XhtmlSaxListener.prototype.insertContentBeforeClosingTag=function(a,b){this._insertContentWhenClosingTag("before",a,b)};WYMeditor.XhtmlSaxListener.prototype.fixNestingBeforeOpeningBlockTag=function(a,b){if(a!="li"&&(a=="ul"||a=="ol")&&this.last_tag&&!this.last_tag_opened&&this.last_tag=="li"){this.output=this.output.replace(/<\/li>$/,"");this.insertContentAfterClosingTag(a,"</li>")}};WYMeditor.XhtmlSaxListener.prototype._insertContentWhenClosingTag=function(b,a,c){if(!this["_insert_"+b+"_closing"]){this["_insert_"+b+"_closing"]=[]}if(!this["_insert_"+b+"_closing"][a]){this["_insert_"+b+"_closing"][a]=[]}this["_insert_"+b+"_closing"][a].push(c)};WYMeditor.XhtmlSaxListener.prototype._getClosingTagContent=function(b,a){if(this["_insert_"+b+"_closing"]&&this["_insert_"+b+"_closing"][a]&&this["_insert_"+b+"_closing"][a].length>0){return this["_insert_"+b+"_closing"][a].pop()}return""};WYMeditor.WymCssLexer=function(b,a){var a=(typeof a=="undefined"?true:a);jQuery.extend(this,new WYMeditor.Lexer(b,(a?"Ignore":"WymCss")));this.mapHandler("WymCss","Ignore");if(a==true){this.addEntryPattern("/\\\x2a[<\\s]*WYMeditor[>\\s]*\\\x2a/","Ignore","WymCss");this.addExitPattern("/\\\x2a[</\\s]*WYMeditor[>\\s]*\\\x2a/","WymCss")}this.addSpecialPattern("[\\sa-z1-6]*\\\x2e[a-z-_0-9]+","WymCss","WymCssStyleDeclaration");this.addEntryPattern("/\\\x2a","WymCss","WymCssComment");this.addExitPattern("\\\x2a/","WymCssComment");this.addEntryPattern("\x7b","WymCss","WymCssStyle");this.addExitPattern("\x7d","WymCssStyle");this.addEntryPattern("/\\\x2a","WymCssStyle","WymCssFeedbackStyle");this.addExitPattern("\\\x2a/","WymCssFeedbackStyle");return this};WYMeditor.WymCssParser=function(){this._in_style=false;this._has_title=false;this.only_wym_blocks=true;this.css_settings={classesItems:[],editorStyles:[],dialogStyles:[]};return this};WYMeditor.WymCssParser.prototype.parse=function(a,b){var b=(typeof b=="undefined"?this.only_wym_blocks:b);this._Lexer=new WYMeditor.WymCssLexer(this,b);this._Lexer.parse(a)};WYMeditor.WymCssParser.prototype.Ignore=function(a,b){return true};WYMeditor.WymCssParser.prototype.WymCssComment=function(b,a){if(b.match(/end[a-z0-9\s]*wym[a-z0-9\s]*/mi)){return false}if(a==WYMeditor.LEXER_UNMATCHED){if(!this._in_style){this._has_title=true;this._current_item={title:WYMeditor.Helper.trim(b)}}else{if(this._current_item[this._current_element]){if(!this._current_item[this._current_element].expressions){this._current_item[this._current_element].expressions=[b]}else{this._current_item[this._current_element].expressions.push(b)}}}this._in_style=true}return true};WYMeditor.WymCssParser.prototype.WymCssStyle=function(b,a){if(a==WYMeditor.LEXER_UNMATCHED){b=WYMeditor.Helper.trim(b);if(b!=""){this._current_item[this._current_element].style=b}}else{if(a==WYMeditor.LEXER_EXIT){this._in_style=false;this._has_title=false;this.addStyleSetting(this._current_item)}}return true};WYMeditor.WymCssParser.prototype.WymCssFeedbackStyle=function(b,a){if(a==WYMeditor.LEXER_UNMATCHED){this._current_item[this._current_element].feedback_style=b.replace(/^([\s\/\*]*)|([\s\/\*]*)$/gm,"")}return true};WYMeditor.WymCssParser.prototype.WymCssStyleDeclaration=function(b){b=b.replace(/^([\s\.]*)|([\s\.*]*)$/gm,"");var a="";if(b.indexOf(".")>0){var c=b.split(".");this._current_element=c[1];var a=c[0]}else{this._current_element=b}if(!this._has_title){this._current_item={title:(!a?"":a.toUpperCase()+": ")+this._current_element};this._has_title=true}if(!this._current_item[this._current_element]){this._current_item[this._current_element]={name:this._current_element}}if(a){if(!this._current_item[this._current_element].tags){this._current_item[this._current_element].tags=[a]}else{this._current_item[this._current_element].tags.push(a)}}return true};WYMeditor.WymCssParser.prototype.addStyleSetting=function(a){for(var b in a){var c=a[b];if(typeof c=="object"&&b!="title"){this.css_settings.classesItems.push({name:WYMeditor.Helper.trim(c.name),title:a.title,expr:WYMeditor.Helper.trim((c.expressions||c.tags).join(", "))});if(c.feedback_style){this.css_settings.editorStyles.push({name:"."+WYMeditor.Helper.trim(c.name),css:c.feedback_style})}if(c.style){this.css_settings.dialogStyles.push({name:"."+WYMeditor.Helper.trim(c.name),css:c.style})}}}};jQuery.fn.isPhantomNode=function(){if(this[0].nodeType==3){return !(/[^\t\n\r ]/.test(this[0].data))}return false};WYMeditor.isPhantomNode=function(a){if(a.nodeType==3){return !(/[^\t\n\r ]/.test(a.data))}return false};WYMeditor.isPhantomString=function(a){return !(/[^\t\n\r ]/.test(a))};jQuery.fn.parentsOrSelf=function(b){var a=this;if(a[0].nodeType==3){a=a.parents().slice(0,1)}if(a.filter(b).size()==1){return a}else{return a.parents(b).slice(0,1)}};WYMeditor.Helper={replaceAll:function(d,a,c){var b=new RegExp(a,"g");return(d.replace(b,c))},insertAt:function(b,a,c){return(b.substr(0,c)+a+b.substring(c))},trim:function(a){return a.replace(/^(\s*)|(\s*)$/gm,"")},contains:function(a,c){for(var b=0;b<a.length;b++){if(a[b]===c){return true}}return false},indexOf:function(a,d){var b=-1;for(var c=0;c<a.length;c++){if(a[c]==d){b=c;break}}return(b)},findByName:function(a,b){for(var c=0;c<a.length;c++){var d=a[c];if(d.name==b){return(d)}}return(null)}};WYMeditor.WymClassExplorer=function(a){this._wym=a;this._class="className";this._newLine="\r\n"};WYMeditor.WymClassExplorer.prototype.initIframe=function(iframe){this._iframe=iframe;this._doc=iframe.contentWindow.document;var styles=this._doc.styleSheets[0];var aCss=eval(this._options.editorStyles);this.addCssRules(this._doc,aCss);this._doc.title=this._wym._index;jQuery("html",this._doc).attr("dir",this._options.direction);jQuery(this._doc.body).html(this._wym._html);var wym=this;this._doc.body.onfocus=function(){wym._doc.designMode="on";wym._doc=iframe.contentWindow.document};this._doc.onbeforedeactivate=function(){wym.saveCaret()};this._doc.onkeyup=function(){wym.saveCaret();wym.keyup()};this._doc.onclick=function(){wym.saveCaret()};this._doc.body.onbeforepaste=function(){wym._iframe.contentWindow.event.returnValue=false};this._doc.body.onpaste=function(){wym._iframe.contentWindow.event.returnValue=false;wym.paste(window.clipboardData.getData("Text"))};if(this._initialized){if(jQuery.isFunction(this._options.preBind)){this._options.preBind(this)}this._wym.bindEvents();if(jQuery.isFunction(this._options.postInit)){this._options.postInit(this)}this.listen()}this._initialized=true;this._doc.designMode="on";try{this._doc=iframe.contentWindow.document}catch(e){}};(function(a){WYMeditor.WymClassExplorer.prototype.loadSkin=function(){jQuery(this._box).find(this._options.containerSelector).attr("unselectable","on");a.call(this)}})(WYMeditor.editor.prototype.loadSkin);WYMeditor.WymClassExplorer.prototype._exec=function(c,d){switch(c){case WYMeditor.INDENT:case WYMeditor.OUTDENT:var a=this.findUp(this.container(),WYMeditor.LI);if(a){var b=a.parentNode.parentNode;if(a.parentNode.childNodes.length>1||b.tagName.toLowerCase()==WYMeditor.OL||b.tagName.toLowerCase()==WYMeditor.UL){this._doc.execCommand(c)}}break;default:if(d){this._doc.execCommand(c,false,d)}else{this._doc.execCommand(c)}break}};WYMeditor.WymClassExplorer.prototype.selected=function(){var a=this._iframe.contentWindow.document.caretPos;if(a!=null){if(a.parentElement!=undefined){return(a.parentElement())}}};WYMeditor.WymClassExplorer.prototype.saveCaret=function(){this._doc.caretPos=this._doc.selection.createRange()};WYMeditor.WymClassExplorer.prototype.addCssRule=function(c,d){var b=d.name.split(",");for(var a in b){c.addRule(b[a],d.css)}};WYMeditor.WymClassExplorer.prototype.insert=function(b){var a=this._doc.selection.createRange();if(jQuery(a.parentElement()).parents(this._options.iframeBodySelector).is("*")){try{a.pasteHTML(b)}catch(c){}}else{this.paste(b)}};WYMeditor.WymClassExplorer.prototype.wrap=function(d,b){var a=this._doc.selection.createRange();if(jQuery(a.parentElement()).parents(this._options.iframeBodySelector).is("*")){try{a.pasteHTML(d+a.text+b)}catch(c){}}};WYMeditor.WymClassExplorer.prototype.unwrap=function(){var a=this._doc.selection.createRange();if(jQuery(a.parentElement()).parents(this._options.iframeBodySelector).is("*")){try{var c=a.text;this._exec("Cut");a.pasteHTML(c)}catch(b){}}};WYMeditor.WymClassExplorer.prototype.keyup=function(){this._selected_image=null};WYMeditor.WymClassExplorer.prototype.setFocusToNode=function(c,b){var a=this._doc.selection.createRange();b=b?true:false;a.moveToElementText(c);a.collapse(b);a.select();c.focus()};WYMeditor.WymClassMozilla=function(a){this._wym=a;this._class="class";this._newLine="\n"};WYMeditor.WymClassMozilla.prototype.initIframe=function(iframe){var wym=this;this._iframe=iframe;this._doc=iframe.contentDocument;var styles=this._doc.styleSheets[0];var aCss=eval(this._options.editorStyles);this.addCssRules(this._doc,aCss);this._doc.title=this._wym._index;jQuery("html",this._doc).attr("dir",this._options.direction);this.html(this._wym._html);this.enableDesignMode();if(jQuery.isFunction(this._options.preBind)){this._options.preBind(this)}this._wym.bindEvents();jQuery(this._doc).bind("keydown",this.keydown);jQuery(this._doc).bind("keyup",this.keyup);jQuery(this._doc).bind("focus",function(){wym.enableDesignMode.call(wym)});if(jQuery.isFunction(this._options.postInit)){this._options.postInit(this)}this.listen()};WYMeditor.WymClassMozilla.prototype.html=function(a){if(typeof a==="string"){try{this._doc.designMode="off"}catch(b){}a=a.replace(/<em(\b[^>]*)>/gi,"<i$1>").replace(/<\/em>/gi,"</i>").replace(/<strong(\b[^>]*)>/gi,"<b$1>").replace(/<\/strong>/gi,"</b>");jQuery(this._doc.body).html(a);this.enableDesignMode()}else{return(jQuery(this._doc.body).html())}};WYMeditor.WymClassMozilla.prototype._exec=function(e,g){if(!this.selected()){return(false)}switch(e){case WYMeditor.INDENT:case WYMeditor.OUTDENT:var f=this.selected();var d=this._iframe.contentWindow.getSelection();var b=d.anchorNode;if(b.nodeName=="#text"){b=b.parentNode}f=this.findUp(f,WYMeditor.BLOCKS);b=this.findUp(b,WYMeditor.BLOCKS);if(f&&f==b&&f.tagName.toLowerCase()==WYMeditor.LI){var c=f.parentNode.parentNode;if(f.parentNode.childNodes.length>1||c.tagName.toLowerCase()==WYMeditor.OL||c.tagName.toLowerCase()==WYMeditor.UL){this._doc.execCommand(e,"",null)}}break;default:if(g){this._doc.execCommand(e,"",g)}else{this._doc.execCommand(e,"",null)}}var a=this.selected();if(a.tagName.toLowerCase()==WYMeditor.BODY){this._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}};WYMeditor.WymClassMozilla.prototype.selected=function(){var b=this._iframe.contentWindow.getSelection();var a=b.focusNode;if(a){if(a.nodeName=="#text"){return(a.parentNode)}else{return(a)}}else{return(null)}};WYMeditor.WymClassMozilla.prototype.addCssRule=function(a,b){a.insertRule(b.name+" {"+b.css+"}",a.cssRules.length)};WYMeditor.WymClassMozilla.prototype.keydown=function(b){var c=WYMeditor.INSTANCES[this.title];var a=null;if(b.ctrlKey){if(b.keyCode==66){c._exec(WYMeditor.BOLD);return false}if(b.keyCode==73){c._exec(WYMeditor.ITALIC);return false}}else{if(b.keyCode==13){if(!b.shiftKey){a=c.selected();if(a&&a.tagName.toLowerCase()==WYMeditor.PRE){b.preventDefault();c.insert("<p></p>")}}}}};WYMeditor.WymClassMozilla.prototype.keyup=function(b){var d=WYMeditor.INSTANCES[this.title];d._selected_image=null;var a=null;if(b.keyCode==13&&!b.shiftKey){jQuery(d._doc.body).children(WYMeditor.BR).remove()}if(b.keyCode!=8&&b.keyCode!=17&&b.keyCode!=46&&b.keyCode!=224&&!b.metaKey&&!b.ctrlKey){a=d.selected();var c=a.tagName.toLowerCase();if(c=="strong"||c=="b"||c=="em"||c=="i"||c=="sub"||c=="sup"||c=="a"){c=a.parentNode.tagName.toLowerCase()}if(c==WYMeditor.BODY){d._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}}};WYMeditor.WymClassMozilla.prototype.enableDesignMode=function(){if(this._doc.designMode=="off"){try{this._doc.designMode="on";this._doc.execCommand("styleWithCSS","",false)}catch(a){}}};WYMeditor.WymClassMozilla.prototype.openBlockTag=function(a,c){var c=this.validator.getValidTagAttributes(a,c);if(a=="span"&&c.style){var b=this.getTagForStyle(c.style);if(b){a=b;this._tag_stack.pop();this._tag_stack.push(a);c.style=""}}this.output+=this.helper.tag(a,c,true)};WYMeditor.WymClassMozilla.prototype.getTagForStyle=function(a){if(/bold/.test(a)){return"strong"}if(/italic/.test(a)){return"em"}if(/sub/.test(a)){return"sub"}if(/super/.test(a)){return"sup"}return false};WYMeditor.WymClassOpera=function(a){this._wym=a;this._class="class";this._newLine="\r\n"};WYMeditor.WymClassOpera.prototype.initIframe=function(iframe){this._iframe=iframe;this._doc=iframe.contentWindow.document;var styles=this._doc.styleSheets[0];var aCss=eval(this._options.editorStyles);this.addCssRules(this._doc,aCss);this._doc.title=this._wym._index;jQuery("html",this._doc).attr("dir",this._options.direction);this._doc.designMode="on";this.html(this._wym._html);if(jQuery.isFunction(this._options.preBind)){this._options.preBind(this)}this._wym.bindEvents();jQuery(this._doc).bind("keydown",this.keydown);jQuery(this._doc).bind("keyup",this.keyup);if(jQuery.isFunction(this._options.postInit)){this._options.postInit(this)}this.listen()};WYMeditor.WymClassOpera.prototype._exec=function(a,b){if(b){this._doc.execCommand(a,false,b)}else{this._doc.execCommand(a)}};WYMeditor.WymClassOpera.prototype.selected=function(){var b=this._iframe.contentWindow.getSelection();var a=b.focusNode;if(a){if(a.nodeName=="#text"){return(a.parentNode)}else{return(a)}}else{return(null)}};WYMeditor.WymClassOpera.prototype.addCssRule=function(a,b){a.insertRule(b.name+" {"+b.css+"}",a.cssRules.length)};WYMeditor.WymClassOpera.prototype.keydown=function(a){var c=WYMeditor.INSTANCES[this.title];var b=c._iframe.contentWindow.getSelection();startNode=b.getRangeAt(0).startContainer;if(!jQuery(startNode).parentsOrSelf(WYMeditor.MAIN_CONTAINERS.join(","))[0]&&!jQuery(startNode).parentsOrSelf("li")&&a.keyCode!=WYMeditor.KEY.ENTER&&a.keyCode!=WYMeditor.KEY.LEFT&&a.keyCode!=WYMeditor.KEY.UP&&a.keyCode!=WYMeditor.KEY.RIGHT&&a.keyCode!=WYMeditor.KEY.DOWN&&a.keyCode!=WYMeditor.KEY.BACKSPACE&&a.keyCode!=WYMeditor.KEY.DELETE){c._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}};WYMeditor.WymClassOpera.prototype.keyup=function(a){var b=WYMeditor.INSTANCES[this.title];b._selected_image=null};WYMeditor.WymClassSafari=function(a){this._wym=a;this._class="class";this._newLine="\n"};WYMeditor.WymClassSafari.prototype.initIframe=function(iframe){this._iframe=iframe;this._doc=iframe.contentDocument;var styles=this._doc.styleSheets[0];var aCss=eval(this._options.editorStyles);this.addCssRules(this._doc,aCss);this._doc.title=this._wym._index;jQuery("html",this._doc).attr("dir",this._options.direction);this._doc.designMode="on";this.html(this._wym._html);if(jQuery.isFunction(this._options.preBind)){this._options.preBind(this)}this._wym.bindEvents();jQuery(this._doc).bind("keydown",this.keydown);jQuery(this._doc).bind("keyup",this.keyup);if(jQuery.isFunction(this._options.postInit)){this._options.postInit(this)}this.listen()};WYMeditor.WymClassSafari.prototype._exec=function(e,g){if(!this.selected()){return(false)}switch(e){case WYMeditor.INDENT:case WYMeditor.OUTDENT:var f=this.selected();var d=this._iframe.contentWindow.getSelection();var b=d.anchorNode;if(b.nodeName=="#text"){b=b.parentNode}f=this.findUp(f,WYMeditor.BLOCKS);b=this.findUp(b,WYMeditor.BLOCKS);if(f&&f==b&&f.tagName.toLowerCase()==WYMeditor.LI){var c=f.parentNode.parentNode;if(f.parentNode.childNodes.length>1||c.tagName.toLowerCase()==WYMeditor.OL||c.tagName.toLowerCase()==WYMeditor.UL){this._doc.execCommand(e,"",null)}}break;case WYMeditor.INSERT_ORDEREDLIST:case WYMeditor.INSERT_UNORDEREDLIST:this._doc.execCommand(e,"",null);var f=this.selected();var a=this.findUp(f,WYMeditor.MAIN_CONTAINERS);if(a){jQuery(a).replaceWith(jQuery(a).html())}break;default:if(g){this._doc.execCommand(e,"",g)}else{this._doc.execCommand(e,"",null)}}var a=this.selected();if(a&&a.tagName.toLowerCase()==WYMeditor.BODY){this._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}};WYMeditor.WymClassSafari.prototype.selected=function(){var b=this._iframe.contentWindow.getSelection();var a=b.focusNode;if(a){if(a.nodeName=="#text"){return(a.parentNode)}else{return(a)}}else{return(null)}};WYMeditor.WymClassSafari.prototype.addCssRule=function(a,b){a.insertRule(b.name+" {"+b.css+"}",a.cssRules.length)};WYMeditor.WymClassSafari.prototype.keydown=function(b){var a=WYMeditor.INSTANCES[this.title];if(b.ctrlKey){if(b.keyCode==66){a._exec(WYMeditor.BOLD);b.preventDefault()}if(b.keyCode==73){a._exec(WYMeditor.ITALIC);b.preventDefault()}}else{if(b.shiftKey&&b.keyCode==13){a._exec("InsertLineBreak");b.preventDefault()}}};WYMeditor.WymClassSafari.prototype.keyup=function(b){var d=WYMeditor.INSTANCES[this.title];d._selected_image=null;var a=null;if(b.keyCode==13&&!b.shiftKey){jQuery(d._doc.body).children(WYMeditor.BR).remove();a=d.selected();if(a&&a.tagName.toLowerCase()==WYMeditor.PRE){d._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}}if(b.keyCode!=8&&b.keyCode!=17&&b.keyCode!=46&&b.keyCode!=224&&!b.metaKey&&!b.ctrlKey){a=d.selected();var c=a.tagName.toLowerCase();if(c=="strong"||c=="b"||c=="em"||c=="i"||c=="sub"||c=="sup"||c=="a"||c=="span"){c=a.parentNode.tagName.toLowerCase()}if(c==WYMeditor.BODY||c==WYMeditor.DIV){d._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}}};WYMeditor.WymClassSafari.prototype.openBlockTag=function(a,c){var c=this.validator.getValidTagAttributes(a,c);if(a=="span"&&c.style){var b=this.getTagForStyle(c.style);if(b){a=b;this._tag_stack.pop();this._tag_stack.push(a);c.style="";if(typeof c["class"]=="string"){c["class"]=c["class"].replace(/apple-style-span/gi,"")}}}this.output+=this.helper.tag(a,c,true)};WYMeditor.WymClassSafari.prototype.getTagForStyle=function(a){if(/bold/.test(a)){return"strong"}if(/italic/.test(a)){return"em"}if(/sub/.test(a)){return"sub"}if(/super/.test(a)){return"sup"}return false};
\ No newline at end of file diff --git a/studio/static/js/wymeditor/jquery.wymeditor.mozilla.js b/studio/static/js/wymeditor/jquery.wymeditor.mozilla.js new file mode 100644 index 0000000..3aa84b9 --- /dev/null +++ b/studio/static/js/wymeditor/jquery.wymeditor.mozilla.js @@ -0,0 +1,278 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.mozilla.js + * Gecko specific class and functions. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Volker Mische (vmx a-t gmx dotde) + * Bermi Ferrer (wymeditor a-t bermi dotorg) + * Frédéric Palluel-Lafleur (fpalluel a-t gmail dotcom) + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + */ + +WYMeditor.WymClassMozilla = function(wym) { + + this._wym = wym; + this._class = "class"; + this._newLine = "\n"; +}; + +WYMeditor.WymClassMozilla.prototype.initIframe = function(iframe) { + var wym = this; + + this._iframe = iframe; + this._doc = iframe.contentDocument; + + //add css rules from options + + var styles = this._doc.styleSheets[0]; + var aCss = eval(this._options.editorStyles); + + this.addCssRules(this._doc, aCss); + + this._doc.title = this._wym._index; + + //set the text direction + jQuery('html', this._doc).attr('dir', this._options.direction); + + //init html value + this.html(this._wym._html); + + //init designMode + this.enableDesignMode(); + + //pre-bind functions + if(jQuery.isFunction(this._options.preBind)) this._options.preBind(this); + + //bind external events + this._wym.bindEvents(); + + //bind editor keydown events + jQuery(this._doc).bind("keydown", this.keydown); + + //bind editor keyup events + jQuery(this._doc).bind("keyup", this.keyup); + + //bind editor focus events (used to reset designmode - Gecko bug) + jQuery(this._doc).bind("focus", function () { + // Fix scope + wym.enableDesignMode.call(wym); + }); + + //post-init functions + if(jQuery.isFunction(this._options.postInit)) this._options.postInit(this); + + //add event listeners to doc elements, e.g. images + this.listen(); +}; + +/* @name html + * @description Get/Set the html value + */ +WYMeditor.WymClassMozilla.prototype.html = function(html) { + + if(typeof html === 'string') { + + //disable designMode + try { this._doc.designMode = "off"; } catch(e) { }; + + //replace em by i and strong by bold + //(designMode issue) + html = html.replace(/<em(\b[^>]*)>/gi, "<i$1>") + .replace(/<\/em>/gi, "</i>") + .replace(/<strong(\b[^>]*)>/gi, "<b$1>") + .replace(/<\/strong>/gi, "</b>"); + + //update the html body + jQuery(this._doc.body).html(html); + + //re-init designMode + this.enableDesignMode(); + } + else return(jQuery(this._doc.body).html()); +}; + +WYMeditor.WymClassMozilla.prototype._exec = function(cmd,param) { + + if(!this.selected()) return(false); + + switch(cmd) { + + case WYMeditor.INDENT: case WYMeditor.OUTDENT: + + var focusNode = this.selected(); + var sel = this._iframe.contentWindow.getSelection(); + var anchorNode = sel.anchorNode; + if(anchorNode.nodeName == "#text") anchorNode = anchorNode.parentNode; + + focusNode = this.findUp(focusNode, WYMeditor.BLOCKS); + anchorNode = this.findUp(anchorNode, WYMeditor.BLOCKS); + + if(focusNode && focusNode == anchorNode + && focusNode.tagName.toLowerCase() == WYMeditor.LI) { + + var ancestor = focusNode.parentNode.parentNode; + + if(focusNode.parentNode.childNodes.length>1 + || ancestor.tagName.toLowerCase() == WYMeditor.OL + || ancestor.tagName.toLowerCase() == WYMeditor.UL) + this._doc.execCommand(cmd,'',null); + } + + break; + + default: + + if(param) this._doc.execCommand(cmd,'',param); + else this._doc.execCommand(cmd,'',null); + } + + //set to P if parent = BODY + var container = this.selected(); + if(container.tagName.toLowerCase() == WYMeditor.BODY) + this._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); +}; + +/* @name selected + * @description Returns the selected container + */ +WYMeditor.WymClassMozilla.prototype.selected = function() { + + var sel = this._iframe.contentWindow.getSelection(); + var node = sel.focusNode; + if(node) { + if(node.nodeName == "#text") return(node.parentNode); + else return(node); + } else return(null); +}; + +WYMeditor.WymClassMozilla.prototype.addCssRule = function(styles, oCss) { + + styles.insertRule(oCss.name + " {" + oCss.css + "}", + styles.cssRules.length); +}; + + +//keydown handler, mainly used for keyboard shortcuts +WYMeditor.WymClassMozilla.prototype.keydown = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + var container = null; + + if(evt.ctrlKey){ + if(evt.keyCode == 66){ + //CTRL+b => STRONG + wym._exec(WYMeditor.BOLD); + return false; + } + if(evt.keyCode == 73){ + //CTRL+i => EMPHASIS + wym._exec(WYMeditor.ITALIC); + return false; + } + } + + else if(evt.keyCode == 13) { + if(!evt.shiftKey){ + //fix PRE bug #73 + container = wym.selected(); + if(container && container.tagName.toLowerCase() == WYMeditor.PRE) { + evt.preventDefault(); + wym.insert('<p></p>'); + } + } + } +}; + +//keyup handler, mainly used for cleanups +WYMeditor.WymClassMozilla.prototype.keyup = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + + wym._selected_image = null; + var container = null; + + if(evt.keyCode == 13 && !evt.shiftKey) { + + //RETURN key + //cleanup <br><br> between paragraphs + jQuery(wym._doc.body).children(WYMeditor.BR).remove(); + } + + if(evt.keyCode != 8 + && evt.keyCode != 17 + && evt.keyCode != 46 + && evt.keyCode != 224 + && !evt.metaKey + && !evt.ctrlKey) { + + //NOT BACKSPACE, NOT DELETE, NOT CTRL, NOT COMMAND + //text nodes replaced by P + + container = wym.selected(); + var name = container.tagName.toLowerCase(); + + //fix forbidden main containers + if( + name == "strong" || + name == "b" || + name == "em" || + name == "i" || + name == "sub" || + name == "sup" || + name == "a" + + ) name = container.parentNode.tagName.toLowerCase(); + + if(name == WYMeditor.BODY) wym._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); + } +}; + +WYMeditor.WymClassMozilla.prototype.enableDesignMode = function() { + if(this._doc.designMode == "off") { + try { + this._doc.designMode = "on"; + this._doc.execCommand("styleWithCSS", '', false); + } catch(e) { } + } +}; + +WYMeditor.WymClassMozilla.prototype.openBlockTag = function(tag, attributes) +{ + var attributes = this.validator.getValidTagAttributes(tag, attributes); + + // Handle Mozilla styled spans + if (tag == 'span' && attributes.style) { + var new_tag = this.getTagForStyle(attributes.style); + if (new_tag) { + tag = new_tag; + this._tag_stack.pop(); + this._tag_stack.push(tag); + attributes.style = ''; + } + } + + this.output += this.helper.tag(tag, attributes, true); +}; + +WYMeditor.WymClassMozilla.prototype.getTagForStyle = function(style) { + + if(/bold/.test(style)) return 'strong'; + if(/italic/.test(style)) return 'em'; + if(/sub/.test(style)) return 'sub'; + if(/super/.test(style)) return 'sup'; + return false; +}; + diff --git a/studio/static/js/wymeditor/jquery.wymeditor.opera.js b/studio/static/js/wymeditor/jquery.wymeditor.opera.js new file mode 100644 index 0000000..53c2232 --- /dev/null +++ b/studio/static/js/wymeditor/jquery.wymeditor.opera.js @@ -0,0 +1,119 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.opera.js + * Opera specific class and functions. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + */ + +WYMeditor.WymClassOpera = function(wym) { + + this._wym = wym; + this._class = "class"; + this._newLine = "\r\n"; +}; + +WYMeditor.WymClassOpera.prototype.initIframe = function(iframe) { + + this._iframe = iframe; + this._doc = iframe.contentWindow.document; + + //add css rules from options + var styles = this._doc.styleSheets[0]; + var aCss = eval(this._options.editorStyles); + + this.addCssRules(this._doc, aCss); + + this._doc.title = this._wym._index; + + //set the text direction + jQuery('html', this._doc).attr('dir', this._options.direction); + + //init designMode + this._doc.designMode = "on"; + + //init html value + this.html(this._wym._html); + + //pre-bind functions + if(jQuery.isFunction(this._options.preBind)) this._options.preBind(this); + + //bind external events + this._wym.bindEvents(); + + //bind editor keydown events + jQuery(this._doc).bind("keydown", this.keydown); + + //bind editor events + jQuery(this._doc).bind("keyup", this.keyup); + + //post-init functions + if(jQuery.isFunction(this._options.postInit)) this._options.postInit(this); + + //add event listeners to doc elements, e.g. images + this.listen(); +}; + +WYMeditor.WymClassOpera.prototype._exec = function(cmd,param) { + + if(param) this._doc.execCommand(cmd,false,param); + else this._doc.execCommand(cmd); + +}; + +WYMeditor.WymClassOpera.prototype.selected = function() { + + var sel=this._iframe.contentWindow.getSelection(); + var node=sel.focusNode; + if(node) { + if(node.nodeName=="#text")return(node.parentNode); + else return(node); + } else return(null); +}; + +WYMeditor.WymClassOpera.prototype.addCssRule = function(styles, oCss) { + + styles.insertRule(oCss.name + " {" + oCss.css + "}", + styles.cssRules.length); +}; + +//keydown handler +WYMeditor.WymClassOpera.prototype.keydown = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + var sel = wym._iframe.contentWindow.getSelection(); + startNode = sel.getRangeAt(0).startContainer; + + //Get a P instead of no container + if(!jQuery(startNode).parentsOrSelf( + WYMeditor.MAIN_CONTAINERS.join(","))[0] + && !jQuery(startNode).parentsOrSelf('li') + && evt.keyCode != WYMeditor.KEY.ENTER + && evt.keyCode != WYMeditor.KEY.LEFT + && evt.keyCode != WYMeditor.KEY.UP + && evt.keyCode != WYMeditor.KEY.RIGHT + && evt.keyCode != WYMeditor.KEY.DOWN + && evt.keyCode != WYMeditor.KEY.BACKSPACE + && evt.keyCode != WYMeditor.KEY.DELETE) + wym._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); + +}; + +//keyup handler +WYMeditor.WymClassOpera.prototype.keyup = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + wym._selected_image = null; +}; diff --git a/studio/static/js/wymeditor/jquery.wymeditor.pack.js b/studio/static/js/wymeditor/jquery.wymeditor.pack.js new file mode 100644 index 0000000..427b621 --- /dev/null +++ b/studio/static/js/wymeditor/jquery.wymeditor.pack.js @@ -0,0 +1 @@ +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('if(!f)o f={};(j(){if(!2n.4N||!4N.rN){o ae=["rM","rL","rK","rJ","9r","rI","3C","rH","rG","rF","rE","rD","5a","rC","cR","rB"];f.4N={};1j(o i=0;i<ae.Y;++i)f.4N[ae[i]]=j(){}}X f.4N=2n.4N})();D.55(f,{rA:"0.5-rz",2x:[],7K:[],5i:[],7P:"G",3Q:"{ry}",9X:"rx",dI:"{rw}",9n:"{rv}",9m:"{ru}",f1:"dB/",7w:"2Z.1b",dr:"2Z.js",f0:"3L/",9W:"{rt}",eZ:"1L/3U/",9l:"{rs}",9o:"{rr}",9V:"{rq}",9U:"{rp}",9M:"{ro}",9O:"{rn}",7S:"{rm}",9N:"{rl}",9S:"{rk}",9J:"{rj}",7R:"{ri}",9K:"{rh}",9T:"{rg}",9D:"{rf}",9G:"{rd}",9F:"{rc}",9E:"{rb}",7T:"{ra}",9R:"{r9}",9Q:"{r8}",9k:"{r7}",9j:"{r6}",dS:"3T",3w:"1i",ai:"N",P:"p",9A:"h1",9z:"h2",9y:"h3",9x:"h4",9w:"h5",9v:"h6",5r:"43",6e:"2H",A:"a",6o:"br",dz:"6V",dj:"3k",6g:"4E",5m:"5L",6s:"2G",6t:"ol",6v:"li",dT:"J",97:"1R",7u:"1V",64:"O",96:"5X",7t:"5c",68:"a5",7H:"a4",7G:"a2",7F:"a0",82:"eY",81:"eX",98:"eQ",94:"eP",dY:"eO",r5:"r4",dX:"eN",6x:"ad",6w:"ac",dW:"eM",4r:"r3",7E:"aa",r2:"ab",ak:"eT",al:"eU",6r:1g 6f("p","h1","h2","h3","h4","h5","h6","43","2H"),5v:1g 6f("6Q","2H","N","dl","2T","1M","h1","h2","h3","h4","h5","h6","hr","8w","ol","p","43","3k","2G","dd","dt","li","8v","4E","8u","5L","8t","6U"),3W:{ao:8,at:13,r1:35,r0:36,as:37,ar:38,aq:39,ap:40,qZ:1g 6f(37,38,39,40),an:46},qY:{qX:1,qW:2,qV:3},1h:j(5G,1S){c.3g=f.2x.1Y(c)-1;c.7J=5G;c.C=1S;c.4Q=D(5G).1A();if(c.C.Q)c.4Q=c.C.Q;c.C.4K=c.C.4K||c.dE();c.C.5j=c.C.5j||c.C.4K+f.f1+c.C.2Z+\'/\';c.C.7D=c.C.7D||c.dD();c.C.9s=c.C.9s||c.C.4K+f.f0;c.C.7U=c.C.7U||c.C.4K+f.eZ;c.C.7C=c.C.7C||c.dC();c.58()}});D.fn.5l=j(1S){1S=D.55({Q:"",4K:L,5j:L,7D:L,7U:L,7C:L,1E:L,4g:L,2Z:"3U",ds:S,52:S,3L:"en",4R:"8V",1x:"<N J=\'eL\'>"+"<N J=\'qU\'>"+f.9U+"</N>"+"<N J=\'qT\'></N>"+"<N J=\'qS\'>"+f.9T+f.9S+"</N>"+"<N J=\'qR\'>"+f.7T+f.9R+f.9Q+"</N>"+"<N J=\'qQ\'>"+f.9V+"</N>"+"</N>",ef:"<a J=\'qP\' "+"1R=\'8T://eB.5l.eA/\'>f</a>",4o:"<N J=\'a9 5p\'>"+"<1L "+"1V=\'"+f.9W+"qO.Q\' "+"4J=\'c.1I.qN.f.2x["+f.3Q+"].5y(c)\'"+"></1L>"+"</N>",3h:[],ee:"<N J=\'a8 5p\'>"+"<h2>{qM}</h2>"+"<2G>"+f.9M+"</2G>"+"</N>",e8:"<li J=\'"+f.9N+"\'><a 1R=\'#\' G=\'"+f.9O+"\' O=\'"+f.7S+"\'>"+f.7S+"</a></li>",e9:[{\'G\':\'eY\',\'O\':\'qL\',\'1b\':\'qK\'},{\'G\':\'eX\',\'O\':\'qJ\',\'1b\':\'qI\'},{\'G\':\'eW\',\'O\':\'eW\',\'1b\':\'qH\'},{\'G\':\'eV\',\'O\':\'eV\',\'1b\':\'qG\'},{\'G\':\'eU\',\'O\':\'qF\',\'1b\':\'qE\'},{\'G\':\'eT\',\'O\':\'qD\',\'1b\':\'qC\'},{\'G\':\'ad\',\'O\':\'ad\',\'1b\':\'qB\'},{\'G\':\'ac\',\'O\':\'ac\',\'1b\':\'qA\'},{\'G\':\'eS\',\'O\':\'eS\',\'1b\':\'qz\'},{\'G\':\'eR\',\'O\':\'eR\',\'1b\':\'qy\'},{\'G\':\'eQ\',\'O\':\'a5\',\'1b\':\'qx\'},{\'G\':\'ab\',\'O\':\'ab\',\'1b\':\'qw\'},{\'G\':\'eP\',\'O\':\'a4\',\'1b\':\'qv\'},{\'G\':\'eO\',\'O\':\'a2\',\'1b\':\'qu\'},{\'G\':\'eN\',\'O\':\'a0\',\'1b\':\'qt\'},{\'G\':\'eM\',\'O\':\'7T\',\'1b\':\'qs\'},{\'G\':\'aa\',\'O\':\'aa\',\'1b\':\'qr\'}],ed:"<N J=\'a7 5p\'>"+"<h2>{qq}</h2>"+"<2G>"+f.9D+"</2G>"+"</N>",e5:"<li J=\'"+f.9E+"\'>"+"<a 1R=\'#\' G=\'"+f.9G+"\'>"+f.9F+"</a></li>",e6:[{\'G\':\'P\',\'O\':\'qp\',\'1b\':\'qo\'},{\'G\':\'9A\',\'O\':\'qn\',\'1b\':\'qm\'},{\'G\':\'9z\',\'O\':\'ql\',\'1b\':\'qk\'},{\'G\':\'9y\',\'O\':\'qj\',\'1b\':\'qi\'},{\'G\':\'9x\',\'O\':\'qh\',\'1b\':\'qg\'},{\'G\':\'9w\',\'O\':\'qf\',\'1b\':\'qe\'},{\'G\':\'9v\',\'O\':\'qd\',\'1b\':\'qc\'},{\'G\':\'5r\',\'O\':\'qb\',\'1b\':\'qa\'},{\'G\':\'6e\',\'O\':\'q9\',\'1b\':\'q8\'},{\'G\':\'5m\',\'O\':\'q7\',\'1b\':\'q6\'}],ec:"<N J=\'a6 5p\'>"+"<h2>{q5}</h2><2G>"+f.9J+"</2G></N>",e7:"<li J=\'q4"+f.7R+"\'><a 1R=\'#\' G=\'"+f.7R+"\'>"+f.9K+"</a></li>",3Y:[],ea:"<N J=\'eJ 5p\'>"+"<h2>{q3}</h2>"+"</N>",eb:"<N J=\'eK 5p\'>"+"<h2>{q2}</h2>"+"<4F J=\'eI\'></4F>"+"</N>",q1:".eL",q0:".a8",pZ:" 2G",pY:".a7",pX:".a6",9g:".eK",pW:".a9 1L",6z:".a9",dR:".eJ",e3:".a8 a",88:".a7 a",e2:".a6 a",9q:".eI",99:".ew",7v:".es",63:".a3",95:".ev",7s:".er",dc:".eh",dm:".ek",dk:".ej",di:".eo",df:".el",62:"1M",d8:".6j",d9:"",dq:".6k",do:".ex",67:".eu",dn:".ep",de:".ei",da:".eg",e1:".pV",e0:"7Q",7I:"eH=no,eG=no,eF=no,eE=no"+",4I=eD,7m=eC,3q=0,2m=0",dV:"eH=no,eG=no,eF=no,eE=no"+",pU=pT,4I=eD,7m=eC,3q=0,2m=0",1H:"<!pS Q pR \'-//pQ//ez pP 1.0 pO//pN\'"+" \'8T://eB.pM.eA/pL/ey/ez/ey-pK.pJ\'>"+"<Q 3C=\'"+f.9o+"\'><2S>"+"<2w 5X=\'4g\' 1d=\'V/1b\' 8R=\'7k\'"+" 1R=\'"+f.9n+"\' />"+"<O>"+f.9k+"</O>"+"<2j 1d=\'V/8S\'"+" 1V=\'"+f.9l+"\'></2j>"+"<2j 1d=\'V/8S\'"+" 1V=\'"+f.9m+"\'></2j>"+"</2S>"+f.9j+"</Q>",dO:"<1i J=\'6i ex\'"+" 4J=\'f.5h("+f.3Q+")\'"+">"+"<1M>"+"<2T>"+"<1z 1d=\'5Y\' J=\'6k\' R=\'"+f.68+"\' />"+"<3l>{a5}</3l>"+"<N J=\'1N\'>"+"<1n>{et}</1n>"+"<1z 1d=\'V\' J=\'ew\' R=\'\' 2u=\'40\' />"+"</N>"+"<N J=\'1N\'>"+"<1n>{eq}</1n>"+"<1z 1d=\'V\' J=\'a3\' R=\'\' 2u=\'40\' />"+"</N>"+"<N J=\'1N\'>"+"<1n>{pI}</1n>"+"<1z 1d=\'V\' J=\'ev\' R=\'\' 2u=\'40\' />"+"</N>"+"<N J=\'1N 1N-a1\'>"+"<1z J=\'7Y\' 1d=\'3r\'"+" R=\'{7X}\' />"+"<1z J=\'6j\' 1d=\'3K\'"+"R=\'{7W}\' />"+"</N>"+"</2T>"+"</1M>"+"</1i>",dN:"<1i J=\'6i eu\'"+" 4J=\'f.5h("+f.3Q+")\'"+">"+"<1M>"+"<2T>"+"<1z 1d=\'5Y\' J=\'6k\' R=\'"+f.7H+"\' />"+"<3l>{a4}</3l>"+"<N J=\'1N\'>"+"<1n>{et}</1n>"+"<1z 1d=\'V\' J=\'es\' R=\'\' 2u=\'40\' />"+"</N>"+"<N J=\'1N\'>"+"<1n>{pH}</1n>"+"<1z 1d=\'V\' J=\'er\' R=\'\' 2u=\'40\' />"+"</N>"+"<N J=\'1N\'>"+"<1n>{eq}</1n>"+"<1z 1d=\'V\' J=\'a3\' R=\'\' 2u=\'40\' />"+"</N>"+"<N J=\'1N 1N-a1\'>"+"<1z J=\'7Y\' 1d=\'3r\'"+" R=\'{7X}\' />"+"<1z J=\'6j\' 1d=\'3K\'"+"R=\'{7W}\' />"+"</N>"+"</2T>"+"</1M>"+"</1i>",dM:"<1i J=\'6i ep\'"+" 4J=\'f.5h("+f.3Q+")\'"+">"+"<1M>"+"<2T>"+"<1z 1d=\'5Y\' J=\'6k\' R=\'"+f.7G+"\' />"+"<3l>{a2}</3l>"+"<N J=\'1N\'>"+"<1n>{pG}</1n>"+"<1z 1d=\'V\' J=\'eo\' R=\'\' 2u=\'40\' />"+"</N>"+"<N J=\'1N\'>"+"<1n>{pF}</1n>"+"<1z 1d=\'V\' J=\'el\' R=\'\' 2u=\'40\' />"+"</N>"+"<N J=\'1N\'>"+"<1n>{pE}</1n>"+"<1z 1d=\'V\' J=\'ek\' R=\'3\' 2u=\'3\' />"+"</N>"+"<N J=\'1N\'>"+"<1n>{pD}</1n>"+"<1z 1d=\'V\' J=\'ej\' R=\'2\' 2u=\'3\' />"+"</N>"+"<N J=\'1N 1N-a1\'>"+"<1z J=\'7Y\' 1d=\'3r\'"+" R=\'{7X}\' />"+"<1z J=\'6j\' 1d=\'3K\'"+"R=\'{7W}\' />"+"</N>"+"</2T>"+"</1M>"+"</1i>",dL:"<1i J=\'6i ei\'"+" 4J=\'f.5h("+f.3Q+")\'"+">"+"<1M>"+"<1z 1d=\'5Y\' J=\'6k\' R=\'"+f.7F+"\' />"+"<2T>"+"<3l>{a0}</3l>"+"<N J=\'1N\'>"+"<4F J=\'eh\' 7i=\'10\' 7j=\'50\'></4F>"+"</N>"+"<N J=\'1N\'>"+"<1z J=\'7Y\' 1d=\'3r\'"+" R=\'{7X}\' />"+"<1z J=\'6j\' 1d=\'3K\'"+"R=\'{7W}\' />"+"</N>"+"</2T>"+"</1M>"+"</1i>",dK:"<1i J=\'6i eg\'"+" 4J=\'f.5h("+f.3Q+")\'"+"></1i>",4z:[],6c:"{",6b:"}",9Z:1f,3B:1f,3z:1f,9a:1f,90:1f},1S);u c.dw(j(){1g f.1h(D(c),1S)})};D.55({pC:j(i){u(f.2x[i])}});f.1h.B.58=j(){if(D.7V.pB){o 4p=1g f.2t(c)}X if(D.7V.pA){o 4p=1g f.2C(c)}X if(D.7V.pz){o 4p=1g f.3V(c)}X if(D.7V.py){o 4p=1g f.3c(c)}if(4p){if(D.2A(c.C.9Z))c.C.9Z(c);o 9Y=1g f.1m();D.55(9Y,4p);c.42=1g f.1w(9Y);if(c.C.1E||c.C.4g){c.dA()}c.4O=1g f.2V();1j(o 6Z in 4p){c[6Z]=4p[6Z]}c.2f=D(c.7J).e4().6J(c.C.1x).8U().du(\'px\'+c.3g);if(D.2A(D.fn.4y)){D.4y(c.2f.5Z(0),f.9X,c.3g);D.4y(c.7J.5Z(0),f.9X,c.3g)}o h=f.1P;o 4o=c.C.4o;4o=h.1l(4o,f.3Q,c.3g);4o=h.1l(4o,f.9W,c.C.7U);o 1x=D(c.2f).Q();1x=h.1l(1x,f.9V,c.C.ef);1x=h.1l(1x,f.9U,c.C.ee);1x=h.1l(1x,f.9T,c.C.ed);1x=h.1l(1x,f.9S,c.C.ec);1x=h.1l(1x,f.7T,c.C.eb);1x=h.1l(1x,f.9R,4o);1x=h.1l(1x,f.9Q,c.C.ea);o 9P=2B(c.C.e9);o 9L="";1j(o i=0;i<9P.Y;i++){o 5o=9P[i];if(5o.G&&5o.O)o 4n=c.C.e8;o 4n=h.1l(4n,f.9O,5o.G);4n=h.1l(4n,f.7S,c.C.6c+5o.O+c.C.6b);4n=h.1l(4n,f.9N,5o.1b);9L+=4n}1x=h.1l(1x,f.9M,9L);o 6h=2B(c.C.3Y);o 9I="";1j(o i=0;i<6h.Y;i++){o 4l=6h[i];if(4l.G&&4l.O)o 4k=c.C.e7;4k=h.1l(4k,f.7R,4l.G);4k=h.1l(4k,f.9K,4l.O);9I+=4k}1x=h.1l(1x,f.9J,9I);o 9H=2B(c.C.e6);o 9C="";1j(o i=0;i<9H.Y;i++){o 5n=9H[i];if(5n.G&&5n.O)o 4m=c.C.e5;4m=h.1l(4m,f.9G,5n.G);4m=h.1l(4m,f.9F,c.C.6c+5n.O+c.C.6b);4m=h.1l(4m,f.9E,5n.1b);9C+=4m}1x=h.1l(1x,f.9D,9C);1x=c.9i(1x);D(c.2f).Q(1x);D(c.2f).3E(c.C.9g).e4();c.52()}};f.1h.B.5x=j(){o F=c;D(c.2f).3E(c.C.e3).7Q(j(){F.1K.1I.4W();F.dZ(D(c).1r(f.7P));u(L)});D(c.2f).3E(c.C.88).7Q(j(){F.K(D(c).1r(f.7P));u(L)});D(c.2f).3E(c.C.9q).2y(j(){D(F.I.1i).Q(D(c).1A())}).4W(j(){D(c).6d(\'9p\')}).pw(j(){D(c).6d(\'9p\')});D(c.2f).3E(c.C.e2).7Q(j(){o 6h=2B(F.C.3Y);o 9B=D(c).1r(f.7P);o 4l=f.1P.aH(6h,9B);if(4l){o 4x=4l.aO;F.6d(9B,4x)}F.1K.1I.4W();u(L)});D(c.C.e1).3A(c.C.e0,j(){F.6a()})};f.1h.B.pv=j(){u(c.I!=1f)};f.1h.B.co=j(){u(c.2f)};f.1h.B.Q=j(Q){if(1s Q===\'3T\')D(c.I.1i).Q(Q);X u(D(c.I.1i).Q())};f.1h.B.1v=j(){u c.42.3Z(c.Q())};f.1h.B.dZ=j(1F){3f(1F){1k f.98:o K=c.K();if(K||c.2l)c.4L(f.68);1p;1k f.94:c.4L(f.7H);1p;1k f.dY:c.4L(f.7G);1p;1k f.dX:c.4L(f.7F);1p;1k f.dW:c.6a();c.dG();1p;1k f.7E:c.4L(f.7E,c.C.dV);1p;3U:c.1O(1F);1p}};f.1h.B.K=j(3t){if(3t){o K=1f;if(3t.1q()==f.5m){K=c.K();3f(K.1t.1q()){1k f.6g:1k f.5m:1p;3U:o 7O=1g 6f(f.6g,f.5m);K=c.2K(c.K(),7O);1p}if(K!=1f){3t=(K.1t.1q()==f.6g)?f.5m:f.6g;c.9t(K,3t);c.6a()}}X{o 7O=1g 6f(f.P,f.9A,f.9z,f.9y,f.9x,f.9w,f.9v,f.5r,f.6e);K=c.2K(c.K(),7O);if(K){o 3R=1f;if(3t.1q()==f.6e){o 2H=c.2K(c.K(),f.6e);if(2H==1f){3R=c.I.61(3t);K.1B.dU(3R,K);3R.dx(K);c.4Z(3R.pu)}X{o 7N=2H.6u;o 9u=7N.Y;o 7M=1f;if(9u>0)7M=7N.4v(0);1j(o x=0;x<9u;x++){2H.1B.dU(7N.4v(0),2H)}2H.1B.pt(2H);if(7M)c.4Z(7M)}}X c.9t(K,3t);c.6a()}}}X u(c.1c())};f.1h.B.6d=j(4k,4x){o K=(c.2l?c.2l:D(c.1c()));K=D(K).4V(4x);D(K).6d(4k);if(!D(K).1r(f.dT))D(K).ps(c.5z)};f.1h.B.2K=j(Z,53){if(Z){o 4j=Z.1t.1q();if(1s(53)==f.dS){7c(4j!=53&&4j!=f.3w){Z=Z.1B;4j=Z.1t.1q()}}X{o 7L=L;7c(!7L&&4j!=f.3w){1j(o i=0;i<53.Y;i++){if(4j==53[i]){7L=S;1p}}if(!7L){Z=Z.1B;4j=Z.1t.1q()}}}if(4j!=f.3w)u(Z);X u(1f)}X u(1f)};f.1h.B.9t=j(Z,3t){o 3R=c.I.61(3t);o Q=D(Z).Q();Z.1B.pr(3R,Z);D(3R).Q(Q);c.4Z(3R)};f.1h.B.9i=j(4M){if(!f.7K[c.C.3L]){4u{2B(D.9e({9d:c.C.9s+c.C.3L+\'.js\',9c:L}).9b)}4t(e){f.4N.9r("f: 9r 7c pq d3 cP.");u 4M}}1j(o 1U in f.7K[c.C.3L]){4M=f.1P.1l(4M,c.C.6c+1U+c.C.6b,f.7K[c.C.3L][1U])};u(4M)};f.1h.B.dH=j(4M){u(c.C.6c+4M+c.C.6b)};f.1h.B.2p=j(dQ){D(c.2f).3E(c.C.dR).Q(dQ)};f.1h.B.6a=j(){o Q;D(c.I.1i).80(f.6o).5s();Q=c.1v();D(c.7J).1A(Q);D(c.2f).3E(c.C.9q).bt(\'.9p\').1A(Q);};f.1h.B.4L=j(69,7I,dJ){o dP=7I||c.1W.C.7I;o 9h=2n.60(\'\',\'4L\',dP);if(9h){o 4i="";3f(69){1k(f.68):4i=c.C.dO;1p;1k(f.7H):4i=c.C.dN;1p;1k(f.7G):4i=c.C.dM;1p;1k(f.7F):4i=c.C.dL;1p;1k(f.7E):4i=c.C.dK;1p;3U:4i=dJ}o h=f.1P;o 1H=c.C.1H;1H=h.1l(1H,f.dI,c.C.4K);1H=h.1l(1H,f.9o,c.C.4R);1H=h.1l(1H,f.9n,c.C.5j+f.7w);1H=h.1l(1H,f.9m,c.C.7D);1H=h.1l(1H,f.9l,c.C.7C);1H=h.1l(1H,f.9k,c.dH(69));1H=h.1l(1H,f.9j,4i);1H=h.1l(1H,f.3Q,c.3g);1H=c.9i(1H);o 4h=9h.3D;4h.pp(1H);4h.5f()}};f.1h.B.dG=j(){D(c.2f).3E(c.C.9g).po()};f.1h.B.dp=j(){o dF=1g pn();u("F-"+dF.pm())};f.1h.B.5E=j(2M){o K=c.1c(),Q=\'\',3s,1u;3s=2M.5F(1g 2N(c.4U+\'{2,}\',\'g\'));1j(o i=0,l=3s.Y;i<l;i++){Q+=\'<p>\'+(3s[i].5F(c.4U).5A(\'<br />\'))+\'</p>\'}if(K&&K.1t.1q()!=f.3w){3s=D(Q,c.I).pl(K);1u=3s[3s.Y-1]}X{3s=D(Q,c.I).pk(c.I.1i);1u=3s[3s.Y-1]}if(D(K).V()==\'\'){D(K).5s()}D(\'1i > br\',c.I).5s();c.4Z(1u)};f.1h.B.5B=j(Q){o 2L=c.1K.1I.3e(),1D,Z;if(2L.1u!=1f){1D=2L.au(0);Z=1D.pj(Q);1D.ph();1D.pg(Z)}X{c.5E(Q)}};f.1h.B.az=j(2m,2D){c.5B(2m+c.1K.1I.3e().8W()+2D)};f.1h.B.ay=j(){c.5B(c.1K.1I.3e().8W())};f.1h.B.4Z=j(Z,3X){o 1D=c.I.4Y(),2L=c.1K.1I.3e();3X=3X?0:1;1D.pf(Z);2L.pe(1D);2L.ax(Z,3X);c.1K.1I.4W()};f.1h.B.4S=j(4h,2s){o 1E=4h.4T[0];if(1E){1j(o i=0;i<2s.Y;i++){o 1Z=2s[i];if(1Z.G&&1Z.1b)c.5t(1E,1Z)}}};f.1h.B.dE=j(){u D(D.7x(D(\'2j\'),j(s){u(s.1V&&s.1V.M(/7B\\.5l(\\.7A|\\.7z|\\.7y)?\\.js(\\?.*)?$/))})).1r(\'1V\').W(/7B\\.5l(\\.7A|\\.7z|\\.7y)?\\.js(\\?.*)?$/,\'\')};f.1h.B.dD=j(){u D(D.7x(D(\'2j\'),j(s){u(s.1V&&s.1V.M(/7B\\.5l(\\.7A|\\.7z|\\.7y)?\\.js(\\?.*)?$/))})).1r(\'1V\')};f.1h.B.dC=j(){u D(D.7x(D(\'2j\'),j(s){u(s.1V&&s.1V.M(/7B(-(.*)){0,1}(\\.7A|\\.7z|\\.7y)?\\.js(\\?.*)?$/))})).1r(\'1V\')};f.1h.B.pd=j(){u D(D.7x(D(\'2w\'),j(s){u(s.1R&&s.1R.M(/5l\\/dB\\/(.*)7k\\.1b(\\?.*)?$/))})).1r(\'1R\')};f.1h.B.dA=j(){o 5k=1g f.3G();if(c.C.4g){5k.3Z(D.9e({9d:c.C.4g,9c:L}).9b)}X{5k.3Z(c.C.1E,L)}if(c.C.3Y.Y==0){c.C.3Y=5k.4A.3Y}if(c.C.3h.Y==0){c.C.3h=5k.4A.3h}if(c.C.4z.Y==0){c.C.4z=5k.4A.4z}};f.1h.B.5w=j(){D(c.I.1i).3A("7r",c.7r)};f.1h.B.7r=j(1e){o F=f.2x[c.pc.O];F.2l=(1e.dy.1t.1q()==f.dz)?1e.dy:1f};f.dv=j(1R){o 2w=3D.61(\'2w\');2w.5X=\'4g\';2w.1R=1R;o 2S=D(\'2S\').5Z(0);2S.dx(2w)};f.1h.B.52=j(){if(c.C.52&&!f.5i[c.C.2Z]){o 9f=L;o 6C=1g 2N(c.C.2Z+\'\\/\'+f.7w+\'$\');D(\'2w\').dw(j(){if(c.1R.M(6C))9f=S});if(!9f)f.dv(c.C.5j+f.7w)}D(c.2f).du("pb"+c.C.2Z);if(c.C.ds&&!f.5i[c.C.2Z]){2B(D.9e({9d:c.C.5j+f.dr,9c:L}).9b)}if(f.5i[c.C.2Z]&&f.5i[c.C.2Z].58)f.5i[c.C.2Z].58(c)};f.5h=j(7o){o F=2n.pa.f.2x[7o];o 4h=2n.3D;o 1c=F.1c();o 69=D(F.C.dq).1A();o 65=F.dp();3f(69){1k f.68:if(1c&&1c.1t&&1c.1t.1q!=f.A)1c=D(1c).4V(f.A);if(!1c&&F.2l)1c=D(F.2l).4V(f.A);1p}if(D.2A(F.C.9a))F.C.9a(F,2n);o 1E=4h.4T[0];o 2s=2B(F.C.4z);F.4S(4h,2s);if(1c){D(F.C.99).1A(D(1c).1r(f.97));D(F.C.7v).1A(D(1c).1r(f.7u));D(F.C.63).1A(D(1c).1r(f.64));D(F.C.95).1A(D(1c).1r(f.96));D(F.C.7s).1A(D(1c).1r(f.7t))}if(F.2l){D(F.C.67+" "+F.C.7v).1A(D(F.2l).1r(f.7u));D(F.C.67+" "+F.C.63).1A(D(F.2l).1r(f.64));D(F.C.67+" "+F.C.7s).1A(D(F.2l).1r(f.7t))}D(F.C.do+" "+F.C.62).3r(j(){o 5g=D(F.C.99).1A();if(5g.Y>0){o 2w;if(1c[0]&&1c[0].1t.1q()==f.A){2w=1c}X{F.1O(f.98,65);2w=D("a[1R="+65+"]",F.I.1i)}2w.1r(f.97,5g).1r(f.64,D(F.C.63).1A()).1r(f.96,D(F.C.95).1A())}2n.5f()});D(F.C.67+" "+F.C.62).3r(j(){o 5g=D(F.C.7v).1A();if(5g.Y>0){F.1O(f.94,65);D("6V[1V$="+65+"]",F.I.1i).1r(f.7u,5g).1r(f.64,D(F.C.63).1A()).1r(f.7t,D(F.C.7s).1A())}2n.5f()});D(F.C.dn+" "+F.C.62).3r(j(){o 93=D(F.C.dm).1A();o 92=D(F.C.dk).1A();if(93>0&&92>0){o 3k=F.I.61(f.dj);o 91=1f;o p9=1f;o dg=D(F.C.di).1A();o dh=3k.p8();dh.8X=dg;1j(x=0;x<93;x++){91=3k.p7(x);1j(y=0;y<92;y++){91.p6(y)}}D(3k).1r(\'cm\',D(F.C.df).1A());o Z=D(F.2K(F.K(),f.6r)).5Z(0);if(!Z||!Z.1B)D(F.I.1i).p5(3k);X D(Z).6J(3k)}2n.5f()});D(F.C.de+" "+F.C.62).3r(j(){o db=D(F.C.dc).1A();F.5E(db);2n.5f()});D(F.C.da+" "+F.C.d9).Q(F.1v());D(F.C.d8).7r(j(){2n.5f()});if(D.2A(F.C.90))F.C.90(F,2n)};f.2V=j(){c.7q=3D.61(\'N\');u c};f.2V.B.E=j(G,1S,60){1S=1S||L;60=60||L;u\'<\'+G+(1S?c.8Z(1S):\'\')+(60?\'>\':\' />\')};f.2V.B.p4=j(G,2c,1S){1S=1S||L;u\'<\'+G+(1S?c.8Z(1S):\'\')+\'>\'+2c+\'</\'+G+\'>\'};f.2V.B.p3=j(2c){u\'<![p2[\'+2c+\']]>\'};f.2V.B.d5=j(3P){u c.d7(c.d4(3P))};f.2V.B.d7=j(d6){u d6.W(/&p1;([a-z]+|(#\\d+));/ig,"&$1;")};f.2V.B.8Z=j(1S){o 3P=c;3P.8Y=\'\';1j(o 1U in 1S){o p0=\'\';o R=1S[1U];if(1s R!=\'j\'&&R.Y>0){if(cf(1U)==1U&&1s R==\'4B\'){1U=R.oZ();R=R.4P()}if(1U!=\'\'&&R!=\'\'){3P.8Y+=\' \'+1U+\'="\'+3P.d5(R)+\'"\'}}}u 3P.8Y};f.2V.B.d4=j(3T,7p){c.7q.8X=3T;c.7q.oY=3T;o 1Q=c.7q.8X;if(1s 7p==\'2e\'){if(7p!=L)1Q=1Q.W(\'"\',\'&oX;\');if(7p==S)1Q=1Q.W(\'"\',\'&#oW;\')}u 1Q};f.2V.B.oV=j(5d){o 1Q=[];o 2i=5d.5F(/((=\\s*")(")("))|((=\\s*\\\')(\\\')(\\\'))|((=\\s*[^>\\s]*))/g);if(2i.8W()!=5d){1j(o k in 2i){o v=2i[k];if(1s v!=\'j\'&&v.Y!=0){o re=1g 2N(\'(\\\\w+)\\\\s*\'+v);if(M=5d.M(re)){o R=v.W(/^[\\s=]+/,"");o 5e=R.oU(0);5e=5e==\'"\'?\'"\':(5e=="\'"?"\'":\'\');if(5e!=\'\'){R=5e==\'"\'?R.W(/^"|"+$/g,\'\'):R.W(/^\'|\'+$/g,\'\')}5d=5d.W(M[0],\'\');1Q.1Y([M[1],R])}}}}u 1Q};f.bu={"8N":{"oT":{"5b":["57","2S","Q","7n","1T","2j","1o","O"],"H":["J","id","1o","O","d2","d1"]},"d3":{"5b":["57","br","hr","1L","1T","2j"],"H":{"3C":["8V","cS"],"0":"3L","1":"3P:3L"}},"d0":{"H":{"d2":/^(\\w){1}$/,"d1":/^(\\d)+$/}}},"8O":{"2n":{"7g":["1i"],"H":["4J","oS"]},"1M":{"7g":["1M","1z","4F","4X","a","1n","3K"],"H":["oR","oQ","oP","oO","oN","aG"]},"d0":{"5b":["57","6X","br","cp","oM","2S","Q","1L","7n","1T","2j","1o","O"],"H":["oL","oK","aF"]},"oJ":{"5b":["57","6X","br","2S","Q","7n","1T","2j","1o","O"],"H":["aE","oI","oH","oG","oF","oE","oD"]}},"1J":{"a":{"H":{"0":"7l","1":"cZ","2":"1R","3":"cM","4":"G","5":"5X","6":"cL","cY":/^(cX|cW|8x|cV|cU|cT)$/,"7":"1d"}},"0":"6Y","1":"8q","2":"6Q","bp":{"H":{"0":"5c","1":"cZ","2":"1R","oC":/^(S|L)$/,"cY":/^(cX|cW|8x|cV|cU|cT)$/},"2d":["5c"]},"3":"b","57":{"H":["1R"],"2d":["1R"]},"6X":{"H":{"3C":/^(8V|cS)$/},"2d":["3C"]},"4":"bo","2H":{"H":["56"]},"5":"1i","6":"br","3K":{"H":{"2Y":/^(2Y)$/,"1d":/^(3K|cO|3r)$/,"0":"R"},"3O":"1M"},"7":"bn","8":"56","9":"bm","6W":{"H":{"4f":/^(2D|2m|4e|4d)$/,"0":"2X","1":"4c","3u":/^(\\d)+$/,"4b":/^(3q|4a|49|48)$/,"2":"4I"},"3O":"5N"},"5N":{"H":{"4f":/^(2D|2m|4e|4d)$/,"0":"2X","1":"4c","3u":/^(\\d)+$/,"4b":/^(3q|4a|49|48)$/,"2":"4I"}},"10":"dd","8p":{"H":{"0":"56","cN":/^([0-9]){8}/}},"11":"N","12":"bl","13":"dl","14":"dt","15":"em","2T":{"3O":"1M"},"1M":{"H":{"0":"5Q","1":"5T","2":"5T-7l","3":"oB","oA":/^(5Z|oz)$/},"2d":["5Q"]},"2S":{"H":["cR"]},"16":"h1","17":"h2","18":"h3","19":"h4","20":"h5","21":"h6","22":"hr","Q":{"H":["oy"]},"23":"i","6V":{"H":["5c","1V","7m","ox","ow","cw","4I"],"2d":["5c","1V"]},"1z":{"H":{"0":"5T","1":"5c","cQ":/^(cQ)$/,"2Y":/^(2Y)$/,"ov":/^(\\d)+$/,"2":"G","8P":/^(8P)$/,"2u":/^(\\d)+$/,"3":"1V","1d":/^(3K|ou|cP|5Y|bs|ot|os|cO|3r|V)$/,"4":"R"},"3O":"1M"},"bk":{"H":{"0":"56","cN":/^([0-9]){8}/}},"24":"bj","1n":{"H":["1j"],"3O":"1M"},"25":"3l","26":"li","2w":{"H":{"0":"7l","1":"1R","2":"cM","8R":/^(8Q|cq|cr|cs|7k|oq|,|;|)+$/i,"5X":/^(cK|cJ|cI|cH|cG|cF|cE|cD|cC|7o|8U|cB|cA|3p|4g|cz||cy|cx)+$/i,"cL":/^(cK|cJ|cI|cH|cG|cF|cE|cD|cC|7o|8U|cB|cA|3p|4g|cz||cy|cx)+$/i,"3":"1d"},"3O":"2S"},"bi":{"H":["id","G"],"2d":["id"]},"7n":{"H":{"0":"2c","8T-bq":/^(2c\\-1d|op|oo|om\\-ok)$/i,"1":"G","2":"oj"},"2d":["2c"]},"27":"8w","4B":{"H":["oi","oh","og","of","4y","oe","7m","G","od","1d","cw","4I"]},"28":"ol","bh":{"H":{"0":"1n","2Y":/^(2Y)$/},"2d":["1n"]},"6T":{"H":{"0":"1n","2Y":/^(2Y)$/,"1c":/^(1c)$/,"1":"R"},"3O":"4X"},"29":"p","1T":{"H":{"0":"1d","cv":/^(4y|oc|4B)$/,"1":"cv","2":"R"},"2d":["G"]},"30":"43","q":{"H":["56"]},"31":"bg","2j":{"H":{"1d":/^(V\\/ob|V\\/8S|V\\/oa|V\\/o9|V\\/o8|V\\/3P)$/,"0":"7l","cu":/^(cu)$/,"1":"1V"},"2d":["1d"]},"4X":{"H":{"2Y":/^(2Y)$/,"ct":/^(ct)$/,"0":"G","1":"2u"},"3O":"1M"},"32":"bf","33":"3u","34":"3b","1o":{"H":{"0":"1d","8R":/^(7k|o7|o6|cs|o5|cr|cq|o4|8Q)$/},"2d":["1d"]},"35":"3a","36":"3S","3k":{"H":{"0":"cn","1":"o3","2":"o2","cp":/^(o1|o0|nZ|nY|nX|nW|nV|co|cn)$/,"nU":/^(nT|nS|7i|7j|8Q)$/,"3":"cm","4":"4I"}},"8v":{"H":{"4f":/^(2D|2m|4e|4d)$/,"0":"2X","1":"4c","4b":/^(3q|4a|49|48)$/}},"4E":{"H":{"0":"6Y","4f":/^(2m|2D|4e|4d|2X)$/,"1":"cl","2":"2X","3":"4c","ck":/^(\\d)+$/,"4":"cj","ci":/^(\\d)+$/,"1G":/^(6W|5N|1N|ch)$/,"4b":/^(3q|4a|49|48)$/}},"4F":{"H":["7j","7i","2Y","G","8P"],"2d":["7j","7i"],"3O":"1M"},"8u":{"H":{"4f":/^(2D|2m|4e|4d)$/,"0":"2X","1":"4c","4b":/^(3q|4a|49)$/,"2":"48"}},"5L":{"H":{"0":"6Y","4f":/^(2m|2D|4e|4d|2X)$/,"1":"cl","2":"2X","3":"4c","ck":/^(\\d)+$/,"4":"cj","ci":/^(\\d)+$/,"1G":/^(6W|5N|1N|ch)$/,"4b":/^(3q|4a|49|48)$/}},"8t":{"H":{"4f":/^(2D|2m|4e|4d)$/,"0":"2X","1":"4c","4b":/^(3q|4a|49|48)$/}},"37":"O","6U":{"H":{"4f":/^(2D|2m|4e|4d|2X)$/,"0":"2X","1":"4c","4b":/^(3q|4a|49|48)$/}},"38":"be","39":"2G","40":"o"},6L:[],6K:[],5q:j(E,H){o 7h={};o cg=c.ca(E);1j(o 2k in H){o R=H[2k];o h=f.1P;if(!h.2E(c.6L,2k)&&!h.2E(c.6K,R)){if(1s R!=\'j\'&&h.2E(cg,2k)){if(c.cc(E,2k)){if(c.cb(E,2k,R)){7h[2k]=R}}X{7h[2k]=R}}}}u 7h},c9:j(E){o 1Q=[];if(c.1J[E]&&c.1J[E][\'H\']){1j(k in c.1J[E][\'H\']){1Q.1Y(cf(k)==k?c.1J[E][\'H\'][k]:k)}}u 1Q},cd:j(){o 1Q=[];1j(o 1U in c.8O){1Q.1Y(c.8O[1U])}1j(o 1U in c.8N){1Q.1Y(c.8N[1U])}u 1Q},ce:j(E){if(c.1J[E]){u S}1j(o 1U in c.1J){if(c.1J[1U]==E){u S}}u L},c8:j(E){o 8L=[];if(c.ce(E)){o 8M=c.cd();1j(o 1U in 8M){o 3N=8M[1U];if(1s 3N==\'4B\'){o h=f.1P;if((3N[\'5b\']&&h.2E(3N[\'5b\'],E))||(3N[\'7g\']&&!h.2E(3N[\'7g\'],E))){nR}o 7f=3N[\'H\']?3N[\'H\']:3N[\'nQ\'];1j(o k in 7f){8L.1Y(1s 7f[k]!=\'3T\'?k:7f[k])}}}}u 8L},cc:j(E,2k){u c.1J[E]&&((c.1J[E][\'H\']&&c.1J[E][\'H\'][2k])||(c.1J[E][\'2d\']&&f.1P.2E(c.1J[E][\'2d\'],2k)))},cb:j(E,2k,R){if(c.1J[E]&&(c.1J[E][\'H\']&&c.1J[E][\'H\'][2k]&&R.Y>0&&!R.M(c.1J[E][\'H\'][2k]))||(c.1J[E]&&c.1J[E][\'2d\']&&f.1P.2E(c.1J[E][\'2d\'],2k)&&R.Y==0)){u L}u 1s c.1J[E]!=\'2e\'},ca:j(E){if(!c.5W){c.5W={}}if(!c.5W[E]){c.5W[E]=c.c9(E).nP(c.c8(E))}u c.5W[E]}};f.2W=j(7d){c.4H=7d;c.47=[];c.8K=[];c.5V=1f;u c};f.2W.B.45=j(3o,1n){1n=1n||S;o 5a=c.47.Y;c.47[5a]=3o;c.8K[5a]=1n;c.5V=1f};f.2W.B.M=j(c7){if(c.47.Y==0){u[L,\'\']}o 2i=c7.M(c.c6());if(!2i){u[L,\'\']}o M=2i[0];1j(o i=1;i<2i.Y;i++){if(2i[i]){u[c.8K[i-1],M]}}u[S,2i[0]]};f.2W.B.c6=j(){if(c.5V==1f){1j(o i=0,5a=c.47.Y;i<5a;i++){c.47[i]=\'(\'+c.c4(c.c5(c.47[i]).W(/([\\/\\(\\)])/g,\'\\\\$1\'))+\')\'}c.5V=1g 2N(c.47.5A("|"),c.bW())}u c.5V};f.2W.B.c5=j(7e){u 7e.W(/\\(\\?(i|m|s|x|U)\\)/,\'~~~~~~c3\\$1~~~~~~\').W(/\\(\\?(\\-[i|m|s|x|U])\\)/,\'~~~~~~c2\\$1~~~~~~\').W(/\\(\\?\\=(.*)\\)/,\'~~~~~~c1\\$1~~~~~~\').W(/\\(\\?\\!(.*)\\)/,\'~~~~~~c0\\$1~~~~~~\').W(/\\(\\?\\<\\=(.*)\\)/,\'~~~~~~bZ\\$1~~~~~~\').W(/\\(\\?\\<\\!(.*)\\)/,\'~~~~~~bY\\$1~~~~~~\').W(/\\(\\?\\:(.*)\\)/,\'~~~~~~bX\\$1~~~~~~\')};f.2W.B.c4=j(7e){u 7e.W(/~~~~~~c3(.{1})~~~~~~/,"(?\\$1)").W(/~~~~~~c2(.{2})~~~~~~/,"(?\\$1)").W(/~~~~~~c1(.*)~~~~~~/,"(?=\\$1)").W(/~~~~~~c0(.*)~~~~~~/,"(?!\\$1)").W(/~~~~~~bZ(.*)~~~~~~/,"(?<=\\$1)").W(/~~~~~~bY(.*)~~~~~~/,"(?<!\\$1)").W(/~~~~~~bX(.*)~~~~~~/,"(?:\\$1)")};f.2W.B.bW=j(){u(c.4H?"m":"mi")};f.5U=j(3p){c.59=[3p];u c};f.5U.B.8G=j(){u c.59[c.59.Y-1]};f.5U.B.8I=j(2b){c.59.1Y(2b)};f.5U.B.8J=j(){if(c.59.Y==1){u L}c.59.4P();u S};f.77=1;f.bU=2;f.3H=3;f.5I=4;f.74=5;f.2h=j(42,3p,7d){3p=3p||\'5T\';c.4H=7d||L;c.2q={};c.8H=42;c.44=1g f.5U(3p);c.2I={};c.2I[3p]=3p;u c};f.2h.B.45=j(3o,T){o T=T||"5T";if(1s c.2q[T]==\'2e\'){c.2q[T]=1g f.2W(c.4H)}c.2q[T].45(3o);if(1s c.2I[T]==\'2e\'){c.2I[T]=T}};f.2h.B.2P=j(3o,T,5S){if(1s c.2q[T]==\'2e\'){c.2q[T]=1g f.2W(c.4H)}c.2q[T].45(3o,5S);if(1s c.2I[5S]==\'2e\'){c.2I[5S]=5S}};f.2h.B.2F=j(3o,T){if(1s c.2q[T]==\'2e\'){c.2q[T]=1g f.2W(c.4H)}c.2q[T].45(3o,"bS");if(1s c.2I[T]==\'2e\'){c.2I[T]=T}};f.2h.B.4D=j(3o,T,5R){if(1s c.2q[T]==\'2e\'){c.2q[T]=1g f.2W(c.4H)}c.2q[T].45(3o,\'bQ\'+5R);if(1s c.2I[5R]==\'2e\'){c.2I[5R]=5R}};f.2h.B.8i=j(T,7a){c.2I[T]=7a};f.2h.B.3Z=j(1y){if(1s c.8H==\'2e\'){u L}o Y=1y.Y;o 3M;7c(1s(3M=c.bM(1y))==\'4B\'){o 1y=3M[0];o 7b=3M[1];o 3n=3M[2];o T=3M[3];if(!c.bV(7b,3n,T)){u L}if(1y==\'\'){u S}if(1y.Y==Y){u L}Y=1y.Y}if(!3M){u L}u c.4G(1y,f.3H)};f.2h.B.bV=j(7b,3n,T){T=T||L;if(!c.4G(7b,f.3H)){u L}if(1s T==\'nO\'){u c.4G(3n,f.bU)}if(c.bT(T)){if(!c.4G(3n,f.5I)){u L}u c.44.8J()}if(c.bR(T)){c.44.8I(c.bP(T));if(!c.4G(3n,f.74)){u L}u c.44.8J()}c.44.8I(T);u c.4G(3n,f.77)};f.2h.B.bT=j(T){u(T==="bS")};f.2h.B.bR=j(T){u(T.6B(0,1)=="bQ")};f.2h.B.bP=j(T){u T.6B(1)};f.2h.B.4G=j(2c,bN){if(2c===\'\'){u S}o bO=c.44.8G();o 7a=c.2I[bO];o 1Q;2B(\'1Q = c.8H.\'+7a+\'(2c, bN);\');u 1Q};f.2h.B.bM=j(1y){o 3n=c.2q[c.44.8G()].M(1y);o M=3n[1];o 5Q=3n[0];if(5Q){o 8F=1y.8a(M);o bL=1y.aJ(0,8F);1y=1y.6B(8F+M.Y);u[1y,bL,M,5Q]}u S};f.3m=j(42){D.55(c,1g f.2h(42,\'3i\'));c.8i(\'3i\',\'3i\');c.bK();c.58();u c};f.3m.B.58=j(){};f.3m.B.bK=j(){c.bJ(\'3i\');c.bI(\'3i\');c.bH(\'3i\');c.bG(\'3i\')};f.3m.B.bJ=j(1G){c.2P("<!--",1G,\'8E\');c.2F("-->",\'8E\')};f.3m.B.bI=j(1G){c.2P("<2j",1G,\'8D\');c.2F("</2j>",\'8D\')};f.3m.B.bH=j(1G){c.2P("<1o",1G,\'8C\');c.2F("</1o>",\'8C\')};f.3m.B.bG=j(1G){c.4D("<\\\\s*[a-5J-9:\\-]+\\\\s*>",1G,\'78\');c.2P("<[a-5J-9:\\-]+"+\'[\\\\\\/ \\\\\\>]+\',1G,\'78\');c.bF(\'78\');c.4D("</\\\\s*[a-5J-9:\\-]+\\\\s*>",1G,\'bB\')};f.3m.B.bF=j(1G){c.4D(\'\\\\s+\',1G,\'54\');c.bE(1G);c.2F(\'/>\',1G);c.2F(\'>\',1G)};f.3m.B.bE=j(1G){c.4D("\\\\s*[a-z-8h-9]*:?[a-z-8h-9]+\\\\s*(?=\\=)\\\\s*",1G,\'bw\');c.2P(\'=\\\\s*"\',1G,\'72\');c.45("\\\\\\\\\\"",\'72\');c.2F(\'"\',\'72\');c.2P("=\\\\s*\'",1G,\'71\');c.45("\\\\\\\\\'",\'71\');c.2F("\'",\'71\');c.4D(\'=\\\\s*[^>\\\\s]*\',1G,\'bv\')};f.1w=j(bD,T){o T=T||\'3i\';c.6H=1g f.3m(c);c.1a=bD;c.44=T;c.nN=[];c.nM=\'\';c.nL=\'\';u c};f.1w.B.3Z=j(1y){c.6H.3Z(c.6S(1y));u c.6R(c.1a.b6())};f.1w.B.6S=j(1y){if(1y.M(/J="aY"/)||1y.M(/ns = "nK:nJ-nI-nH/)){c.1a.aZ()}u c.1a.6S(1y)};f.1w.B.6R=j(3M){if(c.1a.8o){c.1a.aX()}u c.1a.6R(3M)};f.1w.B.54=j(M,2b){u S};f.1w.B.3i=j(V){c.1a.b5(V);u S};f.1w.B.8E=j(M,2p){u c.79(M,2p,\'6O\')};f.1w.B.8D=j(M,2p){u c.79(M,2p,\'6N\')};f.1w.B.8C=j(M,2p){u c.79(M,2p,\'6M\')};f.1w.B.79=j(M,2b,1d){3f(2b){1k f.77:c.5P=M;1p;1k f.3H:c.5P+=M;1p;1k f.5I:3f(1d){1k\'6O\':c.1a.6O(c.5P+M);1p;1k\'6N\':c.1a.6N(c.5P+M);1p;1k\'6M\':c.1a.6M(c.5P+M);1p}}u S};f.1w.B.78=j(M,2b){3f(2b){1k f.77:c.bC=c.75(M);c.5O={};1p;1k f.74:c.8B(c.75(M));1p;1k f.5I:c.8B(c.bC,c.5O)}u S};f.1w.B.bB=j(M,2b){c.8y(c.75(M));u S};f.1w.B.8B=j(E,H){o H=H||{};c.bz(E);if(c.1a.8n(E)){c.1a.4q.1Y(E);c.1a.aT(E,H);c.1a.6m(E,H);c.8A(E)}X if(c.1a.aW(E)){c.1a.b4(E,H)}X{c.1a.b3(E,H);c.8A(E)}c.1a.6I=E;c.1a.8l=S;c.1a.nG=H};f.1w.B.8y=j(E){if(c.bA(E)){c.by(E);if(c.1a.8n(E)){o 76=c.1a.4q.4P();if(76==L){u}X if(76!=E){E=76}c.1a.b2(E)}X{c.1a.b1(E)}}X{c.1a.b0(E)}c.1a.6I=E;c.1a.8l=L};f.1w.B.8A=j(E){c.1a.2U[E]=c.1a.2U[E]||0;c.1a.2U[E]++};f.1w.B.bA=j(E){if(c.1a.2U[E]){c.1a.2U[E]--;if(c.1a.2U[E]==0){c.1a.2U[E]=2e}u S}u L};f.1w.B.bz=j(3d){c.8z(3d,L)};f.1w.B.by=j(E){c.8z(E,S)};f.1w.B.8z=j(3d,2R){o 2R=2R||L;if(c.1a.2U){1j(o E in c.1a.2U){o bx=c.1a.2U[E];if(bx>0&&c.1a.bd(E,3d,2R)){c.8y(E,S)}}}};f.1w.B.6P=j(){u c.1a.6P()};f.1w.B.75=j(E){E=E.W(/^([\\s<\\/>]*)|([\\s<\\/>]*)$/gm,\'\').1q();o 3j=c.1a.6P();if(3j[E]){u 3j[E]}u E};f.1w.B.bw=j(M,2b){if(f.74==2b){c.70=M}u S};f.1w.B.72=j(M,2b){if(f.3H==2b){c.5O[c.70]=M}u S};f.1w.B.71=j(M,2b){if(f.3H==2b){c.5O[c.70]=M}u S};f.1w.B.bv=j(M,2b){c.5O[c.70]=M.W(/^=/,\'\');u S};f.1m=j(){c.1X=\'\';c.4O=1g f.2V();c.2U={};c.3v=f.bu;c.4q=[];c.5K=[];c.8s={\'&b8;\':\'&#b9;\',\'&nF;\':\'&#nE;\',\'&nD;\':\'&#nC;\',\'&nB;\':\'&#nA;\',\'&nz;\':\'&#ny;\',\'&nx;\':\'&#nw;\',\'&nv;\':\'&#nt;\',\'&nr;\':\'&#nq;\',\'&np;\':\'&#nn;\',\'&nm;\':\'&#nl;\',\'&nk;\':\'&#nj;\',\'&nh;\':\'&#ng;\',\'&bt;\':\'&#nf;\',\'&nd;\':\'&#nc;\',\'&nb;\':\'&#na;\',\'&n9;\':\'&#n8;\',\'&n7;\':\'&#n6;\',\'&n5;\':\'&#n4;\',\'&n3;\':\'&#n2;\',\'&n1;\':\'&#n0;\',\'&mZ;\':\'&#mY;\',\'&mX;\':\'&#mW;\',\'&mV;\':\'&#mU;\',\'&mT;\':\'&#mS;\',\'&mR;\':\'&#mQ;\',\'&mP;\':\'&#mO;\',\'&mN;\':\'&#mM;\',\'&mL;\':\'&#mK;\',\'&mJ;\':\'&#mI;\',\'&mH;\':\'&#mG;\',\'&mF;\':\'&#mE;\',\'&mD;\':\'&#mC;\',\'&mB;\':\'&#mA;\',\'&mz;\':\'&#my;\',\'&mx;\':\'&#mw;\',\'&mv;\':\'&#mt;\',\'&ms;\':\'&#mr;\',\'&mq;\':\'&#mp;\',\'&mo;\':\'&#mn;\',\'&mm;\':\'&#ml;\',\'&mk;\':\'&#mj;\',\'&mh;\':\'&#mg;\',\'&mf;\':\'&#me;\',\'&md;\':\'&#mc;\',\'&mb;\':\'&#ma;\',\'&m9;\':\'&#m8;\',\'&m7;\':\'&#m6;\',\'&m5;\':\'&#m4;\',\'&m3;\':\'&#m2;\',\'&m1;\':\'&#m0;\',\'&lZ;\':\'&#lY;\',\'&lX;\':\'&#lW;\',\'&lV;\':\'&#lU;\',\'&lT;\':\'&#lS;\',\'&lR;\':\'&#lQ;\',\'&lP;\':\'&#lO;\',\'&lN;\':\'&#lM;\',\'&lL;\':\'&#lK;\',\'&lJ;\':\'&#lI;\',\'&lH;\':\'&#lG;\',\'&lF;\':\'&#lE;\',\'&lD;\':\'&#lC;\',\'&lB;\':\'&#lA;\',\'&lz;\':\'&#ly;\',\'&lx;\':\'Z;\',\'&lw;\':\'&#lv;\',\'&lu;\':\'&#lt;\',\'&ls;\':\'&#lr;\',\'&lq;\':\'&#lp;\',\'&lo;\':\'&#ln;\',\'&lm;\':\'&#ll;\',\'&lk;\':\'&#lj;\',\'&lh;\':\'&#lg;\',\'&lf;\':\'&#ld;\',\'&lc;\':\'&#lb;\',\'&la;\':\'&#l9;\',\'&l8;\':\'&#l7;\',\'&l6;\':\'&#l5;\',\'&l4;\':\'&#l3;\',\'&l2;\':\'&#l1;\',\'&l0;\':\'&#kZ;\',\'&kY;\':\'&#kX;\',\'&kW;\':\'&#kV;\',\'&kU;\':\'&#kT;\',\'&kS;\':\'&#kR;\',\'&kQ;\':\'&#kP;\',\'&kO;\':\'&#kN;\',\'&kM;\':\'&#kL;\',\'&kK;\':\'&#kJ;\',\'&kI;\':\'&#kH;\',\'&kG;\':\'&#kF;\',\'&kE;\':\'&#kD;\',\'&kC;\':\'&#kB;\',\'&kA;\':\'&#kz;\',\'&ky;\':\'&#kx;\',\'&kw;\':\'&#kv;\',\'&ku;\':\'&#kt;\',\'&ks;\':\'&#kr;\',\'&kq;\':\'&#kp;\',\'&ko;\':\'&#kn;\',\'&km;\':\'&#kl;\',\'&kk;\':\'&#kj;\',\'&8x;\':\'&#ki;\',\'&kh;\':\'&#kg;\',\'&kf;\':\'&#ke;\',\'&kd;\':\'&#kc;\',\'&kb;\':\'&#ka;\',\'&k9;\':\'&#k8;\',\'&k7;\':\'&#k6;\',\'&k5;\':\'&#k4;\',\'&k3;\':\'&#k2;\',\'&k1;\':\'&#k0;\',\'&jZ;\':\'&#jY;\',\'&jX;\':\'&#jW;\',\'&jV;\':\'&#jU;\',\'&jT;\':\'&#jS;\',\'&jR;\':\'&#jQ;\',\'&jP;\':\'&#jO;\',\'&jN;\':\'&#jM;\',\'&jL;\':\'&#jK;\',\'&jJ;\':\'&#jI;\',\'&jH;\':\'&#jG;\',\'&jF;\':\'&#jE;\',\'&jD;\':\'&#jC;\',\'&jB;\':\'&#jA;\',\'&jz;\':\'&#jy;\',\'&jx;\':\'&#jw;\',\'&jv;\':\'&#ju;\',\'&jt;\':\'&#jr;\',\'&jq;\':\'&#jp;\',\'&jo;\':\'&#jn;\',\'&jm;\':\'&#jl;\',\'&jk;\':\'&#jj;\',\'&ji;\':\'&#jh;\',\'&jg;\':\'&#jf;\',\'&je;\':\'&#jd;\',\'&jc;\':\'&#jb;\',\'&ja;\':\'&#j9;\',\'&j8;\':\'&#j7;\',\'μ\':\'&#j6;\',\'ν\':\'&#j5;\',\'&j4;\':\'&#j3;\',\'&j2;\':\'&#j1;\',\'π\':\'&#j0;\',\'&iZ;\':\'&#iY;\',\'&iX;\':\'&#iW;\',\'&iV;\':\'&#iU;\',\'&iT;\':\'&#iS;\',\'&iR;\':\'&#iQ;\',\'&iP;\':\'&#iO;\',\'&iN;\':\'&#iM;\',\'&iL;\':\'&#iK;\',\'&iJ;\':\'&#iI;\',\'&iH;\':\'&#iG;\',\'&iF;\':\'&#iE;\',\'&iD;\':\'&#iC;\',\'&iB;\':\'&#iA;\',\'&iz;\':\'&#iy;\',\'&ix;\':\'&#iw;\',\'&iv;\':\'&#iu;\',\'⁢\':\'&#ir;\',\'&iq;\':\'&#ip;\',\'&io;\':\'&#im;\',\'&il;\':\'&#ik;\',\'&ij;\':\'&#ii;\',\'&ih;\':\'&#ie;\',\'⁣\':\'&#ib;\',\'&ia;\':\'&#i9;\',\'&i8;\':\'&#i7;\',\'&i6;\':\'&#i5;\',\'&i4;\':\'&#i3;\',\'&i2;\':\'&#i1;\',\'&i0;\':\'&#hZ;\',\'&hY;\':\'&#hX;\',\'&hW;\':\'&#hV;\',\'&hU;\':\'&#hT;\',\'&hS;\':\'&#hR;\',\'&hQ;\':\'&#hP;\',\'&hO;\':\'&#hN;\',\'&hM;\':\'&#hL;\',\'&hK;\':\'&#hJ;\',\'&hI;\':\'&#hH;\',\'&hG;\':\'&#hF;\',\'&bs;\':\'&#hE;\',\'&hD;\':\'&#hC;\',\'&hB;\':\'&#hA;\',\'&hz;\':\'&#hy;\',\'&hx;\':\'&#hw;\',\'&hv;\':\'&#hu;\',\'&ht;\':\'&#hs;\',\'&hq;\':\'&#hp;\',\'&ho;\':\'&#hn;\',\'&hm;\':\'&#hl;\',\'&hk;\':\'&#hj;\',\'&hi;\':\'&#hh;\',\'&hg;\':\'&#hf;\',\'&he;\':\'&#hd;\',\'&hc;\':\'&#hb;\',\'&ha;\':\'&#h9;\',\'&h8;\':\'&#h7;\',\'&h0;\':\'&#gZ;\',\'&gY;\':\'&#gX;\',\'&gW;\':\'&#gV;\',\'&gU;\':\'&#gT;\',\'&gS;\':\'&#gR;\',\'&gQ;\':\'&#gP;\',\'∋\':\'&#gO;\',\'&gN;\':\'&#gM;\',\'&gL;\':\'&#gK;\',\'&gJ;\':\'&#gI;\',\'&gH;\':\'&#gG;\',\'&gF;\':\'&#gE;\',\'&6Z;\':\'&#gD;\',\'&gC;\':\'&#gB;\',\'&gA;\':\'&#gz;\',\'&gy;\':\'&#gx;\',\'∨\':\'&#gw;\',\'&gv;\':\'&#gu;\',\'>\':\'&#gs;\',\'&gr;\':\'&#gq;\',\'&gp;\':\'&#go;\',\'&gn;\':\'&#gl;\',\'&gk;\':\'&#gj;\',\'&gh;\':\'&#gg;\',\'≠\':\'&#gf;\',\'&bq;\':\'&#gd;\',\'≤\':\'&#gc;\',\'≥\':\'&#gb;\',\'&3a;\':\'&#ga;\',\'&3S;\':\'&#g9;\',\'&g8;\':\'&#g7;\',\'&g6;\':\'&#g5;\',\'&g4;\':\'&#g3;\',\'&g2;\':\'&#g1;\',\'&g0;\':\'&#fZ;\',\'&fY;\':\'&#fX;\',\'&fW;\':\'&#fV;\',\'&fU;\':\'&#fT;\',\'&fS;\':\'&#fR;\',\'&fQ;\':\'&#fP;\',\'&fO;\':\'&#fN;\',\'&3L;\':\'&#fM;\',\'&fL;\':\'&#fK;\',\'&fJ;\':\'&#fI;\',\'&fH;\':\'&#fG;\',\'&fF;\':\'&#fE;\',\'&fD;\':\'&#fC;\',\'&fB;\':\'&#fA;\'};c.8m=["a","6Y","8q","6Q","bp","b","57","6X","bo","2H","1i","3K","bn","56","bm","6W","5N","dd","8p","N","bl","dl","dt","em","2T","1M","2S","h1","h2","h3","h4","h5","h6","Q","i","bk","bj","1n","3l","li","bi","8w","4B","ol","bh","6T","p","1T","43","q","bg","2j","4X","bf","3u","3b","1o","3a","3S","3k","8v","4E","4F","8u","5L","8t","O","6U","be","2G","o","fz"];c.aV=["br","hr","6V","1z"];u c};f.1m.B.bd=j(E,5M,2R){o 2R=2R||L;if(E==\'4E\'){if((2R&&5M==\'6U\')||(!2R&&5M==\'4E\')){u S}}if(E==\'6T\'){if((2R&&5M==\'4X\')||(!2R&&5M==\'6T\')){u S}}u L};f.1m.B.6S=j(1y){c.1X=\'\';u 1y};f.1m.B.6R=j(1v){1v=c.bc(1v);1v=c.bb(1v);1v=c.ba(1v);1v=c.b7(1v);u 1v};f.1m.B.bc=j(1v){1j(o 8r in c.8s){1v=1v.W(1g 2N(8r,\'g\'),c.8s[8r])}u 1v};f.1m.B.bb=j(1v){o 3j=\'em|3b|3a|3S|8q|43|8p|6Q\';u 1v.W(1g 2N(\'<\\/(\'+3j+\')><\\\\1>\',\'\'),\'\').W(1g 2N(\'(\\s*<(\'+3j+\')>\\s*){2}(.*)(\\s*<\\/\\\\2>\\s*){2}\',\'\'),\'<\\$2>\\$3<\\$2>\')};f.1m.B.ba=j(1v){u 1v.W(1g 2N(\'<(\'+c.8m.5A("|").W(/\\|4E/,\'\').W(/\\|5L/,\'\')+\')>(<br \\/>|&#b9;|&b8;|\\\\s)*<\\/\\\\1>\',\'g\'),\'\')};f.1m.B.b7=j(1v){o 2i=1v.M(1g 2N(\'<43[^>]*>(.*?)<\\/43>\',\'fy\'));if(2i){1j(o i=0;i<2i.Y;i++){1v=1v.W(2i[i],2i[i].W(1g 2N(\'<br \\/>\',\'g\'),fx.fw(13,10)))}}u 1v};f.1m.B.b6=j(){u c.1X};f.1m.B.6P=j(){u{\'b\':\'3b\',\'i\':\'em\'}};f.1m.B.b5=j(V){c.1X+=V};f.1m.B.6O=j(V){if(c.fv){c.1X+=V}};f.1m.B.6N=j(V){if(!c.fu){c.1X+=V}};f.1m.B.6M=j(V){if(!c.ft){c.1X+=V}};f.1m.B.6m=j(E,H){c.1X+=c.4O.E(E,c.3v.5q(E,H),S)};f.1m.B.b4=j(E,H){c.1X+=c.4O.E(E,c.3v.5q(E,H))};f.1m.B.b3=j(E,H){};f.1m.B.b2=j(E){c.1X=c.1X.W(/<br \\/>$/,\'\')+c.8j(\'aU\',E)+"</"+E+">"+c.8j(\'6J\',E)};f.1m.B.b1=j(E){};f.1m.B.b0=j(E){c.1X+="</"+E+">"};f.1m.B.aZ=j(){c.5K=[\'N\',\'3u\'];c.3v.6L=[\'1o\'];c.3v.6K=[\'aY\',\'fs\'];c.8o=S};f.1m.B.aX=j(){c.5K=[];c.3v.6L=[];c.3v.6K=[];c.8o=L};f.1m.B.8n=j(E){u!f.1P.2E(c.5K,E)&&f.1P.2E(c.8m,E)};f.1m.B.aW=j(E){u!f.1P.2E(c.5K,E)&&f.1P.2E(c.aV,E)};f.1m.B.aS=j(E,2c){c.8k(\'6J\',E,2c)};f.1m.B.fr=j(E,2c){c.8k(\'aU\',E,2c)};f.1m.B.aT=j(E,H){if(E!=\'li\'&&(E==\'2G\'||E==\'ol\')&&c.6I&&!c.8l&&c.6I==\'li\'){c.1X=c.1X.W(/<\\/li>$/,\'\');c.aS(E,\'</li>\')}};f.1m.B.8k=j(2Q,E,2c){if(!c[\'3J\'+2Q+\'3I\']){c[\'3J\'+2Q+\'3I\']=[]}if(!c[\'3J\'+2Q+\'3I\'][E]){c[\'3J\'+2Q+\'3I\'][E]=[]}c[\'3J\'+2Q+\'3I\'][E].1Y(2c)};f.1m.B.8j=j(2Q,E){if(c[\'3J\'+2Q+\'3I\']&&c[\'3J\'+2Q+\'3I\'][E]&&c[\'3J\'+2Q+\'3I\'][E].Y>0){u c[\'3J\'+2Q+\'3I\'][E].4P()}u\'\'};f.aR=j(42,2v){o 2v=(1s 2v==\'2e\'?S:2v);D.55(c,1g f.2h(42,(2v?\'54\':\'4C\')));c.8i(\'4C\',\'54\');if(2v==S){c.2P("/\\\\\\41[<\\\\s]*f[>\\\\s]*\\\\\\41/",\'54\',\'4C\');c.2F("/\\\\\\41[<\\/\\\\s]*f[>\\\\s]*\\\\\\41/",\'4C\')}c.4D("[\\\\fq-fp-6]*\\\\\\fo[a-z-8h-9]+",\'4C\',\'aQ\');c.2P("/\\\\\\41",\'4C\',\'8g\');c.2F("\\\\\\41/",\'8g\');c.2P("\\fm",\'4C\',\'6G\');c.2F("\\fl",\'6G\');c.2P("/\\\\\\41",\'6G\',\'8f\');c.2F("\\\\\\41/",\'8f\');u c};f.3G=j(){c.6F=L;c.5H=L;c.2v=S;c.4A={\'3Y\':[],\'3h\':[],\'4z\':[]};u c};f.3G.B.3Z=j(1y,2v){o 2v=(1s 2v==\'2e\'?c.2v:2v);c.6H=1g f.aR(c,2v);c.6H.3Z(1y)};f.3G.B.54=j(M,2b){u S};f.3G.B.8g=j(V,2p){if(V.M(/fk[a-5J-9\\s]*F[a-5J-9\\s]*/mi)){u L}if(2p==f.3H){if(!c.6F){c.5H=S;c.2o={\'O\':f.1P.4w(V)}}X{if(c.2o[c.2g]){if(!c.2o[c.2g].6D){c.2o[c.2g].6D=[V]}X{c.2o[c.2g].6D.1Y(V)}}}c.6F=S}u S};f.3G.B.6G=j(M,2p){if(2p==f.3H){M=f.1P.4w(M);if(M!=\'\'){c.2o[c.2g].1o=M}}X if(2p==f.5I){c.6F=L;c.5H=L;c.aP(c.2o)}u S};f.3G.B.8f=j(M,2p){if(2p==f.3H){c.2o[c.2g].8d=M.W(/^([\\s\\/\\*]*)|([\\s\\/\\*]*)$/gm,\'\')}u S};f.3G.B.aQ=j(M){M=M.W(/^([\\s\\.]*)|([\\s\\.*]*)$/gm,\'\');o E=\'\';if(M.8a(\'.\')>0){o 8e=M.5F(\'.\');c.2g=8e[1];o E=8e[0]}X{c.2g=M}if(!c.5H){c.2o={\'O\':(!E?\'\':E.fj()+\': \')+c.2g};c.5H=S}if(!c.2o[c.2g]){c.2o[c.2g]={\'G\':c.2g}}if(E){if(!c.2o[c.2g].3j){c.2o[c.2g].3j=[E]}X{c.2o[c.2g].3j.1Y(E)}}u S};f.3G.B.aP=j(6E){1j(o G in 6E){o 2O=6E[G];if(1s 2O==\'4B\'&&G!=\'O\'){c.4A.3Y.1Y({\'G\':f.1P.4w(2O.G),\'O\':6E.O,\'aO\':f.1P.4w((2O.6D||2O.3j).5A(\', \'))});if(2O.8d){c.4A.3h.1Y({\'G\':\'.\'+f.1P.4w(2O.G),\'1b\':2O.8d})}if(2O.1o){c.4A.4z.1Y({\'G\':\'.\'+f.1P.4w(2O.G),\'1b\':2O.1o})}}}};D.fn.aN=j(){if(c[0].8c==3)u!(/[^\\t\\n\\r ]/.2J(c[0].4y));u L};f.aN=j(n){if(n.8c==3)u!(/[^\\t\\n\\r ]/.2J(n.4y));u L};f.fi=j(2M){u!(/[^\\t\\n\\r ]/.2J(2M))};D.fn.4V=j(4x){o n=c;if(n[0].8c==3)n=n.5C().aM(0,1);if(n.53(4x).2u()==1)u n;X u n.5C(4x).aM(0,1)};f.1P={1l:j(2M,aL,aK){o 6C=1g 2N(aL,"g");u(2M.W(6C,aK))},fh:j(2M,aI,8b){u(2M.aJ(0,8b)+aI+2M.6B(8b))},4w:j(2M){u 2M.W(/^(\\s*)|(\\s*)$/gm,\'\')},2E:j(3F,5G){1j(o i=0;i<3F.Y;i++){if(3F[i]===5G)u S}u L},8a:j(3F,4v){o 89=-1;1j(o i=0;i<3F.Y;i++){if(3F[i]==4v){89=i;1p}}u(89)},aH:j(3F,G){1j(o i=0;i<3F.Y;i++){o 4v=3F[i];if(4v.G==G)u(4v)}u(1f)}};f.2t=j(F){c.1W=F;c.5z="fg";c.4U="\\r\\n"};f.2t.B.5y=j(1L){c.1K=1L;c.I=1L.1I.3D;o 1E=c.I.4T[0];o 2s=2B(c.C.3h);c.4S(c.I,2s);c.I.O=c.1W.3g;D(\'Q\',c.I).1r(\'3C\',c.C.4R);D(c.I.1i).Q(c.1W.4Q);o F=c;c.I.1i.aG=j(){F.I.4s="on";F.I=1L.1I.3D};c.I.ff=j(){F.6A()};c.I.aF=j(){F.6A();F.2y()};c.I.aE=j(){F.6A()};c.I.1i.fe=j(){F.1K.1I.aD.aC=L};c.I.1i.fd=j(){F.1K.1I.aD.aC=L;F.5E(2n.fc.fb("3i"))};if(c.aB){if(D.2A(c.C.3B))c.C.3B(c);c.1W.5x();if(D.2A(c.C.3z))c.C.3z(c);c.5w()}c.aB=S;c.I.4s="on";4u{c.I=1L.1I.3D}4t(e){}};(j(aA){f.2t.B.52=j(){D(c.2f).3E(c.C.88).1r(\'fa\',\'on\');aA.aw(c)}})(f.1h.B.52);f.2t.B.1O=j(1F,1T){3f(1F){1k f.6x:1k f.6w:o K=c.2K(c.K(),f.6v);if(K){o 3y=K.1B.1B;if(K.1B.6u.Y>1||3y.1t.1q()==f.6t||3y.1t.1q()==f.6s)c.I.2r(1F)}1p;3U:if(1T)c.I.2r(1F,L,1T);X c.I.2r(1F);1p}};f.2t.B.1c=j(){o 51=c.1K.1I.3D.51;if(51!=1f){if(51.5D!=2e)u(51.5D())}};f.2t.B.6A=j(){c.I.51=c.I.2L.4Y()};f.2t.B.5t=j(1E,1Z){o 87=1Z.G.5F(\',\');1j(o i in 87){1E.f9(87[i],1Z.1b)}};f.2t.B.5B=j(Q){o 1D=c.I.2L.4Y();if(D(1D.5D()).5C(c.C.6z).is(\'*\')){4u{1D.86(Q)}4t(e){}}X{c.5E(Q)}};f.2t.B.az=j(2m,2D){o 1D=c.I.2L.4Y();if(D(1D.5D()).5C(c.C.6z).is(\'*\')){4u{1D.86(2m+1D.V+2D)}4t(e){}}};f.2t.B.ay=j(){o 1D=c.I.2L.4Y();if(D(1D.5D()).5C(c.C.6z).is(\'*\')){4u{o V=1D.V;c.1O(\'f8\');1D.86(V)}4t(e){}}};f.2t.B.2y=j(){c.2l=1f};f.2t.B.4Z=j(Z,3X){o 1D=c.I.2L.4Y();3X=3X?S:L;1D.f7(Z);1D.ax(3X);1D.4X();Z.4W()};f.2C=j(F){c.1W=F;c.5z="J";c.4U="\\n"};f.2C.B.5y=j(1L){o F=c;c.1K=1L;c.I=1L.am;o 1E=c.I.4T[0];o 2s=2B(c.C.3h);c.4S(c.I,2s);c.I.O=c.1W.3g;D(\'Q\',c.I).1r(\'3C\',c.C.4R);c.Q(c.1W.4Q);c.6y();if(D.2A(c.C.3B))c.C.3B(c);c.1W.5x();D(c.I).3A("3x",c.3x);D(c.I).3A("2y",c.2y);D(c.I).3A("4W",j(){F.6y.aw(F)});if(D.2A(c.C.3z))c.C.3z(c);c.5w()};f.2C.B.Q=j(Q){if(1s Q===\'3T\'){4u{c.I.4s="av"}4t(e){};Q=Q.W(/<em(\\b[^>]*)>/gi,"<i$1>").W(/<\\/em>/gi,"</i>").W(/<3b(\\b[^>]*)>/gi,"<b$1>").W(/<\\/3b>/gi,"</b>");D(c.I.1i).Q(Q);c.6y()}X u(D(c.I.1i).Q())};f.2C.B.1O=j(1F,1T){if(!c.1c())u(L);3f(1F){1k f.6x:1k f.6w:o 1u=c.1c();o 2z=c.1K.1I.3e();o 2a=2z.2a;if(2a.5u=="#V")2a=2a.1B;1u=c.2K(1u,f.5v);2a=c.2K(2a,f.5v);if(1u&&1u==2a&&1u.1t.1q()==f.6v){o 3y=1u.1B.1B;if(1u.1B.6u.Y>1||3y.1t.1q()==f.6t||3y.1t.1q()==f.6s)c.I.2r(1F,\'\',1f)}1p;3U:if(1T)c.I.2r(1F,\'\',1T);X c.I.2r(1F,\'\',1f)}o K=c.1c();if(K.1t.1q()==f.3w)c.1O(f.4r,f.P)};f.2C.B.1c=j(){o 2z=c.1K.1I.3e();o Z=2z.1u;if(Z){if(Z.5u=="#V")u(Z.1B);X u(Z)}X u(1f)};f.2C.B.5t=j(1E,1Z){1E.84(1Z.G+" {"+1Z.1b+"}",1E.83.Y)};f.2C.B.3x=j(1e){o F=f.2x[c.O];o K=1f;if(1e.6n){if(1e.1C==66){F.1O(f.82);u L}if(1e.1C==73){F.1O(f.81);u L}}X if(1e.1C==13){if(!1e.6p){K=F.1c();if(K&&K.1t.1q()==f.5r){1e.6q();F.5B(\'<p></p>\')}}}};f.2C.B.2y=j(1e){o F=f.2x[c.O];F.2l=1f;o K=1f;if(1e.1C==13&&!1e.6p){D(F.I.1i).80(f.6o).5s()}if(1e.1C!=8&&1e.1C!=17&&1e.1C!=46&&1e.1C!=7Z&&!1e.aj&&!1e.6n){K=F.1c();o G=K.1t.1q();if(G=="3b"||G=="b"||G=="em"||G=="i"||G=="3a"||G=="3S"||G=="a")G=K.1B.1t.1q();if(G==f.3w)F.1O(f.4r,f.P)}};f.2C.B.6y=j(){if(c.I.4s=="av"){4u{c.I.4s="on";c.I.2r("f6",\'\',L)}4t(e){}}};f.2C.B.6m=j(E,H){o H=c.3v.5q(E,H);if(E==\'3u\'&&H.1o){o 3d=c.6l(H.1o);if(3d){E=3d;c.4q.4P();c.4q.1Y(E);H.1o=\'\'}}c.1X+=c.4O.E(E,H,S)};f.2C.B.6l=j(1o){if(/ah/.2J(1o))u\'3b\';if(/ag/.2J(1o))u\'em\';if(/3a/.2J(1o))u\'3a\';if(/af/.2J(1o))u\'3S\';u L};f.3V=j(F){c.1W=F;c.5z="J";c.4U="\\r\\n"};f.3V.B.5y=j(1L){c.1K=1L;c.I=1L.1I.3D;o 1E=c.I.4T[0];o 2s=2B(c.C.3h);c.4S(c.I,2s);c.I.O=c.1W.3g;D(\'Q\',c.I).1r(\'3C\',c.C.4R);c.I.4s="on";c.Q(c.1W.4Q);if(D.2A(c.C.3B))c.C.3B(c);c.1W.5x();D(c.I).3A("3x",c.3x);D(c.I).3A("2y",c.2y);if(D.2A(c.C.3z))c.C.3z(c);c.5w()};f.3V.B.1O=j(1F,1T){if(1T)c.I.2r(1F,L,1T);X c.I.2r(1F)};f.3V.B.1c=j(){o 2z=c.1K.1I.3e();o Z=2z.1u;if(Z){if(Z.5u=="#V")u(Z.1B);X u(Z)}X u(1f)};f.3V.B.5t=j(1E,1Z){1E.84(1Z.G+" {"+1Z.1b+"}",1E.83.Y)};f.3V.B.3x=j(1e){o F=f.2x[c.O];o 2z=F.1K.1I.3e();85=2z.au(0).f5;if(!D(85).4V(f.6r.5A(","))[0]&&!D(85).4V(\'li\')&&1e.1C!=f.3W.at&&1e.1C!=f.3W.as&&1e.1C!=f.3W.ar&&1e.1C!=f.3W.aq&&1e.1C!=f.3W.ap&&1e.1C!=f.3W.ao&&1e.1C!=f.3W.an)F.1O(f.4r,f.P)};f.3V.B.2y=j(1e){o F=f.2x[c.O];F.2l=1f};f.3c=j(F){c.1W=F;c.5z="J";c.4U="\\n"};f.3c.B.5y=j(1L){c.1K=1L;c.I=1L.am;o 1E=c.I.4T[0];o 2s=2B(c.C.3h);c.4S(c.I,2s);c.I.O=c.1W.3g;D(\'Q\',c.I).1r(\'3C\',c.C.4R);c.I.4s="on";c.Q(c.1W.4Q);if(D.2A(c.C.3B))c.C.3B(c);c.1W.5x();D(c.I).3A("3x",c.3x);D(c.I).3A("2y",c.2y);if(D.2A(c.C.3z))c.C.3z(c);c.5w()};f.3c.B.1O=j(1F,1T){if(!c.1c())u(L);3f(1F){1k f.6x:1k f.6w:o 1u=c.1c();o 2z=c.1K.1I.3e();o 2a=2z.2a;if(2a.5u=="#V")2a=2a.1B;1u=c.2K(1u,f.5v);2a=c.2K(2a,f.5v);if(1u&&1u==2a&&1u.1t.1q()==f.6v){o 3y=1u.1B.1B;if(1u.1B.6u.Y>1||3y.1t.1q()==f.6t||3y.1t.1q()==f.6s)c.I.2r(1F,\'\',1f)}1p;1k f.al:1k f.ak:c.I.2r(1F,\'\',1f);o 1u=c.1c();o K=c.2K(1u,f.6r);if(K)D(K).f4(D(K).Q());1p;3U:if(1T)c.I.2r(1F,\'\',1T);X c.I.2r(1F,\'\',1f)}o K=c.1c();if(K&&K.1t.1q()==f.3w)c.1O(f.4r,f.P)};f.3c.B.1c=j(){o 2z=c.1K.1I.3e();o Z=2z.1u;if(Z){if(Z.5u=="#V")u(Z.1B);X u(Z)}X u(1f)};f.3c.B.5t=j(1E,1Z){1E.84(1Z.G+" {"+1Z.1b+"}",1E.83.Y)};f.3c.B.3x=j(e){o F=f.2x[c.O];if(e.6n){if(e.1C==66){F.1O(f.82);e.6q()}if(e.1C==73){F.1O(f.81);e.6q()}}X if(e.6p&&e.1C==13){F.1O(\'f3\');e.6q()}};f.3c.B.2y=j(1e){o F=f.2x[c.O];F.2l=1f;o K=1f;if(1e.1C==13&&!1e.6p){D(F.I.1i).80(f.6o).5s();K=F.1c();if(K&&K.1t.1q()==f.5r)F.1O(f.4r,f.P);}if(1e.1C!=8&&1e.1C!=17&&1e.1C!=46&&1e.1C!=7Z&&!1e.aj&&!1e.6n){K=F.1c();o G=K.1t.1q();if(G=="3b"||G=="b"||G=="em"||G=="i"||G=="3a"||G=="3S"||G=="a"||G=="3u")G=K.1B.1t.1q();if(G==f.3w||G==f.ai)F.1O(f.4r,f.P);}};f.3c.B.6m=j(E,H){o H=c.3v.5q(E,H);if(E==\'3u\'&&H.1o){o 3d=c.6l(H.1o);if(3d){E=3d;c.4q.4P();c.4q.1Y(E);H.1o=\'\';if(1s H[\'J\']==\'3T\'){H[\'J\']=H[\'J\'].W(/f2-1o-3u/gi,\'\')}}}c.1X+=c.4O.E(E,H,S)};f.3c.B.6l=j(1o){if(/ah/.2J(1o))u\'3b\';if(/ag/.2J(1o))u\'em\';if(/3a/.2J(1o))u\'3a\';if(/af/.2J(1o))u\'3S\';u L};',62,1724,'||||||||||||this|||WYMeditor||||function|||||var||||||return|||||||prototype|_options|jQuery|tag|wym|name|attributes|_doc|class|container|false|match|div|title||html|value|true|mode||text|replace|else|length|node|||||||||||_Listener|css|selected|type|evt|null|new|editor|body|for|case|replaceAll|XhtmlSaxListener|label|style|break|toLowerCase|attr|typeof|tagName|focusNode|xhtml|XhtmlParser|boxHtml|raw|input|val|parentNode|keyCode|range|styles|cmd|scope|dialogHtml|contentWindow|_tags|_iframe|iframe|form|row|_exec|Helper|result|href|options|param|key|src|_wym|output|push|oCss|||||||||||anchorNode|state|content|required|undefined|_box|_current_element|Lexer|matches|script|attribute|_selected_image|left|window|_current_item|status|_regexes|execCommand|aCss|WymClassExplorer|size|only_wym_blocks|link|INSTANCES|keyup|sel|isFunction|eval|WymClassMozilla|right|contains|addExitPattern|ul|blockquote|_mode_handlers|test|findUp|selection|str|RegExp|details|addEntryPattern|position|closing|head|fieldset|_open_tags|XmlHelper|ParallelRegex|char|disabled|skin|||||||||||sub|strong|WymClassSafari|new_tag|getSelection|switch|_index|editorStyles|Text|tags|table|legend|XhtmlLexer|matched|pattern|start|top|submit|paragraphs|sType|span|validator|BODY|keydown|ancestor|postInit|bind|preBind|dir|document|find|arr|WymCssParser|LEXER_UNMATCHED|_closing|_insert_|button|lang|parsed|defaults|inside|xml|INDEX|newNode|sup|string|default|WymClassOpera|KEY|toStart|classesItems|parse||x2a|parser|pre|_mode|addPattern||_patterns|baseline|bottom|middle|valign|charoff|justify|center|align|stylesheet|doc|sBodyHtml|tagname|sClass|oClass|sContainer|sTool|iframeHtml|WymClass|_tag_stack|FORMAT_BLOCK|designMode|catch|try|item|trim|jqexpr|data|dialogStyles|css_settings|object|WymCss|addSpecialPattern|td|textarea|_invokeParser|_case|width|onload|basePath|dialog|sVal|console|helper|pop|_html|direction|addCssRules|styleSheets|_newLine|parentsOrSelf|focus|select|createRange|setFocusToNode||caretPos|loadSkin|filter|Ignore|extend|cite|base|init|_stack|count|except|alt|tag_attributes|delimiter|close|sUrl|INIT_DIALOG|SKINS|skinPath|CssParser|wymeditor|TH|oContainer|oTool|wym_section|getValidTagAttributes|PRE|remove|addCssRule|nodeName|BLOCKS|listen|bindEvents|initIframe|_class|join|insert|parents|parentElement|paste|split|elem|_has_title|LEXER_EXIT|z0|avoided_tags|th|now_on_tag|colgroup|_tag_attributes|_non_tag|action|special|new_mode|accept|StateStack|_regex|_possible_tag_attributes|rel|hidden|get|open|createElement|submitSelector|titleSelector|TITLE|sStamp||dialogImageSelector|DIALOG_LINK|dialogType|update|stringDelimiterRight|stringDelimiterLeft|toggleClass|BLOCKQUOTE|Array|TD|aClasses|wym_dialog|wym_cancel|wym_dialog_type|getTagForStyle|openBlockTag|ctrlKey|BR|shiftKey|preventDefault|MAIN_CONTAINERS|UL|OL|childNodes|LI|OUTDENT|INDENT|enableDesignMode|iframeBodySelector|saveCaret|substring|rExp|expressions|style_details|_in_style|WymCssStyle|_Lexer|last_tag|after|skiped_attribute_values|skiped_attributes|addCss|addScript|addComment|getTagReplacements|address|afterParsing|beforeParsing|option|tr|img|col|bdo|abbr|prop|_current_attribute|SingleQuotedAttribute|DoubleQuotedAttribute||LEXER_SPECIAL|normalizeTag|expected_tag|LEXER_ENTER|OpeningTag|_addNonTagBlock|handler|unmatched|while|case_sensitive|regex|tag_defaults|only|valid_attributes|rows|cols|screen|charset|height|meta|index|escape_quotes|_entitiesDiv|mousedown|altSelector|ALT|SRC|srcSelector|SKINS_DEFAULT_CSS|grep|packed|min|pack|jquery|jQueryPath|wymPath|PREVIEW|DIALOG_PASTE|DIALOG_TABLE|DIALOG_IMAGE|dialogFeatures|_element|STRINGS|bFound|firstNode|nodes|aTypes|NAME|click|CLASS_NAME|TOOL_TITLE|HTML|iframeBasePath|browser|Cancel|Submit|wym_submit|224|children|ITALIC|BOLD|cssRules|insertRule|startNode|pasteHTML|selectors|containerSelector|ret|indexOf|pos|nodeType|feedback_style|parts|WymCssFeedbackStyle|WymCssComment|_0|mapHandler|_getClosingTagContent|_insertContentWhenClosingTag|last_tag_opened|block_tags|isBlockTag|_avoiding_tags_implicitly|del|acronym|entity|entities|thead|tfoot|tbody|noscript|circ|_callCloseTagListener|_autoCloseUnclosed|_increaseOpenTagCounter|_callOpenTagListener|Css|Script|Comment|unparsed_character_count|getCurrent|_parser|enter|leave|_labels|default_attributes|default_attributes_and_events|_attributes|_events|readonly|all|media|javascript|http|next|ltr|toString|innerHTML|_formated_options|tagOptions|postInitDialog|newRow|iCols|iRows|INSERT_IMAGE|relSelector|REL|HREF|CREATE_LINK|hrefSelector|preInitDialog|responseText|async|url|ajax|found|htmlSelector|wDialog|replaceStrings|DIALOG_BODY|DIALOG_TITLE|JQUERY_PATH|WYM_PATH|CSS_PATH|DIRECTION|hasfocus|htmlValSelector|error|langPath|switchTo|lgt|H6|H5|H4|H3|H2|H1|sName|sContainers|CONTAINERS_ITEMS|CONTAINER_CLASS|CONTAINER_TITLE|CONTAINER_NAME|aContainers|sClasses|CLASSES_ITEMS|CLASS_TITLE|sTools|TOOLS_ITEMS|TOOL_CLASS|TOOL_NAME|aTools|STATUS|IFRAME|CLASSES|CONTAINERS|TOOLS|LOGO|IFRAME_BASE_PATH|WYM_INDEX|SaxListener|preInit|Paste_From_Word|indent|Table|wym_title|Image|Link|wym_classes|wym_containers|wym_tools|wym_iframe|Preview|Unlink|Outdent|Indent|names|super|italic|bold|DIV|metaKey|INSERT_UNORDEREDLIST|INSERT_ORDEREDLIST|contentDocument|DELETE|BACKSPACE|DOWN|RIGHT|UP|LEFT|ENTER|getRangeAt|off|call|collapse|unwrap|wrap|editorLoadSkin|_initialized|returnValue|event|onclick|onkeyup|onfocus|findByName|inserted|substr|rep|old|slice|isPhantomNode|expr|addStyleSetting|WymCssStyleDeclaration|WymCssLexer|insertContentAfterClosingTag|fixNestingBeforeOpeningBlockTag|before|inline_tags|isInlineTag|allowStylingTagsAndAttributes|MsoNormal|avoidStylingTagsAndAttributes|closeUnopenedTag|closeUnknownTag|closeBlockTag|openUnknownTag|inlineTag|addContent|getResult|removeBrInPre|nbsp|160|removeEmptyTags|joinRepeatedEntities|replaceNamedEntities|shouldCloseTagAutomatically|tt|small|samp|optgroup|map|kbd|ins|dfn|code|caption|big|area|equiv||image|not|XhtmlValidator|UnquotedAttribute|TagAttributes|counter|autoCloseUnclosedBeforeTagClosing|autoCloseUnclosedBeforeNewOpening|_decreaseOpenTagCounter|ClosingTag|_tag|Listener|addAttributeTokens|addInTagDeclarationTokens|addTagTokens|addCssTokens|addScriptTokens|addCommentTokens|addTokens|unparsed|_reduce|is_match|current|_decodeSpecial|_|_isSpecialMode|__exit|_isModeEnd|LEXER_MATCHED|_dispatchTokens|_getPerlMatchingFlags|Tk7|Tk6|Tk5|Tk4|Tk3|Tk2|Tk1|_untokenizeRegex|_tokenizeRegex|_getCompoundedRegex|subject|getDefaultAttributesAndEventsForTag|getUniqueAttributesAndEventsForTag|getPossibleTagAttributes|validateAttribute|doesAttributeNeedsValidation|getDefaultAttributesAndEventsForTags|isValidTag|parseInt|possible_attributes|rowgroup|rowspan|headers|colspan|axis|summary|border|box|frame|braille|print|projection|multiple|defer|valuetype|usemap|icon|shortcut|subsection|section|prev|home|help|glossary|copyright|contents|chapter|bookmark|appendix|alternate|rev|hreflang|datetime|reset|file|checked|profile|rtl|polygon|poly|circle|rectangle|rect|shape|coords|keyboard|tabindex|accesskey|language|escapeEntities|escapeOnce|escaped|_fixDoubleEscape|cancelSelector|previewSelector|dialogPreviewSelector|sText|textSelector||dialogPasteSelector|summarySelector|sCaption|newCaption|captionSelector|TABLE|colsSelector||rowsSelector|dialogTableSelector|dialogLinkSelector|uniqueStamp|dialogTypeSelector|SKINS_DEFAULT_JS|initSkin||addClass|loadCss|each|appendChild|target|IMG|configureEditorUsingRawCss|skins|computeJqueryPath|computeWymPath|computeBasePath|now|toggleHtml|encloseString|BASE_PATH|bodyHtml|dialogPreviewHtml|dialogPasteHtml|dialogTableHtml|dialogImageHtml|dialogLinkHtml|features|sMessage|statusSelector|STRING|CLASS|insertBefore|dialogFeaturesPreview|TOGGLE_HTML|PASTE|INSERT_TABLE|exec|updateEvent|updateSelector|classSelector|toolSelector|hide|containersItemHtml|containersItems|classesItemHtml|toolsItemHtml|toolsItems|statusHtml|htmlHtml|classesHtml|containersHtml|toolsHtml|logoHtml|wym_dialog_preview|wym_text|wym_dialog_paste|wym_cols|wym_rows|wym_summary|||wym_caption|wym_dialog_table|Title|wym_alt|wym_src|URL|wym_dialog_image|wym_rel|wym_href|wym_dialog_link|xhtml1|DTD|org|www|300|560|resizable|toolbar|titlebar|menubar|wym_html_val|wym_status|wym_html|wym_box|ToggleHtml|Paste|InsertTable|InsertImage|CreateLink|Redo|Undo|InsertUnorderedList|InsertOrderedList|Subscript|Superscript|Italic|Bold|IFRAME_DEFAULT|LANG_DEFAULT_PATH|SKINS_DEFAULT_PATH|apple|InsertLineBreak|replaceWith|startContainer|styleWithCSS|moveToElementText|Cut|addRule|unselectable|getData|clipboardData|onpaste|onbeforepaste|onbeforedeactivate|className|insertAt|isPhantomString|toUpperCase|end|x7d|x7b||x2e|z1|sa|insertContentBeforeClosingTag|main1|remove_embeded_styles|remove_scripts|remove_comments|fromCharCode|String|gmi|extends|9830|diams|9829|hearts|9827|clubs|9824|spades|9674|loz|9002|rang|9001|8971|rfloor|8970|lfloor|8969|rceil|8968|lceil|8901|sdot|8869|perp|8855|otimes|8853|oplus|8839|supe|8838|sube|8836|nsub|8835|8834|8805|8804|8801||8800|8776|asymp||8773|cong|8764||sim|8756|there4|8747|int|8746|cup|8745|cap|8744|8743|and|8736|ang|8734|infin|8733|8730|radic|8727|lowast|8722|minus|8721|sum|8719|prod|8715|8713|notin|8712|isin|8711|nabla|8709|empty|8707|exist|8706|part|||||||8704|forall|8660|hArr|8659|dArr|8658|rArr|8657|uArr|8656|lArr|8629|crarr|8596|harr|8595|darr|8594|rarr||8593|uarr|8592|larr|8501|alefsym|8482|trade|8476|real|8472|weierp|8465|8364|euro|8260|frasl|8254|oline|8250|rsaquo|8249|lsaquo|8243|Prime|8242|prime|8240|permil|8230|hellip|8226|bull|8225|Dagger|8224|dagger|8222|bdquo|8221|rdquo|8220|ldquo|8218|sbquo|8217|rsquo||8216|||lsquo|8212|mdash|8211|ndash|8207||rlm|8206|lrm|8205||zwj|8204|zwnj|8201|thinsp|8195|emsp|8194|ensp|982|piv|978|upsih|977|thetasym|969|omega|968|psi|967|chi|966|phi|965|upsilon|964|tau|963|sigma|962|sigmaf|961|rho|960|959|omicron|958|xi|957|956|955|lambda|954|kappa|953|iota|952|theta|951|eta|950|zeta|949|epsilon|948|delta|947|gamma|946|beta|945||alpha|937|Omega|936|Psi|935|Chi|934|Phi|933|Upsilon|932|Tau|931|Sigma|929|Rho|928|Pi|927|Omicron|926|Xi|925|Nu|924|Mu|923|Lambda|922|Kappa|921|Iota|920|Theta|919|Eta|918|Zeta|917|Epsilon|916|Delta|915|Gamma|914|Beta|913|Alpha|732|tilde|710|402|fnof|376|Yuml|353|scaron|352|Scaron|339|oelig|338|OElig|255|yuml|254|thorn|253|yacute|252|uuml|251|ucirc|250|uacute|249|ugrave|248|oslash|247|divide|246|ouml|245|otilde|244|ocirc|243|oacute|242|ograve|241|ntilde|240|eth|239|iuml|238|icirc|237|iacute|236|igrave|235|euml|234|ecirc|233||eacute|232|egrave||231|ccedil|230|aelig|229|aring|228|auml|227|atilde|226|acirc|225|aacute|agrave|223|szlig|222|THORN|221|Yacute|220|Uuml|219|Ucirc|218|Uacute|217|Ugrave|216|Oslash|215|times|214|Ouml|213|Otilde|212|Ocirc|211|Oacute|210|Ograve|209|Ntilde|208|ETH|207|Iuml|206|Icirc|205|Iacute|204|Igrave|203|Euml|202|Ecirc|201|Eacute||200|Egrave|199|Ccedil|198|AElig|197|Aring|196|Auml|195||Atilde|194|Acirc|193|Aacute|192|Agrave|191|iquest|190|frac34|189|frac12|188|frac14|187|raquo|186|ordm|185|sup1|184|cedil|183|middot|182|para|181|micro|180|acute|179|sup3|178|sup2|177|plusmn|176|deg|175|macr|174|reg|173|shy||172|171|laquo||170|ordf|169|copy|168||uml|167|sect||166||brvbar|165|yen|164|curren|163|pound|162|cent|161|iexcl|last_tag_attributes|com|microsoft|schemas|urn|_current_match|_last_match|_matches|boolean|concat|events|continue|groups|none|rules|vsides|rhs|lhs|hsides|below|above|void|cellspacing|cellpadding|aural|handheld|tv|tty|vbs|vbscript|jscript|ecmascript|ref|standby|declare|codetype|codebase|classid|archive|scheme|cookie||set||refresh|expires|speech||radio|password|checkbox|maxlength|longdesc|ismap|xmlns|post|method|enctype|nohref|onmouseup|onmouseout|onmouseover|onmousemove|onmousedown|ondblclick|mouse|onkeypress|onkeydown|frameset|onblur|onselect|onreset|onsubmit|onchange|onunload|core|charAt|parseAttributes|039|quot|textContent|shift|formated_options|amp|CDATA|cdataSection|contentTag|append|insertCell|insertRow|createCaption|newCol|opener|wym_skin_|ownerDocument|computeCssPath|addRange|selectNodeContents|insertNode|deleteContents||createContextualFragment|appendTo|insertAfter|getTime|Date|toggle|write|parsing|replaceChild|removeAttr|removeChild|firstChild|ready|blur|wym_box_|safari|opera|mozilla|msie|wymeditors|Number_Of_Cols|Number_Of_Rows|Summary|Caption|Alternative_Text|Relationship|dtd|strict|TR|w3|EN|Strict|XHTML|W3C|PUBLIC|DOCTYPE|yes|scrollbars|wymupdate|iframeSelector|classesSelector|containersSelector|toolsListSelector|toolsSelector|boxSelector|Source_Code|Status|wym_classes_|Classes|wym_containers_th|Table_Header|wym_containers_blockquote|Blockquote|wym_containers_pre|Preformatted|wym_containers_h6|Heading_6|wym_containers_h5|Heading_5|wym_containers_h4|Heading_4|wym_containers_h3|Heading_3|wym_containers_h2|Heading_2|wym_containers_h1|Heading_1|wym_containers_p|Paragraph|Containers|wym_tools_preview|wym_tools_html|wym_tools_paste|wym_tools_table|wym_tools_image|wym_tools_unlink|wym_tools_link|wym_tools_redo|wym_tools_undo|wym_tools_outdent|wym_tools_indent|wym_tools_unordered_list|Unordered_List|wym_tools_ordered_list|Ordered_List|wym_tools_subscript|wym_tools_superscript|wym_tools_emphasis|Emphasis|wym_tools_strong|Strong|Tools|parent|wymiframe|wym_wymeditor_link|wym_area_bottom|wym_area_main|wym_area_right|wym_area_left|wym_area_top|TEXT|ATTRIBUTE|ELEMENT|NODE|CURSOR|HOME|END|UNLINK|FormatBlock|InsertHTML|INSERT_HTML|Wym_Dialog_Body|Wym_Dialog_Title|Wym_Status|Wym_Iframe|Wym_Html|Wym_Container_Class|Wym_Containers_Title|Wym_Container_Name||Wym_Containers_Items|Wym_Containers|Wym_Class_Title|Wym_Class_Name|Wym_Classes_Items|Wym_Classes|Wym_Tool_Class|Wym_Tool_Title|Wym_Tool_Name|Wym_Tools_Items|Wym_Tools|Wym_Logo|Wym_Direction|Wym_Jquery_Path|Wym_Iframe_Base_Path|Wym_Wym_Path|Wym_Css_Path|Wym_Base_Path|wym_index|Wym_Index|rc1|VERSION|profileEnd|trace|timeEnd|time|groupEnd|group|dirxml|assert|warn|info|debug|log|firebug'.split('|'),0,{})) diff --git a/studio/static/js/wymeditor/jquery.wymeditor.safari.js b/studio/static/js/wymeditor/jquery.wymeditor.safari.js new file mode 100644 index 0000000..e4b9739 --- /dev/null +++ b/studio/static/js/wymeditor/jquery.wymeditor.safari.js @@ -0,0 +1,247 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.safari.js + * Safari specific class and functions. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Scott Lewis (lewiscot a-t gmail dotcom) + */ + +WYMeditor.WymClassSafari = function(wym) { + + this._wym = wym; + this._class = "class"; + this._newLine = "\n"; +}; + +WYMeditor.WymClassSafari.prototype.initIframe = function(iframe) { + + this._iframe = iframe; + this._doc = iframe.contentDocument; + + //add css rules from options + + var styles = this._doc.styleSheets[0]; + var aCss = eval(this._options.editorStyles); + + this.addCssRules(this._doc, aCss); + + this._doc.title = this._wym._index; + + //set the text direction + jQuery('html', this._doc).attr('dir', this._options.direction); + + //init designMode + this._doc.designMode = "on"; + + //init html value + this.html(this._wym._html); + + //pre-bind functions + if(jQuery.isFunction(this._options.preBind)) this._options.preBind(this); + + //bind external events + this._wym.bindEvents(); + + //bind editor keydown events + jQuery(this._doc).bind("keydown", this.keydown); + + //bind editor keyup events + jQuery(this._doc).bind("keyup", this.keyup); + + //post-init functions + if(jQuery.isFunction(this._options.postInit)) this._options.postInit(this); + + //add event listeners to doc elements, e.g. images + this.listen(); +}; + +WYMeditor.WymClassSafari.prototype._exec = function(cmd,param) { + + if(!this.selected()) return(false); + + switch(cmd) { + + case WYMeditor.INDENT: case WYMeditor.OUTDENT: + + var focusNode = this.selected(); + var sel = this._iframe.contentWindow.getSelection(); + var anchorNode = sel.anchorNode; + if(anchorNode.nodeName == "#text") anchorNode = anchorNode.parentNode; + + focusNode = this.findUp(focusNode, WYMeditor.BLOCKS); + anchorNode = this.findUp(anchorNode, WYMeditor.BLOCKS); + + if(focusNode && focusNode == anchorNode + && focusNode.tagName.toLowerCase() == WYMeditor.LI) { + + var ancestor = focusNode.parentNode.parentNode; + + if(focusNode.parentNode.childNodes.length>1 + || ancestor.tagName.toLowerCase() == WYMeditor.OL + || ancestor.tagName.toLowerCase() == WYMeditor.UL) + this._doc.execCommand(cmd,'',null); + } + + break; + + case WYMeditor.INSERT_ORDEREDLIST: case WYMeditor.INSERT_UNORDEREDLIST: + + this._doc.execCommand(cmd,'',null); + + //Safari creates lists in e.g. paragraphs. + //Find the container, and remove it. + var focusNode = this.selected(); + var container = this.findUp(focusNode, WYMeditor.MAIN_CONTAINERS); + if(container) jQuery(container).replaceWith(jQuery(container).html()); + + break; + + default: + + if(param) this._doc.execCommand(cmd,'',param); + else this._doc.execCommand(cmd,'',null); + } + + //set to P if parent = BODY + var container = this.selected(); + if(container && container.tagName.toLowerCase() == WYMeditor.BODY) + this._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); + +}; + +/* @name selected + * @description Returns the selected container + */ +WYMeditor.WymClassSafari.prototype.selected = function() { + + var sel = this._iframe.contentWindow.getSelection(); + var node = sel.focusNode; + if(node) { + if(node.nodeName == "#text") return(node.parentNode); + else return(node); + } else return(null); +}; + +WYMeditor.WymClassSafari.prototype.addCssRule = function(styles, oCss) { + + styles.insertRule(oCss.name + " {" + oCss.css + "}", + styles.cssRules.length); +}; + + +//keydown handler, mainly used for keyboard shortcuts +WYMeditor.WymClassSafari.prototype.keydown = function(e) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + + if(e.ctrlKey){ + if(e.keyCode == 66){ + //CTRL+b => STRONG + wym._exec(WYMeditor.BOLD); + e.preventDefault(); + } + if(e.keyCode == 73){ + //CTRL+i => EMPHASIS + wym._exec(WYMeditor.ITALIC); + e.preventDefault(); + } + } else if(e.shiftKey && e.keyCode == 13) { + wym._exec('InsertLineBreak'); + e.preventDefault(); + } +}; + +//keyup handler, mainly used for cleanups +WYMeditor.WymClassSafari.prototype.keyup = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + + wym._selected_image = null; + var container = null; + + if(evt.keyCode == 13 && !evt.shiftKey) { + + //RETURN key + //cleanup <br><br> between paragraphs + jQuery(wym._doc.body).children(WYMeditor.BR).remove(); + + //fix PRE bug #73 + container = wym.selected(); + if(container && container.tagName.toLowerCase() == WYMeditor.PRE) + wym._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); //create P after PRE + } + + if(evt.keyCode != 8 + && evt.keyCode != 17 + && evt.keyCode != 46 + && evt.keyCode != 224 + && !evt.metaKey + && !evt.ctrlKey) { + + //NOT BACKSPACE, NOT DELETE, NOT CTRL, NOT COMMAND + //text nodes replaced by P + + container = wym.selected(); + var name = container.tagName.toLowerCase(); + + //fix forbidden main containers + if( + name == "strong" || + name == "b" || + name == "em" || + name == "i" || + name == "sub" || + name == "sup" || + name == "a" || + name == "span" //fix #110 + + ) name = container.parentNode.tagName.toLowerCase(); + + if(name == WYMeditor.BODY || name == WYMeditor.DIV) wym._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); //fix #110 for DIV + } +}; + +WYMeditor.WymClassSafari.prototype.openBlockTag = function(tag, attributes) +{ + var attributes = this.validator.getValidTagAttributes(tag, attributes); + + // Handle Safari styled spans + if (tag == 'span' && attributes.style) { + var new_tag = this.getTagForStyle(attributes.style); + if (new_tag) { + tag = new_tag; + this._tag_stack.pop(); + this._tag_stack.push(tag); + attributes.style = ''; + + // Should fix #125 - also removed the xhtml() override + if(typeof attributes['class'] == 'string') { + attributes['class'] = attributes['class'].replace(/apple-style-span/gi, ''); + } + } + } + + this.output += this.helper.tag(tag, attributes, true); +}; + +WYMeditor.WymClassSafari.prototype.getTagForStyle = function(style) { + + if(/bold/.test(style)) return 'strong'; + if(/italic/.test(style)) return 'em'; + if(/sub/.test(style)) return 'sub'; + if(/super/.test(style)) return 'sup'; + return false; +}; diff --git a/studio/static/js/wymeditor/lang/.svn/entries b/studio/static/js/wymeditor/lang/.svn/entries new file mode 100644 index 0000000..2f4e246 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/entries @@ -0,0 +1,912 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/lang +svn://svn.wymeditor.org/wymeditor + + + +2010-06-16T22:14:30.896087Z +671 +mr_lundis + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +cs.js +file + + + + +2011-07-13T16:45:39.000000Z +8407c00954064ee8a4bb1c5534e9b0cf +2008-10-06T17:56:42.178306Z +556 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1683 + +fr.js +file + + + + +2011-07-13T16:45:39.000000Z +de2243ddfc69cc11cde635d51c203f58 +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1540 + +es.js +file + + + + +2011-07-13T16:45:39.000000Z +15ddb1092fb54b243ebc27306c4ff185 +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1548 + +hr.js +file + + + + +2011-07-13T16:45:39.000000Z +d9f0b6c76b689f76243dcbafb6c4ca8b +2009-03-12T10:43:31.861532Z +585 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +1517 + +nl.js +file + + + + +2011-07-13T16:45:39.000000Z +16ecb01b57a7c6e627195c095ebd9664 +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1537 + +cy.js +file + + + + +2011-07-13T16:45:39.000000Z +26e73f813aac75243a4e2e2aa9eefc2d +2010-03-31T20:26:06.993041Z +651 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +1542 + +nn.js +file + + + + +2011-07-13T16:45:39.000000Z +f389e5577207f6125d3d95148f7f56ca +2008-07-08T21:01:27.213276Z +514 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1504 + +pl.js +file + + + + +2011-07-13T16:45:39.000000Z +4170572c911e8dc00fe78b97eb034a87 +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1563 + +it.js +file + + + + +2011-07-13T16:45:39.000000Z +c267a9efc265501508b0c20beda2a202 +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1523 + +hu.js +file + + + + +2011-07-13T16:45:39.000000Z +87ec9def97fa4085049b2039af1e3cf5 +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1553 + +ca.js +file + + + + +2011-07-13T16:45:39.000000Z +ef8f5b258b41e4b85281c0ae810139bd +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1552 + +pt.js +file + + + + +2011-07-13T16:45:39.000000Z +8de734032fe9edea9d37f4334cbbb64d +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1547 + +pt-br.js +file + + + + +2011-07-13T16:45:39.000000Z +9f32ebcb89424e390b6d57668894987d +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1543 + +tr.js +file + + + + +2011-07-13T16:45:39.000000Z +976fd75344b1893f9de9262bf43263f8 +2008-11-09T19:53:01.458305Z +567 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1537 + +ru.js +file + + + + +2011-07-13T16:45:39.000000Z +28782e8ac2861dfa57a39bbb6ab7c883 +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1956 + +fa.js +file + + + + +2011-07-13T16:45:39.000000Z +29d7bb6c7da2781c88503d9a75d7d93a +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +2253 + +de.js +file + + + + +2011-07-13T16:45:39.000000Z +c47599295200bd1ae30bc51c749c49f0 +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1694 + +bg.js +file + + + + +2011-07-13T16:45:39.000000Z +f1d85ab79383acf1698f7042773717e2 +2008-12-16T20:10:42.882950Z +575 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1973 + +sv.js +file + + + + +2011-07-13T16:45:39.000000Z +0d1671c35bb10efefecd9ac9d161abfc +2010-06-16T22:14:30.896087Z +671 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +1518 + +ja.js +file + + + + +2011-07-13T16:45:39.000000Z +db365bd23b03b84f9eaf7e0df5fe791a +2010-06-11T10:15:56.250894Z +666 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +1311 + +he.js +file + + + + +2011-07-13T16:45:39.000000Z +f119d047232bcdb436a238b716060138 +2008-09-10T20:50:59.861136Z +539 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1812 + +fi.js +file + + + + +2011-07-13T16:45:39.000000Z +c7fa6c1e747480b1695e86bff08c3f99 +2009-03-14T15:08:06.269083Z +586 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +1543 + +nb.js +file + + + + +2011-07-13T16:45:39.000000Z +b51b573772a041858126df92a8a7cc3c +2008-07-08T21:01:27.213276Z +514 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1501 + +zh_cn.js +file + + + + +2011-07-13T16:45:39.000000Z +83ba8a5406c3cb0ee1c480cb236ee6fa +2008-06-05T19:53:16.438140Z +508 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1206 + +gl.js +file + + + + +2011-07-13T16:45:39.000000Z +3c1001043b99fed6be195252296a98ce +2009-06-08T21:00:39.401508Z +646 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1546 + +en.js +file + + + + +2011-07-13T16:45:39.000000Z +ee76c7f82c1f407ac5ca8464dfcc6724 +2010-06-16T22:14:30.896087Z +671 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +1508 + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/bg.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/bg.js.svn-base new file mode 100644 index 0000000..576bca5 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/bg.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['bg'] = { + Strong: 'Получер', + Emphasis: 'Курсив', + Superscript: 'Горен индекс', + Subscript: 'Долен индекс', + Ordered_List: 'Подреден списък', + Unordered_List: 'Неподреден списък', + Indent: 'Блок навътре', + Outdent: 'Блок навън', + Undo: 'Стъпка назад', + Redo: 'Стъпка напред', + Link: 'Създай хипервръзка', + Unlink: 'Премахни хипервръзката', + Image: 'Изображение', + Table: 'Таблица', + HTML: 'HTML', + Paragraph: 'Абзац', + Heading_1: 'Заглавие 1', + Heading_2: 'Заглавие 2', + Heading_3: 'Заглавие 3', + Heading_4: 'Заглавие 4', + Heading_5: 'Заглавие 5', + Heading_6: 'Заглавие 6', + Preformatted: 'Преформатиран', + Blockquote: 'Цитат', + Table_Header: 'Заглавие на таблицата', + URL: 'URL', + Title: 'Заглавие', + Alternative_Text: 'Алтернативен текст', + Caption: 'Етикет', + Summary: 'Общо', + Number_Of_Rows: 'Брой редове', + Number_Of_Cols: 'Брой колони', + Submit: 'Изпрати', + Cancel: 'Отмени', + Choose: 'Затвори', + Preview: 'Предварителен преглед', + Paste_From_Word: 'Вмъкни от MS WORD', + Tools: 'Инструменти', + Containers: 'Контейнери', + Classes: 'Класове', + Status: 'Статус', + Source_Code: 'Източник, код' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/ca.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/ca.js.svn-base new file mode 100644 index 0000000..c342406 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/ca.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['ca'] = { + Strong: 'Ressaltar', + Emphasis: 'Emfatitzar', + Superscript: 'Superindex', + Subscript: 'Subindex', + Ordered_List: 'Llistat ordenat', + Unordered_List: 'Llistat sense ordenar', + Indent: 'Indentat', + Outdent: 'Sense indentar', + Undo: 'Desfer', + Redo: 'Refer', + Link: 'Enllaçar', + Unlink: 'Eliminar enllaç', + Image: 'Imatge', + Table: 'Taula', + HTML: 'HTML', + Paragraph: 'Paràgraf', + Heading_1: 'Capçalera 1', + Heading_2: 'Capçalera 2', + Heading_3: 'Capçalera 3', + Heading_4: 'Capçalera 4', + Heading_5: 'Capçalera 5', + Heading_6: 'Capçalera 6', + Preformatted: 'Pre-formatejat', + Blockquote: 'Cita', + Table_Header: 'Capçalera de la taula', + URL: 'URL', + Title: 'Títol', + Alternative_Text: 'Text alternatiu', + Caption: 'Llegenda', + Summary: 'Summary', + Number_Of_Rows: 'Nombre de files', + Number_Of_Cols: 'Nombre de columnes', + Submit: 'Enviar', + Cancel: 'Cancel·lar', + Choose: 'Triar', + Preview: 'Vista prèvia', + Paste_From_Word: 'Pegar des de Word', + Tools: 'Eines', + Containers: 'Contenidors', + Classes: 'Classes', + Status: 'Estat', + Source_Code: 'Codi font' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/cs.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/cs.js.svn-base new file mode 100644 index 0000000..3939d71 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/cs.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['cs'] = { + Strong: 'Tučné', + Emphasis: 'Kurzíva', + Superscript: 'Horní index', + Subscript: 'Dolní index', + Ordered_List: 'Číslovaný seznam', + Unordered_List: 'Nečíslovaný seznam', + Indent: 'Zvětšit odsazení', + Outdent: 'Zmenšit odsazení', + Undo: 'Zpět', + Redo: 'Znovu', + Link: 'Vytvořit odkaz', + Unlink: 'Zrušit odkaz', + Image: 'Obrázek', + Table: 'Tabulka', + HTML: 'HTML', + Paragraph: 'Odstavec', + Heading_1: 'Nadpis 1. úrovně', + Heading_2: 'Nadpis 2. úrovně', + Heading_3: 'Nadpis 3. úrovně', + Heading_4: 'Nadpis 4. úrovně', + Heading_5: 'Nadpis 5. úrovně', + Heading_6: 'Nadpis 6. úrovně', + Preformatted: 'Předformátovaný text', + Blockquote: 'Citace', + Table_Header: 'Hlavičková buňka tabulky', + URL: 'Adresa', + Title: 'Text po najetí myší', + Alternative_Text: 'Text pro případ nezobrazení obrázku', + Caption: 'Titulek tabulky', + Summary: 'Shrnutí obsahu', + Number_Of_Rows: 'Počet řádek', + Number_Of_Cols: 'Počet sloupců', + Submit: 'Vytvořit', + Cancel: 'Zrušit', + Choose: 'Vybrat', + Preview: 'Náhled', + Paste_From_Word: 'Vložit z Wordu', + Tools: 'Nástroje', + Containers: 'Typy obsahu', + Classes: 'Třídy', + Status: 'Stav', + Source_Code: 'Zdrojový kód' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/cy.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/cy.js.svn-base new file mode 100644 index 0000000..7d15b79 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/cy.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['cy'] = {
+ Strong: 'Bras',
+ Emphasis: 'Italig',
+ Superscript: 'Uwchsgript',
+ Subscript: 'Is-sgript',
+ Ordered_List: 'Rhestr mewn Trefn',
+ Unordered_List: 'Pwyntiau Bwled',
+ Indent: 'Mewnoli',
+ Outdent: 'Alloli',
+ Undo: 'Dadwneud',
+ Redo: 'Ailwneud',
+ Link: 'Cysylltu',
+ Unlink: 'Datgysylltu',
+ Image: 'Delwedd',
+ Table: 'Tabl',
+ HTML: 'HTML',
+ Paragraph: 'Paragraff',
+ Heading_1: 'Pennawd 1',
+ Heading_2: 'Pennawd 2',
+ Heading_3: 'Pennawd 3',
+ Heading_4: 'Pennawd 4',
+ Heading_5: 'Pennawd 5',
+ Heading_6: 'Pennawd 6',
+ Preformatted: 'Rhagfformat',
+ Blockquote: 'Bloc Dyfyniad',
+ Table_Header: 'Pennyn Tabl',
+ URL: 'URL',
+ Title: 'Teitl',
+ Alternative_Text: 'Testun Amgen',
+ Caption: 'Pennawd',
+ Summary: 'Crynodeb',
+ Number_Of_Rows: 'Nifer y rhesi',
+ Number_Of_Cols: 'Nifer y colofnau',
+ Submit: 'Anfon',
+ Cancel: 'Diddymu',
+ Choose: 'Dewis',
+ Preview: 'Rhagolwg',
+ Paste_From_Word: 'Gludo o Word',
+ Tools: 'Offer',
+ Containers: 'Cynhwysyddion',
+ Classes: 'Dosbarthiadau',
+ Status: 'Statws',
+ Source_Code: 'Cod ffynhonnell'
+};
+
diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/de.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/de.js.svn-base new file mode 100644 index 0000000..a1e01e1 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/de.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['de'] = { + Strong: 'Fett', + Emphasis: 'Kursiv', + Superscript: 'Text hochstellen', + Subscript: 'Text tiefstellen', + Ordered_List: 'Geordnete Liste einfügen', + Unordered_List: 'Ungeordnete Liste einfügen', + Indent: 'Einzug erhöhen', + Outdent: 'Einzug vermindern', + Undo: 'Befehle rückgängig machen', + Redo: 'Befehle wiederherstellen', + Link: 'Hyperlink einfügen', + Unlink: 'Hyperlink entfernen', + Image: 'Bild einfügen', + Table: 'Tabelle einfügen', + HTML: 'HTML anzeigen/verstecken', + Paragraph: 'Absatz', + Heading_1: 'Überschrift 1', + Heading_2: 'Überschrift 2', + Heading_3: 'Überschrift 3', + Heading_4: 'Überschrift 4', + Heading_5: 'Überschrift 5', + Heading_6: 'Überschrift 6', + Preformatted: 'Vorformatiert', + Blockquote: 'Zitat', + Table_Header: 'Tabellenüberschrift', + URL: 'URL', + Title: 'Titel', + Alternative_Text: 'Alternativer Text', + Caption: 'Tabellenüberschrift', + Summary: 'Summary', + Number_Of_Rows: 'Anzahl Zeilen', + Number_Of_Cols: 'Anzahl Spalten', + Submit: 'Absenden', + Cancel: 'Abbrechen', + Choose: 'Auswählen', + Preview: 'Vorschau', + Paste_From_Word: 'Aus Word einfügen', + Tools: 'Werkzeuge', + Containers: 'Inhaltstyp', + Classes: 'Klassen', + Status: 'Status', + Source_Code: 'Quellcode' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/en.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/en.js.svn-base new file mode 100644 index 0000000..dc7eb21 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/en.js.svn-base @@ -0,0 +1,46 @@ +WYMeditor.STRINGS['en'] = { + Strong: 'Strong', + Emphasis: 'Emphasis', + Superscript: 'Superscript', + Subscript: 'Subscript', + Ordered_List: 'Ordered List', + Unordered_List: 'Unordered List', + Indent: 'Indent', + Outdent: 'Outdent', + Undo: 'Undo', + Redo: 'Redo', + Link: 'Link', + Unlink: 'Unlink', + Image: 'Image', + Table: 'Table', + HTML: 'HTML', + Paragraph: 'Paragraph', + Heading_1: 'Heading 1', + Heading_2: 'Heading 2', + Heading_3: 'Heading 3', + Heading_4: 'Heading 4', + Heading_5: 'Heading 5', + Heading_6: 'Heading 6', + Preformatted: 'Preformatted', + Blockquote: 'Blockquote', + Table_Header: 'Table Header', + URL: 'URL', + Title: 'Title', + Relationship: 'Relationship', + Alternative_Text: 'Alternative text', + Caption: 'Caption', + Summary: 'Summary', + Number_Of_Rows: 'Number of rows', + Number_Of_Cols: 'Number of cols', + Submit: 'Submit', + Cancel: 'Cancel', + Choose: 'Choose', + Preview: 'Preview', + Paste_From_Word: 'Paste from Word', + Tools: 'Tools', + Containers: 'Containers', + Classes: 'Classes', + Status: 'Status', + Source_Code: 'Source code' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/es.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/es.js.svn-base new file mode 100644 index 0000000..cdb03c1 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/es.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['es'] = { + Strong: 'Resaltar', + Emphasis: 'Enfatizar', + Superscript: 'Superindice', + Subscript: 'Subindice', + Ordered_List: 'Lista ordenada', + Unordered_List: 'Lista sin ordenar', + Indent: 'Indentado', + Outdent: 'Sin indentar', + Undo: 'Deshacer', + Redo: 'Rehacer', + Link: 'Enlazar', + Unlink: 'Eliminar enlace', + Image: 'Imagen', + Table: 'Tabla', + HTML: 'HTML', + Paragraph: 'Párrafo', + Heading_1: 'Cabecera 1', + Heading_2: 'Cabecera 2', + Heading_3: 'Cabecera 3', + Heading_4: 'Cabecera 4', + Heading_5: 'Cabecera 5', + Heading_6: 'Cabecera 6', + Preformatted: 'Preformateado', + Blockquote: 'Cita', + Table_Header: 'Cabecera de la tabla', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto alternativo', + Caption: 'Leyenda', + Summary: 'Summary', + Number_Of_Rows: 'Número de filas', + Number_Of_Cols: 'Número de columnas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Seleccionar', + Preview: 'Vista previa', + Paste_From_Word: 'Pegar desde Word', + Tools: 'Herramientas', + Containers: 'Contenedores', + Classes: 'Clases', + Status: 'Estado', + Source_Code: 'Código fuente' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/fa.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/fa.js.svn-base new file mode 100644 index 0000000..9d70fcb --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/fa.js.svn-base @@ -0,0 +1,46 @@ +//Translation To Persian: Ghassem Tofighi (http://ght.ir) +WYMeditor.STRINGS['fa'] = { + Strong: 'پررنگ',//Strong + Emphasis: 'ایتالیک',//Emphasis + Superscript: 'بالانويس ',//Superscript + Subscript: 'زيرنويس',//Subscript + Ordered_List: 'لیست مرتب',//Ordered List + Unordered_List: 'لیست نامرتب',//Unordered List + Indent: 'افزودن دندانه',//Indent + Outdent: 'کاهش دندانه',//Outdent + Undo: 'واگردانی',//Undo + Redo: 'تکرار',//Redo + Link: 'ساختن پیوند',//Link + Unlink: 'برداشتن پیوند',//Unlink + Image: 'تصویر',//Image + Table: 'جدول',//Table + HTML: 'HTML',//HTML + Paragraph: 'پاراگراف',//Paragraph + Heading_1: 'سرتیتر ۱',//Heading 1 + Heading_2: 'سرتیتر ۲',//Heading 2 + Heading_3: 'سرتیتر ۳',//Heading 3 + Heading_4: 'سرتیتر ۴',//Heading 4 + Heading_5: 'سرتیتر ۵',//Heading 5 + Heading_6: 'سرتیتر ۶',//Heading 6 + Preformatted: 'قالب آماده',//Preformatted + Blockquote: 'نقل قول',//Blockquote + Table_Header: 'سرجدول',//Table Header + URL: 'آدرس اینترنتی',//URL + Title: 'عنوان',//Title + Alternative_Text: 'متن جایگزین',//Alternative text + Caption: 'عنوان',//Caption + Summary: 'Summary', + Number_Of_Rows: 'تعداد سطرها',//Number of rows + Number_Of_Cols: 'تعداد ستونها',//Number of cols + Submit: 'فرستادن',//Submit + Cancel: 'لغو',//Cancel + Choose: 'انتخاب',//Choose + Preview: 'پیشنمایش',//Preview + Paste_From_Word: 'انتقال از ورد',//Paste from Word + Tools: 'ابزار',//Tools + Containers: 'قالبها',//Containers + Classes: 'کلاسها',//Classes + Status: 'وضعیت',//Status + Source_Code: 'کد مبدأ'//Source code +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/fi.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/fi.js.svn-base new file mode 100644 index 0000000..fe1eab4 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/fi.js.svn-base @@ -0,0 +1,44 @@ +WYMeditor.STRINGS['fi'] = { + Strong: 'Lihavoitu', + Emphasis: 'Korostus', + Superscript: 'Yläindeksi', + Subscript: 'Alaindeksi', + Ordered_List: 'Numeroitu lista', + Unordered_List: 'Luettelomerkit', + Indent: 'Suurenna sisennystä', + Outdent: 'Pienennä sisennystä', + Undo: 'Kumoa', + Redo: 'Toista', + Link: 'Linkitä', + Unlink: 'Poista linkitys', + Image: 'Kuva', + Table: 'Taulukko', + HTML: 'HTML', + Paragraph: 'Kappale', + Heading_1: 'Otsikko 1', + Heading_2: 'Otsikko 2', + Heading_3: 'Otsikko 3', + Heading_4: 'Otsikko 4', + Heading_5: 'Otsikko 5', + Heading_6: 'Otsikko 6', + Preformatted: 'Esimuotoilu', + Blockquote: 'Sitaatti', + Table_Header: 'Taulukon otsikko', + URL: 'URL', + Title: 'Otsikko', + Alternative_Text: 'Vaihtoehtoinen teksti', + Caption: 'Kuvateksti', + Summary: 'Yhteenveto', + Number_Of_Rows: 'Rivien määrä', + Number_Of_Cols: 'Palstojen määrä', + Submit: 'Lähetä', + Cancel: 'Peruuta', + Choose: 'Valitse', + Preview: 'Esikatsele', + Paste_From_Word: 'Tuo Wordista', + Tools: 'Työkalut', + Containers: 'Muotoilut', + Classes: 'Luokat', + Status: 'Tila', + Source_Code: 'Lähdekoodi' +}; diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/fr.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/fr.js.svn-base new file mode 100644 index 0000000..9b6deb9 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/fr.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['fr'] = { + Strong: 'Mise en évidence', + Emphasis: 'Emphase', + Superscript: 'Exposant', + Subscript: 'Indice', + Ordered_List: 'Liste Ordonnée', + Unordered_List: 'Liste Non-Ordonnée', + Indent: 'Imbriqué', + Outdent: 'Non-imbriqué', + Undo: 'Annuler', + Redo: 'Rétablir', + Link: 'Lien', + Unlink: 'Supprimer le Lien', + Image: 'Image', + Table: 'Tableau', + HTML: 'HTML', + Paragraph: 'Paragraphe', + Heading_1: 'Titre 1', + Heading_2: 'Titre 2', + Heading_3: 'Titre 3', + Heading_4: 'Titre 4', + Heading_5: 'Titre 5', + Heading_6: 'Titre 6', + Preformatted: 'Pré-formatté', + Blockquote: 'Citation', + Table_Header: 'Cellule de titre', + URL: 'URL', + Title: 'Titre', + Alternative_Text: 'Texte alternatif', + Caption: 'Légende', + Summary: 'Résumé', + Number_Of_Rows: 'Nombre de lignes', + Number_Of_Cols: 'Nombre de colonnes', + Submit: 'Envoyer', + Cancel: 'Annuler', + Choose: 'Choisir', + Preview: 'Prévisualisation', + Paste_From_Word: 'Copier depuis Word', + Tools: 'Outils', + Containers: 'Type de texte', + Classes: 'Type de contenu', + Status: 'Infos', + Source_Code: 'Code source' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/gl.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/gl.js.svn-base new file mode 100644 index 0000000..d4786b8 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/gl.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['gl'] = { + Strong: 'Moita énfase', + Emphasis: 'Énfase', + Superscript: 'Superíndice', + Subscript: 'Subíndice', + Ordered_List: 'Lista ordenada', + Unordered_List: 'Lista sen ordenar', + Indent: 'Aniñar', + Outdent: 'Desaniñar', + Undo: 'Desfacer', + Redo: 'Refacer', + Link: 'Ligazón', + Unlink: 'Desligar', + Image: 'Imaxe', + Table: 'Táboa', + HTML: 'HTML', + Paragraph: 'Parágrafo', + Heading_1: 'Título 1', + Heading_2: 'Título 2', + Heading_3: 'Título 3', + Heading_4: 'Título 4', + Heading_5: 'Título 5', + Heading_6: 'Título 6', + Preformatted: 'Preformatado', + Blockquote: 'Cita en parágrafo', + Table_Header: 'Cabeceira da táboa', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto alternativo', + Caption: 'Título', + Summary: 'Resumo', + Number_Of_Rows: 'Número de filas', + Number_Of_Cols: 'Número de columnas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Escoller', + Preview: 'Previsualizar', + Paste_From_Word: 'Colar dende Word', + Tools: 'Ferramentas', + Containers: 'Contenedores', + Classes: 'Clases', + Status: 'Estado', + Source_Code: 'Código fonte' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/he.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/he.js.svn-base new file mode 100644 index 0000000..97c9675 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/he.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['he'] = { + Strong: 'חזק', + Emphasis: 'מובלט', + Superscript: 'כתב עילי', + Subscript: 'כתב תחתי', + Ordered_List: 'רשימה ממוספרת', + Unordered_List: 'רשימה לא ממוספרת', + Indent: 'הזחה פנימה', + Outdent: 'הזחה החוצה', + Undo: 'בטל פעולה', + Redo: 'בצע מחדש פעולה', + Link: 'קישור', + Unlink: 'בטל קישור', + Image: 'תמונה', + Table: 'טבלה', + HTML: 'קוד HTML', + Paragraph: 'פסקה', + Heading_1: 'כותרת 1 ; תג <h1>', + Heading_2: 'כותרת 2 ; תג <h2>', + Heading_3: 'כותרת 3 ; תג <h3>', + Heading_4: 'כותרת 4 ; תג <h4>', + Heading_5: 'כותרת 5 ; תג <h5>', + Heading_6: 'כותרת 6 ; תג <h6>', + Preformatted: 'משמר רווחים', + Blockquote: 'ציטוט', + Table_Header: 'כותרת טבלה', + URL: 'קישור (URL)', + Title: 'כותרת', + Alternative_Text: 'טקסט חלופי', + Caption: 'כותרת', + Summary: 'סיכום', + Number_Of_Rows: 'מספר שורות', + Number_Of_Cols: 'מספר טורים', + Submit: 'שלח', + Cancel: 'בטל', + Choose: 'בחר', + Preview: 'תצוגה מקדימה', + Paste_From_Word: 'העתק מ-Word', + Tools: 'כלים', + Containers: 'מיכלים', + Classes: 'מחלקות', + Status: 'מצב', + Source_Code: 'קוד מקור' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/hr.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/hr.js.svn-base new file mode 100644 index 0000000..193e31a --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/hr.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['hr'] = { + Strong: 'Podebljano', + Emphasis: 'Naglašeno', + Superscript: 'Iznad', + Subscript: 'Ispod', + Ordered_List: 'Pobrojana lista', + Unordered_List: 'Nepobrojana lista', + Indent: 'Uvuci', + Outdent: 'Izvuci', + Undo: 'Poništi promjenu', + Redo: 'Ponovno promjeni', + Link: 'Hiperveza', + Unlink: 'Ukloni hipervezu', + Image: 'Slika', + Table: 'Tablica', + HTML: 'HTML', + Paragraph: 'Paragraf', + Heading_1: 'Naslov 1', + Heading_2: 'Naslov 2', + Heading_3: 'Naslov 3', + Heading_4: 'Naslov 4', + Heading_5: 'Naslov 5', + Heading_6: 'Naslov 6', + Preformatted: 'Unaprijed formatirano', + Blockquote: 'Citat', + Table_Header: 'Zaglavlje tablice', + URL: 'URL', + Title: 'Naslov', + Alternative_Text: 'Alternativni tekst', + Caption: 'Zaglavlje', + Summary: 'Sažetak', + Number_Of_Rows: 'Broj redova', + Number_Of_Cols: 'Broj kolona', + Submit: 'Snimi', + Cancel: 'Odustani', + Choose: 'Izaberi', + Preview: 'Pregled', + Paste_From_Word: 'Zalijepi iz Word-a', + Tools: 'Alati', + Containers: 'Kontejneri', + Classes: 'Klase', + Status: 'Status', + Source_Code: 'Izvorni kod' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/hu.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/hu.js.svn-base new file mode 100644 index 0000000..a8cdbc6 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/hu.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['hu'] = { + Strong: 'Félkövér', + Emphasis: 'Kiemelt', + Superscript: 'Felső index', + Subscript: 'Alsó index', + Ordered_List: 'Rendezett lista', + Unordered_List: 'Rendezetlen lista', + Indent: 'Bekezdés', + Outdent: 'Bekezdés törlése', + Undo: 'Visszavon', + Redo: 'Visszaállít', + Link: 'Link', + Unlink: 'Link törlése', + Image: 'Kép', + Table: 'Tábla', + HTML: 'HTML', + Paragraph: 'Bekezdés', + Heading_1: 'Címsor 1', + Heading_2: 'Címsor 2', + Heading_3: 'Címsor 3', + Heading_4: 'Címsor 4', + Heading_5: 'Címsor 5', + Heading_6: 'Címsor 6', + Preformatted: 'Előformázott', + Blockquote: 'Idézet', + Table_Header: 'Tábla Fejléc', + URL: 'Webcím', + Title: 'Megnevezés', + Alternative_Text: 'Alternatív szöveg', + Caption: 'Fejléc', + Summary: 'Summary', + Number_Of_Rows: 'Sorok száma', + Number_Of_Cols: 'Oszlopok száma', + Submit: 'Elküld', + Cancel: 'Mégsem', + Choose: 'Választ', + Preview: 'Előnézet', + Paste_From_Word: 'Másolás Word-ból', + Tools: 'Eszközök', + Containers: 'Tartalmak', + Classes: 'Osztályok', + Status: 'Állapot', + Source_Code: 'Forráskód' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/it.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/it.js.svn-base new file mode 100644 index 0000000..ca632a9 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/it.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['it'] = { + Strong: 'Grassetto', + Emphasis: 'Corsetto', + Superscript: 'Apice', + Subscript: 'Pedice', + Ordered_List: 'Lista Ordinata', + Unordered_List: 'Lista Puntata', + Indent: 'Indenta', + Outdent: 'Caccia', + Undo: 'Indietro', + Redo: 'Avanti', + Link: 'Inserisci Link', + Unlink: 'Togli Link', + Image: 'Inserisci Immagine', + Table: 'Inserisci Tabella', + HTML: 'HTML', + Paragraph: 'Paragrafo', + Heading_1: 'Heading 1', + Heading_2: 'Heading 2', + Heading_3: 'Heading 3', + Heading_4: 'Heading 4', + Heading_5: 'Heading 5', + Heading_6: 'Heading 6', + Preformatted: 'Preformattato', + Blockquote: 'Blockquote', + Table_Header: 'Header Tabella', + URL: 'Indirizzo', + Title: 'Titolo', + Alternative_Text: 'Testo Alternativo', + Caption: 'Caption', + Summary: 'Summary', + Number_Of_Rows: 'Numero di Righe', + Number_Of_Cols: 'Numero di Colonne', + Submit: 'Invia', + Cancel: 'Cancella', + Choose: 'Scegli', + Preview: 'Anteprima', + Paste_From_Word: 'Incolla', + Tools: 'Tools', + Containers: 'Contenitori', + Classes: 'Classi', + Status: 'Stato', + Source_Code: 'Codice Sorgente' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/ja.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/ja.js.svn-base new file mode 100644 index 0000000..c9b6410 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/ja.js.svn-base @@ -0,0 +1,44 @@ +WYMeditor.STRINGS['ja'] = { + Strong: '強調<strong>', + Emphasis: '強調<em>', + Superscript: '上付き', + Subscript: '下付き', + Ordered_List: '番号付きリスト', + Unordered_List: '番号無リスト', + Indent: 'インデントを増やす', + Outdent: 'インデントを減らす', + Undo: '元に戻す', + Redo: 'やり直す', + Link: 'リンク', + Unlink: 'リンク取消', + Image: '画像', + Table: 'テーブル', + HTML: 'HTML', + Paragraph: '段落', + Heading_1: '見出し 1', + Heading_2: '見出し 2', + Heading_3: '見出し 3', + Heading_4: '見出し 4', + Heading_5: '見出し 5', + Heading_6: '見出し 6', + Preformatted: '整形済みテキスト', + Blockquote: '引用文', + Table_Header: '表見出し', + URL: 'URL', + Title: 'タイトル', + Alternative_Text: '代替テキスト', + Caption: 'キャプション', + Summary: 'サマリー', + Number_Of_Rows: '行数', + Number_Of_Cols: '列数', + Submit: '送信', + Cancel: 'キャンセル', + Choose: '選択', + Preview: 'プレビュー', + Paste_From_Word: '貼り付け', + Tools: 'ツール', + Containers: 'コンテナ', + Classes: 'クラス', + Status: 'ステータス', + Source_Code: 'ソースコード' +}; diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/nb.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/nb.js.svn-base new file mode 100644 index 0000000..7573b78 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/nb.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['nb'] = { + Strong: 'Fet', + Emphasis: 'Uthevet', + Superscript: 'Opphøyet', + Subscript: 'Nedsenket', + Ordered_List: 'Nummerert liste', + Unordered_List: 'Punktliste', + Indent: 'Rykk inn', + Outdent: 'Rykk ut', + Undo: 'Angre', + Redo: 'Gjenta', + Link: 'Lenke', + Unlink: 'Ta bort lenken', + Image: 'Bilde', + Table: 'Tabell', + HTML: 'HTML', + Paragraph: 'Avsnitt', + Heading_1: 'Overskrift 1', + Heading_2: 'Overskrift 2', + Heading_3: 'Overskrift 3', + Heading_4: 'Overskrift 4', + Heading_5: 'Overskrift 5', + Heading_6: 'Overskrift 6', + Preformatted: 'Preformatert', + Blockquote: 'Sitat', + Table_Header: 'Tabelloverskrift', + URL: 'URL', + Title: 'Tittel', + Alternative_Text: 'Alternativ tekst', + Caption: 'Overskrift', + Summary: 'Sammendrag', + Number_Of_Rows: 'Antall rader', + Number_Of_Cols: 'Antall kolonner', + Submit: 'Ok', + Cancel: 'Avbryt', + Choose: 'Velg', + Preview: 'Forhåndsvis', + Paste_From_Word: 'Lim inn fra Word', + Tools: 'Verktøy', + Containers: 'Formatering', + Classes: 'Klasser', + Status: 'Status', + Source_Code: 'Kildekode' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/nl.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/nl.js.svn-base new file mode 100644 index 0000000..cdfa21c --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/nl.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['nl'] = { + Strong: 'Sterk benadrukken', + Emphasis: 'Benadrukken', + Superscript: 'Bovenschrift', + Subscript: 'Onderschrift', + Ordered_List: 'Geordende lijst', + Unordered_List: 'Ongeordende lijst', + Indent: 'Inspringen', + Outdent: 'Terugspringen', + Undo: 'Ongedaan maken', + Redo: 'Opnieuw uitvoeren', + Link: 'Linken', + Unlink: 'Ontlinken', + Image: 'Afbeelding', + Table: 'Tabel', + HTML: 'HTML', + Paragraph: 'Paragraaf', + Heading_1: 'Kop 1', + Heading_2: 'Kop 2', + Heading_3: 'Kop 3', + Heading_4: 'Kop 4', + Heading_5: 'Kop 5', + Heading_6: 'Kop 6', + Preformatted: 'Voorgeformatteerd', + Blockquote: 'Citaat', + Table_Header: 'Tabel-kop', + URL: 'URL', + Title: 'Titel', + Alternative_Text: 'Alternatieve tekst', + Caption: 'Bijschrift', + Summary: 'Summary', + Number_Of_Rows: 'Aantal rijen', + Number_Of_Cols: 'Aantal kolommen', + Submit: 'Versturen', + Cancel: 'Annuleren', + Choose: 'Kiezen', + Preview: 'Voorbeeld bekijken', + Paste_From_Word: 'Plakken uit Word', + Tools: 'Hulpmiddelen', + Containers: 'Teksttypes', + Classes: 'Klassen', + Status: 'Status', + Source_Code: 'Broncode' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/nn.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/nn.js.svn-base new file mode 100644 index 0000000..51cec2b --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/nn.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['nn'] = { + Strong: 'Feit', + Emphasis: 'Utheva', + Superscript: 'Opphøgd', + Subscript: 'Nedsenka', + Ordered_List: 'Nummerert liste', + Unordered_List: 'Punktliste', + Indent: 'Rykk inn', + Outdent: 'Rykk ut', + Undo: 'Angre', + Redo: 'Gjentaka', + Link: 'Lenkje', + Unlink: 'Ta bort lenkja', + Image: 'Bilete', + Table: 'Tabell', + HTML: 'HTML', + Paragraph: 'Avsnitt', + Heading_1: 'Overskrift 1', + Heading_2: 'Overskrift 2', + Heading_3: 'Overskrift 3', + Heading_4: 'Overskrift 4', + Heading_5: 'Overskrift 5', + Heading_6: 'Overskrift 6', + Preformatted: 'Preformatert', + Blockquote: 'Sitat', + Table_Header: 'Tabelloverskrift', + URL: 'URL', + Title: 'Tittel', + Alternative_Text: 'Alternativ tekst', + Caption: 'Overskrift', + Summary: 'Samandrag', + Number_Of_Rows: 'Tal på rader', + Number_Of_Cols: 'Tal på kolonnar', + Submit: 'Ok', + Cancel: 'Avbryt', + Choose: 'Vel', + Preview: 'Førehandsvis', + Paste_From_Word: 'Lim inn frå Word', + Tools: 'Verkty', + Containers: 'Formatering', + Classes: 'Klassar', + Status: 'Status', + Source_Code: 'Kjeldekode' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/pl.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/pl.js.svn-base new file mode 100644 index 0000000..d6c0471 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/pl.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['pl'] = { + Strong: 'Nacisk', + Emphasis: 'Emfaza', + Superscript: 'Indeks górny', + Subscript: 'Indeks dolny', + Ordered_List: 'Lista numerowana', + Unordered_List: 'Lista wypunktowana', + Indent: 'Zwiększ wcięcie', + Outdent: 'Zmniejsz wcięcie', + Undo: 'Cofnij', + Redo: 'Ponów', + Link: 'Wstaw link', + Unlink: 'Usuń link', + Image: 'Obraz', + Table: 'Tabela', + HTML: 'Źródło HTML', + Paragraph: 'Akapit', + Heading_1: 'Nagłówek 1', + Heading_2: 'Nagłówek 2', + Heading_3: 'Nagłówek 3', + Heading_4: 'Nagłówek 4', + Heading_5: 'Nagłówek 5', + Heading_6: 'Nagłówek 6', + Preformatted: 'Preformatowany', + Blockquote: 'Cytat blokowy', + Table_Header: 'Nagłówek tabeli', + URL: 'URL', + Title: 'Tytuł', + Alternative_Text: 'Tekst alternatywny', + Caption: 'Tytuł tabeli', + Summary: 'Summary', + Number_Of_Rows: 'Liczba wierszy', + Number_Of_Cols: 'Liczba kolumn', + Submit: 'Wyślij', + Cancel: 'Anuluj', + Choose: 'Wybierz', + Preview: 'Podgląd', + Paste_From_Word: 'Wklej z Worda', + Tools: 'Narzędzia', + Containers: 'Format', + Classes: 'Styl', + Status: 'Status', + Source_Code: 'Kod źródłowy' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/pt-br.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/pt-br.js.svn-base new file mode 100644 index 0000000..2ec18fe --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/pt-br.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['pt-br'] = { + Strong: 'Resaltar', + Emphasis: 'Enfatizar', + Superscript: 'Sobre escrito', + Subscript: 'Sub escrito ', + Ordered_List: 'Lista ordenada', + Unordered_List: 'Lista desordenada', + Indent: 'Indentado', + Outdent: 'Desidentar', + Undo: 'Desfazer', + Redo: 'Refazer', + Link: 'Link', + Unlink: 'Remover Link', + Image: 'Imagem', + Table: 'Tabela', + HTML: 'HTML', + Paragraph: 'Parágrafo', + Heading_1: 'Título 1', + Heading_2: 'Título 2', + Heading_3: 'Título 3', + Heading_4: 'Título 4', + Heading_5: 'Título 5', + Heading_6: 'Título 6', + Preformatted: 'Preformatado', + Blockquote: 'Citação', + Table_Header: 'Título de tabela', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto alternativo', + Caption: 'Legenda', + Summary: 'Summary', + Number_Of_Rows: 'Número de linhas', + Number_Of_Cols: 'Número de colunas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Selecionar', + Preview: 'Previsualizar', + Paste_From_Word: 'Copiar do Word', + Tools: 'Ferramentas', + Containers: 'Conteneiners', + Classes: 'Classes', + Status: 'Estado', + Source_Code: 'Código fonte' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/pt.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/pt.js.svn-base new file mode 100644 index 0000000..a3d1a17 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/pt.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['pt'] = { + Strong: 'Negrito', + Emphasis: 'Itálico', + Superscript: 'Sobrescrito', + Subscript: 'Subsescrito', + Ordered_List: 'Lista Numerada', + Unordered_List: 'Lista Marcada', + Indent: 'Aumentar Indentaçã', + Outdent: 'Diminuir Indentaçã', + Undo: 'Desfazer', + Redo: 'Restaurar', + Link: 'Link', + Unlink: 'Tirar link', + Image: 'Imagem', + Table: 'Tabela', + HTML: 'HTML', + Paragraph: 'Parágrafo', + Heading_1: 'Título 1', + Heading_2: 'Título 2', + Heading_3: 'Título 3', + Heading_4: 'Título 4', + Heading_5: 'Título 5', + Heading_6: 'Título 6', + Preformatted: 'Pré-formatado', + Blockquote: 'Citação', + Table_Header: 'Cabeçalho Tabela', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto Alterativo', + Caption: 'Título Tabela', + Summary: 'Summary', + Number_Of_Rows: 'Número de Linhas', + Number_Of_Cols: 'Número de Colunas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Escolha', + Preview: 'Prever', + Paste_From_Word: 'Colar do Word', + Tools: 'Ferramentas', + Containers: 'Containers', + Classes: 'Classes', + Status: 'Status', + Source_Code: 'Código Fonte' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/ru.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/ru.js.svn-base new file mode 100644 index 0000000..7895f8d --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/ru.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['ru'] = { + Strong: 'Жирный', + Emphasis: 'Наклонный', + Superscript: 'Надстрочный', + Subscript: 'Подстрочный', + Ordered_List: 'Нумерованый список', + Unordered_List: 'Ненумерованый список', + Indent: 'Увеличить отступ', + Outdent: 'Уменьшить отступ', + Undo: 'Отменить', + Redo: 'Повторить', + Link: 'Ссылка', + Unlink: 'Удалить ссылку', + Image: 'Изображение', + Table: 'Таблица', + HTML: 'Править HTML', + Paragraph: 'Параграф', + Heading_1: 'Заголовок 1', + Heading_2: 'Заголовок 2', + Heading_3: 'Заголовок 3', + Heading_4: 'Заголовок 4', + Heading_5: 'Заголовок 5', + Heading_6: 'Заголовок 6', + Preformatted: 'Preformatted', + Blockquote: 'Цитата', + Table_Header: 'Заголовок таблицы', + URL: 'URL', + Title: 'Заголовок', + Alternative_Text: 'Альтернативный текст', + Caption: 'Надпись', + Summary: 'Summary', + Number_Of_Rows: 'Кол-во строк', + Number_Of_Cols: 'Кол-во столбцов', + Submit: 'Отправить', + Cancel: 'Отмена', + Choose: 'Выбор', + Preview: 'Просмотр', + Paste_From_Word: 'Вставить из Word', + Tools: 'Инструменты', + Containers: 'Контейнеры', + Classes: 'Классы', + Status: 'Статус', + Source_Code: 'Исходный код' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/sv.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/sv.js.svn-base new file mode 100644 index 0000000..6347956 --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/sv.js.svn-base @@ -0,0 +1,46 @@ +WYMeditor.STRINGS['sv'] = { + Strong: 'Viktigt', + Emphasis: 'Betoning', + Superscript: 'Upphöjt', + Subscript: 'Nedsänkt', + Ordered_List: 'Nummerlista', + Unordered_List: 'Punktlista', + Indent: 'Indrag', + Outdent: 'Utdrag', + Undo: 'Ångra', + Redo: 'Gör om', + Link: 'Länk', + Unlink: 'Ta bort länk', + Image: 'Bild', + Table: 'Tabell', + HTML: 'HTML', + Paragraph: 'Paragraf', + Heading_1: 'Rubrik 1', + Heading_2: 'Rubrik 2', + Heading_3: 'Rubrik 3', + Heading_4: 'Rubrik 4', + Heading_5: 'Rubrik 5', + Heading_6: 'Rubrik 6', + Preformatted: 'Förformaterad', + Blockquote: 'Blockcitat', + Table_Header: 'Tabellrubrik', + URL: 'URL', + Title: 'Titel', + Relationship: 'Relation', + Alternative_Text: 'Alternativ text', + Caption: 'Överskrift', + Summary: 'Summary', + Number_Of_Rows: 'Antal rader', + Number_Of_Cols: 'Antal kolumner', + Submit: 'Skicka', + Cancel: 'Avbryt', + Choose: 'Välj', + Preview: 'Förhandsgranska', + Paste_From_Word: 'Klistra in från Word', + Tools: 'Verktyg', + Containers: 'Formatering', + Classes: 'Klasser', + Status: 'Status', + Source_Code: 'Källkod' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/tr.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/tr.js.svn-base new file mode 100644 index 0000000..d26f0ff --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/tr.js.svn-base @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['tr'] = { + Strong: 'Kalın', + Emphasis: 'Vurgu', + Superscript: 'Superscript', + Subscript: 'Subscript', + Ordered_List: 'Sıralı List', + Unordered_List: 'Sırasız List', + Indent: 'İçerlek', + Outdent: 'Çıkıntılı', + Undo: 'Geri Al', + Redo: 'Yinele', + Link: 'Bağlantı', + Unlink: 'Bağlantıyı Kaldır', + Image: 'İmaj', + Table: 'Tablo', + HTML: 'HTML', + Paragraph: 'Parağraf', + Heading_1: 'Başlık 1', + Heading_2: 'Başlık 2', + Heading_3: 'Başlık 3', + Heading_4: 'Başlık 4', + Heading_5: 'Başlık 5', + Heading_6: 'Başlık 6', + Preformatted: 'Önceden Formatlı', + Blockquote: 'Alıntı', + Table_Header: 'Tablo Başlığı', + URL: 'URL', + Title: 'Başlık', + Alternative_Text: 'Alternatif Metin', + Caption: 'Etiket', + Summary: 'Summary', + Number_Of_Rows: 'Satır sayısı', + Number_Of_Cols: 'Sütun sayısı', + Submit: 'Gönder', + Cancel: 'İptal', + Choose: 'Seç', + Preview: 'Önizleme', + Paste_From_Word: 'Wordden yapıştır', + Tools: 'Araçlar', + Containers: 'Kapsayıcılar', + Classes: 'Sınıflar', + Status: 'Durum', + Source_Code: 'Kaynak Kodu' +}; + diff --git a/studio/static/js/wymeditor/lang/.svn/text-base/zh_cn.js.svn-base b/studio/static/js/wymeditor/lang/.svn/text-base/zh_cn.js.svn-base new file mode 100644 index 0000000..72f5aaf --- /dev/null +++ b/studio/static/js/wymeditor/lang/.svn/text-base/zh_cn.js.svn-base @@ -0,0 +1,47 @@ +WYMeditor.STRINGS['zh_cn'] = { + Strong: '加粗', + Emphasis: '斜体', + Superscript: '上标', + Subscript: '下标', + Ordered_List: '有序列表', + Unordered_List: '无序列表', + Indent: '增加缩进', + Outdent: '减少缩进', + Undo: '撤消', + Redo: '重做', + Link: '链接', + Unlink: '取消链接', + Image: '图片', + Table: '表格', + HTML: 'HTML源代码', + Paragraph: '段落', + Heading_1: '标题 1', + Heading_2: '标题 2', + Heading_3: '标题 3', + Heading_4: '标题 4', + Heading_5: '标题 5', + Heading_6: '标题 6', + Preformatted: '原始文本', + Blockquote: '引语', + Table_Header: '表头', + URL: '地址', + Title: '提示文字', + Alternative_Text: '失效文字', + Caption: '标题', + Summary: 'Summary', + Number_Of_Rows: '行数', + Number_Of_Cols: '列数', + Submit: '提交', + Cancel: '放弃', + Choose: '选择', + Preview: '预览', + Paste_From_Word: '从Word粘贴纯文本', + Tools: '工具', + Containers: '容器', + Classes: '预定义样式', + Status: '状态', + Source_Code: '源代码', + Attachment: '附件', + NewParagraph: '新段落' +}; + diff --git a/studio/static/js/wymeditor/lang/bg.js b/studio/static/js/wymeditor/lang/bg.js new file mode 100644 index 0000000..576bca5 --- /dev/null +++ b/studio/static/js/wymeditor/lang/bg.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['bg'] = { + Strong: 'Получер', + Emphasis: 'Курсив', + Superscript: 'Горен индекс', + Subscript: 'Долен индекс', + Ordered_List: 'Подреден списък', + Unordered_List: 'Неподреден списък', + Indent: 'Блок навътре', + Outdent: 'Блок навън', + Undo: 'Стъпка назад', + Redo: 'Стъпка напред', + Link: 'Създай хипервръзка', + Unlink: 'Премахни хипервръзката', + Image: 'Изображение', + Table: 'Таблица', + HTML: 'HTML', + Paragraph: 'Абзац', + Heading_1: 'Заглавие 1', + Heading_2: 'Заглавие 2', + Heading_3: 'Заглавие 3', + Heading_4: 'Заглавие 4', + Heading_5: 'Заглавие 5', + Heading_6: 'Заглавие 6', + Preformatted: 'Преформатиран', + Blockquote: 'Цитат', + Table_Header: 'Заглавие на таблицата', + URL: 'URL', + Title: 'Заглавие', + Alternative_Text: 'Алтернативен текст', + Caption: 'Етикет', + Summary: 'Общо', + Number_Of_Rows: 'Брой редове', + Number_Of_Cols: 'Брой колони', + Submit: 'Изпрати', + Cancel: 'Отмени', + Choose: 'Затвори', + Preview: 'Предварителен преглед', + Paste_From_Word: 'Вмъкни от MS WORD', + Tools: 'Инструменти', + Containers: 'Контейнери', + Classes: 'Класове', + Status: 'Статус', + Source_Code: 'Източник, код' +}; + diff --git a/studio/static/js/wymeditor/lang/ca.js b/studio/static/js/wymeditor/lang/ca.js new file mode 100644 index 0000000..c342406 --- /dev/null +++ b/studio/static/js/wymeditor/lang/ca.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['ca'] = { + Strong: 'Ressaltar', + Emphasis: 'Emfatitzar', + Superscript: 'Superindex', + Subscript: 'Subindex', + Ordered_List: 'Llistat ordenat', + Unordered_List: 'Llistat sense ordenar', + Indent: 'Indentat', + Outdent: 'Sense indentar', + Undo: 'Desfer', + Redo: 'Refer', + Link: 'Enllaçar', + Unlink: 'Eliminar enllaç', + Image: 'Imatge', + Table: 'Taula', + HTML: 'HTML', + Paragraph: 'Paràgraf', + Heading_1: 'Capçalera 1', + Heading_2: 'Capçalera 2', + Heading_3: 'Capçalera 3', + Heading_4: 'Capçalera 4', + Heading_5: 'Capçalera 5', + Heading_6: 'Capçalera 6', + Preformatted: 'Pre-formatejat', + Blockquote: 'Cita', + Table_Header: 'Capçalera de la taula', + URL: 'URL', + Title: 'Títol', + Alternative_Text: 'Text alternatiu', + Caption: 'Llegenda', + Summary: 'Summary', + Number_Of_Rows: 'Nombre de files', + Number_Of_Cols: 'Nombre de columnes', + Submit: 'Enviar', + Cancel: 'Cancel·lar', + Choose: 'Triar', + Preview: 'Vista prèvia', + Paste_From_Word: 'Pegar des de Word', + Tools: 'Eines', + Containers: 'Contenidors', + Classes: 'Classes', + Status: 'Estat', + Source_Code: 'Codi font' +}; + diff --git a/studio/static/js/wymeditor/lang/cs.js b/studio/static/js/wymeditor/lang/cs.js new file mode 100644 index 0000000..3939d71 --- /dev/null +++ b/studio/static/js/wymeditor/lang/cs.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['cs'] = { + Strong: 'Tučné', + Emphasis: 'Kurzíva', + Superscript: 'Horní index', + Subscript: 'Dolní index', + Ordered_List: 'Číslovaný seznam', + Unordered_List: 'Nečíslovaný seznam', + Indent: 'Zvětšit odsazení', + Outdent: 'Zmenšit odsazení', + Undo: 'Zpět', + Redo: 'Znovu', + Link: 'Vytvořit odkaz', + Unlink: 'Zrušit odkaz', + Image: 'Obrázek', + Table: 'Tabulka', + HTML: 'HTML', + Paragraph: 'Odstavec', + Heading_1: 'Nadpis 1. úrovně', + Heading_2: 'Nadpis 2. úrovně', + Heading_3: 'Nadpis 3. úrovně', + Heading_4: 'Nadpis 4. úrovně', + Heading_5: 'Nadpis 5. úrovně', + Heading_6: 'Nadpis 6. úrovně', + Preformatted: 'Předformátovaný text', + Blockquote: 'Citace', + Table_Header: 'Hlavičková buňka tabulky', + URL: 'Adresa', + Title: 'Text po najetí myší', + Alternative_Text: 'Text pro případ nezobrazení obrázku', + Caption: 'Titulek tabulky', + Summary: 'Shrnutí obsahu', + Number_Of_Rows: 'Počet řádek', + Number_Of_Cols: 'Počet sloupců', + Submit: 'Vytvořit', + Cancel: 'Zrušit', + Choose: 'Vybrat', + Preview: 'Náhled', + Paste_From_Word: 'Vložit z Wordu', + Tools: 'Nástroje', + Containers: 'Typy obsahu', + Classes: 'Třídy', + Status: 'Stav', + Source_Code: 'Zdrojový kód' +}; + diff --git a/studio/static/js/wymeditor/lang/cy.js b/studio/static/js/wymeditor/lang/cy.js new file mode 100644 index 0000000..7d15b79 --- /dev/null +++ b/studio/static/js/wymeditor/lang/cy.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['cy'] = {
+ Strong: 'Bras',
+ Emphasis: 'Italig',
+ Superscript: 'Uwchsgript',
+ Subscript: 'Is-sgript',
+ Ordered_List: 'Rhestr mewn Trefn',
+ Unordered_List: 'Pwyntiau Bwled',
+ Indent: 'Mewnoli',
+ Outdent: 'Alloli',
+ Undo: 'Dadwneud',
+ Redo: 'Ailwneud',
+ Link: 'Cysylltu',
+ Unlink: 'Datgysylltu',
+ Image: 'Delwedd',
+ Table: 'Tabl',
+ HTML: 'HTML',
+ Paragraph: 'Paragraff',
+ Heading_1: 'Pennawd 1',
+ Heading_2: 'Pennawd 2',
+ Heading_3: 'Pennawd 3',
+ Heading_4: 'Pennawd 4',
+ Heading_5: 'Pennawd 5',
+ Heading_6: 'Pennawd 6',
+ Preformatted: 'Rhagfformat',
+ Blockquote: 'Bloc Dyfyniad',
+ Table_Header: 'Pennyn Tabl',
+ URL: 'URL',
+ Title: 'Teitl',
+ Alternative_Text: 'Testun Amgen',
+ Caption: 'Pennawd',
+ Summary: 'Crynodeb',
+ Number_Of_Rows: 'Nifer y rhesi',
+ Number_Of_Cols: 'Nifer y colofnau',
+ Submit: 'Anfon',
+ Cancel: 'Diddymu',
+ Choose: 'Dewis',
+ Preview: 'Rhagolwg',
+ Paste_From_Word: 'Gludo o Word',
+ Tools: 'Offer',
+ Containers: 'Cynhwysyddion',
+ Classes: 'Dosbarthiadau',
+ Status: 'Statws',
+ Source_Code: 'Cod ffynhonnell'
+};
+
diff --git a/studio/static/js/wymeditor/lang/de.js b/studio/static/js/wymeditor/lang/de.js new file mode 100644 index 0000000..a1e01e1 --- /dev/null +++ b/studio/static/js/wymeditor/lang/de.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['de'] = { + Strong: 'Fett', + Emphasis: 'Kursiv', + Superscript: 'Text hochstellen', + Subscript: 'Text tiefstellen', + Ordered_List: 'Geordnete Liste einfügen', + Unordered_List: 'Ungeordnete Liste einfügen', + Indent: 'Einzug erhöhen', + Outdent: 'Einzug vermindern', + Undo: 'Befehle rückgängig machen', + Redo: 'Befehle wiederherstellen', + Link: 'Hyperlink einfügen', + Unlink: 'Hyperlink entfernen', + Image: 'Bild einfügen', + Table: 'Tabelle einfügen', + HTML: 'HTML anzeigen/verstecken', + Paragraph: 'Absatz', + Heading_1: 'Überschrift 1', + Heading_2: 'Überschrift 2', + Heading_3: 'Überschrift 3', + Heading_4: 'Überschrift 4', + Heading_5: 'Überschrift 5', + Heading_6: 'Überschrift 6', + Preformatted: 'Vorformatiert', + Blockquote: 'Zitat', + Table_Header: 'Tabellenüberschrift', + URL: 'URL', + Title: 'Titel', + Alternative_Text: 'Alternativer Text', + Caption: 'Tabellenüberschrift', + Summary: 'Summary', + Number_Of_Rows: 'Anzahl Zeilen', + Number_Of_Cols: 'Anzahl Spalten', + Submit: 'Absenden', + Cancel: 'Abbrechen', + Choose: 'Auswählen', + Preview: 'Vorschau', + Paste_From_Word: 'Aus Word einfügen', + Tools: 'Werkzeuge', + Containers: 'Inhaltstyp', + Classes: 'Klassen', + Status: 'Status', + Source_Code: 'Quellcode' +}; + diff --git a/studio/static/js/wymeditor/lang/en.js b/studio/static/js/wymeditor/lang/en.js new file mode 100644 index 0000000..dc7eb21 --- /dev/null +++ b/studio/static/js/wymeditor/lang/en.js @@ -0,0 +1,46 @@ +WYMeditor.STRINGS['en'] = { + Strong: 'Strong', + Emphasis: 'Emphasis', + Superscript: 'Superscript', + Subscript: 'Subscript', + Ordered_List: 'Ordered List', + Unordered_List: 'Unordered List', + Indent: 'Indent', + Outdent: 'Outdent', + Undo: 'Undo', + Redo: 'Redo', + Link: 'Link', + Unlink: 'Unlink', + Image: 'Image', + Table: 'Table', + HTML: 'HTML', + Paragraph: 'Paragraph', + Heading_1: 'Heading 1', + Heading_2: 'Heading 2', + Heading_3: 'Heading 3', + Heading_4: 'Heading 4', + Heading_5: 'Heading 5', + Heading_6: 'Heading 6', + Preformatted: 'Preformatted', + Blockquote: 'Blockquote', + Table_Header: 'Table Header', + URL: 'URL', + Title: 'Title', + Relationship: 'Relationship', + Alternative_Text: 'Alternative text', + Caption: 'Caption', + Summary: 'Summary', + Number_Of_Rows: 'Number of rows', + Number_Of_Cols: 'Number of cols', + Submit: 'Submit', + Cancel: 'Cancel', + Choose: 'Choose', + Preview: 'Preview', + Paste_From_Word: 'Paste from Word', + Tools: 'Tools', + Containers: 'Containers', + Classes: 'Classes', + Status: 'Status', + Source_Code: 'Source code' +}; + diff --git a/studio/static/js/wymeditor/lang/es.js b/studio/static/js/wymeditor/lang/es.js new file mode 100644 index 0000000..cdb03c1 --- /dev/null +++ b/studio/static/js/wymeditor/lang/es.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['es'] = { + Strong: 'Resaltar', + Emphasis: 'Enfatizar', + Superscript: 'Superindice', + Subscript: 'Subindice', + Ordered_List: 'Lista ordenada', + Unordered_List: 'Lista sin ordenar', + Indent: 'Indentado', + Outdent: 'Sin indentar', + Undo: 'Deshacer', + Redo: 'Rehacer', + Link: 'Enlazar', + Unlink: 'Eliminar enlace', + Image: 'Imagen', + Table: 'Tabla', + HTML: 'HTML', + Paragraph: 'Párrafo', + Heading_1: 'Cabecera 1', + Heading_2: 'Cabecera 2', + Heading_3: 'Cabecera 3', + Heading_4: 'Cabecera 4', + Heading_5: 'Cabecera 5', + Heading_6: 'Cabecera 6', + Preformatted: 'Preformateado', + Blockquote: 'Cita', + Table_Header: 'Cabecera de la tabla', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto alternativo', + Caption: 'Leyenda', + Summary: 'Summary', + Number_Of_Rows: 'Número de filas', + Number_Of_Cols: 'Número de columnas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Seleccionar', + Preview: 'Vista previa', + Paste_From_Word: 'Pegar desde Word', + Tools: 'Herramientas', + Containers: 'Contenedores', + Classes: 'Clases', + Status: 'Estado', + Source_Code: 'Código fuente' +}; + diff --git a/studio/static/js/wymeditor/lang/fa.js b/studio/static/js/wymeditor/lang/fa.js new file mode 100644 index 0000000..9d70fcb --- /dev/null +++ b/studio/static/js/wymeditor/lang/fa.js @@ -0,0 +1,46 @@ +//Translation To Persian: Ghassem Tofighi (http://ght.ir) +WYMeditor.STRINGS['fa'] = { + Strong: 'پررنگ',//Strong + Emphasis: 'ایتالیک',//Emphasis + Superscript: 'بالانويس ',//Superscript + Subscript: 'زيرنويس',//Subscript + Ordered_List: 'لیست مرتب',//Ordered List + Unordered_List: 'لیست نامرتب',//Unordered List + Indent: 'افزودن دندانه',//Indent + Outdent: 'کاهش دندانه',//Outdent + Undo: 'واگردانی',//Undo + Redo: 'تکرار',//Redo + Link: 'ساختن پیوند',//Link + Unlink: 'برداشتن پیوند',//Unlink + Image: 'تصویر',//Image + Table: 'جدول',//Table + HTML: 'HTML',//HTML + Paragraph: 'پاراگراف',//Paragraph + Heading_1: 'سرتیتر ۱',//Heading 1 + Heading_2: 'سرتیتر ۲',//Heading 2 + Heading_3: 'سرتیتر ۳',//Heading 3 + Heading_4: 'سرتیتر ۴',//Heading 4 + Heading_5: 'سرتیتر ۵',//Heading 5 + Heading_6: 'سرتیتر ۶',//Heading 6 + Preformatted: 'قالب آماده',//Preformatted + Blockquote: 'نقل قول',//Blockquote + Table_Header: 'سرجدول',//Table Header + URL: 'آدرس اینترنتی',//URL + Title: 'عنوان',//Title + Alternative_Text: 'متن جایگزین',//Alternative text + Caption: 'عنوان',//Caption + Summary: 'Summary', + Number_Of_Rows: 'تعداد سطرها',//Number of rows + Number_Of_Cols: 'تعداد ستونها',//Number of cols + Submit: 'فرستادن',//Submit + Cancel: 'لغو',//Cancel + Choose: 'انتخاب',//Choose + Preview: 'پیشنمایش',//Preview + Paste_From_Word: 'انتقال از ورد',//Paste from Word + Tools: 'ابزار',//Tools + Containers: 'قالبها',//Containers + Classes: 'کلاسها',//Classes + Status: 'وضعیت',//Status + Source_Code: 'کد مبدأ'//Source code +}; + diff --git a/studio/static/js/wymeditor/lang/fi.js b/studio/static/js/wymeditor/lang/fi.js new file mode 100644 index 0000000..fe1eab4 --- /dev/null +++ b/studio/static/js/wymeditor/lang/fi.js @@ -0,0 +1,44 @@ +WYMeditor.STRINGS['fi'] = { + Strong: 'Lihavoitu', + Emphasis: 'Korostus', + Superscript: 'Yläindeksi', + Subscript: 'Alaindeksi', + Ordered_List: 'Numeroitu lista', + Unordered_List: 'Luettelomerkit', + Indent: 'Suurenna sisennystä', + Outdent: 'Pienennä sisennystä', + Undo: 'Kumoa', + Redo: 'Toista', + Link: 'Linkitä', + Unlink: 'Poista linkitys', + Image: 'Kuva', + Table: 'Taulukko', + HTML: 'HTML', + Paragraph: 'Kappale', + Heading_1: 'Otsikko 1', + Heading_2: 'Otsikko 2', + Heading_3: 'Otsikko 3', + Heading_4: 'Otsikko 4', + Heading_5: 'Otsikko 5', + Heading_6: 'Otsikko 6', + Preformatted: 'Esimuotoilu', + Blockquote: 'Sitaatti', + Table_Header: 'Taulukon otsikko', + URL: 'URL', + Title: 'Otsikko', + Alternative_Text: 'Vaihtoehtoinen teksti', + Caption: 'Kuvateksti', + Summary: 'Yhteenveto', + Number_Of_Rows: 'Rivien määrä', + Number_Of_Cols: 'Palstojen määrä', + Submit: 'Lähetä', + Cancel: 'Peruuta', + Choose: 'Valitse', + Preview: 'Esikatsele', + Paste_From_Word: 'Tuo Wordista', + Tools: 'Työkalut', + Containers: 'Muotoilut', + Classes: 'Luokat', + Status: 'Tila', + Source_Code: 'Lähdekoodi' +}; diff --git a/studio/static/js/wymeditor/lang/fr.js b/studio/static/js/wymeditor/lang/fr.js new file mode 100644 index 0000000..9b6deb9 --- /dev/null +++ b/studio/static/js/wymeditor/lang/fr.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['fr'] = { + Strong: 'Mise en évidence', + Emphasis: 'Emphase', + Superscript: 'Exposant', + Subscript: 'Indice', + Ordered_List: 'Liste Ordonnée', + Unordered_List: 'Liste Non-Ordonnée', + Indent: 'Imbriqué', + Outdent: 'Non-imbriqué', + Undo: 'Annuler', + Redo: 'Rétablir', + Link: 'Lien', + Unlink: 'Supprimer le Lien', + Image: 'Image', + Table: 'Tableau', + HTML: 'HTML', + Paragraph: 'Paragraphe', + Heading_1: 'Titre 1', + Heading_2: 'Titre 2', + Heading_3: 'Titre 3', + Heading_4: 'Titre 4', + Heading_5: 'Titre 5', + Heading_6: 'Titre 6', + Preformatted: 'Pré-formatté', + Blockquote: 'Citation', + Table_Header: 'Cellule de titre', + URL: 'URL', + Title: 'Titre', + Alternative_Text: 'Texte alternatif', + Caption: 'Légende', + Summary: 'Résumé', + Number_Of_Rows: 'Nombre de lignes', + Number_Of_Cols: 'Nombre de colonnes', + Submit: 'Envoyer', + Cancel: 'Annuler', + Choose: 'Choisir', + Preview: 'Prévisualisation', + Paste_From_Word: 'Copier depuis Word', + Tools: 'Outils', + Containers: 'Type de texte', + Classes: 'Type de contenu', + Status: 'Infos', + Source_Code: 'Code source' +}; + diff --git a/studio/static/js/wymeditor/lang/gl.js b/studio/static/js/wymeditor/lang/gl.js new file mode 100644 index 0000000..d4786b8 --- /dev/null +++ b/studio/static/js/wymeditor/lang/gl.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['gl'] = { + Strong: 'Moita énfase', + Emphasis: 'Énfase', + Superscript: 'Superíndice', + Subscript: 'Subíndice', + Ordered_List: 'Lista ordenada', + Unordered_List: 'Lista sen ordenar', + Indent: 'Aniñar', + Outdent: 'Desaniñar', + Undo: 'Desfacer', + Redo: 'Refacer', + Link: 'Ligazón', + Unlink: 'Desligar', + Image: 'Imaxe', + Table: 'Táboa', + HTML: 'HTML', + Paragraph: 'Parágrafo', + Heading_1: 'Título 1', + Heading_2: 'Título 2', + Heading_3: 'Título 3', + Heading_4: 'Título 4', + Heading_5: 'Título 5', + Heading_6: 'Título 6', + Preformatted: 'Preformatado', + Blockquote: 'Cita en parágrafo', + Table_Header: 'Cabeceira da táboa', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto alternativo', + Caption: 'Título', + Summary: 'Resumo', + Number_Of_Rows: 'Número de filas', + Number_Of_Cols: 'Número de columnas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Escoller', + Preview: 'Previsualizar', + Paste_From_Word: 'Colar dende Word', + Tools: 'Ferramentas', + Containers: 'Contenedores', + Classes: 'Clases', + Status: 'Estado', + Source_Code: 'Código fonte' +}; + diff --git a/studio/static/js/wymeditor/lang/he.js b/studio/static/js/wymeditor/lang/he.js new file mode 100644 index 0000000..97c9675 --- /dev/null +++ b/studio/static/js/wymeditor/lang/he.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['he'] = { + Strong: 'חזק', + Emphasis: 'מובלט', + Superscript: 'כתב עילי', + Subscript: 'כתב תחתי', + Ordered_List: 'רשימה ממוספרת', + Unordered_List: 'רשימה לא ממוספרת', + Indent: 'הזחה פנימה', + Outdent: 'הזחה החוצה', + Undo: 'בטל פעולה', + Redo: 'בצע מחדש פעולה', + Link: 'קישור', + Unlink: 'בטל קישור', + Image: 'תמונה', + Table: 'טבלה', + HTML: 'קוד HTML', + Paragraph: 'פסקה', + Heading_1: 'כותרת 1 ; תג <h1>', + Heading_2: 'כותרת 2 ; תג <h2>', + Heading_3: 'כותרת 3 ; תג <h3>', + Heading_4: 'כותרת 4 ; תג <h4>', + Heading_5: 'כותרת 5 ; תג <h5>', + Heading_6: 'כותרת 6 ; תג <h6>', + Preformatted: 'משמר רווחים', + Blockquote: 'ציטוט', + Table_Header: 'כותרת טבלה', + URL: 'קישור (URL)', + Title: 'כותרת', + Alternative_Text: 'טקסט חלופי', + Caption: 'כותרת', + Summary: 'סיכום', + Number_Of_Rows: 'מספר שורות', + Number_Of_Cols: 'מספר טורים', + Submit: 'שלח', + Cancel: 'בטל', + Choose: 'בחר', + Preview: 'תצוגה מקדימה', + Paste_From_Word: 'העתק מ-Word', + Tools: 'כלים', + Containers: 'מיכלים', + Classes: 'מחלקות', + Status: 'מצב', + Source_Code: 'קוד מקור' +}; + diff --git a/studio/static/js/wymeditor/lang/hr.js b/studio/static/js/wymeditor/lang/hr.js new file mode 100644 index 0000000..193e31a --- /dev/null +++ b/studio/static/js/wymeditor/lang/hr.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['hr'] = { + Strong: 'Podebljano', + Emphasis: 'Naglašeno', + Superscript: 'Iznad', + Subscript: 'Ispod', + Ordered_List: 'Pobrojana lista', + Unordered_List: 'Nepobrojana lista', + Indent: 'Uvuci', + Outdent: 'Izvuci', + Undo: 'Poništi promjenu', + Redo: 'Ponovno promjeni', + Link: 'Hiperveza', + Unlink: 'Ukloni hipervezu', + Image: 'Slika', + Table: 'Tablica', + HTML: 'HTML', + Paragraph: 'Paragraf', + Heading_1: 'Naslov 1', + Heading_2: 'Naslov 2', + Heading_3: 'Naslov 3', + Heading_4: 'Naslov 4', + Heading_5: 'Naslov 5', + Heading_6: 'Naslov 6', + Preformatted: 'Unaprijed formatirano', + Blockquote: 'Citat', + Table_Header: 'Zaglavlje tablice', + URL: 'URL', + Title: 'Naslov', + Alternative_Text: 'Alternativni tekst', + Caption: 'Zaglavlje', + Summary: 'Sažetak', + Number_Of_Rows: 'Broj redova', + Number_Of_Cols: 'Broj kolona', + Submit: 'Snimi', + Cancel: 'Odustani', + Choose: 'Izaberi', + Preview: 'Pregled', + Paste_From_Word: 'Zalijepi iz Word-a', + Tools: 'Alati', + Containers: 'Kontejneri', + Classes: 'Klase', + Status: 'Status', + Source_Code: 'Izvorni kod' +}; + diff --git a/studio/static/js/wymeditor/lang/hu.js b/studio/static/js/wymeditor/lang/hu.js new file mode 100644 index 0000000..a8cdbc6 --- /dev/null +++ b/studio/static/js/wymeditor/lang/hu.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['hu'] = { + Strong: 'Félkövér', + Emphasis: 'Kiemelt', + Superscript: 'Felső index', + Subscript: 'Alsó index', + Ordered_List: 'Rendezett lista', + Unordered_List: 'Rendezetlen lista', + Indent: 'Bekezdés', + Outdent: 'Bekezdés törlése', + Undo: 'Visszavon', + Redo: 'Visszaállít', + Link: 'Link', + Unlink: 'Link törlése', + Image: 'Kép', + Table: 'Tábla', + HTML: 'HTML', + Paragraph: 'Bekezdés', + Heading_1: 'Címsor 1', + Heading_2: 'Címsor 2', + Heading_3: 'Címsor 3', + Heading_4: 'Címsor 4', + Heading_5: 'Címsor 5', + Heading_6: 'Címsor 6', + Preformatted: 'Előformázott', + Blockquote: 'Idézet', + Table_Header: 'Tábla Fejléc', + URL: 'Webcím', + Title: 'Megnevezés', + Alternative_Text: 'Alternatív szöveg', + Caption: 'Fejléc', + Summary: 'Summary', + Number_Of_Rows: 'Sorok száma', + Number_Of_Cols: 'Oszlopok száma', + Submit: 'Elküld', + Cancel: 'Mégsem', + Choose: 'Választ', + Preview: 'Előnézet', + Paste_From_Word: 'Másolás Word-ból', + Tools: 'Eszközök', + Containers: 'Tartalmak', + Classes: 'Osztályok', + Status: 'Állapot', + Source_Code: 'Forráskód' +}; + diff --git a/studio/static/js/wymeditor/lang/it.js b/studio/static/js/wymeditor/lang/it.js new file mode 100644 index 0000000..ca632a9 --- /dev/null +++ b/studio/static/js/wymeditor/lang/it.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['it'] = { + Strong: 'Grassetto', + Emphasis: 'Corsetto', + Superscript: 'Apice', + Subscript: 'Pedice', + Ordered_List: 'Lista Ordinata', + Unordered_List: 'Lista Puntata', + Indent: 'Indenta', + Outdent: 'Caccia', + Undo: 'Indietro', + Redo: 'Avanti', + Link: 'Inserisci Link', + Unlink: 'Togli Link', + Image: 'Inserisci Immagine', + Table: 'Inserisci Tabella', + HTML: 'HTML', + Paragraph: 'Paragrafo', + Heading_1: 'Heading 1', + Heading_2: 'Heading 2', + Heading_3: 'Heading 3', + Heading_4: 'Heading 4', + Heading_5: 'Heading 5', + Heading_6: 'Heading 6', + Preformatted: 'Preformattato', + Blockquote: 'Blockquote', + Table_Header: 'Header Tabella', + URL: 'Indirizzo', + Title: 'Titolo', + Alternative_Text: 'Testo Alternativo', + Caption: 'Caption', + Summary: 'Summary', + Number_Of_Rows: 'Numero di Righe', + Number_Of_Cols: 'Numero di Colonne', + Submit: 'Invia', + Cancel: 'Cancella', + Choose: 'Scegli', + Preview: 'Anteprima', + Paste_From_Word: 'Incolla', + Tools: 'Tools', + Containers: 'Contenitori', + Classes: 'Classi', + Status: 'Stato', + Source_Code: 'Codice Sorgente' +}; + diff --git a/studio/static/js/wymeditor/lang/ja.js b/studio/static/js/wymeditor/lang/ja.js new file mode 100644 index 0000000..c9b6410 --- /dev/null +++ b/studio/static/js/wymeditor/lang/ja.js @@ -0,0 +1,44 @@ +WYMeditor.STRINGS['ja'] = { + Strong: '強調<strong>', + Emphasis: '強調<em>', + Superscript: '上付き', + Subscript: '下付き', + Ordered_List: '番号付きリスト', + Unordered_List: '番号無リスト', + Indent: 'インデントを増やす', + Outdent: 'インデントを減らす', + Undo: '元に戻す', + Redo: 'やり直す', + Link: 'リンク', + Unlink: 'リンク取消', + Image: '画像', + Table: 'テーブル', + HTML: 'HTML', + Paragraph: '段落', + Heading_1: '見出し 1', + Heading_2: '見出し 2', + Heading_3: '見出し 3', + Heading_4: '見出し 4', + Heading_5: '見出し 5', + Heading_6: '見出し 6', + Preformatted: '整形済みテキスト', + Blockquote: '引用文', + Table_Header: '表見出し', + URL: 'URL', + Title: 'タイトル', + Alternative_Text: '代替テキスト', + Caption: 'キャプション', + Summary: 'サマリー', + Number_Of_Rows: '行数', + Number_Of_Cols: '列数', + Submit: '送信', + Cancel: 'キャンセル', + Choose: '選択', + Preview: 'プレビュー', + Paste_From_Word: '貼り付け', + Tools: 'ツール', + Containers: 'コンテナ', + Classes: 'クラス', + Status: 'ステータス', + Source_Code: 'ソースコード' +}; diff --git a/studio/static/js/wymeditor/lang/nb.js b/studio/static/js/wymeditor/lang/nb.js new file mode 100644 index 0000000..7573b78 --- /dev/null +++ b/studio/static/js/wymeditor/lang/nb.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['nb'] = { + Strong: 'Fet', + Emphasis: 'Uthevet', + Superscript: 'Opphøyet', + Subscript: 'Nedsenket', + Ordered_List: 'Nummerert liste', + Unordered_List: 'Punktliste', + Indent: 'Rykk inn', + Outdent: 'Rykk ut', + Undo: 'Angre', + Redo: 'Gjenta', + Link: 'Lenke', + Unlink: 'Ta bort lenken', + Image: 'Bilde', + Table: 'Tabell', + HTML: 'HTML', + Paragraph: 'Avsnitt', + Heading_1: 'Overskrift 1', + Heading_2: 'Overskrift 2', + Heading_3: 'Overskrift 3', + Heading_4: 'Overskrift 4', + Heading_5: 'Overskrift 5', + Heading_6: 'Overskrift 6', + Preformatted: 'Preformatert', + Blockquote: 'Sitat', + Table_Header: 'Tabelloverskrift', + URL: 'URL', + Title: 'Tittel', + Alternative_Text: 'Alternativ tekst', + Caption: 'Overskrift', + Summary: 'Sammendrag', + Number_Of_Rows: 'Antall rader', + Number_Of_Cols: 'Antall kolonner', + Submit: 'Ok', + Cancel: 'Avbryt', + Choose: 'Velg', + Preview: 'Forhåndsvis', + Paste_From_Word: 'Lim inn fra Word', + Tools: 'Verktøy', + Containers: 'Formatering', + Classes: 'Klasser', + Status: 'Status', + Source_Code: 'Kildekode' +}; + diff --git a/studio/static/js/wymeditor/lang/nl.js b/studio/static/js/wymeditor/lang/nl.js new file mode 100644 index 0000000..cdfa21c --- /dev/null +++ b/studio/static/js/wymeditor/lang/nl.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['nl'] = { + Strong: 'Sterk benadrukken', + Emphasis: 'Benadrukken', + Superscript: 'Bovenschrift', + Subscript: 'Onderschrift', + Ordered_List: 'Geordende lijst', + Unordered_List: 'Ongeordende lijst', + Indent: 'Inspringen', + Outdent: 'Terugspringen', + Undo: 'Ongedaan maken', + Redo: 'Opnieuw uitvoeren', + Link: 'Linken', + Unlink: 'Ontlinken', + Image: 'Afbeelding', + Table: 'Tabel', + HTML: 'HTML', + Paragraph: 'Paragraaf', + Heading_1: 'Kop 1', + Heading_2: 'Kop 2', + Heading_3: 'Kop 3', + Heading_4: 'Kop 4', + Heading_5: 'Kop 5', + Heading_6: 'Kop 6', + Preformatted: 'Voorgeformatteerd', + Blockquote: 'Citaat', + Table_Header: 'Tabel-kop', + URL: 'URL', + Title: 'Titel', + Alternative_Text: 'Alternatieve tekst', + Caption: 'Bijschrift', + Summary: 'Summary', + Number_Of_Rows: 'Aantal rijen', + Number_Of_Cols: 'Aantal kolommen', + Submit: 'Versturen', + Cancel: 'Annuleren', + Choose: 'Kiezen', + Preview: 'Voorbeeld bekijken', + Paste_From_Word: 'Plakken uit Word', + Tools: 'Hulpmiddelen', + Containers: 'Teksttypes', + Classes: 'Klassen', + Status: 'Status', + Source_Code: 'Broncode' +}; + diff --git a/studio/static/js/wymeditor/lang/nn.js b/studio/static/js/wymeditor/lang/nn.js new file mode 100644 index 0000000..51cec2b --- /dev/null +++ b/studio/static/js/wymeditor/lang/nn.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['nn'] = { + Strong: 'Feit', + Emphasis: 'Utheva', + Superscript: 'Opphøgd', + Subscript: 'Nedsenka', + Ordered_List: 'Nummerert liste', + Unordered_List: 'Punktliste', + Indent: 'Rykk inn', + Outdent: 'Rykk ut', + Undo: 'Angre', + Redo: 'Gjentaka', + Link: 'Lenkje', + Unlink: 'Ta bort lenkja', + Image: 'Bilete', + Table: 'Tabell', + HTML: 'HTML', + Paragraph: 'Avsnitt', + Heading_1: 'Overskrift 1', + Heading_2: 'Overskrift 2', + Heading_3: 'Overskrift 3', + Heading_4: 'Overskrift 4', + Heading_5: 'Overskrift 5', + Heading_6: 'Overskrift 6', + Preformatted: 'Preformatert', + Blockquote: 'Sitat', + Table_Header: 'Tabelloverskrift', + URL: 'URL', + Title: 'Tittel', + Alternative_Text: 'Alternativ tekst', + Caption: 'Overskrift', + Summary: 'Samandrag', + Number_Of_Rows: 'Tal på rader', + Number_Of_Cols: 'Tal på kolonnar', + Submit: 'Ok', + Cancel: 'Avbryt', + Choose: 'Vel', + Preview: 'Førehandsvis', + Paste_From_Word: 'Lim inn frå Word', + Tools: 'Verkty', + Containers: 'Formatering', + Classes: 'Klassar', + Status: 'Status', + Source_Code: 'Kjeldekode' +}; + diff --git a/studio/static/js/wymeditor/lang/pl.js b/studio/static/js/wymeditor/lang/pl.js new file mode 100644 index 0000000..d6c0471 --- /dev/null +++ b/studio/static/js/wymeditor/lang/pl.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['pl'] = { + Strong: 'Nacisk', + Emphasis: 'Emfaza', + Superscript: 'Indeks górny', + Subscript: 'Indeks dolny', + Ordered_List: 'Lista numerowana', + Unordered_List: 'Lista wypunktowana', + Indent: 'Zwiększ wcięcie', + Outdent: 'Zmniejsz wcięcie', + Undo: 'Cofnij', + Redo: 'Ponów', + Link: 'Wstaw link', + Unlink: 'Usuń link', + Image: 'Obraz', + Table: 'Tabela', + HTML: 'Źródło HTML', + Paragraph: 'Akapit', + Heading_1: 'Nagłówek 1', + Heading_2: 'Nagłówek 2', + Heading_3: 'Nagłówek 3', + Heading_4: 'Nagłówek 4', + Heading_5: 'Nagłówek 5', + Heading_6: 'Nagłówek 6', + Preformatted: 'Preformatowany', + Blockquote: 'Cytat blokowy', + Table_Header: 'Nagłówek tabeli', + URL: 'URL', + Title: 'Tytuł', + Alternative_Text: 'Tekst alternatywny', + Caption: 'Tytuł tabeli', + Summary: 'Summary', + Number_Of_Rows: 'Liczba wierszy', + Number_Of_Cols: 'Liczba kolumn', + Submit: 'Wyślij', + Cancel: 'Anuluj', + Choose: 'Wybierz', + Preview: 'Podgląd', + Paste_From_Word: 'Wklej z Worda', + Tools: 'Narzędzia', + Containers: 'Format', + Classes: 'Styl', + Status: 'Status', + Source_Code: 'Kod źródłowy' +}; + diff --git a/studio/static/js/wymeditor/lang/pt-br.js b/studio/static/js/wymeditor/lang/pt-br.js new file mode 100644 index 0000000..2ec18fe --- /dev/null +++ b/studio/static/js/wymeditor/lang/pt-br.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['pt-br'] = { + Strong: 'Resaltar', + Emphasis: 'Enfatizar', + Superscript: 'Sobre escrito', + Subscript: 'Sub escrito ', + Ordered_List: 'Lista ordenada', + Unordered_List: 'Lista desordenada', + Indent: 'Indentado', + Outdent: 'Desidentar', + Undo: 'Desfazer', + Redo: 'Refazer', + Link: 'Link', + Unlink: 'Remover Link', + Image: 'Imagem', + Table: 'Tabela', + HTML: 'HTML', + Paragraph: 'Parágrafo', + Heading_1: 'Título 1', + Heading_2: 'Título 2', + Heading_3: 'Título 3', + Heading_4: 'Título 4', + Heading_5: 'Título 5', + Heading_6: 'Título 6', + Preformatted: 'Preformatado', + Blockquote: 'Citação', + Table_Header: 'Título de tabela', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto alternativo', + Caption: 'Legenda', + Summary: 'Summary', + Number_Of_Rows: 'Número de linhas', + Number_Of_Cols: 'Número de colunas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Selecionar', + Preview: 'Previsualizar', + Paste_From_Word: 'Copiar do Word', + Tools: 'Ferramentas', + Containers: 'Conteneiners', + Classes: 'Classes', + Status: 'Estado', + Source_Code: 'Código fonte' +}; + diff --git a/studio/static/js/wymeditor/lang/pt.js b/studio/static/js/wymeditor/lang/pt.js new file mode 100644 index 0000000..a3d1a17 --- /dev/null +++ b/studio/static/js/wymeditor/lang/pt.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['pt'] = { + Strong: 'Negrito', + Emphasis: 'Itálico', + Superscript: 'Sobrescrito', + Subscript: 'Subsescrito', + Ordered_List: 'Lista Numerada', + Unordered_List: 'Lista Marcada', + Indent: 'Aumentar Indentaçã', + Outdent: 'Diminuir Indentaçã', + Undo: 'Desfazer', + Redo: 'Restaurar', + Link: 'Link', + Unlink: 'Tirar link', + Image: 'Imagem', + Table: 'Tabela', + HTML: 'HTML', + Paragraph: 'Parágrafo', + Heading_1: 'Título 1', + Heading_2: 'Título 2', + Heading_3: 'Título 3', + Heading_4: 'Título 4', + Heading_5: 'Título 5', + Heading_6: 'Título 6', + Preformatted: 'Pré-formatado', + Blockquote: 'Citação', + Table_Header: 'Cabeçalho Tabela', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto Alterativo', + Caption: 'Título Tabela', + Summary: 'Summary', + Number_Of_Rows: 'Número de Linhas', + Number_Of_Cols: 'Número de Colunas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Escolha', + Preview: 'Prever', + Paste_From_Word: 'Colar do Word', + Tools: 'Ferramentas', + Containers: 'Containers', + Classes: 'Classes', + Status: 'Status', + Source_Code: 'Código Fonte' +}; + diff --git a/studio/static/js/wymeditor/lang/ru.js b/studio/static/js/wymeditor/lang/ru.js new file mode 100644 index 0000000..7895f8d --- /dev/null +++ b/studio/static/js/wymeditor/lang/ru.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['ru'] = { + Strong: 'Жирный', + Emphasis: 'Наклонный', + Superscript: 'Надстрочный', + Subscript: 'Подстрочный', + Ordered_List: 'Нумерованый список', + Unordered_List: 'Ненумерованый список', + Indent: 'Увеличить отступ', + Outdent: 'Уменьшить отступ', + Undo: 'Отменить', + Redo: 'Повторить', + Link: 'Ссылка', + Unlink: 'Удалить ссылку', + Image: 'Изображение', + Table: 'Таблица', + HTML: 'Править HTML', + Paragraph: 'Параграф', + Heading_1: 'Заголовок 1', + Heading_2: 'Заголовок 2', + Heading_3: 'Заголовок 3', + Heading_4: 'Заголовок 4', + Heading_5: 'Заголовок 5', + Heading_6: 'Заголовок 6', + Preformatted: 'Preformatted', + Blockquote: 'Цитата', + Table_Header: 'Заголовок таблицы', + URL: 'URL', + Title: 'Заголовок', + Alternative_Text: 'Альтернативный текст', + Caption: 'Надпись', + Summary: 'Summary', + Number_Of_Rows: 'Кол-во строк', + Number_Of_Cols: 'Кол-во столбцов', + Submit: 'Отправить', + Cancel: 'Отмена', + Choose: 'Выбор', + Preview: 'Просмотр', + Paste_From_Word: 'Вставить из Word', + Tools: 'Инструменты', + Containers: 'Контейнеры', + Classes: 'Классы', + Status: 'Статус', + Source_Code: 'Исходный код' +}; + diff --git a/studio/static/js/wymeditor/lang/sv.js b/studio/static/js/wymeditor/lang/sv.js new file mode 100644 index 0000000..6347956 --- /dev/null +++ b/studio/static/js/wymeditor/lang/sv.js @@ -0,0 +1,46 @@ +WYMeditor.STRINGS['sv'] = { + Strong: 'Viktigt', + Emphasis: 'Betoning', + Superscript: 'Upphöjt', + Subscript: 'Nedsänkt', + Ordered_List: 'Nummerlista', + Unordered_List: 'Punktlista', + Indent: 'Indrag', + Outdent: 'Utdrag', + Undo: 'Ångra', + Redo: 'Gör om', + Link: 'Länk', + Unlink: 'Ta bort länk', + Image: 'Bild', + Table: 'Tabell', + HTML: 'HTML', + Paragraph: 'Paragraf', + Heading_1: 'Rubrik 1', + Heading_2: 'Rubrik 2', + Heading_3: 'Rubrik 3', + Heading_4: 'Rubrik 4', + Heading_5: 'Rubrik 5', + Heading_6: 'Rubrik 6', + Preformatted: 'Förformaterad', + Blockquote: 'Blockcitat', + Table_Header: 'Tabellrubrik', + URL: 'URL', + Title: 'Titel', + Relationship: 'Relation', + Alternative_Text: 'Alternativ text', + Caption: 'Överskrift', + Summary: 'Summary', + Number_Of_Rows: 'Antal rader', + Number_Of_Cols: 'Antal kolumner', + Submit: 'Skicka', + Cancel: 'Avbryt', + Choose: 'Välj', + Preview: 'Förhandsgranska', + Paste_From_Word: 'Klistra in från Word', + Tools: 'Verktyg', + Containers: 'Formatering', + Classes: 'Klasser', + Status: 'Status', + Source_Code: 'Källkod' +}; + diff --git a/studio/static/js/wymeditor/lang/tr.js b/studio/static/js/wymeditor/lang/tr.js new file mode 100644 index 0000000..d26f0ff --- /dev/null +++ b/studio/static/js/wymeditor/lang/tr.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['tr'] = { + Strong: 'Kalın', + Emphasis: 'Vurgu', + Superscript: 'Superscript', + Subscript: 'Subscript', + Ordered_List: 'Sıralı List', + Unordered_List: 'Sırasız List', + Indent: 'İçerlek', + Outdent: 'Çıkıntılı', + Undo: 'Geri Al', + Redo: 'Yinele', + Link: 'Bağlantı', + Unlink: 'Bağlantıyı Kaldır', + Image: 'İmaj', + Table: 'Tablo', + HTML: 'HTML', + Paragraph: 'Parağraf', + Heading_1: 'Başlık 1', + Heading_2: 'Başlık 2', + Heading_3: 'Başlık 3', + Heading_4: 'Başlık 4', + Heading_5: 'Başlık 5', + Heading_6: 'Başlık 6', + Preformatted: 'Önceden Formatlı', + Blockquote: 'Alıntı', + Table_Header: 'Tablo Başlığı', + URL: 'URL', + Title: 'Başlık', + Alternative_Text: 'Alternatif Metin', + Caption: 'Etiket', + Summary: 'Summary', + Number_Of_Rows: 'Satır sayısı', + Number_Of_Cols: 'Sütun sayısı', + Submit: 'Gönder', + Cancel: 'İptal', + Choose: 'Seç', + Preview: 'Önizleme', + Paste_From_Word: 'Wordden yapıştır', + Tools: 'Araçlar', + Containers: 'Kapsayıcılar', + Classes: 'Sınıflar', + Status: 'Durum', + Source_Code: 'Kaynak Kodu' +}; + diff --git a/studio/static/js/wymeditor/lang/zh_cn.js b/studio/static/js/wymeditor/lang/zh_cn.js new file mode 100644 index 0000000..72f5aaf --- /dev/null +++ b/studio/static/js/wymeditor/lang/zh_cn.js @@ -0,0 +1,47 @@ +WYMeditor.STRINGS['zh_cn'] = { + Strong: '加粗', + Emphasis: '斜体', + Superscript: '上标', + Subscript: '下标', + Ordered_List: '有序列表', + Unordered_List: '无序列表', + Indent: '增加缩进', + Outdent: '减少缩进', + Undo: '撤消', + Redo: '重做', + Link: '链接', + Unlink: '取消链接', + Image: '图片', + Table: '表格', + HTML: 'HTML源代码', + Paragraph: '段落', + Heading_1: '标题 1', + Heading_2: '标题 2', + Heading_3: '标题 3', + Heading_4: '标题 4', + Heading_5: '标题 5', + Heading_6: '标题 6', + Preformatted: '原始文本', + Blockquote: '引语', + Table_Header: '表头', + URL: '地址', + Title: '提示文字', + Alternative_Text: '失效文字', + Caption: '标题', + Summary: 'Summary', + Number_Of_Rows: '行数', + Number_Of_Cols: '列数', + Submit: '提交', + Cancel: '放弃', + Choose: '选择', + Preview: '预览', + Paste_From_Word: '从Word粘贴纯文本', + Tools: '工具', + Containers: '容器', + Classes: '预定义样式', + Status: '状态', + Source_Code: '源代码', + Attachment: '附件', + NewParagraph: '新段落' +}; + diff --git a/studio/static/js/wymeditor/plugins/.svn/entries b/studio/static/js/wymeditor/plugins/.svn/entries new file mode 100644 index 0000000..e6a5e96 --- /dev/null +++ b/studio/static/js/wymeditor/plugins/.svn/entries @@ -0,0 +1,43 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/plugins +svn://svn.wymeditor.org/wymeditor + + + +2010-04-11T19:53:07.572530Z +659 +mr_lundis + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +resizable +dir + +fullscreen +dir + +hovertools +dir + +tidy +dir + +embed +dir + diff --git a/studio/static/js/wymeditor/plugins/embed/.svn/entries b/studio/static/js/wymeditor/plugins/embed/.svn/entries new file mode 100644 index 0000000..20f177e --- /dev/null +++ b/studio/static/js/wymeditor/plugins/embed/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/plugins/embed +svn://svn.wymeditor.org/wymeditor + + + +2010-04-11T12:17:24.397707Z +655 +mr_lundis + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +jquery.wymeditor.embed.js +file + + + + +2011-07-13T16:45:39.000000Z +9a97b387093aa3d7406470f11d31a9c9 +2010-04-11T12:17:24.397707Z +655 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +1517 + diff --git a/studio/static/js/wymeditor/plugins/embed/.svn/text-base/jquery.wymeditor.embed.js.svn-base b/studio/static/js/wymeditor/plugins/embed/.svn/text-base/jquery.wymeditor.embed.js.svn-base new file mode 100644 index 0000000..e553c3e --- /dev/null +++ b/studio/static/js/wymeditor/plugins/embed/.svn/text-base/jquery.wymeditor.embed.js.svn-base @@ -0,0 +1,52 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.embed.js + * Experimental embed plugin + * + * File Authors: + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + */ + +/* + * ISSUES: + * - The closing object tag seems to be stripped out... + */ +(function() { + if (WYMeditor && WYMeditor.XhtmlValidator['_tags']['param']['attributes']) { + + WYMeditor.XhtmlValidator['_tags']["embed"] = { + "attributes":[ + "allowscriptaccess", + "allowfullscreen", + "height", + "src", + "type", + "width" + ] + }; + + WYMeditor.XhtmlValidator['_tags']['param']['attributes'] = { + '0':'name', + '1':'type', + 'valuetype':/^(data|ref|object)$/, + '2':'valuetype', + '3':'value' + }; + + var XhtmlSaxListener = WYMeditor.XhtmlSaxListener; + WYMeditor.XhtmlSaxListener = function () { + var listener = XhtmlSaxListener.call(this); + listener.block_tags.push('embed'); + return listener; + }; + WYMeditor.XhtmlSaxListener.prototype = XhtmlSaxListener.prototype; + } +})(); diff --git a/studio/static/js/wymeditor/plugins/embed/jquery.wymeditor.embed.js b/studio/static/js/wymeditor/plugins/embed/jquery.wymeditor.embed.js new file mode 100644 index 0000000..e553c3e --- /dev/null +++ b/studio/static/js/wymeditor/plugins/embed/jquery.wymeditor.embed.js @@ -0,0 +1,52 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.embed.js + * Experimental embed plugin + * + * File Authors: + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + */ + +/* + * ISSUES: + * - The closing object tag seems to be stripped out... + */ +(function() { + if (WYMeditor && WYMeditor.XhtmlValidator['_tags']['param']['attributes']) { + + WYMeditor.XhtmlValidator['_tags']["embed"] = { + "attributes":[ + "allowscriptaccess", + "allowfullscreen", + "height", + "src", + "type", + "width" + ] + }; + + WYMeditor.XhtmlValidator['_tags']['param']['attributes'] = { + '0':'name', + '1':'type', + 'valuetype':/^(data|ref|object)$/, + '2':'valuetype', + '3':'value' + }; + + var XhtmlSaxListener = WYMeditor.XhtmlSaxListener; + WYMeditor.XhtmlSaxListener = function () { + var listener = XhtmlSaxListener.call(this); + listener.block_tags.push('embed'); + return listener; + }; + WYMeditor.XhtmlSaxListener.prototype = XhtmlSaxListener.prototype; + } +})(); diff --git a/studio/static/js/wymeditor/plugins/fullscreen/.svn/entries b/studio/static/js/wymeditor/plugins/fullscreen/.svn/entries new file mode 100644 index 0000000..c18dcf7 --- /dev/null +++ b/studio/static/js/wymeditor/plugins/fullscreen/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/plugins/fullscreen +svn://svn.wymeditor.org/wymeditor + + + +2010-04-11T19:53:07.572530Z +659 +mr_lundis + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +jquery.wymeditor.fullscreen.js +file + + + + +2011-07-13T16:45:39.000000Z +503112698b04abb0774b8697d6309576 +2010-04-11T19:53:07.572530Z +659 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +4383 + +icon_fullscreen.gif +file + + + + +2011-07-13T16:45:39.000000Z +f443297ce16c5a70b10874e2a3e90b0a +2009-02-07T19:29:43.660231Z +576 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +509 + diff --git a/studio/static/js/wymeditor/plugins/fullscreen/.svn/prop-base/icon_fullscreen.gif.svn-base b/studio/static/js/wymeditor/plugins/fullscreen/.svn/prop-base/icon_fullscreen.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/plugins/fullscreen/.svn/prop-base/icon_fullscreen.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/plugins/fullscreen/.svn/text-base/icon_fullscreen.gif.svn-base b/studio/static/js/wymeditor/plugins/fullscreen/.svn/text-base/icon_fullscreen.gif.svn-base Binary files differnew file mode 100644 index 0000000..d2a8b0a --- /dev/null +++ b/studio/static/js/wymeditor/plugins/fullscreen/.svn/text-base/icon_fullscreen.gif.svn-base diff --git a/studio/static/js/wymeditor/plugins/fullscreen/.svn/text-base/jquery.wymeditor.fullscreen.js.svn-base b/studio/static/js/wymeditor/plugins/fullscreen/.svn/text-base/jquery.wymeditor.fullscreen.js.svn-base new file mode 100644 index 0000000..275c816 --- /dev/null +++ b/studio/static/js/wymeditor/plugins/fullscreen/.svn/text-base/jquery.wymeditor.fullscreen.js.svn-base @@ -0,0 +1,127 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.fullscreen.js + * Fullscreen plugin for WYMeditor + * + * File Authors: + * Luis Santos (luis.santos a-t openquest dotpt) + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + * Gerd Riesselmann (gerd a-t gyro-php dot org) : Fixed issue with new skin layout + */ + +//Extend WYMeditor +WYMeditor.editor.prototype.fullscreen = function() { + var wym = this, + $box = jQuery(this._box), + $iframe = jQuery(this._iframe), + $overlay = null, + $window = jQuery(window), + + editorMargin = 15; // Margin from window (without padding) + + + //construct the button's html + var html = "<li class='wym_tools_fullscreen'>" + + "<a name='Fullscreen' href='#'" + + " style='background-image:" + + " url(" + wym._options.basePath +"plugins/fullscreen/icon_fullscreen.gif)'>" + + "Fullscreen" + + "</a></li>"; + + //add the button to the tools box + $box.find(wym._options.toolsSelector + wym._options.toolsListSelector) + .append(html); + + function resize () { + // Calculate margins + var uiHeight = $box.outerHeight(true) + - $iframe.outerHeight(true), + editorPadding = $box.outerWidth() - $box.width(), + + // Calculate heights + screenHeight = $window.height(), + iframeHeight = (screenHeight + - uiHeight + - (editorMargin * 2)) + 'px', + + // Calculate witdths + screenWidth = $window.width(), + boxWidth = (screenWidth + - editorPadding + - (editorMargin * 2)) + 'px'; + + $box.css('width', boxWidth); + $iframe.css('height', iframeHeight); + $overlay.css({ + 'height': screenHeight + 'px', + 'width': screenWidth + 'px' + }); + }; + + //handle click event + $box.find('li.wym_tools_fullscreen a').click(function() { + if ($box.css('position') != 'fixed') { + // Store previous inline styles + $box.data('wym-inline-css', $box.attr('style')); + $iframe.data('wym-inline-css', $iframe.attr('style')); + + // Create overlay + $overlay = jQuery('<div id="wym-fullscreen-overlay"></div>') + .appendTo('body').css({ + 'position': 'fixed', + 'background-color': 'rgb(0, 0, 0)', + 'opacity': '0.75', + 'z-index': '98', + 'top': '0px', + 'left': '0px' + }); + + // Possition the editor + $box.css({ + 'position': 'fixed', + 'z-index': '99', + 'top': editorMargin + 'px', + 'left': editorMargin + 'px' + }); + + // Bind event listeners + $window.bind('resize', resize); + $box.find('li.wym_tools_html a').bind('click', resize); + + // Force resize + resize(); + } else { + // Unbind event listeners + $window.unbind('resize', resize); + $box.find('li.wym_tools_html a').unbind('click', resize); + + // Remove inline styles + $box.css({ + 'position': 'static', + 'z-index': '', + 'width': '', + 'top': '', + 'left': '' + }); + $iframe.css('height', ''); + + // Remove overlay + $overlay.remove(); + $overlay = null; + + // Retore previous inline styles + $box.attr('style', $box.data('wym-inline-css')); + $iframe.attr('style', $iframe.data('wym-inline-css')); + } + + return false; + }); +}; diff --git a/studio/static/js/wymeditor/plugins/fullscreen/icon_fullscreen.gif b/studio/static/js/wymeditor/plugins/fullscreen/icon_fullscreen.gif Binary files differnew file mode 100644 index 0000000..d2a8b0a --- /dev/null +++ b/studio/static/js/wymeditor/plugins/fullscreen/icon_fullscreen.gif diff --git a/studio/static/js/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js b/studio/static/js/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js new file mode 100644 index 0000000..275c816 --- /dev/null +++ b/studio/static/js/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js @@ -0,0 +1,127 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.fullscreen.js + * Fullscreen plugin for WYMeditor + * + * File Authors: + * Luis Santos (luis.santos a-t openquest dotpt) + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + * Gerd Riesselmann (gerd a-t gyro-php dot org) : Fixed issue with new skin layout + */ + +//Extend WYMeditor +WYMeditor.editor.prototype.fullscreen = function() { + var wym = this, + $box = jQuery(this._box), + $iframe = jQuery(this._iframe), + $overlay = null, + $window = jQuery(window), + + editorMargin = 15; // Margin from window (without padding) + + + //construct the button's html + var html = "<li class='wym_tools_fullscreen'>" + + "<a name='Fullscreen' href='#'" + + " style='background-image:" + + " url(" + wym._options.basePath +"plugins/fullscreen/icon_fullscreen.gif)'>" + + "Fullscreen" + + "</a></li>"; + + //add the button to the tools box + $box.find(wym._options.toolsSelector + wym._options.toolsListSelector) + .append(html); + + function resize () { + // Calculate margins + var uiHeight = $box.outerHeight(true) + - $iframe.outerHeight(true), + editorPadding = $box.outerWidth() - $box.width(), + + // Calculate heights + screenHeight = $window.height(), + iframeHeight = (screenHeight + - uiHeight + - (editorMargin * 2)) + 'px', + + // Calculate witdths + screenWidth = $window.width(), + boxWidth = (screenWidth + - editorPadding + - (editorMargin * 2)) + 'px'; + + $box.css('width', boxWidth); + $iframe.css('height', iframeHeight); + $overlay.css({ + 'height': screenHeight + 'px', + 'width': screenWidth + 'px' + }); + }; + + //handle click event + $box.find('li.wym_tools_fullscreen a').click(function() { + if ($box.css('position') != 'fixed') { + // Store previous inline styles + $box.data('wym-inline-css', $box.attr('style')); + $iframe.data('wym-inline-css', $iframe.attr('style')); + + // Create overlay + $overlay = jQuery('<div id="wym-fullscreen-overlay"></div>') + .appendTo('body').css({ + 'position': 'fixed', + 'background-color': 'rgb(0, 0, 0)', + 'opacity': '0.75', + 'z-index': '98', + 'top': '0px', + 'left': '0px' + }); + + // Possition the editor + $box.css({ + 'position': 'fixed', + 'z-index': '99', + 'top': editorMargin + 'px', + 'left': editorMargin + 'px' + }); + + // Bind event listeners + $window.bind('resize', resize); + $box.find('li.wym_tools_html a').bind('click', resize); + + // Force resize + resize(); + } else { + // Unbind event listeners + $window.unbind('resize', resize); + $box.find('li.wym_tools_html a').unbind('click', resize); + + // Remove inline styles + $box.css({ + 'position': 'static', + 'z-index': '', + 'width': '', + 'top': '', + 'left': '' + }); + $iframe.css('height', ''); + + // Remove overlay + $overlay.remove(); + $overlay = null; + + // Retore previous inline styles + $box.attr('style', $box.data('wym-inline-css')); + $iframe.attr('style', $iframe.data('wym-inline-css')); + } + + return false; + }); +}; diff --git a/studio/static/js/wymeditor/plugins/hovertools/.svn/entries b/studio/static/js/wymeditor/plugins/hovertools/.svn/entries new file mode 100644 index 0000000..dcb85a5 --- /dev/null +++ b/studio/static/js/wymeditor/plugins/hovertools/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/plugins/hovertools +svn://svn.wymeditor.org/wymeditor + + + +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +jquery.wymeditor.hovertools.js +file + + + + +2011-07-13T16:45:39.000000Z +9128791ae94a2438f6f6f751204e9827 +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1644 + diff --git a/studio/static/js/wymeditor/plugins/hovertools/.svn/text-base/jquery.wymeditor.hovertools.js.svn-base b/studio/static/js/wymeditor/plugins/hovertools/.svn/text-base/jquery.wymeditor.hovertools.js.svn-base new file mode 100644 index 0000000..2c71ba5 --- /dev/null +++ b/studio/static/js/wymeditor/plugins/hovertools/.svn/text-base/jquery.wymeditor.hovertools.js.svn-base @@ -0,0 +1,57 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.hovertools.js + * hovertools plugin for WYMeditor + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + */ + +//Extend WYMeditor +WYMeditor.editor.prototype.hovertools = function() { + + var wym = this; + + //bind events on buttons + jQuery(this._box).find(this._options.toolSelector).hover( + function() { + wym.status(jQuery(this).html()); + }, + function() { + wym.status(' '); + } + ); + + //classes: add/remove a style attr to matching elems + //while mouseover/mouseout + jQuery(this._box).find(this._options.classSelector).hover( + function() { + var aClasses = eval(wym._options.classesItems); + var sName = jQuery(this).attr(WYMeditor.NAME); + var oClass = WYMeditor.Helper.findByName(aClasses, sName); + + if(oClass){ + jqexpr = oClass.expr; + //don't use jQuery.find() on the iframe body + //because of MSIE + jQuery + expando issue (#JQ1143) + if(!jQuery.browser.msie) + jQuery(wym._doc).find(jqexpr).css('background-color','#cfc'); + } + }, + function() { + //don't use jQuery.find() on the iframe body + //because of MSIE + jQuery + expando issue (#JQ1143) + if(!jQuery.browser.msie) + jQuery(wym._doc).find('*').removeAttr('style'); + } + ); + +}; diff --git a/studio/static/js/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js b/studio/static/js/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js new file mode 100644 index 0000000..2c71ba5 --- /dev/null +++ b/studio/static/js/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js @@ -0,0 +1,57 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.hovertools.js + * hovertools plugin for WYMeditor + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + */ + +//Extend WYMeditor +WYMeditor.editor.prototype.hovertools = function() { + + var wym = this; + + //bind events on buttons + jQuery(this._box).find(this._options.toolSelector).hover( + function() { + wym.status(jQuery(this).html()); + }, + function() { + wym.status(' '); + } + ); + + //classes: add/remove a style attr to matching elems + //while mouseover/mouseout + jQuery(this._box).find(this._options.classSelector).hover( + function() { + var aClasses = eval(wym._options.classesItems); + var sName = jQuery(this).attr(WYMeditor.NAME); + var oClass = WYMeditor.Helper.findByName(aClasses, sName); + + if(oClass){ + jqexpr = oClass.expr; + //don't use jQuery.find() on the iframe body + //because of MSIE + jQuery + expando issue (#JQ1143) + if(!jQuery.browser.msie) + jQuery(wym._doc).find(jqexpr).css('background-color','#cfc'); + } + }, + function() { + //don't use jQuery.find() on the iframe body + //because of MSIE + jQuery + expando issue (#JQ1143) + if(!jQuery.browser.msie) + jQuery(wym._doc).find('*').removeAttr('style'); + } + ); + +}; diff --git a/studio/static/js/wymeditor/plugins/resizable/.svn/entries b/studio/static/js/wymeditor/plugins/resizable/.svn/entries new file mode 100644 index 0000000..8afaf68 --- /dev/null +++ b/studio/static/js/wymeditor/plugins/resizable/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/plugins/resizable +svn://svn.wymeditor.org/wymeditor + + + +2009-04-28T19:42:37.044706Z +614 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +jquery.wymeditor.resizable.js +file + + + + +2011-07-13T16:45:39.000000Z +dfe19ff3f55ea32c465ecd64c8b4b8bc +2009-04-28T19:42:37.044706Z +614 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +2913 + +readme.txt +file + + + + +2011-07-13T16:45:39.000000Z +779875a11fe8526a6d246829afda4f1c +2008-07-05T12:52:55.176122Z +510 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +4273 + diff --git a/studio/static/js/wymeditor/plugins/resizable/.svn/text-base/jquery.wymeditor.resizable.js.svn-base b/studio/static/js/wymeditor/plugins/resizable/.svn/text-base/jquery.wymeditor.resizable.js.svn-base new file mode 100644 index 0000000..1ba2d2e --- /dev/null +++ b/studio/static/js/wymeditor/plugins/resizable/.svn/text-base/jquery.wymeditor.resizable.js.svn-base @@ -0,0 +1,91 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.resizable.js + * resize plugin for WYMeditor + * + * File Authors: + * Peter Eschler (peschler _at_ gmail.com) + * Jean-Francois Hovinne - http://www.hovinne.com/ + * + * Version: + * 0.4 + * + * Changelog: + * + * 0.4 + * - Removed UI and UI.resizable scripts loading - see #167 (jfh). + * + * 0.3 + * - Added 'iframeOriginalSize' and removed 'ui.instance' calls (jfh). + * + * 0.2 + * - Added full support for all jQueryUI resizable plugin options. + * - Refactored and documented code. + * 0.1 + * - Initial release. + */ + +/** + * The resizable plugin makes the wymeditor box vertically resizable. + * It it based on the ui.resizable.js plugin of the jQuery UI library. + * + * The WYMeditor resizable plugin supports all parameters of the jQueryUI + * resizable plugin. The parameters are passed like this: + * + * wym.resizable({ handles: "s,e", + * maxHeight: 600 }); + * + * DEPENDENCIES: jQuery UI, jQuery UI resizable + * + * @param options options for the plugin + */ +WYMeditor.editor.prototype.resizable = function(options) { + + var wym = this; + var iframe = jQuery(wym._box).find('iframe'); + var iframeOriginalSize = {}; + + // Define some default options + var default_options = { + start: function(e, ui) { + iframeOriginalSize = { + width: jQuery(iframe).width(), + height: jQuery(iframe).height() + } + }, + + // resize is called by the jQuery resizable plugin whenever the + // client area was resized. + resize: function(e, ui) { + var diff = ui.size.height - ui.originalSize.height; + jQuery(iframe).height( iframeOriginalSize.height + diff ); + + // If the plugin has horizontal resizing disabled we need to + // adjust the "width" attribute of the area css, because the + // resizing will set a fixed width (which breaks liquid layout + // of the wymeditor area). + if( !ui.options.handles['w'] && !ui.options.handles['e'] ) { + ui.size.width = "inherit"; + } + }, + handles: "s,e,se", + minHeight: 250, + maxHeight: 600 + }; + + // Merge given options with default options. Given options override + // default ones. + var final_options = jQuery.extend(default_options, options); + + if(jQuery.isFunction( jQuery.fn.resizable )) jQuery(wym._box).resizable(final_options); + else WYMeditor.console.error('Oops, jQuery UI.resizable unavailable.'); + +}; diff --git a/studio/static/js/wymeditor/plugins/resizable/.svn/text-base/readme.txt.svn-base b/studio/static/js/wymeditor/plugins/resizable/.svn/text-base/readme.txt.svn-base new file mode 100644 index 0000000..2a0444e --- /dev/null +++ b/studio/static/js/wymeditor/plugins/resizable/.svn/text-base/readme.txt.svn-base @@ -0,0 +1,124 @@ + + +resizable plugin for WYMeditor +############################## + +The ``resizable`` plugin for WYMeditor_ enables vertical resizing of the +editor area. The plugin is based on the jQuery UI library. + +Requirements +============ +The following packages are required for using the WYMeditor ``resizable`` +plugin: + +* jQuery (tested with jQuery ``jquery-1.2.4a.js`` from ``jquery.ui`` package) +* WYMeditor SVN trunk (Revision: 482) +* jQuery-UI (tested with ``jquery.ui-1.5b2``) + +It should be possible to use this plugin with ``WYMeditor-0.4`` but I have not +tried. + +Download +======== +You can download the WYMeditor ``resizable`` plugin here: + +* wymeditor-resizable-plugin-0.2.tgz_ +* wymeditor-resizable-plugin-0.1.tgz_ + +See the Changelog_ for more infos about the releases. + +.. _wymeditor-resizable-plugin-0.2.tgz: http://pyjax.net/download/wymeditor-resizable-plugin-0.2.tgz +.. _wymeditor-resizable-plugin-0.1.tgz: http://pyjax.net/download/wymeditor-resizable-plugin-0.1.tgz + +Installation +============ +Just extract the downloaded archive into your WYMeditor's ``plugin`` +directory. + +Usage +===== +For general instructions on WYMeditor plugins please refer to the `WYMeditor +plugin page`_. + +To use the ``resizable`` plugin simply include the plugin's JavaScript file in +your code. You **do not** need to include the jQuery UI files - this is done +automatically by the plugin (see `Internals`_):: + + <script type="text/javascript" + src="/js/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js"> + </script> + +Make sure to adjust the ``src`` attribute to your needs, then initialize the +plugin in WYMeditor's ``postInit`` function:: + + wymeditor({postInit: function(wym) { + wym.hovertools(); // other plugins... + wym.resizable({handles: "s,e", + maxHeight: 600}); + } + }) + +The ``resizable`` plugin takes exactly one parameter, which is an object literal +containing the options of the plugin. The WYMeditor ``resizable`` plugin +supports all options of the jQuery UI ``resizable`` plugin. These are the +default values used by the plugin:: + + handles: "s,e,se", + minHeight: 250, + maxHeight: 600 + +See the `jQuery UI resizable plugin docs`_ for a list of all options. + +That's it! You are now able to resize the WYMeditor vertically, horizontally or +both, depending on your options. + +.. _jQuery UI resizable plugin docs: http://docs.jquery.com/UI/Resizables + +Internals +========= +The plugin takes care of loading the necessary jQuery UI files (``base`` and +``resizable``) from the same path the jQuery library was loaded. Here's how +it's done:: + + // Get the jQuery path from the editor, stripping away the jQuery file. + // see http://www.oreilly.com/catalog/regex/chapter/ch04.html + // The match result array contains the path and the filename. + var jQueryPath = wym.computeJqueryPath().match(/^(.*)\/(.*)$/)[1]; + + // Make an array of the external JavaScript files required by the plugin. + var jQueryPlugins = [jQueryPath + '/ui.base.js', + jQueryPath + '/ui.resizable.js']; + + // First get the jQuery UI base file + $.getScript(jQueryPlugins[0]); + + // Get the jQuery UI resizeable plugin and then init the wymeditor resizable + // plugin. It is import to do the initialisation after loading the + // necessary jQuery UI files has finished, otherwise the "resizable" method + // would not be available. + $.getScript(jQueryPlugins[1], function() { + jQuery(wym._box).resizable(final_options); + }); + +An alternative approach would be to use an AJAX queue when getting the script +files to ensure that all jQuery files are loaded before the initialisation code +of the plugin is executed. There is an `jQuery AJAX queue plugin`_ which does +that. + +.. _jQuery AJAX queue plugin: http://plugins.jquery.com/project/ajaxqueue + +Changelog +========= + +0.2 +--- +- Added full support for all jQuery UI resizable plugin options. +- Refactored and documented code. +- Now contains a packed version (775 bytes). + +0.1 +--- +- Initial release. + +.. _WYMeditor: http://www.wymeditor.org/ +.. _WYMeditor plugin page: http://trac.wymeditor.org/trac/wiki/0.4/Plugins diff --git a/studio/static/js/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js b/studio/static/js/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js new file mode 100644 index 0000000..1ba2d2e --- /dev/null +++ b/studio/static/js/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js @@ -0,0 +1,91 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.resizable.js + * resize plugin for WYMeditor + * + * File Authors: + * Peter Eschler (peschler _at_ gmail.com) + * Jean-Francois Hovinne - http://www.hovinne.com/ + * + * Version: + * 0.4 + * + * Changelog: + * + * 0.4 + * - Removed UI and UI.resizable scripts loading - see #167 (jfh). + * + * 0.3 + * - Added 'iframeOriginalSize' and removed 'ui.instance' calls (jfh). + * + * 0.2 + * - Added full support for all jQueryUI resizable plugin options. + * - Refactored and documented code. + * 0.1 + * - Initial release. + */ + +/** + * The resizable plugin makes the wymeditor box vertically resizable. + * It it based on the ui.resizable.js plugin of the jQuery UI library. + * + * The WYMeditor resizable plugin supports all parameters of the jQueryUI + * resizable plugin. The parameters are passed like this: + * + * wym.resizable({ handles: "s,e", + * maxHeight: 600 }); + * + * DEPENDENCIES: jQuery UI, jQuery UI resizable + * + * @param options options for the plugin + */ +WYMeditor.editor.prototype.resizable = function(options) { + + var wym = this; + var iframe = jQuery(wym._box).find('iframe'); + var iframeOriginalSize = {}; + + // Define some default options + var default_options = { + start: function(e, ui) { + iframeOriginalSize = { + width: jQuery(iframe).width(), + height: jQuery(iframe).height() + } + }, + + // resize is called by the jQuery resizable plugin whenever the + // client area was resized. + resize: function(e, ui) { + var diff = ui.size.height - ui.originalSize.height; + jQuery(iframe).height( iframeOriginalSize.height + diff ); + + // If the plugin has horizontal resizing disabled we need to + // adjust the "width" attribute of the area css, because the + // resizing will set a fixed width (which breaks liquid layout + // of the wymeditor area). + if( !ui.options.handles['w'] && !ui.options.handles['e'] ) { + ui.size.width = "inherit"; + } + }, + handles: "s,e,se", + minHeight: 250, + maxHeight: 600 + }; + + // Merge given options with default options. Given options override + // default ones. + var final_options = jQuery.extend(default_options, options); + + if(jQuery.isFunction( jQuery.fn.resizable )) jQuery(wym._box).resizable(final_options); + else WYMeditor.console.error('Oops, jQuery UI.resizable unavailable.'); + +}; diff --git a/studio/static/js/wymeditor/plugins/resizable/readme.txt b/studio/static/js/wymeditor/plugins/resizable/readme.txt new file mode 100644 index 0000000..2a0444e --- /dev/null +++ b/studio/static/js/wymeditor/plugins/resizable/readme.txt @@ -0,0 +1,124 @@ + + +resizable plugin for WYMeditor +############################## + +The ``resizable`` plugin for WYMeditor_ enables vertical resizing of the +editor area. The plugin is based on the jQuery UI library. + +Requirements +============ +The following packages are required for using the WYMeditor ``resizable`` +plugin: + +* jQuery (tested with jQuery ``jquery-1.2.4a.js`` from ``jquery.ui`` package) +* WYMeditor SVN trunk (Revision: 482) +* jQuery-UI (tested with ``jquery.ui-1.5b2``) + +It should be possible to use this plugin with ``WYMeditor-0.4`` but I have not +tried. + +Download +======== +You can download the WYMeditor ``resizable`` plugin here: + +* wymeditor-resizable-plugin-0.2.tgz_ +* wymeditor-resizable-plugin-0.1.tgz_ + +See the Changelog_ for more infos about the releases. + +.. _wymeditor-resizable-plugin-0.2.tgz: http://pyjax.net/download/wymeditor-resizable-plugin-0.2.tgz +.. _wymeditor-resizable-plugin-0.1.tgz: http://pyjax.net/download/wymeditor-resizable-plugin-0.1.tgz + +Installation +============ +Just extract the downloaded archive into your WYMeditor's ``plugin`` +directory. + +Usage +===== +For general instructions on WYMeditor plugins please refer to the `WYMeditor +plugin page`_. + +To use the ``resizable`` plugin simply include the plugin's JavaScript file in +your code. You **do not** need to include the jQuery UI files - this is done +automatically by the plugin (see `Internals`_):: + + <script type="text/javascript" + src="/js/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js"> + </script> + +Make sure to adjust the ``src`` attribute to your needs, then initialize the +plugin in WYMeditor's ``postInit`` function:: + + wymeditor({postInit: function(wym) { + wym.hovertools(); // other plugins... + wym.resizable({handles: "s,e", + maxHeight: 600}); + } + }) + +The ``resizable`` plugin takes exactly one parameter, which is an object literal +containing the options of the plugin. The WYMeditor ``resizable`` plugin +supports all options of the jQuery UI ``resizable`` plugin. These are the +default values used by the plugin:: + + handles: "s,e,se", + minHeight: 250, + maxHeight: 600 + +See the `jQuery UI resizable plugin docs`_ for a list of all options. + +That's it! You are now able to resize the WYMeditor vertically, horizontally or +both, depending on your options. + +.. _jQuery UI resizable plugin docs: http://docs.jquery.com/UI/Resizables + +Internals +========= +The plugin takes care of loading the necessary jQuery UI files (``base`` and +``resizable``) from the same path the jQuery library was loaded. Here's how +it's done:: + + // Get the jQuery path from the editor, stripping away the jQuery file. + // see http://www.oreilly.com/catalog/regex/chapter/ch04.html + // The match result array contains the path and the filename. + var jQueryPath = wym.computeJqueryPath().match(/^(.*)\/(.*)$/)[1]; + + // Make an array of the external JavaScript files required by the plugin. + var jQueryPlugins = [jQueryPath + '/ui.base.js', + jQueryPath + '/ui.resizable.js']; + + // First get the jQuery UI base file + $.getScript(jQueryPlugins[0]); + + // Get the jQuery UI resizeable plugin and then init the wymeditor resizable + // plugin. It is import to do the initialisation after loading the + // necessary jQuery UI files has finished, otherwise the "resizable" method + // would not be available. + $.getScript(jQueryPlugins[1], function() { + jQuery(wym._box).resizable(final_options); + }); + +An alternative approach would be to use an AJAX queue when getting the script +files to ensure that all jQuery files are loaded before the initialisation code +of the plugin is executed. There is an `jQuery AJAX queue plugin`_ which does +that. + +.. _jQuery AJAX queue plugin: http://plugins.jquery.com/project/ajaxqueue + +Changelog +========= + +0.2 +--- +- Added full support for all jQuery UI resizable plugin options. +- Refactored and documented code. +- Now contains a packed version (775 bytes). + +0.1 +--- +- Initial release. + +.. _WYMeditor: http://www.wymeditor.org/ +.. _WYMeditor plugin page: http://trac.wymeditor.org/trac/wiki/0.4/Plugins diff --git a/studio/static/js/wymeditor/plugins/tidy/.svn/entries b/studio/static/js/wymeditor/plugins/tidy/.svn/entries new file mode 100644 index 0000000..3acea50 --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/plugins/tidy +svn://svn.wymeditor.org/wymeditor + + + +2010-04-11T19:34:57.530630Z +658 +mr_lundis + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +tidy.php +file + + + + +2011-07-13T16:45:39.000000Z +3355fbc23378052db8213dbdcd4fe31f +2007-04-26T12:45:23.848206Z +245 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1052 + +jquery.wymeditor.tidy.js +file + + + + +2011-07-13T16:45:39.000000Z +3a2dee9a16df26d6d1b36886f77880c8 +2010-04-11T19:34:57.530630Z +658 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +2157 + +wand.png +file + + + + +2011-07-13T16:45:39.000000Z +22d8038ebf5ac63b0062ebf361e8261c +2007-04-23T11:42:06.279227Z +233 +d.reszka +has-props + + + + + + + + + + + + + + + + + + + + +715 + +README +file + + + + +2011-07-13T16:45:39.000000Z +b31aaf6b3928608a98b2028c2d9f523e +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +607 + diff --git a/studio/static/js/wymeditor/plugins/tidy/.svn/prop-base/wand.png.svn-base b/studio/static/js/wymeditor/plugins/tidy/.svn/prop-base/wand.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/.svn/prop-base/wand.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/README.svn-base b/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/README.svn-base new file mode 100644 index 0000000..acc7ffd --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/README.svn-base @@ -0,0 +1,19 @@ +WYMeditor : what you see is What You Mean web-based editor +Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ +Dual licensed under the MIT (MIT-license.txt) +and GPL (GPL-license.txt) licenses. + +For further information visit: + http://www.wymeditor.org/ + +File Name: + README - HTML Tidy plugin for WYMeditor + +File Authors: + Jean-François Hovinne (jf.hovinne a-t wymeditor dotorg) + +Credits: + 'HTML Tidy' by Dave Ragget - http://tidy.sourceforge.net/ + Icon 'wand' by Mark James - http://famfamfam.com/ + +WYMeditor documentation is available online at http://www.wymeditor.org/ diff --git a/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/jquery.wymeditor.tidy.js.svn-base b/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/jquery.wymeditor.tidy.js.svn-base new file mode 100644 index 0000000..bf30c4c --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/jquery.wymeditor.tidy.js.svn-base @@ -0,0 +1,82 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.tidy.js + * HTML Tidy plugin for WYMeditor + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + */ + +//Extend WYMeditor +WYMeditor.editor.prototype.tidy = function(options) { + var tidy = new WymTidy(options, this); + return(tidy); +}; + +//WymTidy constructor +function WymTidy(options, wym) { + + options = jQuery.extend({ + + sUrl: wym._options.basePath + "plugins/tidy/tidy.php", + sButtonHtml: "<li class='wym_tools_tidy'>" + + "<a name='CleanUp' href='#'" + + " style='background-image:" + + " url(" + wym._options.basePath + "plugins/tidy/wand.png)'>" + + "Clean up HTML" + + "</a></li>", + + sButtonSelector: "li.wym_tools_tidy a" + + }, options); + + this._options = options; + this._wym = wym; + +}; + +//WymTidy initialization +WymTidy.prototype.init = function() { + + var tidy = this; + + jQuery(this._wym._box).find( + this._wym._options.toolsSelector + this._wym._options.toolsListSelector) + .append(this._options.sButtonHtml); + + //handle click event + jQuery(this._wym._box).find(this._options.sButtonSelector).click(function() { + tidy.cleanup(); + return(false); + }); + +}; + +//WymTidy cleanup +WymTidy.prototype.cleanup = function() { + + var wym = this._wym; + var html = "<html><body>" + wym.xhtml() + "</body></html>"; + + jQuery.post(this._options.sUrl, { html: html}, function(data) { + + if(data.length > 0 && data != '0') { + if(data.indexOf("<?php") == 0) { + wym.status("Ooops... Is PHP installed?"); + } else { + wym.html(data); + wym.status("HTML has been cleaned up."); + } + } else { + wym.status("An error occurred."); + } + }); +}; diff --git a/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/tidy.php.svn-base b/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/tidy.php.svn-base new file mode 100644 index 0000000..23b9bec --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/tidy.php.svn-base @@ -0,0 +1,36 @@ +<?php + +if (get_magic_quotes_gpc()) $html = stripslashes($_REQUEST['html']); +else $html = $_REQUEST['html']; + +if(strlen($html) > 0) { + + // Specify configuration + $config = array( + 'bare' => true, + 'clean' => true, + 'doctype' => 'strict', + 'drop-empty-paras' => true, + 'drop-font-tags' => true, + 'drop-proprietary-attributes' => true, + 'enclose-block-text' => true, + 'indent' => false, + 'join-classes' => true, + 'join-styles' => true, + 'logical-emphasis' => true, + 'output-xhtml' => true, + 'show-body-only' => true, + 'wrap' => 0); + + // Tidy + $tidy = new tidy; + $tidy->parseString($html, $config, 'utf8'); + $tidy->cleanRepair(); + + // Output + echo $tidy; +} else { + +echo ('0'); +} +?> diff --git a/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/wand.png.svn-base b/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/wand.png.svn-base Binary files differnew file mode 100644 index 0000000..bb55eea --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/.svn/text-base/wand.png.svn-base diff --git a/studio/static/js/wymeditor/plugins/tidy/README b/studio/static/js/wymeditor/plugins/tidy/README new file mode 100644 index 0000000..acc7ffd --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/README @@ -0,0 +1,19 @@ +WYMeditor : what you see is What You Mean web-based editor +Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ +Dual licensed under the MIT (MIT-license.txt) +and GPL (GPL-license.txt) licenses. + +For further information visit: + http://www.wymeditor.org/ + +File Name: + README - HTML Tidy plugin for WYMeditor + +File Authors: + Jean-François Hovinne (jf.hovinne a-t wymeditor dotorg) + +Credits: + 'HTML Tidy' by Dave Ragget - http://tidy.sourceforge.net/ + Icon 'wand' by Mark James - http://famfamfam.com/ + +WYMeditor documentation is available online at http://www.wymeditor.org/ diff --git a/studio/static/js/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js b/studio/static/js/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js new file mode 100644 index 0000000..bf30c4c --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js @@ -0,0 +1,82 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.tidy.js + * HTML Tidy plugin for WYMeditor + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + */ + +//Extend WYMeditor +WYMeditor.editor.prototype.tidy = function(options) { + var tidy = new WymTidy(options, this); + return(tidy); +}; + +//WymTidy constructor +function WymTidy(options, wym) { + + options = jQuery.extend({ + + sUrl: wym._options.basePath + "plugins/tidy/tidy.php", + sButtonHtml: "<li class='wym_tools_tidy'>" + + "<a name='CleanUp' href='#'" + + " style='background-image:" + + " url(" + wym._options.basePath + "plugins/tidy/wand.png)'>" + + "Clean up HTML" + + "</a></li>", + + sButtonSelector: "li.wym_tools_tidy a" + + }, options); + + this._options = options; + this._wym = wym; + +}; + +//WymTidy initialization +WymTidy.prototype.init = function() { + + var tidy = this; + + jQuery(this._wym._box).find( + this._wym._options.toolsSelector + this._wym._options.toolsListSelector) + .append(this._options.sButtonHtml); + + //handle click event + jQuery(this._wym._box).find(this._options.sButtonSelector).click(function() { + tidy.cleanup(); + return(false); + }); + +}; + +//WymTidy cleanup +WymTidy.prototype.cleanup = function() { + + var wym = this._wym; + var html = "<html><body>" + wym.xhtml() + "</body></html>"; + + jQuery.post(this._options.sUrl, { html: html}, function(data) { + + if(data.length > 0 && data != '0') { + if(data.indexOf("<?php") == 0) { + wym.status("Ooops... Is PHP installed?"); + } else { + wym.html(data); + wym.status("HTML has been cleaned up."); + } + } else { + wym.status("An error occurred."); + } + }); +}; diff --git a/studio/static/js/wymeditor/plugins/tidy/tidy.php b/studio/static/js/wymeditor/plugins/tidy/tidy.php new file mode 100644 index 0000000..23b9bec --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/tidy.php @@ -0,0 +1,36 @@ +<?php + +if (get_magic_quotes_gpc()) $html = stripslashes($_REQUEST['html']); +else $html = $_REQUEST['html']; + +if(strlen($html) > 0) { + + // Specify configuration + $config = array( + 'bare' => true, + 'clean' => true, + 'doctype' => 'strict', + 'drop-empty-paras' => true, + 'drop-font-tags' => true, + 'drop-proprietary-attributes' => true, + 'enclose-block-text' => true, + 'indent' => false, + 'join-classes' => true, + 'join-styles' => true, + 'logical-emphasis' => true, + 'output-xhtml' => true, + 'show-body-only' => true, + 'wrap' => 0); + + // Tidy + $tidy = new tidy; + $tidy->parseString($html, $config, 'utf8'); + $tidy->cleanRepair(); + + // Output + echo $tidy; +} else { + +echo ('0'); +} +?> diff --git a/studio/static/js/wymeditor/plugins/tidy/wand.png b/studio/static/js/wymeditor/plugins/tidy/wand.png Binary files differnew file mode 100644 index 0000000..bb55eea --- /dev/null +++ b/studio/static/js/wymeditor/plugins/tidy/wand.png diff --git a/studio/static/js/wymeditor/skins/.svn/entries b/studio/static/js/wymeditor/skins/.svn/entries new file mode 100644 index 0000000..81655ae --- /dev/null +++ b/studio/static/js/wymeditor/skins/.svn/entries @@ -0,0 +1,77 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/skins +svn://svn.wymeditor.org/wymeditor + + + +2010-06-20T14:29:05.352766Z +675 +mr_lundis + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +default +dir + +silver +dir + +compact +dir + +minimal +dir + +twopanels +dir + +wymeditor_icon.png +file + + + + +2011-07-13T16:45:40.000000Z +d43650efc0228099352fc9998573dbb6 +2007-08-22T15:06:37.289602Z +413 +d.reszka +has-props + + + + + + + + + + + + + + + + + + + + +1028 + diff --git a/studio/static/js/wymeditor/skins/.svn/prop-base/wymeditor_icon.png.svn-base b/studio/static/js/wymeditor/skins/.svn/prop-base/wymeditor_icon.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/.svn/prop-base/wymeditor_icon.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/.svn/text-base/wymeditor_icon.png.svn-base b/studio/static/js/wymeditor/skins/.svn/text-base/wymeditor_icon.png.svn-base Binary files differnew file mode 100644 index 0000000..d4fc155 --- /dev/null +++ b/studio/static/js/wymeditor/skins/.svn/text-base/wymeditor_icon.png.svn-base diff --git a/studio/static/js/wymeditor/skins/compact/.svn/entries b/studio/static/js/wymeditor/skins/compact/.svn/entries new file mode 100644 index 0000000..4218693 --- /dev/null +++ b/studio/static/js/wymeditor/skins/compact/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/skins/compact +svn://svn.wymeditor.org/wymeditor + + + +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +skin.js +file + + + + +2011-07-13T16:45:40.000000Z +eb8726f426d41a0cb87a3a6831cf2848 +2009-04-20T15:16:38.336253Z +595 +totoro + + + + + + + + + + + + + + + + + + + + + +1155 + +skin.css +file + + + + +2011-07-13T16:45:40.000000Z +85d1cb084ccc301c9306974311a86df7 +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +7937 + +icons.png +file + + + + +2011-07-13T16:45:40.000000Z +45a781288dc799f892fa517355ff80b6 +2009-04-18T11:14:41.598474Z +592 +totoro +has-props + + + + + + + + + + + + + + + + + + + + +3651 + diff --git a/studio/static/js/wymeditor/skins/compact/.svn/prop-base/icons.png.svn-base b/studio/static/js/wymeditor/skins/compact/.svn/prop-base/icons.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/compact/.svn/prop-base/icons.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/compact/.svn/text-base/icons.png.svn-base b/studio/static/js/wymeditor/skins/compact/.svn/text-base/icons.png.svn-base Binary files differnew file mode 100644 index 0000000..c6eb463 --- /dev/null +++ b/studio/static/js/wymeditor/skins/compact/.svn/text-base/icons.png.svn-base diff --git a/studio/static/js/wymeditor/skins/compact/.svn/text-base/skin.css.svn-base b/studio/static/js/wymeditor/skins/compact/.svn/text-base/skin.css.svn-base new file mode 100644 index 0000000..4a6a0c6 --- /dev/null +++ b/studio/static/js/wymeditor/skins/compact/.svn/text-base/skin.css.svn-base @@ -0,0 +1,134 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * screen.css + * main stylesheet for the WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_compact p, .wym_skin_compact h2, .wym_skin_compact h3, + .wym_skin_compact ul, .wym_skin_compact li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_compact .wym_area_left { display: none; } + .wym_skin_compact .wym_area_right { display: none; } + + +/*TYPO*/ + .wym_skin_compact { font-size: 10px; font-family: Verdana, Arial, sans-serif; } + .wym_skin_compact h2 { font-size: 110%; /* = 11px */} + .wym_skin_compact h3 { font-size: 100%; /* = 10px */} + .wym_skin_compact li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_compact { border: 1px solid gray; padding: 5px} + + /*auto-clear the wym_box*/ + .wym_skin_compact:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_compact { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_compact .wym_html { width: 98%;} + .wym_skin_compact .wym_html textarea { font-size: 120%; width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_compact .wym_iframe { width: 98%;} + .wym_skin_compact .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_compact .wym_area_left { width: 100px; float: left;} + .wym_skin_compact .wym_area_right { width: 150px; float: right;} + .wym_skin_compact .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_compact .wym_area_main { height: 1%;} + * html .wym_skin_compact .wym_area_top { height: 1%;} + *+html .wym_skin_compact .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_compact .wym_section { margin-bottom: 5px; } + .wym_skin_compact .wym_section h2, + .wym_skin_compact .wym_section h3 { padding: 1px 3px; margin: 0; } + .wym_skin_compact .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_compact .wym_section a:hover { background-color: yellow; } + /*hide section titles by default*/ + .wym_skin_compact .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_compact .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_compact .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_compact .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_compact .wym_panel { } + .wym_skin_compact .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_compact .wym_dropdown h2 { display: block; } + .wym_skin_compact .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_compact .wym_dropdown:hover ul, + .wym_skin_compact .wym_dropdown.hover ul { display: block; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_compact .wym_buttons li { float:left;} + .wym_skin_compact .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_compact .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_compact .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_compact .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_compact .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_compact .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_compact .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_compact .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_compact .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_compact .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_compact .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_compact .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_compact .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_compact .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_compact .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_compact .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_compact .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_compact .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_compact .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_compact .wym_section h2 { background: #f0f0f0; border: solid gray; border-width: 0 0 1px;} + .wym_skin_compact .wym_section h2 span { color: gray;} + .wym_skin_compact .wym_panel { padding: 0; border: solid gray; border-width: 1px; background: white;} + .wym_skin_compact .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_compact .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_compact .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/studio/static/js/wymeditor/skins/compact/.svn/text-base/skin.js.svn-base b/studio/static/js/wymeditor/skins/compact/.svn/text-base/skin.js.svn-base new file mode 100644 index 0000000..cfb7cc1 --- /dev/null +++ b/studio/static/js/wymeditor/skins/compact/.svn/text-base/skin.js.svn-base @@ -0,0 +1,35 @@ +WYMeditor.SKINS['compact'] = { + + init: function(wym) { + + //move the containers panel to the top area + jQuery(wym._options.containersSelector + ', ' + + wym._options.classesSelector, wym._box) + .appendTo( jQuery("div.wym_area_top", wym._box) ) + .addClass("wym_dropdown") + .css({"margin-right": "10px", "width": "120px", "float": "left"}); + + //render following sections as buttons + jQuery(wym._options.toolsSelector, wym._box) + .addClass("wym_buttons") + .css({"margin-right": "10px", "float": "left"}); + + //make hover work under IE < 7 + jQuery(".wym_section", wym._box).hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + + var postInit = wym._options.postInit; + wym._options.postInit = function(wym) { + + if(postInit) postInit.call(wym, wym); + var rule = { + name: 'body', + css: 'background-color: #f0f0f0;' + }; + wym.addCssRule( wym._doc.styleSheets[0], rule); + }; + } +}; diff --git a/studio/static/js/wymeditor/skins/compact/icons.png b/studio/static/js/wymeditor/skins/compact/icons.png Binary files differnew file mode 100644 index 0000000..c6eb463 --- /dev/null +++ b/studio/static/js/wymeditor/skins/compact/icons.png diff --git a/studio/static/js/wymeditor/skins/compact/skin.css b/studio/static/js/wymeditor/skins/compact/skin.css new file mode 100644 index 0000000..4a6a0c6 --- /dev/null +++ b/studio/static/js/wymeditor/skins/compact/skin.css @@ -0,0 +1,134 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * screen.css + * main stylesheet for the WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_compact p, .wym_skin_compact h2, .wym_skin_compact h3, + .wym_skin_compact ul, .wym_skin_compact li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_compact .wym_area_left { display: none; } + .wym_skin_compact .wym_area_right { display: none; } + + +/*TYPO*/ + .wym_skin_compact { font-size: 10px; font-family: Verdana, Arial, sans-serif; } + .wym_skin_compact h2 { font-size: 110%; /* = 11px */} + .wym_skin_compact h3 { font-size: 100%; /* = 10px */} + .wym_skin_compact li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_compact { border: 1px solid gray; padding: 5px} + + /*auto-clear the wym_box*/ + .wym_skin_compact:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_compact { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_compact .wym_html { width: 98%;} + .wym_skin_compact .wym_html textarea { font-size: 120%; width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_compact .wym_iframe { width: 98%;} + .wym_skin_compact .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_compact .wym_area_left { width: 100px; float: left;} + .wym_skin_compact .wym_area_right { width: 150px; float: right;} + .wym_skin_compact .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_compact .wym_area_main { height: 1%;} + * html .wym_skin_compact .wym_area_top { height: 1%;} + *+html .wym_skin_compact .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_compact .wym_section { margin-bottom: 5px; } + .wym_skin_compact .wym_section h2, + .wym_skin_compact .wym_section h3 { padding: 1px 3px; margin: 0; } + .wym_skin_compact .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_compact .wym_section a:hover { background-color: yellow; } + /*hide section titles by default*/ + .wym_skin_compact .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_compact .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_compact .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_compact .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_compact .wym_panel { } + .wym_skin_compact .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_compact .wym_dropdown h2 { display: block; } + .wym_skin_compact .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_compact .wym_dropdown:hover ul, + .wym_skin_compact .wym_dropdown.hover ul { display: block; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_compact .wym_buttons li { float:left;} + .wym_skin_compact .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_compact .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_compact .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_compact .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_compact .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_compact .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_compact .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_compact .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_compact .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_compact .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_compact .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_compact .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_compact .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_compact .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_compact .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_compact .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_compact .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_compact .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_compact .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_compact .wym_section h2 { background: #f0f0f0; border: solid gray; border-width: 0 0 1px;} + .wym_skin_compact .wym_section h2 span { color: gray;} + .wym_skin_compact .wym_panel { padding: 0; border: solid gray; border-width: 1px; background: white;} + .wym_skin_compact .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_compact .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_compact .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/studio/static/js/wymeditor/skins/compact/skin.js b/studio/static/js/wymeditor/skins/compact/skin.js new file mode 100644 index 0000000..cfb7cc1 --- /dev/null +++ b/studio/static/js/wymeditor/skins/compact/skin.js @@ -0,0 +1,35 @@ +WYMeditor.SKINS['compact'] = { + + init: function(wym) { + + //move the containers panel to the top area + jQuery(wym._options.containersSelector + ', ' + + wym._options.classesSelector, wym._box) + .appendTo( jQuery("div.wym_area_top", wym._box) ) + .addClass("wym_dropdown") + .css({"margin-right": "10px", "width": "120px", "float": "left"}); + + //render following sections as buttons + jQuery(wym._options.toolsSelector, wym._box) + .addClass("wym_buttons") + .css({"margin-right": "10px", "float": "left"}); + + //make hover work under IE < 7 + jQuery(".wym_section", wym._box).hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + + var postInit = wym._options.postInit; + wym._options.postInit = function(wym) { + + if(postInit) postInit.call(wym, wym); + var rule = { + name: 'body', + css: 'background-color: #f0f0f0;' + }; + wym.addCssRule( wym._doc.styleSheets[0], rule); + }; + } +}; diff --git a/studio/static/js/wymeditor/skins/default/.svn/entries b/studio/static/js/wymeditor/skins/default/.svn/entries new file mode 100644 index 0000000..3893f6d --- /dev/null +++ b/studio/static/js/wymeditor/skins/default/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/skins/default +svn://svn.wymeditor.org/wymeditor + + + +2010-06-20T14:29:05.352766Z +675 +mr_lundis + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +skin.js +file + + + + +2011-07-13T16:45:39.000000Z +cbb79789e5a95dc8cbdcff294dd67ea0 +2010-06-20T14:29:05.352766Z +675 +mr_lundis + + + + + + + + + + + + + + + + + + + + + +1386 + +skin.css +file + + + + +2011-07-13T16:45:39.000000Z +c8b6d612f048cbf5c1b8a54f816dc5db +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +7890 + +icons.png +file + + + + +2011-07-13T16:45:39.000000Z +45a781288dc799f892fa517355ff80b6 +2007-03-06T13:53:36.153298Z +149 +d.reszka +has-props + + + + + + + + + + + + + + + + + + + + +3651 + diff --git a/studio/static/js/wymeditor/skins/default/.svn/prop-base/icons.png.svn-base b/studio/static/js/wymeditor/skins/default/.svn/prop-base/icons.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/default/.svn/prop-base/icons.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/default/.svn/text-base/icons.png.svn-base b/studio/static/js/wymeditor/skins/default/.svn/text-base/icons.png.svn-base Binary files differnew file mode 100644 index 0000000..c6eb463 --- /dev/null +++ b/studio/static/js/wymeditor/skins/default/.svn/text-base/icons.png.svn-base diff --git a/studio/static/js/wymeditor/skins/default/.svn/text-base/skin.css.svn-base b/studio/static/js/wymeditor/skins/default/.svn/text-base/skin.css.svn-base new file mode 100644 index 0000000..eb4680f --- /dev/null +++ b/studio/static/js/wymeditor/skins/default/.svn/text-base/skin.css.svn-base @@ -0,0 +1,133 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * skin.css + * main stylesheet for the default WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_default p, .wym_skin_default h2, .wym_skin_default h3, + .wym_skin_default ul, .wym_skin_default li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_default .wym_area_left { display: none; } + .wym_skin_default .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_default { font-size: 62.5%; font-family: Verdana, Arial, sans-serif; } + .wym_skin_default h2 { font-size: 110%; /* = 11px */} + .wym_skin_default h3 { font-size: 100%; /* = 10px */} + .wym_skin_default li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_default { border: 1px solid gray; background: #f2f2f2; padding: 5px} + + /*auto-clear the wym_box*/ + .wym_skin_default:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_default { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_default .wym_html { width: 98%;} + .wym_skin_default .wym_html textarea { width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_default .wym_iframe { width: 98%;} + .wym_skin_default .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_default .wym_area_left { width: 150px; float: left;} + .wym_skin_default .wym_area_right { width: 150px; float: right;} + .wym_skin_default .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_default .wym_area_main { height: 1%;} + * html .wym_skin_default .wym_area_top { height: 1%;} + *+html .wym_skin_default .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_default .wym_section { margin-bottom: 5px; } + .wym_skin_default .wym_section h2, + .wym_skin_default .wym_section h3 { padding: 1px 3px; margin: 0; } + .wym_skin_default .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_default .wym_section a:hover { background-color: yellow; } + /*hide section titles by default*/ + .wym_skin_default .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_default .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_default .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_default .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_default .wym_panel { } + .wym_skin_default .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_default .wym_dropdown h2 { display: block; } + .wym_skin_default .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_default .wym_dropdown:hover ul, + .wym_skin_default .wym_dropdown.hover ul { display: block; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_default .wym_buttons li { float:left;} + .wym_skin_default .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_default .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_default .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_default .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_default .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_default .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_default .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_default .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_default .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_default .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_default .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_default .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_default .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_default .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_default .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_default .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_default .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_default .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_default .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_default .wym_section h2 { background: #ddd; border: solid gray; border-width: 0 0 1px;} + .wym_skin_default .wym_section h2 span { color: gray;} + .wym_skin_default .wym_panel { padding: 0; border: solid gray; border-width: 1px; background: white;} + .wym_skin_default .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_default .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_default .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/studio/static/js/wymeditor/skins/default/.svn/text-base/skin.js.svn-base b/studio/static/js/wymeditor/skins/default/.svn/text-base/skin.js.svn-base new file mode 100644 index 0000000..5f6d97e --- /dev/null +++ b/studio/static/js/wymeditor/skins/default/.svn/text-base/skin.js.svn-base @@ -0,0 +1,40 @@ +WYMeditor.SKINS['default'] = { + + init: function(wym) { + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.containersSelector) + .addClass("wym_dropdown") + .find(WYMeditor.H2) + .append("<span> ></span>"); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "155px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/studio/static/js/wymeditor/skins/default/icons.png b/studio/static/js/wymeditor/skins/default/icons.png Binary files differnew file mode 100644 index 0000000..c6eb463 --- /dev/null +++ b/studio/static/js/wymeditor/skins/default/icons.png diff --git a/studio/static/js/wymeditor/skins/default/skin.css b/studio/static/js/wymeditor/skins/default/skin.css new file mode 100644 index 0000000..eb4680f --- /dev/null +++ b/studio/static/js/wymeditor/skins/default/skin.css @@ -0,0 +1,133 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * skin.css + * main stylesheet for the default WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_default p, .wym_skin_default h2, .wym_skin_default h3, + .wym_skin_default ul, .wym_skin_default li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_default .wym_area_left { display: none; } + .wym_skin_default .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_default { font-size: 62.5%; font-family: Verdana, Arial, sans-serif; } + .wym_skin_default h2 { font-size: 110%; /* = 11px */} + .wym_skin_default h3 { font-size: 100%; /* = 10px */} + .wym_skin_default li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_default { border: 1px solid gray; background: #f2f2f2; padding: 5px} + + /*auto-clear the wym_box*/ + .wym_skin_default:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_default { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_default .wym_html { width: 98%;} + .wym_skin_default .wym_html textarea { width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_default .wym_iframe { width: 98%;} + .wym_skin_default .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_default .wym_area_left { width: 150px; float: left;} + .wym_skin_default .wym_area_right { width: 150px; float: right;} + .wym_skin_default .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_default .wym_area_main { height: 1%;} + * html .wym_skin_default .wym_area_top { height: 1%;} + *+html .wym_skin_default .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_default .wym_section { margin-bottom: 5px; } + .wym_skin_default .wym_section h2, + .wym_skin_default .wym_section h3 { padding: 1px 3px; margin: 0; } + .wym_skin_default .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_default .wym_section a:hover { background-color: yellow; } + /*hide section titles by default*/ + .wym_skin_default .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_default .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_default .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_default .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_default .wym_panel { } + .wym_skin_default .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_default .wym_dropdown h2 { display: block; } + .wym_skin_default .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_default .wym_dropdown:hover ul, + .wym_skin_default .wym_dropdown.hover ul { display: block; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_default .wym_buttons li { float:left;} + .wym_skin_default .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_default .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_default .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_default .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_default .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_default .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_default .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_default .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_default .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_default .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_default .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_default .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_default .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_default .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_default .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_default .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_default .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_default .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_default .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_default .wym_section h2 { background: #ddd; border: solid gray; border-width: 0 0 1px;} + .wym_skin_default .wym_section h2 span { color: gray;} + .wym_skin_default .wym_panel { padding: 0; border: solid gray; border-width: 1px; background: white;} + .wym_skin_default .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_default .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_default .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/studio/static/js/wymeditor/skins/default/skin.js b/studio/static/js/wymeditor/skins/default/skin.js new file mode 100644 index 0000000..5f6d97e --- /dev/null +++ b/studio/static/js/wymeditor/skins/default/skin.js @@ -0,0 +1,40 @@ +WYMeditor.SKINS['default'] = { + + init: function(wym) { + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.containersSelector) + .addClass("wym_dropdown") + .find(WYMeditor.H2) + .append("<span> ></span>"); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "155px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/studio/static/js/wymeditor/skins/minimal/.svn/entries b/studio/static/js/wymeditor/skins/minimal/.svn/entries new file mode 100644 index 0000000..fb50d46 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/.svn/entries @@ -0,0 +1,99 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/skins/minimal +svn://svn.wymeditor.org/wymeditor + + + +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +skin.js +file + + + + +2011-07-13T16:45:40.000000Z +4f493f73bfb815d0dfff9c39d15a14e8 +2008-06-02T20:02:11.870601Z +505 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +868 + +images +dir + +skin.css +file + + + + +2011-07-13T16:45:40.000000Z +b24eafed148e80826464943a977ba2ad +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +2743 + diff --git a/studio/static/js/wymeditor/skins/minimal/.svn/text-base/skin.css.svn-base b/studio/static/js/wymeditor/skins/minimal/.svn/text-base/skin.css.svn-base new file mode 100644 index 0000000..cea8d84 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/.svn/text-base/skin.css.svn-base @@ -0,0 +1,131 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * skin.css + * main stylesheet for the minimal WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne + * Scott Lewis (see Silver skin) +*/ + +/* Set iframe */ +.wym_skin_minimal div.wym_iframe iframe { + width: 90%; + height: 200px; +} + +/* Hide h2 by default */ +.wym_skin_minimal h2 { + display: none; +} + +/* Show specific h2 */ +.wym_skin_minimal div.wym_tools h2, +.wym_skin_minimal div.wym_containers h2, +.wym_skin_minimal div.wym_classes h2 { + display: block; +} + +.wym_skin_minimal div.wym_section ul { + margin: 0; +} + +.wym_skin_minimal div.wym_section ul li { + float: left; + list-style-type: none; + margin-right: 5px; +} + +.wym_skin_minimal div.wym_area_top, +.wym_skin_minimal div.wym_area_right, +.wym_skin_minimal div.wym_containers, +.wym_skin_minimal div.wym_classes { + float: left; +} + +.wym_skin_minimal div.wym_area_main { + clear: both; +} + +.wym_skin_minimal div.wym_html { + width: 90%; +} + +.wym_skin_minimal textarea.wym_html_val { + width: 100%; + height: 100px; +} + +/* DROPDOWNS (see Silver skin) */ +.wym_skin_minimal div.wym_dropdown { + cursor: pointer; + margin: 0px 4px 10px 0px; + padding: 0px; + z-index: 1001; + display: block; +} + +.wym_skin_minimal div.wym_dropdown ul { + display: none; + width: 124px; + padding: 0px; + margin: 0px; + list-style-type: none; + list-style-image: none; + z-index: 1002; + position: absolute; + border-top: 1px solid #AAA; +} + +.wym_skin_minimal div.wym_dropdown ul li { + width: 146px; + height: 20px; + padding: 0px; + margin: 0px; + border: 1px solid #777; + border-top: none; + background: #EEE; + list-style-image: none; +} + +.wym_skin_minimal div.wym_dropdown h2 { + width: 138px; + height: 16px; + color: #000; + background-image: url(images/bg.selector.silver.gif); + background-position: 0px -18px; + background-repeat: no-repeat; + border: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px; + font-weight: bold; + padding: 2px 0px 0px 10px; + margin: 0px; +} + +.wym_skin_minimal div.wym_dropdown a { + text-decoration: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px; + padding: 5px 0px 0px 10px; + display: block; + width: 136px; + height: 15px; + color: #000; + text-align: left; + margin-left: 0px; +} + +.wym_skin_minimal div.wym_dropdown a:hover { + background: #BBB; + border-bottom: none; +} diff --git a/studio/static/js/wymeditor/skins/minimal/.svn/text-base/skin.js.svn-base b/studio/static/js/wymeditor/skins/minimal/.svn/text-base/skin.js.svn-base new file mode 100644 index 0000000..af29ed4 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/.svn/text-base/skin.js.svn-base @@ -0,0 +1,30 @@ +jQuery.fn.selectify = function() { + return this.each(function() { + jQuery(this).hover( + function() { + jQuery("h2", this).css("background-position", "0px -18px"); + jQuery("ul", this).fadeIn("fast"); + }, + function() { + jQuery("h2", this).css("background-position", ""); + jQuery("ul", this).fadeOut("fast"); + } + ); + }); +}; + +WYMeditor.SKINS['minimal'] = { + //placeholder for the skin JS, if needed + + //init the skin + //wym is the WYMeditor.editor instance + init: function(wym) { + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.toolsSelector + ', ' + wym._options.containersSelector + ', ' + wym._options.classesSelector) + .addClass("wym_dropdown") + .selectify(); + + + } +}; diff --git a/studio/static/js/wymeditor/skins/minimal/images/.svn/entries b/studio/static/js/wymeditor/skins/minimal/images/.svn/entries new file mode 100644 index 0000000..ff30362 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/skins/minimal/images +svn://svn.wymeditor.org/wymeditor + + + +2008-06-02T20:02:11.870601Z +505 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +icons.silver.gif +file + + + + +2011-07-13T16:45:40.000000Z +3d55143203f242061d02ed4387e3c498 +2008-06-02T20:02:11.870601Z +505 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +15382 + +bg.header.gif +file + + + + +2011-07-13T16:45:40.000000Z +4871b677b0af34f02d3a51046dd51f20 +2008-06-02T20:02:11.870601Z +505 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +781 + +bg.wymeditor.png +file + + + + +2011-07-13T16:45:40.000000Z +dae577218f4bdd6f59197e3d8c8c9ea6 +2008-06-02T20:02:11.870601Z +505 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +498 + +bg.selector.silver.gif +file + + + + +2011-07-13T16:45:40.000000Z +1101554f412121db5ad6157f366515e3 +2008-06-02T20:02:11.870601Z +505 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +1621 + diff --git a/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/bg.header.gif.svn-base b/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/bg.header.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/bg.header.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/bg.selector.silver.gif.svn-base b/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/bg.selector.silver.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/bg.selector.silver.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/bg.wymeditor.png.svn-base b/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/bg.wymeditor.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/bg.wymeditor.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/icons.silver.gif.svn-base b/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/icons.silver.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/.svn/prop-base/icons.silver.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/bg.header.gif.svn-base b/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/bg.header.gif.svn-base Binary files differnew file mode 100644 index 0000000..b2d2907 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/bg.header.gif.svn-base diff --git a/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/bg.selector.silver.gif.svn-base b/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/bg.selector.silver.gif.svn-base Binary files differnew file mode 100644 index 0000000..e65976b --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/bg.selector.silver.gif.svn-base diff --git a/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/bg.wymeditor.png.svn-base b/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/bg.wymeditor.png.svn-base Binary files differnew file mode 100644 index 0000000..1e84813 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/bg.wymeditor.png.svn-base diff --git a/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/icons.silver.gif.svn-base b/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/icons.silver.gif.svn-base Binary files differnew file mode 100644 index 0000000..8c6a4fb --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/.svn/text-base/icons.silver.gif.svn-base diff --git a/studio/static/js/wymeditor/skins/minimal/images/bg.header.gif b/studio/static/js/wymeditor/skins/minimal/images/bg.header.gif Binary files differnew file mode 100644 index 0000000..b2d2907 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/bg.header.gif diff --git a/studio/static/js/wymeditor/skins/minimal/images/bg.selector.silver.gif b/studio/static/js/wymeditor/skins/minimal/images/bg.selector.silver.gif Binary files differnew file mode 100644 index 0000000..e65976b --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/bg.selector.silver.gif diff --git a/studio/static/js/wymeditor/skins/minimal/images/bg.wymeditor.png b/studio/static/js/wymeditor/skins/minimal/images/bg.wymeditor.png Binary files differnew file mode 100644 index 0000000..1e84813 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/bg.wymeditor.png diff --git a/studio/static/js/wymeditor/skins/minimal/images/icons.silver.gif b/studio/static/js/wymeditor/skins/minimal/images/icons.silver.gif Binary files differnew file mode 100644 index 0000000..8c6a4fb --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/images/icons.silver.gif diff --git a/studio/static/js/wymeditor/skins/minimal/skin.css b/studio/static/js/wymeditor/skins/minimal/skin.css new file mode 100644 index 0000000..cea8d84 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/skin.css @@ -0,0 +1,131 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * skin.css + * main stylesheet for the minimal WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne + * Scott Lewis (see Silver skin) +*/ + +/* Set iframe */ +.wym_skin_minimal div.wym_iframe iframe { + width: 90%; + height: 200px; +} + +/* Hide h2 by default */ +.wym_skin_minimal h2 { + display: none; +} + +/* Show specific h2 */ +.wym_skin_minimal div.wym_tools h2, +.wym_skin_minimal div.wym_containers h2, +.wym_skin_minimal div.wym_classes h2 { + display: block; +} + +.wym_skin_minimal div.wym_section ul { + margin: 0; +} + +.wym_skin_minimal div.wym_section ul li { + float: left; + list-style-type: none; + margin-right: 5px; +} + +.wym_skin_minimal div.wym_area_top, +.wym_skin_minimal div.wym_area_right, +.wym_skin_minimal div.wym_containers, +.wym_skin_minimal div.wym_classes { + float: left; +} + +.wym_skin_minimal div.wym_area_main { + clear: both; +} + +.wym_skin_minimal div.wym_html { + width: 90%; +} + +.wym_skin_minimal textarea.wym_html_val { + width: 100%; + height: 100px; +} + +/* DROPDOWNS (see Silver skin) */ +.wym_skin_minimal div.wym_dropdown { + cursor: pointer; + margin: 0px 4px 10px 0px; + padding: 0px; + z-index: 1001; + display: block; +} + +.wym_skin_minimal div.wym_dropdown ul { + display: none; + width: 124px; + padding: 0px; + margin: 0px; + list-style-type: none; + list-style-image: none; + z-index: 1002; + position: absolute; + border-top: 1px solid #AAA; +} + +.wym_skin_minimal div.wym_dropdown ul li { + width: 146px; + height: 20px; + padding: 0px; + margin: 0px; + border: 1px solid #777; + border-top: none; + background: #EEE; + list-style-image: none; +} + +.wym_skin_minimal div.wym_dropdown h2 { + width: 138px; + height: 16px; + color: #000; + background-image: url(images/bg.selector.silver.gif); + background-position: 0px -18px; + background-repeat: no-repeat; + border: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px; + font-weight: bold; + padding: 2px 0px 0px 10px; + margin: 0px; +} + +.wym_skin_minimal div.wym_dropdown a { + text-decoration: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px; + padding: 5px 0px 0px 10px; + display: block; + width: 136px; + height: 15px; + color: #000; + text-align: left; + margin-left: 0px; +} + +.wym_skin_minimal div.wym_dropdown a:hover { + background: #BBB; + border-bottom: none; +} diff --git a/studio/static/js/wymeditor/skins/minimal/skin.js b/studio/static/js/wymeditor/skins/minimal/skin.js new file mode 100644 index 0000000..af29ed4 --- /dev/null +++ b/studio/static/js/wymeditor/skins/minimal/skin.js @@ -0,0 +1,30 @@ +jQuery.fn.selectify = function() { + return this.each(function() { + jQuery(this).hover( + function() { + jQuery("h2", this).css("background-position", "0px -18px"); + jQuery("ul", this).fadeIn("fast"); + }, + function() { + jQuery("h2", this).css("background-position", ""); + jQuery("ul", this).fadeOut("fast"); + } + ); + }); +}; + +WYMeditor.SKINS['minimal'] = { + //placeholder for the skin JS, if needed + + //init the skin + //wym is the WYMeditor.editor instance + init: function(wym) { + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.toolsSelector + ', ' + wym._options.containersSelector + ', ' + wym._options.classesSelector) + .addClass("wym_dropdown") + .selectify(); + + + } +}; diff --git a/studio/static/js/wymeditor/skins/silver/.svn/entries b/studio/static/js/wymeditor/skins/silver/.svn/entries new file mode 100644 index 0000000..2969c6b --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/.svn/entries @@ -0,0 +1,167 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/skins/silver +svn://svn.wymeditor.org/wymeditor + + + +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +skin.js +file + + + + +2011-07-13T16:45:39.000000Z +7f55ea883250c072ce72cf60c2d77064 +2008-05-12T20:05:54.287558Z +494 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +2024 + +images +dir + +COPYING +file + + + + +2011-07-13T16:45:39.000000Z +d32239bcb673463ab874e80d47fae504 +2008-05-12T20:05:54.287558Z +494 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +35147 + +skin.css +file + + + + +2011-07-13T16:45:39.000000Z +4af1f9844350d87d34bfeeca2702ea0c +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +13023 + +README +file + + + + +2011-07-13T16:45:39.000000Z +649465d1c305caedb34adc02b8cc0ea8 +2008-05-12T20:05:54.287558Z +494 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +725 + diff --git a/studio/static/js/wymeditor/skins/silver/.svn/prop-base/COPYING.svn-base b/studio/static/js/wymeditor/skins/silver/.svn/prop-base/COPYING.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/.svn/prop-base/COPYING.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/studio/static/js/wymeditor/skins/silver/.svn/prop-base/README.svn-base b/studio/static/js/wymeditor/skins/silver/.svn/prop-base/README.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/.svn/prop-base/README.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/studio/static/js/wymeditor/skins/silver/.svn/text-base/COPYING.svn-base b/studio/static/js/wymeditor/skins/silver/.svn/text-base/COPYING.svn-base new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/.svn/text-base/COPYING.svn-base @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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 3 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, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/studio/static/js/wymeditor/skins/silver/.svn/text-base/README.svn-base b/studio/static/js/wymeditor/skins/silver/.svn/text-base/README.svn-base new file mode 100644 index 0000000..130dc46 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/.svn/text-base/README.svn-base @@ -0,0 +1,27 @@ +/** +* @version Alpha 0.1 2008-05-10 23:28:43 $ +* @package Silver skin for WYMeditor +* @copyright Copyright (C) 2008 Scott Edwin Lewis. All rights reserved. +* @license GNU/GPL, see COPYING +* Silver skin for WYMeditor is free software and is licensed under the +* GNU General Public License. See COPYING for copyright notices and details. +*/ + +Adds custom buttons and color palette to the WYMeditor XHTML Editor. + +INSTALLATION: + +1. Copy the entire /silver/ directory to /wymeditor/skins/ +2. Initialize the WYMeditor 'skin' option as below: + +<script type="text/javascript"> +jQuery(function() { + + jQuery('.wymeditor').wymeditor({ + skin: 'silver' + }); + +}); +</script> + +That's it. You're done. diff --git a/studio/static/js/wymeditor/skins/silver/.svn/text-base/skin.css.svn-base b/studio/static/js/wymeditor/skins/silver/.svn/text-base/skin.css.svn-base new file mode 100644 index 0000000..8284d81 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/.svn/text-base/skin.css.svn-base @@ -0,0 +1,297 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * screen.css + * main stylesheet for the default WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Scott Edwin Lewis +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_silver p, .wym_skin_silver h2, .wym_skin_silver h3, + .wym_skin_silver ul, .wym_skin_silver li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_silver .wym_area_left { display: none; } + .wym_skin_silver .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_silver { font-size: 62.5%; font-family: Verdana, Arial, sans-serif; } + .wym_skin_silver h2 { font-size: 110%; /* = 11px */} + .wym_skin_silver h3 { font-size: 100%; /* = 10px */} + .wym_skin_silver li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_silver { border: 1px solid gray; background: #f2f2f2; padding: 0px; margin: 0px;} + + /*auto-clear the wym_box*/ + .wym_skin_silver:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_silver { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_silver .wym_html { width: 98%;} + .wym_skin_silver .wym_html textarea { width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_silver .wym_iframe { width: 98%;} + .wym_skin_silver .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_silver .wym_area_left { width: 150px; float: left;} + .wym_skin_silver .wym_area_right { width: 150px; float: right;} + .wym_skin_silver .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_silver .wym_area_main { height: 1%;} + * html .wym_skin_silver .wym_area_top { height: 1%;} + *+html .wym_skin_silver .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_silver .wym_section { margin-bottom: 5px; } + .wym_skin_silver .wym_section h2, + .wym_skin_silver .wym_section h3 { padding: 1px 3px; margin: 0; cursor: pointer; } + .wym_skin_silver .wym_section a { padding: 5px 0px 0px 10px; display: block; text-decoration: none; color: black; } + .wym_skin_silver .wym_section a:hover { /*background-color: #DDD;*/} + /*hide section titles by default*/ + .wym_skin_silver .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_silver .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_silver .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; padding: 0px; } + * html .wym_skin_silver .wym_section ul { height: 1%;} + .wym_skin_silver .wym_section li {} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_silver .wym_panel { } + .wym_skin_silver .wym_panel h2 { display: block; font-size: 11px; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_silver .wym_dropdown h2 { display: block; font-size: 11px;} + .wym_skin_silver .wym_dropdown ul { position: absolute; background: white; padding: 0px;} + .wym_skin_silver .wym_dropdown:hover ul, + .wym_skin_silver .wym_dropdown.hover ul { cursor: pointer;} + .wym_skin_silver .wym_dropdown ul li a {/*border-bottom: 1px solid #AAA;*/} + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_silver .wym_buttons li { float:left;} + .wym_skin_silver .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px; text-decoration: none !important; border: 1px solid #666; } + .wym_skin_silver .wym_buttons a:hover { text-decoration: none !important; border: 1px solid #000;} + /*image replacements*/ + .wym_skin_silver .wym_buttons li a { background: url(images/icons.silver.gif) no-repeat; text-indent: -9999px;} + .wym_skin_silver .wym_buttons li.wym_tools_strong a { background-position: 0 -384px;} + .wym_skin_silver .wym_buttons li.wym_tools_emphasis a { background-position: 0 -24px;} + .wym_skin_silver .wym_buttons li.wym_tools_superscript a { background-position: 0 -432px;} + .wym_skin_silver .wym_buttons li.wym_tools_subscript a { background-position: 0 -456px;} + .wym_skin_silver .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_silver .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_silver .wym_buttons li.wym_tools_indent a { background-position: 0 -600px;} + .wym_skin_silver .wym_buttons li.wym_tools_outdent a { background-position: 0 -624px;} + .wym_skin_silver .wym_buttons li.wym_tools_undo a { background-position: 0 -504px;} + .wym_skin_silver .wym_buttons li.wym_tools_redo a { background-position: 0 -528px;} + .wym_skin_silver .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_silver .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_silver .wym_buttons li.wym_tools_image a { background-position: 0 -120px;} + .wym_skin_silver .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_silver .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_silver .wym_buttons li.wym_tools_html a { background-position: 0 -192px;} + .wym_skin_silver .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + .wym_skin_silver .wym_buttons li.wym_tools_gadget a { background-position: 0 -576px;} + + .wym_skin_silver .wym_buttons li.wym_tools_strong a:hover { background-position: -24px -384px;} + .wym_skin_silver .wym_buttons li.wym_tools_emphasis a:hover { background-position: -24px -24px;} + .wym_skin_silver .wym_buttons li.wym_tools_superscript a:hover { background-position: -24px -432px;} + .wym_skin_silver .wym_buttons li.wym_tools_subscript a:hover { background-position: -24px -456px;} + .wym_skin_silver .wym_buttons li.wym_tools_ordered_list a:hover { background-position: -24px -48px;} + .wym_skin_silver .wym_buttons li.wym_tools_unordered_list a:hover{ background-position: -24px -72px;} + .wym_skin_silver .wym_buttons li.wym_tools_indent a:hover { background-position: -24px -600px;} + .wym_skin_silver .wym_buttons li.wym_tools_outdent a:hover { background-position: -24px -624px;} + .wym_skin_silver .wym_buttons li.wym_tools_undo a:hover { background-position: -24px -504px;} + .wym_skin_silver .wym_buttons li.wym_tools_redo a:hover { background-position: -24px -528px;} + .wym_skin_silver .wym_buttons li.wym_tools_link a:hover { background-position: -24px -96px;} + .wym_skin_silver .wym_buttons li.wym_tools_unlink a:hover { background-position: -24px -168px;} + .wym_skin_silver .wym_buttons li.wym_tools_image a:hover { background-position: -24px -120px;} + .wym_skin_silver .wym_buttons li.wym_tools_table a:hover { background-position: -24px -144px;} + .wym_skin_silver .wym_buttons li.wym_tools_paste a:hover { background-position: -24px -552px;} + .wym_skin_silver .wym_buttons li.wym_tools_html a:hover { background-position: -24px -192px;} + .wym_skin_silver .wym_buttons li.wym_tools_preview a:hover { background-position: -24px -408px;} + .wym_skin_silver .wym_buttons li.wym_tools_gadget a:hover { background-position: -24px -576px;} + +/*DECORATION*/ + .wym_skin_silver .wym_section h2 { background: #ddd; border: none;} + .wym_skin_silver .wym_section h2 span { color: gray;} + .wym_skin_silver .wym_panel { padding: 0; border: solid gray; border-width: 0px;} + .wym_skin_silver .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_silver .wym_dropdown { padding: 0; border: none; } + .wym_skin_silver .wym_dropdown ul { border: none; margin-left: -1px; padding: 0px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link + { + text-indent: -9999px; + float: right; + display: block; + width: 50px; + height: 15px; + background: url(../wymeditor_icon.png); + background-position: 1px 1px; + background-repeat: no-repeat; + overflow: hidden; + text-decoration: none; + padding: 1px !important; + border: 1px solid #333 !important; + background-color: #FFF !important; + } + +.wym_box +{ + padding: 0px !important; + margin: 0px; +} +.wym_inner +{ + border-left: 1px solid #FFF; + border-top: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; + padding: 5px; + background-color: #B8C1C4; + height: auto; +} + +.clear {clear: both;} + +div.wym_dropdown +{ + cursor: pointer; + width: 138px !important; + margin: 0px 4px 10px 0px !important; + padding: 0px; + z-index: 1001; + display: block; + border: 1px solid red; +} + +div.wym_dropdown ul +{ + display: none; + width: 124px; + padding: 0px !important; + margin: 0px !important; + list-style-type: none; + list-style-image: none; + z-index: 1002; + position: absolute; + border-top: 1px solid #AAA; +} + +div.wym_dropdown ul li +{ + width: 146px; + height: 20px; + padding: 0px !important; + margin: 0px; + border: 1px solid #777; + border-top: none; + background: #DDD; + list-style-image: none; +} + +div.wym_dropdown h2 +{ + width: 138px; + height: 16px; + color: #000 !important; + background-image: url(images/bg.selector.silver.gif) !important; + background-position: 0px -18px; + background-repeat: no-repeat; + border: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px !important; + font-weight: bold !important; + padding: 2px 0px 0px 10px !important; + margin: 0px !important; +} + +.wym_skin_silver .wym_panel h2 +{ + width: 138px; + height: 16px; + color: #000 !important; + background-image: url(images/bg.header.gif) !important; + background-position: 0px 0px; + background-repeat: no-repeat; + border: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px !important; + font-weight: bold !important; + padding: 2px 0px 0px 10px !important; + margin: 0px !important; +} + +.wym_skin_silver .wym_panel ul +{ + margin-top: 0px !important; +} + +.wym_skin_silver .wym_panel ul li +{ + width: 146px; + height: 20px; + padding: 0px !important; + margin: 0px; + border: 1px solid #777; + border-top: none; + background: #DDD; + list-style-image: none; +} + +.wym_skin_silver .wym_panel a, +div.wym_dropdown a +{ + text-decoration: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px; + padding: 5px 0px 0px 10px !important; + display: block; + width: 136px; + height: 15px; + color: #000; + text-align: left !important; + margin-left: 0px !important; +} + +div.wym_dropdown a:hover, +.wym_skin_silver .wym_panel a:hover +{ + background: #BBB; + border-bottom: none !important; +} diff --git a/studio/static/js/wymeditor/skins/silver/.svn/text-base/skin.js.svn-base b/studio/static/js/wymeditor/skins/silver/.svn/text-base/skin.js.svn-base new file mode 100644 index 0000000..948ed91 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/.svn/text-base/skin.js.svn-base @@ -0,0 +1,61 @@ +/* This file is part of the Silver skin for WYMeditor by Scott Edwin Lewis */ + +jQuery.fn.selectify = function() { + return this.each(function() { + jQuery(this).hover( + function() { + jQuery("h2", this).css("background-position", "0px -18px"); + jQuery("ul", this).fadeIn("fast"); + }, + function() { + jQuery("h2", this).css("background-position", ""); + jQuery("ul", this).fadeOut("fast"); + } + ); + }); +}; + +WYMeditor.SKINS['silver'] = { + + init: function(wym) { + + //add some elements to improve the rendering + jQuery(wym._box) + .append('<div class="clear"></div>') + .wrapInner('<div class="wym_inner"></div>'); + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.containersSelector) + .addClass("wym_dropdown") + .selectify(); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "155px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/studio/static/js/wymeditor/skins/silver/COPYING b/studio/static/js/wymeditor/skins/silver/COPYING new file mode 100755 index 0000000..94a9ed0 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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 3 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, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/studio/static/js/wymeditor/skins/silver/README b/studio/static/js/wymeditor/skins/silver/README new file mode 100755 index 0000000..130dc46 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/README @@ -0,0 +1,27 @@ +/** +* @version Alpha 0.1 2008-05-10 23:28:43 $ +* @package Silver skin for WYMeditor +* @copyright Copyright (C) 2008 Scott Edwin Lewis. All rights reserved. +* @license GNU/GPL, see COPYING +* Silver skin for WYMeditor is free software and is licensed under the +* GNU General Public License. See COPYING for copyright notices and details. +*/ + +Adds custom buttons and color palette to the WYMeditor XHTML Editor. + +INSTALLATION: + +1. Copy the entire /silver/ directory to /wymeditor/skins/ +2. Initialize the WYMeditor 'skin' option as below: + +<script type="text/javascript"> +jQuery(function() { + + jQuery('.wymeditor').wymeditor({ + skin: 'silver' + }); + +}); +</script> + +That's it. You're done. diff --git a/studio/static/js/wymeditor/skins/silver/images/.svn/entries b/studio/static/js/wymeditor/skins/silver/images/.svn/entries new file mode 100644 index 0000000..d70fd13 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/skins/silver/images +svn://svn.wymeditor.org/wymeditor + + + +2008-05-12T20:05:54.287558Z +494 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +icons.silver.gif +file + + + + +2011-07-13T16:45:39.000000Z +3d55143203f242061d02ed4387e3c498 +2008-05-12T20:05:54.287558Z +494 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +15382 + +bg.header.gif +file + + + + +2011-07-13T16:45:39.000000Z +4871b677b0af34f02d3a51046dd51f20 +2008-05-12T20:05:54.287558Z +494 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +781 + +bg.wymeditor.png +file + + + + +2011-07-13T16:45:39.000000Z +dae577218f4bdd6f59197e3d8c8c9ea6 +2008-05-12T20:05:54.287558Z +494 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +498 + +bg.selector.silver.gif +file + + + + +2011-07-13T16:45:39.000000Z +1101554f412121db5ad6157f366515e3 +2008-05-12T20:05:54.287558Z +494 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +1621 + diff --git a/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/bg.header.gif.svn-base b/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/bg.header.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/bg.header.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/bg.selector.silver.gif.svn-base b/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/bg.selector.silver.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/bg.selector.silver.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/bg.wymeditor.png.svn-base b/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/bg.wymeditor.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/bg.wymeditor.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/icons.silver.gif.svn-base b/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/icons.silver.gif.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/.svn/prop-base/icons.silver.gif.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/bg.header.gif.svn-base b/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/bg.header.gif.svn-base Binary files differnew file mode 100644 index 0000000..b2d2907 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/bg.header.gif.svn-base diff --git a/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/bg.selector.silver.gif.svn-base b/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/bg.selector.silver.gif.svn-base Binary files differnew file mode 100644 index 0000000..e65976b --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/bg.selector.silver.gif.svn-base diff --git a/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/bg.wymeditor.png.svn-base b/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/bg.wymeditor.png.svn-base Binary files differnew file mode 100644 index 0000000..1e84813 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/bg.wymeditor.png.svn-base diff --git a/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/icons.silver.gif.svn-base b/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/icons.silver.gif.svn-base Binary files differnew file mode 100644 index 0000000..8c6a4fb --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/.svn/text-base/icons.silver.gif.svn-base diff --git a/studio/static/js/wymeditor/skins/silver/images/bg.header.gif b/studio/static/js/wymeditor/skins/silver/images/bg.header.gif Binary files differnew file mode 100644 index 0000000..b2d2907 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/bg.header.gif diff --git a/studio/static/js/wymeditor/skins/silver/images/bg.selector.silver.gif b/studio/static/js/wymeditor/skins/silver/images/bg.selector.silver.gif Binary files differnew file mode 100644 index 0000000..e65976b --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/bg.selector.silver.gif diff --git a/studio/static/js/wymeditor/skins/silver/images/bg.wymeditor.png b/studio/static/js/wymeditor/skins/silver/images/bg.wymeditor.png Binary files differnew file mode 100644 index 0000000..1e84813 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/bg.wymeditor.png diff --git a/studio/static/js/wymeditor/skins/silver/images/icons.silver.gif b/studio/static/js/wymeditor/skins/silver/images/icons.silver.gif Binary files differnew file mode 100644 index 0000000..8c6a4fb --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/images/icons.silver.gif diff --git a/studio/static/js/wymeditor/skins/silver/skin.css b/studio/static/js/wymeditor/skins/silver/skin.css new file mode 100644 index 0000000..56e3248 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/skin.css @@ -0,0 +1,297 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * screen.css + * main stylesheet for the default WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Scott Edwin Lewis +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_silver p, .wym_skin_silver h2, .wym_skin_silver h3, + .wym_skin_silver ul, .wym_skin_silver li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_silver .wym_area_left { display: none; } + .wym_skin_silver .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_silver { font-size: 62.5%; font-family: Verdana, Arial, sans-serif; } + .wym_skin_silver h2 { font-size: 110%; /* = 11px */} + .wym_skin_silver h3 { font-size: 100%; /* = 10px */} + .wym_skin_silver li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_silver { border: 1px solid gray; background: #E8E8E8; padding: 0px; margin: 0px;} + + /*auto-clear the wym_box*/ + .wym_skin_silver:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_silver { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_silver .wym_html { width: 98%;} + .wym_skin_silver .wym_html textarea { width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_silver .wym_iframe { width: 98%;} + .wym_skin_silver .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_silver .wym_area_left { width: 150px; float: left;} + .wym_skin_silver .wym_area_right { width: 150px; float: right;} + .wym_skin_silver .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_silver .wym_area_main { height: 1%;} + * html .wym_skin_silver .wym_area_top { height: 1%;} + *+html .wym_skin_silver .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_silver .wym_section { margin-bottom: 5px; } + .wym_skin_silver .wym_section h2, + .wym_skin_silver .wym_section h3 { padding: 1px 3px; margin: 0; cursor: pointer; } + .wym_skin_silver .wym_section a { padding: 5px 0px 0px 10px; display: block; text-decoration: none; color: black; } + .wym_skin_silver .wym_section a:hover { /*background-color: #DDD;*/} + /*hide section titles by default*/ + .wym_skin_silver .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_silver .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_silver .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; padding: 0px; } + * html .wym_skin_silver .wym_section ul { height: 1%;} + .wym_skin_silver .wym_section li {} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_silver .wym_panel { } + .wym_skin_silver .wym_panel h2 { display: block; font-size: 11px; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_silver .wym_dropdown h2 { display: block; font-size: 11px;} + .wym_skin_silver .wym_dropdown ul { position: absolute; background: white; padding: 0px;} + .wym_skin_silver .wym_dropdown:hover ul, + .wym_skin_silver .wym_dropdown.hover ul { cursor: pointer;} + .wym_skin_silver .wym_dropdown ul li a {/*border-bottom: 1px solid #AAA;*/} + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_silver .wym_buttons li { float:left;} + .wym_skin_silver .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px; text-decoration: none !important; border: 1px solid #666; } + .wym_skin_silver .wym_buttons a:hover { text-decoration: none !important; border: 1px solid #000;} + /*image replacements*/ + .wym_skin_silver .wym_buttons li a { background: url(images/icons.silver.gif) no-repeat; text-indent: -9999px;} + .wym_skin_silver .wym_buttons li.wym_tools_strong a { background-position: 0 -384px;} + .wym_skin_silver .wym_buttons li.wym_tools_emphasis a { background-position: 0 -24px;} + .wym_skin_silver .wym_buttons li.wym_tools_superscript a { background-position: 0 -432px;} + .wym_skin_silver .wym_buttons li.wym_tools_subscript a { background-position: 0 -456px;} + .wym_skin_silver .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_silver .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_silver .wym_buttons li.wym_tools_indent a { background-position: 0 -600px;} + .wym_skin_silver .wym_buttons li.wym_tools_outdent a { background-position: 0 -624px;} + .wym_skin_silver .wym_buttons li.wym_tools_undo a { background-position: 0 -504px;} + .wym_skin_silver .wym_buttons li.wym_tools_redo a { background-position: 0 -528px;} + .wym_skin_silver .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_silver .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_silver .wym_buttons li.wym_tools_image a { background-position: 0 -120px;} + .wym_skin_silver .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_silver .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_silver .wym_buttons li.wym_tools_html a { background-position: 0 -192px;} + .wym_skin_silver .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + .wym_skin_silver .wym_buttons li.wym_tools_gadget a { background-position: 0 -576px;} + + .wym_skin_silver .wym_buttons li.wym_tools_strong a:hover { background-position: -24px -384px;} + .wym_skin_silver .wym_buttons li.wym_tools_emphasis a:hover { background-position: -24px -24px;} + .wym_skin_silver .wym_buttons li.wym_tools_superscript a:hover { background-position: -24px -432px;} + .wym_skin_silver .wym_buttons li.wym_tools_subscript a:hover { background-position: -24px -456px;} + .wym_skin_silver .wym_buttons li.wym_tools_ordered_list a:hover { background-position: -24px -48px;} + .wym_skin_silver .wym_buttons li.wym_tools_unordered_list a:hover{ background-position: -24px -72px;} + .wym_skin_silver .wym_buttons li.wym_tools_indent a:hover { background-position: -24px -600px;} + .wym_skin_silver .wym_buttons li.wym_tools_outdent a:hover { background-position: -24px -624px;} + .wym_skin_silver .wym_buttons li.wym_tools_undo a:hover { background-position: -24px -504px;} + .wym_skin_silver .wym_buttons li.wym_tools_redo a:hover { background-position: -24px -528px;} + .wym_skin_silver .wym_buttons li.wym_tools_link a:hover { background-position: -24px -96px;} + .wym_skin_silver .wym_buttons li.wym_tools_unlink a:hover { background-position: -24px -168px;} + .wym_skin_silver .wym_buttons li.wym_tools_image a:hover { background-position: -24px -120px;} + .wym_skin_silver .wym_buttons li.wym_tools_table a:hover { background-position: -24px -144px;} + .wym_skin_silver .wym_buttons li.wym_tools_paste a:hover { background-position: -24px -552px;} + .wym_skin_silver .wym_buttons li.wym_tools_html a:hover { background-position: -24px -192px;} + .wym_skin_silver .wym_buttons li.wym_tools_preview a:hover { background-position: -24px -408px;} + .wym_skin_silver .wym_buttons li.wym_tools_gadget a:hover { background-position: -24px -576px;} + +/*DECORATION*/ + .wym_skin_silver .wym_section h2 { background: #ddd; border: none;} + .wym_skin_silver .wym_section h2 span { color: gray;} + .wym_skin_silver .wym_panel { padding: 0; border: solid gray; border-width: 0px;} + .wym_skin_silver .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_silver .wym_dropdown { padding: 0; border: none; } + .wym_skin_silver .wym_dropdown ul { border: none; margin-left: -1px; padding: 0px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link + { + text-indent: -9999px; + float: right; + display: block; + width: 50px; + height: 15px; + background: url(../wymeditor_icon.png); + background-position: 1px 1px; + background-repeat: no-repeat; + overflow: hidden; + text-decoration: none; + padding: 1px !important; + border: 1px solid #333 !important; + background-color: #FFF !important; + } + +.wym_box +{ + padding: 0px !important; + margin: 0px; +} +.wym_inner +{ + border-left: 1px solid #FFF; + border-top: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; + padding: 5px; + background-color: #E8E8E8; + height: auto; +} + +.clear {clear: both;} + +div.wym_dropdown +{ + cursor: pointer; + width: 138px !important; + margin: 0px 4px 10px 0px !important; + padding: 0px; + z-index: 1001; + display: block; + border: 1px solid red; +} + +div.wym_dropdown ul +{ + display: none; + width: 124px; + padding: 0px !important; + margin: 0px !important; + list-style-type: none; + list-style-image: none; + z-index: 1002; + position: absolute; + border-top: 1px solid #AAA; +} + +div.wym_dropdown ul li +{ + width: 146px; + height: 20px; + padding: 0px !important; + margin: 0px; + border: 1px solid #777; + border-top: none; + background: #DDD; + list-style-image: none; +} + +div.wym_dropdown h2 +{ + width: 138px; + height: 16px; + color: #000 !important; + background-image: url(images/bg.selector.silver.gif) !important; + background-position: 0px -18px; + background-repeat: no-repeat; + border: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px !important; + font-weight: bold !important; + padding: 2px 0px 0px 10px !important; + margin: 0px !important; +} + +.wym_skin_silver .wym_panel h2 +{ + width: 138px; + height: 16px; + color: #000 !important; + background-image: url(images/bg.header.gif) !important; + background-position: 0px 0px; + background-repeat: no-repeat; + border: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px !important; + font-weight: bold !important; + padding: 2px 0px 0px 10px !important; + margin: 0px !important; +} + +.wym_skin_silver .wym_panel ul +{ + margin-top: 0px !important; +} + +.wym_skin_silver .wym_panel ul li +{ + width: 146px; + height: 20px; + padding: 0px !important; + margin: 0px; + border: 1px solid #777; + border-top: none; + background: #DDD; + list-style-image: none; +} + +.wym_skin_silver .wym_panel a, +div.wym_dropdown a +{ + text-decoration: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px; + padding: 5px 0px 0px 10px !important; + display: block; + width: 136px; + height: 15px; + color: #000; + text-align: left !important; + margin-left: 0px !important; +} + +div.wym_dropdown a:hover, +.wym_skin_silver .wym_panel a:hover +{ + background: #BBB; + border-bottom: none !important; +} diff --git a/studio/static/js/wymeditor/skins/silver/skin.js b/studio/static/js/wymeditor/skins/silver/skin.js new file mode 100644 index 0000000..948ed91 --- /dev/null +++ b/studio/static/js/wymeditor/skins/silver/skin.js @@ -0,0 +1,61 @@ +/* This file is part of the Silver skin for WYMeditor by Scott Edwin Lewis */ + +jQuery.fn.selectify = function() { + return this.each(function() { + jQuery(this).hover( + function() { + jQuery("h2", this).css("background-position", "0px -18px"); + jQuery("ul", this).fadeIn("fast"); + }, + function() { + jQuery("h2", this).css("background-position", ""); + jQuery("ul", this).fadeOut("fast"); + } + ); + }); +}; + +WYMeditor.SKINS['silver'] = { + + init: function(wym) { + + //add some elements to improve the rendering + jQuery(wym._box) + .append('<div class="clear"></div>') + .wrapInner('<div class="wym_inner"></div>'); + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.containersSelector) + .addClass("wym_dropdown") + .selectify(); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "155px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/studio/static/js/wymeditor/skins/twopanels/.svn/entries b/studio/static/js/wymeditor/skins/twopanels/.svn/entries new file mode 100644 index 0000000..a477f85 --- /dev/null +++ b/studio/static/js/wymeditor/skins/twopanels/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +677 +svn://svn.wymeditor.org/wymeditor/trunk/src/wymeditor/skins/twopanels +svn://svn.wymeditor.org/wymeditor + + + +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + +89e89e35-0a13-0410-8f61-920bba073fa9 + +skin.js +file + + + + +2011-07-13T16:45:40.000000Z +d47d82f6cda558d258263f3949d815f1 +2008-05-30T19:59:08.978756Z +502 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +1380 + +skin.css +file + + + + +2011-07-13T16:45:40.000000Z +5da884f153705d38e473d5cf4bdc7deb +2009-05-27T19:20:55.910061Z +632 +jf.hovinne + + + + + + + + + + + + + + + + + + + + + +8045 + +icons.png +file + + + + +2011-07-13T16:45:40.000000Z +45a781288dc799f892fa517355ff80b6 +2008-05-30T19:59:08.978756Z +502 +jf.hovinne +has-props + + + + + + + + + + + + + + + + + + + + +3651 + diff --git a/studio/static/js/wymeditor/skins/twopanels/.svn/prop-base/icons.png.svn-base b/studio/static/js/wymeditor/skins/twopanels/.svn/prop-base/icons.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/studio/static/js/wymeditor/skins/twopanels/.svn/prop-base/icons.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/studio/static/js/wymeditor/skins/twopanels/.svn/text-base/icons.png.svn-base b/studio/static/js/wymeditor/skins/twopanels/.svn/text-base/icons.png.svn-base Binary files differnew file mode 100644 index 0000000..c6eb463 --- /dev/null +++ b/studio/static/js/wymeditor/skins/twopanels/.svn/text-base/icons.png.svn-base diff --git a/studio/static/js/wymeditor/skins/twopanels/.svn/text-base/skin.css.svn-base b/studio/static/js/wymeditor/skins/twopanels/.svn/text-base/skin.css.svn-base new file mode 100644 index 0000000..7e6b8fd --- /dev/null +++ b/studio/static/js/wymeditor/skins/twopanels/.svn/text-base/skin.css.svn-base @@ -0,0 +1,134 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * screen.css + * main stylesheet for the WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Jean-Francois Hovinne +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_twopanels p, .wym_skin_twopanels h2, .wym_skin_twopanels h3, + .wym_skin_twopanels ul, .wym_skin_twopanels li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_twopanels .wym_area_left { display: block; } + .wym_skin_twopanels .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_twopanels { font-size: 62.5%; font-family: Verdana, Arial, sans-serif; } + .wym_skin_twopanels h2 { font-size: 110%; /* = 11px */} + .wym_skin_twopanels h3 { font-size: 100%; /* = 10px */} + .wym_skin_twopanels li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_twopanels { border: 1px solid gray; background: #f2f2f2; padding: 5px} + + /*auto-clear the wym_box*/ + .wym_skin_twopanels:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_twopanels { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_twopanels .wym_html { width: 98%;} + .wym_skin_twopanels .wym_html textarea { width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_twopanels .wym_iframe { width: 98%;} + .wym_skin_twopanels .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_twopanels .wym_area_left { width: 100px; float: left;} + .wym_skin_twopanels .wym_area_right { width: 150px; float: right;} + .wym_skin_twopanels .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_twopanels .wym_area_main { height: 1%;} + * html .wym_skin_twopanels .wym_area_top { height: 1%;} + *+html .wym_skin_twopanels .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_twopanels .wym_section { margin-bottom: 5px; } + .wym_skin_twopanels .wym_section h2, + .wym_skin_twopanels .wym_section h3 { padding: 1px 3px; margin: 0; } + .wym_skin_twopanels .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_twopanels .wym_section a:hover { background-color: yellow; } + /*hide section titles by default*/ + .wym_skin_twopanels .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_twopanels .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_twopanels .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_twopanels .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_twopanels .wym_panel { } + .wym_skin_twopanels .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_twopanels .wym_dropdown h2 { display: block; } + .wym_skin_twopanels .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_twopanels .wym_dropdown:hover ul, + .wym_skin_twopanels .wym_dropdown.hover ul { display: block; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_twopanels .wym_buttons li { float:left;} + .wym_skin_twopanels .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_twopanels .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_twopanels .wym_section h2 { background: #ddd; border: solid gray; border-width: 0 0 1px;} + .wym_skin_twopanels .wym_section h2 span { color: gray;} + .wym_skin_twopanels .wym_panel { padding: 0; border: solid gray; border-width: 1px; background: white;} + .wym_skin_twopanels .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_twopanels .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_twopanels .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/studio/static/js/wymeditor/skins/twopanels/.svn/text-base/skin.js.svn-base b/studio/static/js/wymeditor/skins/twopanels/.svn/text-base/skin.js.svn-base new file mode 100644 index 0000000..e82efc5 --- /dev/null +++ b/studio/static/js/wymeditor/skins/twopanels/.svn/text-base/skin.js.svn-base @@ -0,0 +1,39 @@ +WYMeditor.SKINS['twopanels'] = { + + init: function(wym) { + + //move the containers panel to the left area + jQuery(wym._box).find(wym._options.containersSelector) + .appendTo("div.wym_area_left"); + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector + ', ' + + wym._options.containersSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "115px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/studio/static/js/wymeditor/skins/twopanels/icons.png b/studio/static/js/wymeditor/skins/twopanels/icons.png Binary files differnew file mode 100644 index 0000000..c6eb463 --- /dev/null +++ b/studio/static/js/wymeditor/skins/twopanels/icons.png diff --git a/studio/static/js/wymeditor/skins/twopanels/skin.css b/studio/static/js/wymeditor/skins/twopanels/skin.css new file mode 100644 index 0000000..7e6b8fd --- /dev/null +++ b/studio/static/js/wymeditor/skins/twopanels/skin.css @@ -0,0 +1,134 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * screen.css + * main stylesheet for the WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Jean-Francois Hovinne +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_twopanels p, .wym_skin_twopanels h2, .wym_skin_twopanels h3, + .wym_skin_twopanels ul, .wym_skin_twopanels li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_twopanels .wym_area_left { display: block; } + .wym_skin_twopanels .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_twopanels { font-size: 62.5%; font-family: Verdana, Arial, sans-serif; } + .wym_skin_twopanels h2 { font-size: 110%; /* = 11px */} + .wym_skin_twopanels h3 { font-size: 100%; /* = 10px */} + .wym_skin_twopanels li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_twopanels { border: 1px solid gray; background: #f2f2f2; padding: 5px} + + /*auto-clear the wym_box*/ + .wym_skin_twopanels:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_twopanels { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_twopanels .wym_html { width: 98%;} + .wym_skin_twopanels .wym_html textarea { width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_twopanels .wym_iframe { width: 98%;} + .wym_skin_twopanels .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_twopanels .wym_area_left { width: 100px; float: left;} + .wym_skin_twopanels .wym_area_right { width: 150px; float: right;} + .wym_skin_twopanels .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_twopanels .wym_area_main { height: 1%;} + * html .wym_skin_twopanels .wym_area_top { height: 1%;} + *+html .wym_skin_twopanels .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_twopanels .wym_section { margin-bottom: 5px; } + .wym_skin_twopanels .wym_section h2, + .wym_skin_twopanels .wym_section h3 { padding: 1px 3px; margin: 0; } + .wym_skin_twopanels .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_twopanels .wym_section a:hover { background-color: yellow; } + /*hide section titles by default*/ + .wym_skin_twopanels .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_twopanels .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_twopanels .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_twopanels .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_twopanels .wym_panel { } + .wym_skin_twopanels .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_twopanels .wym_dropdown h2 { display: block; } + .wym_skin_twopanels .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_twopanels .wym_dropdown:hover ul, + .wym_skin_twopanels .wym_dropdown.hover ul { display: block; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_twopanels .wym_buttons li { float:left;} + .wym_skin_twopanels .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_twopanels .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_twopanels .wym_section h2 { background: #ddd; border: solid gray; border-width: 0 0 1px;} + .wym_skin_twopanels .wym_section h2 span { color: gray;} + .wym_skin_twopanels .wym_panel { padding: 0; border: solid gray; border-width: 1px; background: white;} + .wym_skin_twopanels .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_twopanels .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_twopanels .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/studio/static/js/wymeditor/skins/twopanels/skin.js b/studio/static/js/wymeditor/skins/twopanels/skin.js new file mode 100644 index 0000000..e82efc5 --- /dev/null +++ b/studio/static/js/wymeditor/skins/twopanels/skin.js @@ -0,0 +1,39 @@ +WYMeditor.SKINS['twopanels'] = { + + init: function(wym) { + + //move the containers panel to the left area + jQuery(wym._box).find(wym._options.containersSelector) + .appendTo("div.wym_area_left"); + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector + ', ' + + wym._options.containersSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "115px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/studio/static/js/wymeditor/skins/wymeditor_icon.png b/studio/static/js/wymeditor/skins/wymeditor_icon.png Binary files differnew file mode 100644 index 0000000..d4fc155 --- /dev/null +++ b/studio/static/js/wymeditor/skins/wymeditor_icon.png |