merb-gen 0.9.8 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/README +6 -3
  2. data/Rakefile +6 -4
  3. data/bin/merb-gen +1 -23
  4. data/lib/generators/controller.rb +4 -2
  5. data/lib/generators/helper.rb +0 -5
  6. data/lib/generators/merb/merb_core.rb +95 -0
  7. data/lib/generators/merb/merb_flat.rb +70 -69
  8. data/lib/generators/merb/merb_stack.rb +110 -0
  9. data/lib/generators/merb/merb_very_flat.rb +61 -64
  10. data/lib/generators/merb_plugin.rb +5 -0
  11. data/lib/generators/model.rb +5 -2
  12. data/lib/generators/resource.rb +7 -2
  13. data/lib/generators/resource_controller.rb +4 -4
  14. data/lib/generators/templates/application/common/Rakefile +2 -6
  15. data/lib/generators/templates/application/common/doc.thor +149 -0
  16. data/lib/generators/templates/application/common/dothtaccess +17 -0
  17. data/lib/generators/templates/application/common/jquery.js +32 -0
  18. data/lib/generators/templates/application/common/merb.thor +1550 -861
  19. data/lib/generators/templates/application/{merb → merb_core}/app/controllers/application.rb +0 -0
  20. data/lib/generators/templates/application/{merb → merb_core}/app/controllers/exceptions.rb +0 -0
  21. data/lib/generators/templates/application/{merb → merb_core}/app/helpers/global_helpers.rb +0 -0
  22. data/lib/generators/templates/application/{merb → merb_core}/app/views/exceptions/internal_server_error.html.erb +0 -0
  23. data/lib/generators/templates/application/{merb → merb_core}/app/views/exceptions/not_acceptable.html.erb +0 -0
  24. data/lib/generators/templates/application/{merb → merb_core}/app/views/exceptions/not_found.html.erb +0 -0
  25. data/lib/generators/templates/application/{merb → merb_core}/autotest/discover.rb +0 -0
  26. data/lib/generators/templates/application/{merb → merb_core}/autotest/merb.rb +0 -0
  27. data/lib/generators/templates/application/{merb → merb_core}/autotest/merb_rspec.rb +0 -0
  28. data/lib/generators/templates/application/{merb → merb_core}/config/environments/development.rb +7 -2
  29. data/lib/generators/templates/application/{merb → merb_core}/config/environments/production.rb +5 -2
  30. data/lib/generators/templates/application/{merb → merb_core}/config/environments/rake.rb +6 -2
  31. data/lib/generators/templates/application/merb_core/config/environments/staging.rb +10 -0
  32. data/lib/generators/templates/application/merb_core/config/environments/test.rb +12 -0
  33. data/lib/generators/templates/application/{merb → merb_core}/config/init.rb +6 -6
  34. data/lib/generators/templates/application/{merb → merb_core}/config/rack.rb +0 -0
  35. data/lib/generators/templates/application/{merb → merb_core}/config/router.rb +0 -0
  36. data/lib/generators/templates/application/merb_core/doc/rdoc/generators/merb_generator.rb +1362 -0
  37. data/lib/generators/templates/application/merb_core/doc/rdoc/generators/template/merb/api_grease.js +640 -0
  38. data/lib/generators/templates/application/merb_core/doc/rdoc/generators/template/merb/index.html.erb +37 -0
  39. data/lib/generators/templates/application/merb_core/doc/rdoc/generators/template/merb/merb.css +252 -0
  40. data/lib/generators/templates/application/merb_core/doc/rdoc/generators/template/merb/merb.rb +351 -0
  41. data/lib/generators/templates/application/merb_core/doc/rdoc/generators/template/merb/merb_doc_styles.css +492 -0
  42. data/lib/generators/templates/application/merb_core/doc/rdoc/generators/template/merb/prototype.js +2515 -0
  43. data/lib/generators/templates/application/{merb/app/models → merb_core/lib}/merb/session.rb +0 -0
  44. data/lib/generators/templates/application/{merb → merb_core}/public/favicon.ico +0 -0
  45. data/lib/generators/templates/application/{merb → merb_core}/public/images/merb.jpg +0 -0
  46. data/lib/generators/templates/application/merb_core/public/javascripts/application.js +1 -0
  47. data/lib/generators/templates/application/{merb → merb_core}/public/merb.fcgi +0 -0
  48. data/lib/generators/templates/application/{merb → merb_core}/public/robots.txt +0 -0
  49. data/lib/generators/templates/application/{merb → merb_core}/public/stylesheets/master.css +0 -0
  50. data/lib/generators/templates/application/{merb → merb_core}/spec/spec.opts +0 -0
  51. data/lib/generators/templates/application/{merb → merb_core}/spec/spec_helper.rb +0 -0
  52. data/lib/generators/templates/application/{merb → merb_core}/test/test_helper.rb +0 -0
  53. data/lib/generators/templates/application/merb_flat/application.rbt +1 -1
  54. data/lib/generators/templates/application/merb_flat/config/init.rb +8 -3
  55. data/lib/generators/templates/application/merb_plugin/LICENSE +1 -1
  56. data/lib/generators/templates/application/merb_stack/app/controllers/application.rb +2 -0
  57. data/lib/generators/templates/application/merb_stack/app/controllers/exceptions.rb +13 -0
  58. data/lib/generators/templates/application/merb_stack/app/helpers/global_helpers.rb +5 -0
  59. data/lib/generators/templates/application/merb_stack/app/models/user.rb +17 -0
  60. data/lib/generators/templates/application/merb_stack/app/views/exceptions/internal_server_error.html.erb +216 -0
  61. data/lib/generators/templates/application/merb_stack/app/views/exceptions/not_acceptable.html.erb +63 -0
  62. data/lib/generators/templates/application/merb_stack/app/views/exceptions/not_found.html.erb +47 -0
  63. data/lib/generators/templates/application/merb_stack/autotest/discover.rb +1 -0
  64. data/lib/generators/templates/application/merb_stack/autotest/merb.rb +149 -0
  65. data/lib/generators/templates/application/merb_stack/autotest/merb_rspec.rb +165 -0
  66. data/lib/generators/templates/application/merb_stack/config/database.yml +33 -0
  67. data/lib/generators/templates/application/merb_stack/config/dependencies.rb +15 -0
  68. data/lib/generators/templates/application/merb_stack/config/environments/development.rb +15 -0
  69. data/lib/generators/templates/application/merb_stack/config/environments/production.rb +10 -0
  70. data/lib/generators/templates/application/merb_stack/config/environments/rake.rb +11 -0
  71. data/lib/generators/templates/application/merb_stack/config/environments/staging.rb +10 -0
  72. data/lib/generators/templates/application/merb_stack/config/environments/test.rb +12 -0
  73. data/lib/generators/templates/application/merb_stack/config/init.rb +24 -0
  74. data/lib/generators/templates/application/merb_stack/config/rack.rb +12 -0
  75. data/lib/generators/templates/application/merb_stack/config/router.rb +44 -0
  76. data/lib/generators/templates/application/merb_stack/doc/rdoc/generators/merb_generator.rb +1362 -0
  77. data/lib/generators/templates/application/merb_stack/doc/rdoc/generators/template/merb/api_grease.js +640 -0
  78. data/lib/generators/templates/application/merb_stack/doc/rdoc/generators/template/merb/index.html.erb +37 -0
  79. data/lib/generators/templates/application/merb_stack/doc/rdoc/generators/template/merb/merb.css +252 -0
  80. data/lib/generators/templates/application/merb_stack/doc/rdoc/generators/template/merb/merb.rb +351 -0
  81. data/lib/generators/templates/application/merb_stack/doc/rdoc/generators/template/merb/merb_doc_styles.css +492 -0
  82. data/lib/generators/templates/application/merb_stack/doc/rdoc/generators/template/merb/prototype.js +2515 -0
  83. data/lib/generators/templates/application/merb_stack/merb/merb-auth/setup.rb +44 -0
  84. data/lib/generators/templates/application/merb_stack/merb/merb-auth/strategies.rb +11 -0
  85. data/lib/generators/templates/application/merb_stack/merb/session/session.rb +9 -0
  86. data/lib/generators/templates/application/merb_stack/public/favicon.ico +0 -0
  87. data/lib/generators/templates/application/merb_stack/public/images/merb.jpg +0 -0
  88. data/lib/generators/templates/application/merb_stack/public/javascripts/application.js +1 -0
  89. data/lib/generators/templates/application/merb_stack/public/merb.fcgi +22 -0
  90. data/lib/generators/templates/application/merb_stack/public/robots.txt +5 -0
  91. data/lib/generators/templates/application/merb_stack/public/stylesheets/master.css +119 -0
  92. data/lib/generators/templates/application/merb_stack/spec/spec.opts +0 -0
  93. data/lib/generators/templates/application/merb_stack/spec/spec_helper.rb +20 -0
  94. data/lib/generators/templates/application/merb_stack/test/test_helper.rb +19 -0
  95. data/lib/generators/templates/application/merb_very_flat/application.rbt +11 -5
  96. data/lib/generators/templates/component/layout/app/views/layout/%file_name%.html.erb +1 -0
  97. data/lib/generators/templates/component/resource_controller/spec/requests/%file_name%_spec.rb +53 -0
  98. data/lib/merb-gen/app_generator.rb +13 -0
  99. data/lib/merb-gen/generator.rb +36 -1
  100. data/lib/merb-gen/named_generator.rb +5 -2
  101. data/lib/merb-gen.rb +6 -8
  102. data/spec/controller_spec.rb +0 -20
  103. data/spec/{merb_full_spec.rb → merb_core_spec.rb} +11 -3
  104. data/spec/merb_stack_spec.rb +47 -0
  105. data/spec/part_controller_spec.rb +0 -39
  106. data/spec/resource_controller_spec.rb +1 -35
  107. data/spec/spec_helper.rb +4 -2
  108. metadata +133 -111
  109. data/lib/generators/merb/merb_full.rb +0 -85
  110. data/lib/generators/merb.rb +0 -24
  111. data/lib/generators/templates/application/merb/config/environments/staging.rb +0 -7
  112. data/lib/generators/templates/application/merb/config/environments/test.rb +0 -7
  113. data/lib/generators/templates/component/helper/spec/helpers/%file_name%_helper_spec.rb +0 -5
  114. data/lib/generators/templates/component/resource_controller/spec/controllers/%file_name%_spec.rb +0 -7
  115. data/spec/helper_spec.rb +0 -43
  116. data/spec/merb_spec.rb +0 -20
