oddb.org 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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>