slashport 0.15.10

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 (63) hide show
  1. data/Rakefile +35 -0
  2. data/app/controllers/application.rb +2 -0
  3. data/app/controllers/cfg.rb +8 -0
  4. data/app/controllers/exceptions.rb +13 -0
  5. data/app/controllers/var.rb +27 -0
  6. data/app/controllers/vardoc.rb +7 -0
  7. data/app/helpers/cfg_helper.rb +5 -0
  8. data/app/helpers/global_helpers.rb +5 -0
  9. data/app/helpers/var_helper.rb +5 -0
  10. data/app/helpers/vardoc_helper.rb +5 -0
  11. data/app/models/base/attribute.rb +13 -0
  12. data/app/models/base/component.rb +206 -0
  13. data/app/models/base/exec.rb +40 -0
  14. data/app/models/base/registry.rb +4 -0
  15. data/app/models/base/tuple.rb +31 -0
  16. data/app/models/components/linuxhost.rb +125 -0
  17. data/app/models/components/linuxprocess.rb +55 -0
  18. data/app/models/components/mysql.rb +110 -0
  19. data/app/models/components/puppet.rb +20 -0
  20. data/app/views/cfg/index.html.erb +1 -0
  21. data/app/views/exceptions/not_acceptable.html.erb +63 -0
  22. data/app/views/exceptions/not_found.html.erb +47 -0
  23. data/app/views/layout/application.html.erb +12 -0
  24. data/app/views/var/index.json.erb +1 -0
  25. data/app/views/var/index.pp.erb +10 -0
  26. data/app/views/var/index.text.erb +18 -0
  27. data/app/views/vardoc/index.html.erb +1 -0
  28. data/autotest/discover.rb +1 -0
  29. data/autotest/merb.rb +149 -0
  30. data/autotest/merb_rspec.rb +165 -0
  31. data/bin/slashport +130 -0
  32. data/bin/slashportfetch +103 -0
  33. data/config/environments/development.rb +15 -0
  34. data/config/environments/production.rb +10 -0
  35. data/config/environments/rake.rb +11 -0
  36. data/config/environments/staging.rb +10 -0
  37. data/config/environments/test.rb +12 -0
  38. data/config/init.rb +26 -0
  39. data/config/rack.rb +11 -0
  40. data/config/router.rb +41 -0
  41. data/config/test.conf +2 -0
  42. data/doc/rdoc/generators/merb_generator.rb +1362 -0
  43. data/doc/rdoc/generators/template/merb/api_grease.js +640 -0
  44. data/doc/rdoc/generators/template/merb/index.html.erb +37 -0
  45. data/doc/rdoc/generators/template/merb/merb.css +252 -0
  46. data/doc/rdoc/generators/template/merb/merb.rb +351 -0
  47. data/doc/rdoc/generators/template/merb/merb_doc_styles.css +492 -0
  48. data/doc/rdoc/generators/template/merb/prototype.js +2515 -0
  49. data/lib/slashport.rb +93 -0
  50. data/public/favicon.ico +0 -0
  51. data/public/images/merb.jpg +0 -0
  52. data/public/javascripts/application.js +1 -0
  53. data/public/merb.fcgi +22 -0
  54. data/public/robots.txt +5 -0
  55. data/public/stylesheets/master.css +119 -0
  56. data/spec/requests/cfg_spec.rb +7 -0
  57. data/spec/requests/config_spec.rb +7 -0
  58. data/spec/requests/configdoc_spec.rb +7 -0
  59. data/spec/requests/var_spec.rb +7 -0
  60. data/spec/requests/vardoc_spec.rb +7 -0
  61. data/spec/spec.opts +0 -0
  62. data/spec/spec_helper.rb +20 -0
  63. metadata +156 -0
@@ -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
+