oddb.org 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. data/.gemtest +0 -0
  2. data/Guide.txt +23 -17
  3. data/{README → INSTALL_from_Source.txt} +64 -75
  4. data/Manifest.txt +110 -4
  5. data/README.txt +4 -2
  6. data/Rakefile +5 -0
  7. data/doc/favicon.ico +0 -0
  8. data/doc/index.rbx +15 -0
  9. data/doc/resources/anthroposophy/favicon.ico +0 -0
  10. data/doc/resources/anthroposophy/logo.png +0 -0
  11. data/doc/resources/atupri/logo.gif +0 -0
  12. data/doc/resources/desitin/logo.jpg +0 -0
  13. data/doc/resources/downloads/datadesc/analysis.csv.txt +57 -0
  14. data/doc/resources/downloads/datadesc/doctors.csv.txt +43 -0
  15. data/doc/resources/downloads/datadesc/doctors.yaml.txt +52 -0
  16. data/doc/resources/downloads/datadesc/fachinfo.yaml.txt +107 -0
  17. data/doc/resources/downloads/datadesc/generics.xls.txt +42 -0
  18. data/doc/resources/downloads/datadesc/index_therapeuticus.txt +38 -0
  19. data/doc/resources/downloads/datadesc/interactions.yaml.txt +78 -0
  20. data/doc/resources/downloads/datadesc/migel.csv.txt +84 -0
  21. data/doc/resources/downloads/datadesc/narcotics.csv.txt +49 -0
  22. data/doc/resources/downloads/datadesc/narcotics.yaml.txt +40 -0
  23. data/doc/resources/downloads/datadesc/oddb.csv.txt +98 -0
  24. data/doc/resources/downloads/datadesc/oddb.yaml.txt +255 -0
  25. data/doc/resources/downloads/datadesc/oddb2.csv.txt +94 -0
  26. data/doc/resources/downloads/datadesc/oddbdat.txt +228 -0
  27. data/doc/resources/downloads/datadesc/patents.xls.txt +29 -0
  28. data/doc/resources/downloads/datadesc/patinfo.yaml.txt +79 -0
  29. data/doc/resources/downloads/datadesc/price_history.csv.txt +43 -0
  30. data/doc/resources/downloads/datadesc/price_history.yaml.txt +55 -0
  31. data/doc/resources/downloads/datadesc/s31x.txt +40 -0
  32. data/doc/resources/downloads/datadesc/swissdrug-update.xls.txt +59 -0
  33. data/doc/resources/downloads/examples/Inderal.Preisvergleich.csv +19 -0
  34. data/doc/resources/downloads/examples/analysis.csv +35 -0
  35. data/doc/resources/downloads/examples/compendium_ch.oddb.org.firefox.epub +0 -0
  36. data/doc/resources/downloads/examples/compendium_ch.oddb.org.htc.prc +0 -0
  37. data/doc/resources/downloads/examples/compendium_ch.oddb.org.kindle.mobi +0 -0
  38. data/doc/resources/downloads/examples/compendium_ch.oddb.org.stanza.epub +0 -0
  39. data/doc/resources/downloads/examples/doctors.csv +13 -0
  40. data/doc/resources/downloads/examples/doctors.yaml +238 -0
  41. data/doc/resources/downloads/examples/fachinfo.yaml +1255 -0
  42. data/doc/resources/downloads/examples/fachinfos_de.pdf +51565 -0
  43. data/doc/resources/downloads/examples/fachinfos_fr.pdf +52072 -0
  44. data/doc/resources/downloads/examples/generics.xls +0 -0
  45. data/doc/resources/downloads/examples/index_therapeuticus.tar.gz +0 -0
  46. data/doc/resources/downloads/examples/interactions.yaml +161 -0
  47. data/doc/resources/downloads/examples/migel.csv +36 -0
  48. data/doc/resources/downloads/examples/narcotics.yaml +92 -0
  49. data/doc/resources/downloads/examples/oddb.csv +1378 -0
  50. data/doc/resources/downloads/examples/oddb.yaml +14976 -0
  51. data/doc/resources/downloads/examples/oddb2.csv +1566 -0
  52. data/doc/resources/downloads/examples/oddbdat.tar.gz +0 -0
  53. data/doc/resources/downloads/examples/patents.xls +0 -0
  54. data/doc/resources/downloads/examples/patinfo.yaml +2505 -0
  55. data/doc/resources/downloads/examples/price_history.csv +99 -0
  56. data/doc/resources/downloads/examples/price_history.yaml +431 -0
  57. data/doc/resources/downloads/examples/swissdrug-update.xls +0 -0
  58. data/doc/resources/errors/appdown.html +50 -0
  59. data/doc/resources/errors/logo.png +0 -0
  60. data/doc/resources/errors/logo_de.gif +0 -0
  61. data/doc/resources/gcc/banner.gif +0 -0
  62. data/doc/resources/gcc/logo.png +0 -0
  63. data/doc/resources/gcc/logo_de.gif +0 -0
  64. data/doc/resources/gcc/logo_doc.gif +0 -0
  65. data/doc/resources/gcc/logo_fr.gif +0 -0
  66. data/doc/resources/gcc/logo_rss.png +0 -0
  67. data/doc/resources/generika/favicon.ico +0 -0
  68. data/doc/resources/generika/logo.gif +0 -0
  69. data/doc/resources/generika/logo_de.gif +0 -0
  70. data/doc/resources/generika/logo_fr.gif +0 -0
  71. data/doc/resources/homeopathy/favicon.ico +0 -0
  72. data/doc/resources/homeopathy/logo.png +0 -0
  73. data/doc/resources/icon_twitter.gif +0 -0
  74. data/doc/resources/innova/logo.gif +0 -0
  75. data/doc/resources/innova/logo_de.gif +0 -0
  76. data/doc/resources/javascript/admin.js +14 -0
  77. data/doc/resources/javascript/autofill.js +21 -0
  78. data/doc/resources/javascript/bit.ly.js +29 -0
  79. data/doc/resources/javascript/company.js +22 -0
  80. data/doc/resources/javascript/dojo/Editor.js +219 -0
  81. data/doc/resources/javascript/dojo/HtmlEditorToolbar.html +163 -0
  82. data/doc/resources/javascript/dojo/sigma.gif +0 -0
  83. data/doc/resources/javascript/widget/SymbolPalette.js +162 -0
  84. data/doc/resources/javascript/widget/Tooltip.js +85 -0
  85. data/doc/resources/javascript/widget/__package__.js +2 -0
  86. data/doc/resources/livemarks16.png +0 -0
  87. data/doc/resources/mail.gif +0 -0
  88. data/doc/resources/mobile/logo.png +0 -0
  89. data/doc/resources/paypal_donate.gif +0 -0
  90. data/doc/resources/phyto-pharma/favicon.ico +0 -0
  91. data/doc/resources/phyto-pharma/logo.png +0 -0
  92. data/doc/resources/plugins/Generika.cc.gif +0 -0
  93. data/doc/resources/plugins/Generika.cc.html +34 -0
  94. data/doc/resources/plugins/Generika.cc.src +34 -0
  95. data/doc/resources/plugins/oddb.org.gif +0 -0
  96. data/doc/resources/plugins/oddb.org.html +34 -0
  97. data/doc/resources/plugins/oddb.org.src +34 -0
  98. data/doc/resources/print.css +33 -0
  99. data/doc/resources/provita/logo_de.gif +0 -0
  100. data/doc/resources/santesuisse/logo_de.gif +0 -0
  101. data/doc/resources/schoenenberger/logo_de.gif +0 -0
  102. data/doc/resources/swissmedic/logo.png +0 -0
  103. data/doc/resources/swissmedic/logo_de.gif +0 -0
  104. data/doc/resources/swissmedic/logo_doc.gif +0 -0
  105. data/doc/resources/swissmedic/logo_fr.gif +0 -0
  106. data/doc/resources/sympany/logo.gif +0 -0
  107. data/doc/robots.txt +29 -0
  108. data/ext/export/src/generics_xls.rb +29 -5
  109. data/ext/export/src/oddbdat.rb +1 -1
  110. data/ext/export/test/test_generics_xls.rb +216 -0
  111. data/ext/export/test/test_oddbdat.rb +880 -0
  112. data/lib/oddb.org.rb +1 -1
  113. data/src/model/package.rb +3 -2
  114. data/src/plugin/analysis.rb +2 -0
  115. data/src/plugin/bsv_xml.rb +1 -1
  116. data/src/plugin/hospitals.rb +1 -0
  117. data/src/plugin/oddbdat_export.rb +12 -2
  118. data/src/plugin/text_info.rb +16 -29
  119. data/src/util/exporter.rb +21 -1
  120. data/src/util/log.rb +3 -0
  121. data/src/util/oddbapp.rb +1 -1
  122. data/src/util/oddbconfig.rb +1 -1
  123. data/src/util/updater.rb +9 -1
  124. data/test/data/html/interaction/flockhart/prepared_table.asp +820 -0
  125. data/test/data/html/interaction/flockhart/table.asp +820 -0
  126. data/test/data/html/text_info/News.html +18 -93
  127. data/test/suite.rb +78 -4
  128. data/test/test_model/package.rb +38 -0
  129. data/test/test_plugin/bsv_xml.rb +4 -2
  130. data/test/test_plugin/flockhart.rb +1 -1
  131. data/test/test_plugin/oddbdat_export.rb +79 -658
  132. data/test/test_plugin/ouwerkerk.rb +2 -2
  133. data/test/test_plugin/suite.rb +8 -6
  134. data/test/test_plugin/text_info.rb +40 -52
  135. data/test/test_plugin/{doctors.rb → zdoctor.rb} +0 -0
  136. data/test/test_util/exporter.rb +500 -0
  137. data/test/test_util/suite.rb +8 -6
  138. data/test/test_util/{log.rb → zlog.rb} +19 -0
  139. data/test/test_view/{search.rb → asearch.rb} +0 -0
  140. data/test/test_view/suite.rb +8 -6
  141. metadata +143 -14