@@ -0,0 +1,640 @@
1
+
2
+ function setupPage(){
3
+ hookUpActiveSearch();
4
+ hookUpTabs();
5
+ suppressPostbacks();
6
+ var url_params = getUrlParams();
7
+ if (url_params != null){
8
+ loadUrlParams(url_params);
9
+ }else{
10
+ loadDefaults();
11
+ }
12
+ resizeDivs();
13
+ window.onresize = function(){ resizeDivs(); };
14
+ }
15
+
16
+ function getUrlParams(){
17
+ var window_location = window.location.href
18
+ var param_pos = window_location.search(/\?/)
19
+ if (param_pos > 0){
20
+ return(window_location.slice(param_pos, window_location.length));
21
+ }else{
22
+ return(null);
23
+ }
24
+ }
25
+
26
+ function loadUrlParams(url_param){
27
+ //get the tabs
28
+ var t = getTabs();
29
+ // now find our variables
30
+ var s_params = /(\?)(a=.+?)(&)(name=.*)/;
31
+ var results = url_param.match(s_params);
32
+ url_anchor = results[2].replace(/a=/,'');
33
+
34
+ if (url_anchor.match(/M.+/)){//load the methods tab and scroller content
35
+ setActiveTabAndLoadContent(t[0]);
36
+ }else{
37
+ if(url_anchor.match(/C.+/)){ //load the classes tab and scroller content
38
+ setActiveTabAndLoadContent(t[1]);
39
+ }else{
40
+ if (url_anchor.match(/F.+/)){//load the files tab
41
+ setActiveTabAndLoadContent(t[2]);
42
+ }else{
43
+ // default to loading the methods
44
+ setActiveTabAndLoadContent(t[0]);
45
+ }
46
+ }
47
+ }
48
+ paramLoadOfContentAnchor(url_anchor + "_link");
49
+ }
50
+
51
+ function updateUrlParams(anchor_id, name){
52
+ //Also setting the page title
53
+ //window.document.title = name + " method - MerbBrain.com ";
54
+
55
+ //updating the window location
56
+ var current_href = window.location.href;
57
+ //var m_name = name.replace("?","?");
58
+ var rep_str = ".html?a=" + anchor_id + "&name=" + name;
59
+ var new_href = current_href.replace(/\.html.*/, rep_str);
60
+ if (new_href != current_href){
61
+ window.location.href = new_href;
62
+ }
63
+ }
64
+
65
+ //does as it says...
66
+ function hookUpActiveSearch(){
67
+
68
+ var s_field = $('searchForm').getInputs('text')[0];
69
+ //var s_field = document.forms[0].searchText;
70
+ Event.observe(s_field, 'keydown', function(event) {
71
+ var el = Event.element(event);
72
+ var key = event.which || event.keyCode;
73
+
74
+ switch (key) {
75
+ case Event.KEY_RETURN:
76
+ forceLoadOfContentAnchor(getCurrentAnchor());
77
+ Event.stop(event);
78
+ break;
79
+
80
+ case Event.KEY_UP:
81
+ scrollListToElementOffset(getCurrentAnchor(),-1);
82
+ break;
83
+
84
+ case Event.KEY_DOWN:
85
+ scrollListToElementOffset(getCurrentAnchor(),1);
86
+ break;
87
+
88
+ default:
89
+ break;
90
+ }
91
+
92
+ });
93
+
94
+ Event.observe(s_field, 'keyup', function(event) {
95
+ var el = Event.element(event);
96
+ var key = event.which || event.keyCode;
97
+ switch (key) {
98
+ case Event.KEY_RETURN:
99
+ Event.stop(event);
100
+ break;
101
+
102
+ case Event.KEY_UP:
103
+ break;
104
+
105
+ case Event.KEY_DOWN:
106
+ break;
107
+
108
+ default:
109
+ scrollToName(el.value);
110
+ setSavedSearch(getCurrentTab(), el.value);
111
+ break;
112
+ }
113
+
114
+ });
115
+
116
+ Event.observe(s_field, 'keypress', function(event){
117
+ var el = Event.element(event);
118
+ var key = event.which || event.keyCode;
119
+ switch (key) {
120
+ case Event.KEY_RETURN:
121
+ Event.stop(event);
122
+ break;
123
+
124
+ default:
125
+ break;
126
+ }
127
+
128
+ });
129
+
130
+ //Event.observe(document, 'keypress', function(event){
131
+ // var key = event.which || event.keyCode;
132
+ // if (key == Event.KEY_TAB){
133
+ // cycleNextTab();
134
+ // Event.stop(event);
135
+ // }
136
+ //});
137
+ }
138
+
139
+ function hookUpTabs(){
140
+
141
+ var tabs = getTabs();
142
+ for(x=0; x < tabs.length; x++)
143
+ {
144
+ Event.observe(tabs[x], 'click', function(event){
145
+ var el = Event.element(event);
146
+ setActiveTabAndLoadContent(el);
147
+ });
148
+ //tabs[x].onclick = function (){ return setActiveTabAndLoadContent(this);}; //the prototype guys say this is bad..
149
+ }
150
+
151
+ }
152
+
153
+ function suppressPostbacks(){
154
+ Event.observe('searchForm', 'submit', function(event){
155
+ Event.stop(event);
156
+ });
157
+ }
158
+
159
+ function loadDefaults(){
160
+ var t = getTabs();
161
+ setActiveTabAndLoadContent(t[0]); //default loading of the first tab
162
+ }
163
+
164
+ function resizeDivs(){
165
+ var inner_height = 700;
166
+ if (window.innerHeight){
167
+ inner_height = window.innerHeight; //all browsers except IE use this to determine the space available inside a window. Thank you Microsoft!!
168
+ }else{
169
+ if(document.documentElement.clientHeight > 0){ //IE uses this in 'strict' mode
170
+ inner_height = document.documentElement.clientHeight;
171
+ }else{
172
+ inner_height = document.body.clientHeight; //IE uses this in 'quirks' mode
173
+ }
174
+ }
175
+ $('rdocContent').style.height = (inner_height - 92) + "px";//Thankfully all browsers can agree on how to set the height of a div
176
+ $('listScroller').style.height = (inner_height - 88) + "px";
177
+ }
178
+
179
+ //The main function for handling clicks on the tabs
180
+ function setActiveTabAndLoadContent(current_tab){
181
+ changeLoadingStatus("on");
182
+ var tab_string = String(current_tab.innerHTML).strip(); //thank you ProtoType!
183
+ switch (tab_string){
184
+ case "classes":
185
+ setCurrentTab("classes");
186
+ loadScrollerContent('fr_class_index.html');
187
+ setSearchFieldValue(getSavedSearch("classes"));
188
+ scrollToName(getSavedSearch("classes"));
189
+ setSearchFocus();
190
+ break;
191
+
192
+ case "files":
193
+ setCurrentTab("files");
194
+ loadScrollerContent('fr_file_index.html');
195
+ setSearchFieldValue(getSavedSearch("files"));
196
+ scrollToName(getSavedSearch("files"));
197
+ setSearchFocus();
198
+ break;
199
+
200
+ case "methods":
201
+ setCurrentTab("methods");
202
+ loadScrollerContent('fr_method_index.html');
203
+ setSearchFieldValue(getSavedSearch("methods"));
204
+ scrollToName(getSavedSearch("methods"));
205
+ setSearchFocus();
206
+ break;
207
+
208
+ default:
209
+ break;
210
+ }
211
+ changeLoadingStatus("off");
212
+ }
213
+
214
+ function cycleNextTab(){
215
+ var currentT = getCurrentTab();
216
+ var tabs = getTabs();
217
+ if (currentT == "methods"){
218
+ setActiveTabAndLoadContent(tabs[1]);
219
+ setSearchFocus();
220
+ }else{
221
+ if (currentT == "classes"){
222
+ setActiveTabAndLoadContent(tabs[2]);
223
+ setSearchFocus();
224
+ }else{
225
+ if (currentT == "files"){
226
+ setActiveTabAndLoadContent(tabs[0]);
227
+ setSearchFocus();
228
+ }
229
+ }
230
+ }
231
+ }
232
+
233
+ function getTabs(){
234
+ return($('groupType').getElementsByTagName('li'));
235
+ }
236
+
237
+ var Active_Tab = "";
238
+ function getCurrentTab(){
239
+ return Active_Tab;
240
+ }
241
+
242
+ function setCurrentTab(tab_name){
243
+ var tabs = getTabs();
244
+ for(x=0; x < tabs.length; x++)
245
+ {
246
+ if(tabs[x].innerHTML.strip() == tab_name) //W00t!!! String.prototype.strip!
247
+ {
248
+ tabs[x].className = "activeLi";
249
+ Active_Tab = tab_name;
250
+ }
251
+ else
252
+ {
253
+ tabs[x].className = "";
254
+ }
255
+ }
256
+ }
257
+
258
+ //These globals should not be used globally (hence the getters and setters)
259
+ var File_Search = "";
260
+ var Method_Search = "";
261
+ var Class_Search = "";
262
+ function setSavedSearch(tab_name, s_val){
263
+ switch(tab_name){
264
+ case "methods":
265
+ Method_Search = s_val;
266
+ break;
267
+ case "files":
268
+ File_Search = s_val;
269
+ break;
270
+ case "classes":
271
+ Class_Search = s_val;
272
+ break;
273
+ }
274
+ }
275
+
276
+ function getSavedSearch(tab_name){
277
+ switch(tab_name){
278
+ case "methods":
279
+ return (Method_Search);
280
+ break;
281
+ case "files":
282
+ return (File_Search);
283
+ break;
284
+ case "classes":
285
+ return (Class_Search);
286
+ break;
287
+ }
288
+ }
289
+
290
+ //These globals handle the history stack
291
+
292
+
293
+ function setListScrollerContent(s){
294
+
295
+ $('listScroller').innerHTML = s;
296
+ }
297
+
298
+ function setMainContent(s){
299
+
300
+ $('rdocContent').innerHTML = s;
301
+ }
302
+
303
+ function setSearchFieldValue(s){
304
+
305
+ document.forms[0].searchText.value = s;
306
+ }
307
+
308
+ function getSearchFieldValue(){
309
+
310
+ return Form.Element.getValue('searchText');
311
+ }
312
+
313
+ function setSearchFocus(){
314
+
315
+ document.forms[0].searchText.focus();
316
+ }
317
+
318
+ var Anchor_ID_Of_Current = null; // holds the last highlighted anchor tag in the scroll lsit
319
+ function getCurrentAnchor(){
320
+ return(Anchor_ID_Of_Current);
321
+ }
322
+
323
+ function setCurrentAnchor(a_id){
324
+ Anchor_ID_Of_Current = a_id;
325
+ }
326
+
327
+ //var Index_Of_Current = 0; //holds the last highlighted index
328
+ //function getCurrentIndex(){
329
+ // return (Index_Of_Current);
330
+ //}
331
+
332
+ //function setCurrentIndex(new_i){
333
+ // Index_Of_Current = new_i;
334
+ //}
335
+
336
+ function loadScrollerContent(url){
337
+
338
+ var scrollerHtml = new Ajax.Request(url, {
339
+ asynchronous: false,
340
+ method: 'get',
341
+ onComplete: function(method_data) {
342
+ setListScrollerContent(method_data.responseText);
343
+ }
344
+ });
345
+
346
+ }
347
+
348
+ //called primarily from the links inside the scroller list
349
+ //loads the main page div then jumps to the anchor/element with id
350
+ function loadContent(url, anchor_id){
351
+
352
+ var mainHtml = new Ajax.Request(url, {
353
+ method: 'get',
354
+ onLoading: changeLoadingStatus("on"),
355
+ onSuccess: function(method_data) {
356
+ setMainContent(method_data.responseText);},
357
+ onComplete: function(request) {
358
+ changeLoadingStatus("off");
359
+ new jumpToAnchor(anchor_id);
360
+ }
361
+ });
362
+ }
363
+
364
+ //An alternative function that also will stuff the index history for methods, files, classes
365
+ function loadIndexContent(url, anchor_id, name, scope)
366
+ {
367
+ if (From_URL_Param == true){
368
+ var mainHtml = new Ajax.Request(url, {
369
+ method: 'get',
370
+ onLoading: changeLoadingStatus("on"),
371
+ onSuccess: function(method_data) {
372
+ setMainContent(method_data.responseText);},
373
+ onComplete: function(request) {
374
+ changeLoadingStatus("off");
375
+ updateBrowserBar(name, anchor_id, scope);
376
+ new jumpToAnchor(anchor_id);}
377
+ });
378
+ From_URL_Param = false;
379
+ }else{
380
+ updateUrlParams(anchor_id, name);
381
+ }
382
+
383
+ }
384
+
385
+ function updateBrowserBar(name, anchor_id, scope){
386
+ if (getCurrentTab() == "methods"){
387
+ $('browserBarInfo').update("<small>class/module:</small>&nbsp;<a href=\"#\" onclick=\"jumpToTop();\">" + scope + "</a>&nbsp;&nbsp;<small>method:</small>&nbsp;<strong><a href=\"#\" onclick=\"jumpToAnchor('"+ anchor_id +"')\">" + name + "</a></strong> ");
388
+ }else{ if(getCurrentTab() == "classes"){
389
+ $('browserBarInfo').update("<small>class/module:</small>&nbsp;<a href=\"#\" onclick=\"jumpToTop();\">" + scope + "::" + name + "</strong> ");
390
+ }else{
391
+ $('browserBarInfo').update("<small>file:</small>&nbsp;<a href=\"#\" onclick=\"jumpToTop();\">" + scope + "/" + name + "</strong> ");
392
+ }
393
+ }
394
+ }
395
+
396
+
397
+ // Force loads the contents of the index of the current scroller list. It does this by
398
+ // pulling the onclick method out and executing it manually.
399
+ function forceLoadOfContent(index_to_load){
400
+ var scroller = $('listScroller');
401
+ var a_array = scroller.getElementsByTagName('a');
402
+ if ((index_to_load >= 0) && (index_to_load < a_array.length)){
403
+ var load_element = a_array[index_to_load];
404
+ var el_text = load_element.innerHTML.strip();
405
+ setSearchFieldValue(el_text);
406
+ setSavedSearch(getCurrentTab(), el_text);
407
+ eval("new " + load_element.onclick);
408
+ }
409
+ }
410
+
411
+ function forceLoadOfContentAnchor(anchor_id){
412
+
413
+ var load_element = $(anchor_id);
414
+ if (load_element != null){
415
+ var el_text = load_element.innerHTML.strip();
416
+ setSearchFieldValue(el_text);
417
+ scrollToAnchor(anchor_id);
418
+ setSavedSearch(getCurrentTab(), el_text);
419
+ eval("new " + load_element.onclick);
420
+ }
421
+ }
422
+
423
+ var From_URL_Param = false;
424
+ function paramLoadOfContentAnchor(anchor_id){
425
+ From_URL_Param = true;
426
+ forceLoadOfContentAnchor(anchor_id);
427
+ }
428
+
429
+ //this handles the up/down keystrokes to move the selection of items in the list
430
+ function scrollListToElementOffset(anchor_id, offset){
431
+ var scroller = $('listScroller');
432
+ var a_array = scroller.getElementsByTagName('a');
433
+ var current_index = findIndexOfAnchor(a_array, anchor_id);
434
+ if ((current_index >= 0) && (current_index < a_array.length)){
435
+ scrollListToAnchor(a_array[current_index + offset].id);
436
+ setListActiveAnchor(a_array[current_index + offset].id);
437
+ }
438
+ }
439
+
440
+ function findIndexOfAnchor(a_array, anchor_id){
441
+ var found=false;
442
+ var counter = 0;
443
+ while(!found && counter < a_array.length){
444
+ if (a_array[counter].id == anchor_id){
445
+ found = true;
446
+ }else{
447
+ counter +=1;
448
+ }
449
+ }
450
+ return(counter);
451
+ }
452
+
453
+ function scrollToName(searcher_name){
454
+
455
+ var scroller = $('listScroller');
456
+ var a_array = scroller.getElementsByTagName('a');
457
+
458
+ if (!searcher_name.match(new RegExp(/\s+/))){ //if searcher name is blank
459
+
460
+ var searcher_pattern = new RegExp("^"+searcher_name, "i"); //the "i" is for case INsensitive
461
+ var found_index = -1;
462
+
463
+ var found = false;
464
+ var x = 0;
465
+ while(!found && x < a_array.length){
466
+ if(a_array[x].innerHTML.match(searcher_pattern)){
467
+ found = true;
468
+ found_index = x;
469
+ }
470
+ else{
471
+ x++;
472
+ }
473
+ }
474
+
475
+ // // an attempt at binary searching... have not given up on this yet...
476
+ //found_index = binSearcher(searcher_pattern, a_array, 0, a_array.length);
477
+
478
+ if ((found_index >= 0) && (found_index < a_array.length)){
479
+
480
+ scrollListToAnchor(a_array[found_index].id);//scroll to the item
481
+ setListActiveAnchor(a_array[found_index].id);//highlight the item
482
+ }
483
+ }else{ //since searcher name is blank
484
+ //scrollListToIndex(a_array, 0);//scroll to the item
485
+ //setListActiveItem(a_array, 0);//highlight the item
486
+ }
487
+ }
488
+
489
+ function scrollToAnchor(anchor_id){
490
+ var scroller = $('listScroller');
491
+ if ($(anchor_id) != null){
492
+ scrollListToAnchor(anchor_id);
493
+ setListActiveAnchor(anchor_id);
494
+ }
495
+ }
496
+
497
+ function getY(element){
498
+
499
+ var y = 0;
500
+ for( var e = element; e; e = e.offsetParent)//iterate the offset Parents
501
+ {
502
+ y += e.offsetTop; //add up the offsetTop values
503
+ }
504
+ //for( e = element.parentNode; e && e != document.body; e = e.parentNode)
505
+ // if (e.scrollTop) y -= e.scrollTop; //subtract scrollbar values
506
+ return y;
507
+ }
508
+
509
+ //function setListActiveItem(item_array, active_index){
510
+ //
511
+ // item_array[getCurrentIndex()].className = "";
512
+ // setCurrentIndex(active_index);
513
+ // item_array[getCurrentIndex()].className = "activeA"; //setting the active class name
514
+ //}
515
+
516
+ function setListActiveAnchor(active_anchor){
517
+ if ((getCurrentAnchor() != null) && ($(getCurrentAnchor()) != null)){
518
+ $(getCurrentAnchor()).className = "";
519
+ }
520
+ setCurrentAnchor(active_anchor);
521
+ $(getCurrentAnchor()).className = "activeA";
522
+
523
+ }
524
+
525
+ //handles the scrolling of the list and setting of the current index
526
+ //function scrollListToIndex(a_array, scroll_index){
527
+ // if (scroll_index > 0){
528
+ // var scroller = $('listScroller');
529
+ // scroller.scrollTop = getY(a_array[scroll_index]) - 120; //the -120 is what keeps it from going to the top...
530
+ // }
531
+ //}
532
+
533
+ function scrollListToAnchor(scroll2_anchor){
534
+ var scroller = $('listScroller');
535
+ scroller.scrollTop = getY($(scroll2_anchor)) - 120;
536
+ }
537
+
538
+ function jumpToAnchor(anchor_id){
539
+
540
+ var contentScroller = $('rdocContent');
541
+ var a_div = $(anchor_id);
542
+ contentScroller.scrollTop = getY(a_div) - 80; //80 is the offset to adjust scroll point
543
+ var a_title = $(anchor_id + "_title");
544
+ a_title.style.backgroundColor = "#222";
545
+ a_title.style.color = "#FFF";
546
+ a_title.style.padding = "3px";
547
+ // a_title.style.borderBottom = "2px solid #ccc";
548
+
549
+ //other attempts
550
+ //a_div.className = "activeMethod"; //setting the active class name
551
+ //a_div.style.backgroundColor = "#ffc";
552
+ //var titles = a_div.getElementsByClassName("title");
553
+ //titles[0].className = "activeTitle";
554
+
555
+ }
556
+
557
+ function jumpToTop(){
558
+ $('rdocContent').scrollTop = 0;
559
+ }
560
+
561
+ function changeLoadingStatus(status){
562
+ if (status == "on"){
563
+ $('loadingStatus').show();
564
+ }
565
+ else{
566
+ $('loadingStatus').hide();
567
+ }
568
+ }
569
+
570
+ //************* Misc functions (mostly from the old rdocs) ***********************
571
+ //snagged code from the old templating system
572
+ function toggleSource( id ){
573
+
574
+ var elem
575
+ var link
576
+
577
+ if( document.getElementById )
578
+ {
579
+ elem = document.getElementById( id )
580
+ link = document.getElementById( "l_" + id )
581
+ }
582
+ else if ( document.all )
583
+ {
584
+ elem = eval( "document.all." + id )
585
+ link = eval( "document.all.l_" + id )
586
+ }
587
+ else
588
+ return false;
589
+
590
+ if( elem.style.display == "block" )
591
+ {
592
+ elem.style.display = "none"
593
+ link.innerHTML = "show source"
594
+ }
595
+ else
596
+ {
597
+ elem.style.display = "block"
598
+ link.innerHTML = "hide source"
599
+ }
600
+ }
601
+
602
+ function openCode( url ){
603
+ window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
604
+ }
605
+
606
+ //this function handles the ajax calling and afterits loaded the jumping to the anchor...
607
+ function jsHref(url){
608
+ //alert(url);
609
+ var mainHtml = new Ajax.Request(url, {
610
+ method: 'get',
611
+ onSuccess: function(method_data) {
612
+ setMainContent(method_data.responseText);}
613
+ });
614
+ }
615
+
616
+ //function comparePatterns(string, regexp){
617
+ // var direction = 0;
618
+ //
619
+ //
620
+ // return (direction)
621
+ //}
622
+
623
+ ////returns the index of the element
624
+ //function binSearcher(regexp_pattern, list, start_index, stop_index){
625
+ // //divide the list in half
626
+ // var split_point = 0;
627
+ // split_point = parseInt((stop_index - start_index)/2);
628
+ // direction = comparePatterns(list[split_point].innerHTML, regexp_pattern);
629
+ // if(direction < 0)
630
+ // return (binSearcher(regexp_pattern, list, start_index, split_point));
631
+ // else
632
+ // if(direction > 0)
633
+ // return (binSearcher(regexp_pattern, list, split_point, stop_index));
634
+ // else
635
+ // return(split_point);
636
+ //
637
+ //}
638
+
639
+
640
+
@@ -0,0 +1,37 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>Documentation</title>
5
+ <meta content='text/html;charset=UTF-8' http-equiv='content-type' />
6
+ <meta content='all' name='robots' />
7
+ <meta content='text/html;charset=utf-8' http-equiv='content-type' />
8
+ <meta content='no' http-equiv='msthemecompatible' />
9
+ <meta content='false' http-equiv='imagetoolbar' />
10
+ <link href="generators/template/merb/merb.css" media="screen" rel="stylesheet" type="text/css" />
11
+ </head>
12
+ <body>
13
+ <div id='content'>
14
+ <div class='wrap_to_center'>
15
+ <div class='full_width' id='content_top'>
16
+ <div id='content_bottom'>
17
+ <div id='content_full'>
18
+ <h1>Documentation</h1>
19
+ <ul>
20
+ <% @directories.each do |directory| %>
21
+ <li id="merb-core"><a href="<%= directory %>/index.html"><%= directory.capitalize %></a></li>
22
+ <% end %>
23
+ </ul>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ <div id='footer'>
29
+ <div class='wrap_to_center'>
30
+ <p>
31
+ &copy; 2008, Merb Team | Merb is released under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT License</a>
32
+ </p>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </body>
37
+ </html>