@@ -0,0 +1,50 @@
1
+ <html>
2
+ <head>
3
+ <title>www.oddb.org - We are sorry</title>
4
+ <link href="/resources/gcc/oddb.css" rel="stylesheet" type="text/css">
5
+ <meta HTTP-EQUIV=Refresh CONTENT="60; URL=/">
6
+ </head>
7
+ <body class="appdown">
8
+ <img src="logo.png"><br><br>
9
+ <h1>Es tut uns leid</h1>
10
+ <p>Wegen eines Software-Updates ist www.oddb.org in den n&auml;chsten Minuten nicht erreichbar.<br>
11
+ Wir bitten Sie um Ihr Verst&auml;ndnis.<br>
12
+ Lesen Sie in der Zwischenzeit die <a href="http://wiki.oddb.org/wiki.php?pagename=ODDB.FragenUndAntworten">FAQ</a><br>
13
+ Lesen Sie auch unsere <a href="http://wiki.oddb.org/wiki.php?pagename=Swissmedic.Datendeklaration">Datendeklaration</a>.
14
+ </p>
15
+ <h1>Nous sommes d&eacute;sol&eacute;s</h1>
16
+ <p>&Agrave; cause d'une mise &agrave; jour du logiciel il n'est pas possible d'acc&eacute;der www.oddb.org au cours des prochaines minutes.<br>
17
+ Nous vous demandons votre compr&eacute;hension.<br>
18
+ Entre-temps lisez notres <a href="http://wiki.oddb.org/wiki.php?pagename=ODDB.QuestionsEtReponses">Questions et Reponses</a><br>
19
+ Lisez aussi notre <a href="http://wiki.oddb.org/wiki.php?pagename=Swissmedic.Datendeklaration">declaration des dates</a>.
20
+ </p>
21
+ <h1>We are sorry</h1>
22
+ <p>The application is currently down due to a software-update.<br>
23
+ Please come back in a few minutes.<br>
24
+ Read our <a href="http://wiki.oddb.org/wiki.php?pagename=ODDB.FrequentlyAskedQuestions">FAQ</a> in the mean time.<br>
25
+ Also read our <a href="http://wiki.oddb.org/wiki.php?pagename=Swissmedic.Datendeklaration">data declaration</a>.
26
+ </p>
27
+ <h1>Support ODDB.org to become even Faster and Better! Donate now via PayPal!</h1>
28
+ <FORM ACCEPT-CHARSET="ISO-8859-1" NAME="stdform" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded" ACTION="https://www.paypal.com/cgi-bin/webscr">
29
+ <TABLE cellspacing="0">
30
+ <TR>
31
+ <TD>
32
+ <INPUT name="submit" class="donate" type="image" src="/resources/paypal_donate.gif" border="0" value="" alt="Make payments with PayPal - it's fast, free and secure!">
33
+ </TD>
34
+
35
+ </TR>
36
+ </TABLE>
37
+ <SPAN>
38
+ <INPUT NAME="cmd" TYPE="hidden" VALUE="_xclick">
39
+ <INPUT NAME="business" TYPE="hidden" VALUE="zdavatz@ywesee.com">
40
+ <INPUT NAME="item_name" TYPE="hidden" VALUE="ODDB.org">
41
+ <INPUT NAME="image_url" TYPE="hidden" VALUE="https://www.generika.cc/images/oddb_paypal.jpg">
42
+ <INPUT NAME="no_note" TYPE="hidden" VALUE="1">
43
+ <INPUT NAME="return" TYPE="hidden" VALUE="http://www.oddb.org/de/gcc/paypal_thanks/">
44
+ <INPUT NAME="cancel_return" TYPE="hidden" VALUE="http://www.oddb.org/de/gcc">
45
+ <INPUT NAME="currency_code" TYPE="hidden" VALUE="EUR">
46
+ <INPUT NAME="tax" TYPE="hidden" VALUE="0">
47
+ </SPAN>
48
+ </FORM>
49
+ </body>
50
+ </html>
@@ -0,0 +1,14 @@
1
+ function replace_element(id, url) {
2
+ document.body.style.cursor = 'wait';
3
+ dojo.xhrGet({
4
+ url: url,
5
+ load: function(data) {
6
+ var container;
7
+ if(container = document.getElementById(id))
8
+ {
9
+ container.parentNode.innerHTML = data;
10
+ }
11
+ document.body.style.cursor = 'auto';
12
+ }
13
+ });
14
+ }
@@ -0,0 +1,21 @@
1
+ function autofill(form, key, url)
2
+ {
3
+ document.body.style.cursor = 'wait';
4
+ form.set_pass_2.disabled = false;
5
+ var val = form[key].value;
6
+ dojo.xhrGet({
7
+ url: url + val,
8
+ load: function(data) {
9
+ var retkey;
10
+ var retval;
11
+ for(retkey in data) {
12
+ if(retval = data[retkey])
13
+ form[retkey].value = retval;
14
+ }
15
+ if(data['email'])
16
+ form.set_pass_2.disabled = true;
17
+ document.body.style.cursor = 'auto';
18
+ },
19
+ handleAs: "json"
20
+ });
21
+ }
@@ -0,0 +1,29 @@
1
+ var bitly_callback;
2
+ function bitly_for_twitter(url, tweet)
3
+ {
4
+ document.body.style.cursor = 'wait';
5
+ var bitly = "http://api.bit.ly/shorten?callback=bitly_callback&version=2.0.1&longUrl=";
6
+ bitly += url + "&login=oddb&apiKey=R_0e2f8d420324c59276c450b5253b4e3f";
7
+ bitly_callback = function(data) {
8
+ var result;
9
+ var redirect;
10
+ document.body.style.cursor = 'auto';
11
+ if(data.errorCode == '0') {
12
+ result = data.results[unescape(url)];
13
+ redirect = result.shortUrl;
14
+ document.location.href = tweet + redirect;
15
+ } else {
16
+ alert(data.errorMessage);
17
+ }
18
+ };
19
+ dojo.io.script.get({
20
+ url: bitly,
21
+ checkString: 'bitly_callback',
22
+ error: function(error, ioargs) {
23
+ console.debug(error);
24
+ console.debug(ioargs);
25
+ document.location.href = tweet + url;
26
+ }
27
+ });
28
+ return false;
29
+ }
@@ -0,0 +1,22 @@
1
+ function sbsm_encode(value)
2
+ {
3
+ value = encodeURIComponent(value);
4
+ value = encodeURIComponent(value);
5
+ return value;
6
+ }
7
+
8
+ function update_company(url)
9
+ {
10
+ document.body.style.cursor = 'wait';
11
+ dojo.xhrGet({
12
+ url: url,
13
+ load: function(data) {
14
+ var content;
15
+ if(content = document.getElementById('company-content'))
16
+ {
17
+ content.parentNode.innerHTML = data ;
18
+ }
19
+ document.body.style.cursor = 'auto';
20
+ }
21
+ });
22
+ }
@@ -0,0 +1,219 @@
1
+ dojo.debug("extending Editor2Toolbar");
2
+ dojo.require("dojo.widget.Editor2");
3
+ dojo.require("dojo.widget.Editor2Toolbar");
4
+
5
+ dojo.lang.extend(dojo.widget.html.Editor2Toolbar, {
6
+ superscriptButton: null,
7
+ superscriptClick: function() { this.exec("superscript"); },
8
+ subscriptButton: null,
9
+ subscriptClick: function() { this.exec("subscript"); },
10
+
11
+ symbolButton: null,
12
+ symbolDropDown: null,
13
+ symbolClick: function(e){
14
+ var type = 'symbol';
15
+ var h = dojo.render.html;
16
+ this.hideAllDropDowns();
17
+ // FIXME: if we've been "popped out", we need to set the height of the toolbar.
18
+ e.stopPropagation();
19
+ var dd = this[type+"DropDown"];
20
+ var pal = this[type+"Palette"];
21
+ dojo.style.toggleShowing(dd);
22
+ if(!pal){
23
+ pal = this[type+"Palette"] = dojo.widget.createWidget("SymbolPalette", {}, dd, "first");
24
+ var fcp = pal.domNode;
25
+ with(dd.style){
26
+ width = dojo.html.getOuterWidth(fcp) + "px";
27
+ height = dojo.html.getOuterHeight(fcp) + "px";
28
+ zIndex = 1002;
29
+ position = "absolute";
30
+ }
31
+
32
+ var cmd = (dojo.render.html.safari) ? "inserttext" : "inserthtml";
33
+ dojo.event.connect( "after",
34
+ pal, "onSymbolSelect",
35
+ this, "exec",
36
+ function(mi){ mi.args.unshift(cmd); return mi.proceed(); }
37
+ );
38
+
39
+ dojo.event.connect( "after",
40
+ pal, "onSymbolSelect",
41
+ dojo.style, "toggleShowing",
42
+ this, function(mi){ mi.args.unshift(dd); return mi.proceed(); }
43
+ );
44
+
45
+ var cid = this.clickInterceptDiv;
46
+ if(!cid){
47
+ cid = this.clickInterceptDiv = document.createElement("div");
48
+ document.body.appendChild(cid);
49
+ with(cid.style){
50
+ backgroundColor = "transparent";
51
+ top = left = "0px";
52
+ height = width = "100%";
53
+ position = "absolute";
54
+ border = "none";
55
+ display = "none";
56
+ zIndex = 1001;
57
+ }
58
+ dojo.event.connect(cid, "onclick", function(){ cid.style.display = "none"; });
59
+ }
60
+ dojo.event.connect(pal, "onSymbolSelect", function(){ cid.style.display = "none"; });
61
+
62
+ dojo.event.kwConnect({
63
+ srcObj: document.body,
64
+ srcFunc: "onclick",
65
+ targetObj: this,
66
+ targetFunc: "hideAllDropDowns",
67
+ once: true
68
+ });
69
+ document.body.appendChild(dd);
70
+ }
71
+ dojo.style.toggleShowing(this.clickInterceptDiv);
72
+ var pos = dojo.style.abs(this[type+"Button"]);
73
+ dojo.html.placeOnScreenPoint(dd, pos.x, pos.y, 0, false);
74
+ if(pal.bgIframe){
75
+ with(pal.bgIframe.style){
76
+ display = "block";
77
+ left = dd.style.left;
78
+ top = dd.style.top;
79
+ width = dojo.style.getOuterWidth(dd)+"px";
80
+ height = dojo.style.getOuterHeight(dd)+"px";
81
+ }
82
+ }
83
+ },
84
+
85
+ hideAllDropDowns: function(){
86
+ this.domNode.style.height = "";
87
+ var node;
88
+ dojo.lang.forEach(dojo.widget.byType("Editor2Toolbar"), function(tb){
89
+ try{
90
+ if(node = tb.forecolorDropDown) dojo.style.hide(node);
91
+ if(node = tb.hilitecolorDropDown) dojo.style.hide(node);
92
+ if(node = tb.symbolDropDown) dojo.style.hide(node);
93
+ if(node = tb.styleDropdownContainer) dojo.style.hide(node);
94
+ if(node = tb.clickInterceptDiv) dojo.style.hide(node);
95
+ }catch(e){}
96
+ if(dojo.render.html.ie){
97
+ try{
98
+ dojo.style.hide(tb.forecolorPalette.bgIframe);
99
+ }catch(e){}
100
+ try{
101
+ dojo.style.hide(tb.hilitecolorPalette.bgIframe);
102
+ }catch(e){}
103
+ try{
104
+ dojo.style.hide(tb.symbolPalette.bgIframe);
105
+ }catch(e){}
106
+ }
107
+ });
108
+ }
109
+ });
110
+
111
+
112
+ dojo.lang.extend(dojo.widget.html.Editor2, {
113
+ currentSelection: null,
114
+ editorOnLoad: function(){
115
+ var toolbars = dojo.widget.byType("Editor2Toolbar");
116
+ if((!toolbars.length)||(!this.shareToolbar)){
117
+ var tbOpts = {};
118
+ tbOpts.templatePath = dojo.uri.dojoUri("src/widget/templates/HtmlEditorToolbarOneline.html");
119
+ this.toolbarWidget = dojo.widget.createWidget("Editor2Toolbar",
120
+ tbOpts, this.domNode, "before");
121
+ dojo.event.connect(this, "destroy", this.toolbarWidget, "destroy");
122
+ this.toolbarWidget.hideUnusableButtons(this);
123
+
124
+ if(this.object){
125
+ this.tbBgIframe = new dojo.html.BackgroundIframe(this.toolbarWidget.domNode);
126
+ this.tbBgIframe.iframe.style.height = "30px";
127
+ }
128
+
129
+ }else{
130
+ // FIXME: should we try harder to explicitly manage focus in
131
+ // order to prevent too many editors from all querying
132
+ // for button status concurrently?
133
+ // FIXME: selecting in one shared toolbar doesn't clobber
134
+ // selection in the others. This is problematic.
135
+ this.toolbarWidget = toolbars[0];
136
+ this.toolbarWidget.hideUnusableButtons(this);
137
+ }
138
+ var src = document["documentElement"]||window;
139
+ this.scrollInterval = setInterval(dojo.lang.hitch(this, "globalOnScrollHandler"), 100);
140
+ // dojo.event.connect(src, "onscroll", this, "globalOnScrollHandler");
141
+ dojo.event.connect("before", this, "destroyRendering", this, "unhookScroller");
142
+
143
+ // firefox does not let us attach events to an iframe retrieved using
144
+ // getElementById. For Details see
145
+ // http://www.digitalmediaminute.com/article/1706/firefoxjavascript-challenge
146
+ // therefore we cannot defer setting up the handlers to when the iframe is
147
+ // loaded. Safari on the other hand does not like onFocus/onBlur for
148
+ // this.editNode (which is at this point undefined). We need to defer
149
+ // setting up the handlers, otherwise an OS-Level Application-Switch is
150
+ // needed to trigger onBlur/onFocus..
151
+ // also, it appears that onFocus/onBlur is actually non-standard behavior
152
+ // for this.editNode, which is a <body> - only form-elements are supposed
153
+ // to trigger onFocus-Events. In a couple of years, when support improves,
154
+ // we should use onDOMFocusIn and onDOMFocusOut. In the meantime, we work
155
+ // around this with onMouseDown
156
+ if(dojo.render.html.safari) {
157
+ dojo.event.connect("after", this, "onLoad", dojo.lang.hitch(this, function() {
158
+ dojo.event.topic.registerPublisher("Editor2.clobberFocus", this.editNode, "onmousedown");
159
+ dojo.event.topic.subscribe("Editor2.clobberFocus", this, "setBlur");
160
+ dojo.event.connect(this.editNode, "onmousedown", this, "setFocus");
161
+
162
+ // store selection for later
163
+ dojo.event.browser.addListener(this.editNode, "mouseup",
164
+ dojo.lang.hitch(this, function() {
165
+ var sel = this.window.getSelection();
166
+ this.currentSelection = {
167
+ baseNode: sel.baseNode,
168
+ baseOffset: sel.baseOffset,
169
+ extentNode: sel.extentNode,
170
+ extentOffset: sel.extentOffset
171
+ }
172
+ }));
173
+ }));
174
+ } else {
175
+ dojo.event.topic.registerPublisher("Editor2.clobberFocus", this.editNode, "onfocus");
176
+ dojo.event.topic.subscribe("Editor2.clobberFocus", this, "setBlur");
177
+ dojo.event.connect(this.editNode, "onfocus", this, "setFocus");
178
+ }
179
+ var node;
180
+ if(node = this.toolbarWidget.linkButton) {
181
+ dojo.event.connect(node, "onclick",
182
+ dojo.lang.hitch(this, function(){
183
+ var range;
184
+ if(this.document.selection){
185
+ range = this.document.selection.createRange().text;
186
+ }else if(dojo.render.html.mozilla){
187
+ range = this.window.getSelection().toString();
188
+ }
189
+ if(range.length){
190
+ this.toolbarWidget.exec("createlink",
191
+ prompt("Please enter the URL of the link:", "http://"));
192
+ }else{
193
+ alert("Please select text to link");
194
+ }
195
+ })
196
+ );
197
+ }
198
+
199
+ var focusFunc = dojo.lang.hitch(this, function(){
200
+ if(dojo.render.html.ie){
201
+ this.editNode.focus();
202
+ }else{
203
+ this.window.focus();
204
+ }
205
+ });
206
+
207
+ dojo.event.connect(this.toolbarWidget, "formatSelectClick", focusFunc);
208
+ dojo.event.connect(this, "execCommand", focusFunc);
209
+
210
+ if(this.htmlEditing){
211
+ var tb = this.toolbarWidget.htmltoggleButton;
212
+ if(tb){
213
+ tb.style.display = "";
214
+ dojo.event.connect(this.toolbarWidget, "htmltoggleClick",
215
+ this, "toggleHtmlEditing");
216
+ }
217
+ }
218
+ }
219
+ });
@@ -0,0 +1,163 @@
1
+ <div class="EditorToolbarDomNode EditorToolbarSmallBg"
2
+ unselectable="on" dojoOnMouseDown="preventSelect">
3
+ <table cellpadding="1" cellspacing="0" border="0">
4
+ <!--
5
+ toobar options, in order:
6
+
7
+ * wikiword
8
+ * paste
9
+ * copy
10
+ * undo
11
+ * redo
12
+ * link
13
+ * insert image
14
+ * insert <hr>
15
+ * font-select
16
+ * bold
17
+ * italic
18
+ * underline
19
+ * strikethrough
20
+ * numlist
21
+ * dotlist
22
+ * indent
23
+ * outdent
24
+ * text color
25
+ * bg color
26
+
27
+ -->
28
+ <tbody>
29
+ <tr valign="top" align="left" dojoAttachPoint="oneLineTr">
30
+ <td>
31
+ <!-- htmltoggle -->
32
+ <span class="iconContainer" dojoAttachPoint="htmltoggleButton"
33
+ dojoOnClick="htmltoggleClick; buttonClick;" style="display: none;">
34
+ <span title="Toggle Rich Text and HTML Markup Editing Modes" class="icon"
35
+ style="background-image: none; width: 30px;"
36
+ unselectable="on">&lt;h&gt;</span>
37
+ </span>
38
+ </td>
39
+ <td>
40
+ <!-- paste -->
41
+ <span class="iconContainer" dojoAttachPoint="copyButton"
42
+ unselectable="on" dojoOnClick="copyClick; buttonClick;">
43
+ <span title="Copy (Ctrl-C)" class="icon copy" unselectable="on">&nbsp;</span>
44
+ </span>
45
+ </td>
46
+ <td>
47
+ <!-- copy -->
48
+ <span class="iconContainer" dojoAttachPoint="pasteButton"
49
+ dojoOnClick="pasteClick; buttonClick;" unselectable="on">
50
+ <span title="Paste (Ctrl-V)" class="icon paste" unselectable="on">&nbsp;</span>
51
+ </span>
52
+ </td>
53
+ <td>
54
+ <!-- undo -->
55
+ <span class="iconContainer" dojoAttachPoint="undoButton"
56
+ dojoOnClick="undoClick; buttonClick;" unselectable="on">
57
+ <!-- FIXME: should we have the text "undo" here? -->
58
+ <span title="Undo (Ctrl-Z)" class="icon undo" unselectable="on">&nbsp;</span>
59
+ </span>
60
+ </td>
61
+ <td>
62
+ <!-- redo -->
63
+ <span class="iconContainer" dojoAttachPoint="redoButton"
64
+ dojoOnClick="redoClick; buttonClick;" unselectable="on">
65
+ <span title="Redo (Ctrl-R)" class="icon redo" unselectable="on">&nbsp;</span>
66
+ </span>
67
+ </td>
68
+ <td isSpacer="true">
69
+ <!-- spacer -->
70
+ <span class="iconContainer">
71
+ <span class="icon sep" unselectable="on"
72
+ style="width: 5px; min-width: 5px;"></span>
73
+ </span>
74
+ </td>
75
+ <!--
76
+ <td>
77
+ -->
78
+ <!-- link -->
79
+ <!--
80
+ <span class="iconContainer" dojoAttachPoint="linkButton"
81
+ unselectable="on" dojoOnClick="linkClick; buttonClick;">
82
+ <span title="Create Link" class="icon createlink" unselectable="on">&nbsp;</span>
83
+ </span>
84
+ </td>
85
+ <td>
86
+ -->
87
+ <!-- insertimage -->
88
+ <!--
89
+ <span class="iconContainer"
90
+ style="display: none;"
91
+ dojoAttachPoint="insertimageButton"
92
+ unselectable="on" dojoOnClick="insertimageClick; buttonClick;">
93
+ <span title="Insert Image" class="icon insertimage" unselectable="on">&nbsp;</span>
94
+ </span>
95
+ </td>
96
+ -->
97
+ <!--
98
+ <td>
99
+ -->
100
+ <!-- bold -->
101
+ <!--
102
+ <span class="iconContainer" dojoAttachPoint="boldButton"
103
+ unselectable="on" dojoOnClick="boldClick; buttonClick;">
104
+ <span title="Toggle Bold (Ctrl-B)" class="icon bold" unselectable="on">&nbsp;</span>
105
+ </span>
106
+ </td>
107
+ -->
108
+ <td>
109
+ <!-- italic -->
110
+ <span class="iconContainer" dojoAttachPoint="italicButton"
111
+ dojoOnClick="italicClick; buttonClick;">
112
+ <span title="Toggle Italic (Ctrl-I)" class="icon italic" unselectable="on">&nbsp;</span>
113
+ </span>
114
+ </td>
115
+ <td>
116
+ <!-- subscript -->
117
+ <span class="iconContainer" dojoAttachPoint="subscriptButton"
118
+ dojoOnClick="subscriptClick; buttonClick;">
119
+ <span title="Toggle subscript"
120
+ class="icon subscript" unselectable="on">&nbsp;</span>
121
+ </span>
122
+ </td>
123
+ <td>
124
+ <!-- superscript -->
125
+ <span class="iconContainer" dojoAttachPoint="superscriptButton"
126
+ dojoOnClick="superscriptClick; buttonClick;">
127
+ <span title="Toggle Superscript"
128
+ class="icon superscript" unselectable="on">&nbsp;</span>
129
+ </span>
130
+ </td>
131
+ <td isSpacer="true">
132
+ <!-- spacer -->
133
+ <span class="iconContainer">
134
+ <span class="icon sep" unselectable="on"
135
+ style="width: 5px; min-width: 5px;"></span>
136
+ </span>
137
+ </td>
138
+ <td>
139
+ <!-- symbols -->
140
+ <span class="iconContainer" dojoAttachPoint="symbolButton"
141
+ unselectable="on" dojoOnClick="symbolClick; buttonClick;">
142
+ <span title="Insert a Symbol" class="icon insertsymbol"
143
+ unselectable="on">&nbsp;</span>
144
+ </span>
145
+ <div class="StyleDropdownContainer"
146
+ style="display: none; margin-top: 22px;"
147
+ dojoAttachPoint="symbolDropDown">
148
+ </div>
149
+ </td>
150
+ <td>
151
+ <!-- font select -->
152
+ <select dojoOnChange="formatSelectClick; buttonClick;"
153
+ dojoAttachPoint="formatSelectBox" unselectable="on">
154
+ <option value="">-- format --</option>
155
+ <option value="p">Normal</option>
156
+ <option value="pre">ASCII-Table</option>
157
+ </select>
158
+ </td>
159
+ <td width="*">&nbsp;</td>
160
+ </tr>
161
+ </tbody>
162
+ </table>
163
+ </div>