netlinx-workspace 0.2.0 → 0.3.0

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -0
  3. data/doc/NetLinx.html +119 -131
  4. data/doc/NetLinx/Compile.html +115 -127
  5. data/doc/NetLinx/Compile/Extension.html +115 -127
  6. data/doc/NetLinx/Compile/Extension/APW.html +219 -136
  7. data/doc/NetLinx/Project.html +1100 -460
  8. data/doc/NetLinx/System.html +1197 -580
  9. data/doc/NetLinx/SystemFile.html +646 -301
  10. data/doc/NetLinx/Workspace.html +981 -438
  11. data/doc/_index.html +210 -0
  12. data/doc/class_list.html +54 -0
  13. data/doc/css/common.css +1 -0
  14. data/doc/css/full_list.css +57 -0
  15. data/doc/css/style.css +339 -0
  16. data/doc/file.README.html +86 -0
  17. data/doc/file.license.html +73 -0
  18. data/doc/file_list.html +59 -0
  19. data/doc/frames.html +26 -0
  20. data/doc/index.html +86 -85
  21. data/doc/js/app.js +219 -0
  22. data/doc/js/full_list.js +178 -0
  23. data/doc/js/jquery.js +4 -18
  24. data/doc/method_list.html +329 -0
  25. data/doc/top-level-namespace.html +112 -0
  26. data/lib/netlinx/system.rb +6 -6
  27. data/lib/netlinx/workspace.rb +14 -0
  28. metadata +84 -61
  29. data/README.html +0 -0
  30. data/doc/created.rid +0 -7
  31. data/doc/images/add.png +0 -0
  32. data/doc/images/arrow_up.png +0 -0
  33. data/doc/images/brick.png +0 -0
  34. data/doc/images/brick_link.png +0 -0
  35. data/doc/images/bug.png +0 -0
  36. data/doc/images/bullet_black.png +0 -0
  37. data/doc/images/bullet_toggle_minus.png +0 -0
  38. data/doc/images/bullet_toggle_plus.png +0 -0
  39. data/doc/images/date.png +0 -0
  40. data/doc/images/delete.png +0 -0
  41. data/doc/images/find.png +0 -0
  42. data/doc/images/loadingAnimation.gif +0 -0
  43. data/doc/images/macFFBgHack.png +0 -0
  44. data/doc/images/package.png +0 -0
  45. data/doc/images/page_green.png +0 -0
  46. data/doc/images/page_white_text.png +0 -0
  47. data/doc/images/page_white_width.png +0 -0
  48. data/doc/images/plugin.png +0 -0
  49. data/doc/images/ruby.png +0 -0
  50. data/doc/images/tag_blue.png +0 -0
  51. data/doc/images/tag_green.png +0 -0
  52. data/doc/images/transparent.png +0 -0
  53. data/doc/images/wrench.png +0 -0
  54. data/doc/images/wrench_orange.png +0 -0
  55. data/doc/images/zoom.png +0 -0
  56. data/doc/js/darkfish.js +0 -155
  57. data/doc/js/navigation.js +0 -142
  58. data/doc/js/search.js +0 -94
  59. data/doc/js/search_index.js +0 -1
  60. data/doc/js/searcher.js +0 -228
  61. data/doc/rdoc.css +0 -595
  62. data/doc/table_of_contents.html +0 -111
Binary file
Binary file
data/doc/images/ruby.png DELETED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/doc/images/zoom.png DELETED
Binary file
data/doc/js/darkfish.js DELETED
@@ -1,155 +0,0 @@
1
- /**
2
- *
3
- * Darkfish Page Functions
4
- * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $
5
- *
6
- * Author: Michael Granger <mgranger@laika.com>
7
- *
8
- */
9
-
10
- /* Provide console simulation for firebug-less environments */
11
- if (!("console" in window) || !("firebug" in console)) {
12
- var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
13
- "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
14
-
15
- window.console = {};
16
- for (var i = 0; i < names.length; ++i)
17
- window.console[names[i]] = function() {};
18
- };
19
-
20
-
21
- /**
22
- * Unwrap the first element that matches the given @expr@ from the targets and return them.
23
- */
24
- $.fn.unwrap = function( expr ) {
25
- return this.each( function() {
26
- $(this).parents( expr ).eq( 0 ).after( this ).remove();
27
- });
28
- };
29
-
30
-
31
- function showSource( e ) {
32
- var target = e.target;
33
- var codeSections = $(target).
34
- parents('.method-detail').
35
- find('.method-source-code');
36
-
37
- $(target).
38
- parents('.method-detail').
39
- find('.method-source-code').
40
- slideToggle();
41
- };
42
-
43
- function hookSourceViews() {
44
- $('.method-heading').click( showSource );
45
- };
46
-
47
- function toggleDebuggingSection() {
48
- $('.debugging-section').slideToggle();
49
- };
50
-
51
- function hookDebuggingToggle() {
52
- $('#debugging-toggle img').click( toggleDebuggingSection );
53
- };
54
-
55
- function hookTableOfContentsToggle() {
56
- $('.indexpage li .toc-toggle').each( function() {
57
- $(this).click( function() {
58
- $(this).toggleClass('open');
59
- });
60
-
61
- var section = $(this).next();
62
-
63
- $(this).click( function() {
64
- section.slideToggle();
65
- });
66
- });
67
- }
68
-
69
- function hookSearch() {
70
- var input = $('#search-field').eq(0);
71
- var result = $('#search-results').eq(0);
72
- $(result).show();
73
-
74
- var search_section = $('#search-section').get(0);
75
- $(search_section).show();
76
-
77
- var search = new Search(search_data, input, result);
78
-
79
- search.renderItem = function(result) {
80
- var li = document.createElement('li');
81
- var html = '';
82
-
83
- // TODO add relative path to <script> per-page
84
- html += '<p class="search-match"><a href="' + rdoc_rel_prefix + result.path + '">' + this.hlt(result.title);
85
- if (result.params)
86
- html += '<span class="params">' + result.params + '</span>';
87
- html += '</a>';
88
-
89
-
90
- if (result.namespace)
91
- html += '<p class="search-namespace">' + this.hlt(result.namespace);
92
-
93
- if (result.snippet)
94
- html += '<div class="search-snippet">' + result.snippet + '</div>';
95
-
96
- li.innerHTML = html;
97
-
98
- return li;
99
- }
100
-
101
- search.select = function(result) {
102
- var result_element = result.get(0);
103
- window.location.href = result_element.firstChild.firstChild.href;
104
- }
105
-
106
- search.scrollIntoView = search.scrollInWindow;
107
- };
108
-
109
- function highlightTarget( anchor ) {
110
- console.debug( "Highlighting target '%s'.", anchor );
111
-
112
- $("a[name]").each( function() {
113
- if ( $(this).attr("name") == anchor ) {
114
- if ( !$(this).parent().parent().hasClass('target-section') ) {
115
- console.debug( "Wrapping the target-section" );
116
- $('div.method-detail').unwrap( 'div.target-section' );
117
- $(this).parent().wrap( '<div class="target-section"></div>' );
118
- } else {
119
- console.debug( "Already wrapped." );
120
- }
121
- }
122
- });
123
- };
124
-
125
- function highlightLocationTarget() {
126
- console.debug( "Location hash: %s", window.location.hash );
127
- if ( ! window.location.hash || window.location.hash.length == 0 ) return;
128
-
129
- var anchor = window.location.hash.substring(1);
130
- console.debug( "Found anchor: %s; matching %s", anchor, "a[name=" + anchor + "]" );
131
-
132
- highlightTarget( anchor );
133
- };
134
-
135
- function highlightClickTarget( event ) {
136
- console.debug( "Highlighting click target for event %o", event.target );
137
- try {
138
- var anchor = $(event.target).attr( 'href' ).substring(1);
139
- console.debug( "Found target anchor: %s", anchor );
140
- highlightTarget( anchor );
141
- } catch ( err ) {
142
- console.error( "Exception while highlighting: %o", err );
143
- };
144
- };
145
-
146
-
147
- $(document).ready( function() {
148
- hookSourceViews();
149
- hookDebuggingToggle();
150
- hookSearch();
151
- highlightLocationTarget();
152
- hookTableOfContentsToggle();
153
-
154
- $('ul.link-list a').bind( "click", highlightClickTarget );
155
- });
data/doc/js/navigation.js DELETED
@@ -1,142 +0,0 @@
1
- /*
2
- * Navigation allows movement using the arrow keys through the search results.
3
- *
4
- * When using this library you will need to set scrollIntoView to the
5
- * appropriate function for your layout. Use scrollInWindow if the container
6
- * is not scrollable and scrollInElement if the container is a separate
7
- * scrolling region.
8
- */
9
- Navigation = new function() {
10
- this.initNavigation = function() {
11
- var _this = this;
12
-
13
- $(document).keydown(function(e) {
14
- _this.onkeydown(e);
15
- }).keyup(function(e) {
16
- _this.onkeyup(e);
17
- });
18
-
19
- this.navigationActive = true;
20
- }
21
-
22
- this.setNavigationActive = function(state) {
23
- this.navigationActive = state;
24
- this.clearMoveTimeout();
25
- }
26
-
27
- this.onkeyup = function(e) {
28
- if (!this.navigationActive) return;
29
-
30
- switch(e.keyCode) {
31
- case 37: //Event.KEY_LEFT:
32
- case 38: //Event.KEY_UP:
33
- case 39: //Event.KEY_RIGHT:
34
- case 40: //Event.KEY_DOWN:
35
- this.clearMoveTimeout();
36
- break;
37
- }
38
- }
39
-
40
- this.onkeydown = function(e) {
41
- if (!this.navigationActive) return;
42
- switch(e.keyCode) {
43
- case 37: //Event.KEY_LEFT:
44
- if (this.moveLeft()) e.preventDefault();
45
- break;
46
- case 38: //Event.KEY_UP:
47
- if (e.keyCode == 38 || e.ctrlKey) {
48
- if (this.moveUp()) e.preventDefault();
49
- this.startMoveTimeout(false);
50
- }
51
- break;
52
- case 39: //Event.KEY_RIGHT:
53
- if (this.moveRight()) e.preventDefault();
54
- break;
55
- case 40: //Event.KEY_DOWN:
56
- if (e.keyCode == 40 || e.ctrlKey) {
57
- if (this.moveDown()) e.preventDefault();
58
- this.startMoveTimeout(true);
59
- }
60
- break;
61
- case 13: //Event.KEY_RETURN:
62
- if (this.$current)
63
- e.preventDefault();
64
- this.select(this.$current);
65
- break;
66
- }
67
- if (e.ctrlKey && e.shiftKey) this.select(this.$current);
68
- }
69
-
70
- this.clearMoveTimeout = function() {
71
- clearTimeout(this.moveTimeout);
72
- this.moveTimeout = null;
73
- }
74
-
75
- this.startMoveTimeout = function(isDown) {
76
- if (!$.browser.mozilla && !$.browser.opera) return;
77
- if (this.moveTimeout) this.clearMoveTimeout();
78
- var _this = this;
79
-
80
- var go = function() {
81
- if (!_this.moveTimeout) return;
82
- _this[isDown ? 'moveDown' : 'moveUp']();
83
- _this.moveTimout = setTimeout(go, 100);
84
- }
85
- this.moveTimeout = setTimeout(go, 200);
86
- }
87
-
88
- this.moveRight = function() {
89
- }
90
-
91
- this.moveLeft = function() {
92
- }
93
-
94
- this.move = function(isDown) {
95
- }
96
-
97
- this.moveUp = function() {
98
- return this.move(false);
99
- }
100
-
101
- this.moveDown = function() {
102
- return this.move(true);
103
- }
104
-
105
- /*
106
- * Scrolls to the given element in the scrollable element view.
107
- */
108
- this.scrollInElement = function(element, view) {
109
- var offset, viewHeight, viewScroll, height;
110
- offset = element.offsetTop;
111
- height = element.offsetHeight;
112
- viewHeight = view.offsetHeight;
113
- viewScroll = view.scrollTop;
114
-
115
- if (offset - viewScroll + height > viewHeight) {
116
- view.scrollTop = offset - viewHeight + height;
117
- }
118
- if (offset < viewScroll) {
119
- view.scrollTop = offset;
120
- }
121
- }
122
-
123
- /*
124
- * Scrolls to the given element in the window. The second argument is
125
- * ignored
126
- */
127
- this.scrollInWindow = function(element, ignored) {
128
- var offset, viewHeight, viewScroll, height;
129
- offset = element.offsetTop;
130
- height = element.offsetHeight;
131
- viewHeight = window.innerHeight;
132
- viewScroll = window.scrollY;
133
-
134
- if (offset - viewScroll + height > viewHeight) {
135
- window.scrollTo(window.scrollX, offset - viewHeight + height);
136
- }
137
- if (offset < viewScroll) {
138
- window.scrollTo(window.scrollX, offset);
139
- }
140
- }
141
- }
142
-
data/doc/js/search.js DELETED
@@ -1,94 +0,0 @@
1
- Search = function(data, input, result) {
2
- this.data = data;
3
- this.$input = $(input);
4
- this.$result = $(result);
5
-
6
- this.$current = null;
7
- this.$view = this.$result.parent();
8
- this.searcher = new Searcher(data.index);
9
- this.init();
10
- }
11
-
12
- Search.prototype = $.extend({}, Navigation, new function() {
13
- var suid = 1;
14
-
15
- this.init = function() {
16
- var _this = this;
17
- var observer = function() {
18
- _this.search(_this.$input[0].value);
19
- };
20
- this.$input.keyup(observer);
21
- this.$input.click(observer); // mac's clear field
22
-
23
- this.searcher.ready(function(results, isLast) {
24
- _this.addResults(results, isLast);
25
- })
26
-
27
- this.initNavigation();
28
- this.setNavigationActive(false);
29
- }
30
-
31
- this.search = function(value, selectFirstMatch) {
32
- value = jQuery.trim(value).toLowerCase();
33
- if (value) {
34
- this.setNavigationActive(true);
35
- } else {
36
- this.setNavigationActive(false);
37
- }
38
-
39
- if (value == '') {
40
- this.lastQuery = value;
41
- this.$result.empty();
42
- this.setNavigationActive(false);
43
- } else if (value != this.lastQuery) {
44
- this.lastQuery = value;
45
- this.firstRun = true;
46
- this.searcher.find(value);
47
- }
48
- }
49
-
50
- this.addResults = function(results, isLast) {
51
- var target = this.$result.get(0);
52
- if (this.firstRun && (results.length > 0 || isLast)) {
53
- this.$current = null;
54
- this.$result.empty();
55
- }
56
-
57
- for (var i=0, l = results.length; i < l; i++) {
58
- target.appendChild(this.renderItem.call(this, results[i]));
59
- };
60
-
61
- if (this.firstRun && results.length > 0) {
62
- this.firstRun = false;
63
- this.$current = $(target.firstChild);
64
- this.$current.addClass('current');
65
- }
66
- if (jQuery.browser.msie) this.$element[0].className += '';
67
- }
68
-
69
- this.move = function(isDown) {
70
- if (!this.$current) return;
71
- var $next = this.$current[isDown ? 'next' : 'prev']();
72
- if ($next.length) {
73
- this.$current.removeClass('current');
74
- $next.addClass('current');
75
- this.scrollIntoView($next[0], this.$view[0]);
76
- this.$current = $next;
77
- }
78
- return true;
79
- }
80
-
81
- this.hlt = function(html) {
82
- return this.escapeHTML(html).
83
- replace(/\u0001/g, '<em>').
84
- replace(/\u0002/g, '</em>');
85
- }
86
-
87
- this.escapeHTML = function(html) {
88
- return html.replace(/[&<>]/g, function(c) {
89
- return '&#' + c.charCodeAt(0) + ';';
90
- });
91
- }
92
-
93
- });
94
-
@@ -1 +0,0 @@
1
- var search_data = {"index":{"searchIndex":["netlinx","compile","extension","apw","project","system","systemfile","workspace","<<()","<<()","<<()","compile()","compile()","compile()","compiler_include_paths()","compiler_library_paths()","compiler_module_paths()","compiler_target_files()","include?()","include?()","include?()","new()","new()","new()","new()","path()","to_s()","to_s()","to_s()","to_s()"],"longSearchIndex":["netlinx","netlinx::compile","netlinx::compile::extension","netlinx::compile::extension::apw","netlinx::project","netlinx::system","netlinx::systemfile","netlinx::workspace","netlinx::project#<<()","netlinx::system#<<()","netlinx::workspace#<<()","netlinx::project#compile()","netlinx::system#compile()","netlinx::workspace#compile()","netlinx::system#compiler_include_paths()","netlinx::system#compiler_library_paths()","netlinx::system#compiler_module_paths()","netlinx::system#compiler_target_files()","netlinx::project#include?()","netlinx::system#include?()","netlinx::workspace#include?()","netlinx::project::new()","netlinx::system::new()","netlinx::systemfile::new()","netlinx::workspace::new()","netlinx::workspace#path()","netlinx::project#to_s()","netlinx::system#to_s()","netlinx::systemfile#to_s()","netlinx::workspace#to_s()"],"info":[["NetLinx","","NetLinx.html","",""],["NetLinx::Compile","","NetLinx/Compile.html","",""],["NetLinx::Compile::Extension","","NetLinx/Compile/Extension.html","",""],["NetLinx::Compile::Extension::APW","","NetLinx/Compile/Extension/APW.html","","<p>Instructs netlinx-compile on how to process .apw NetLinx workspace files.\n"],["NetLinx::Project","","NetLinx/Project.html","","<p>A collection of NeTLinx systems. Workspace -&gt; Project -&gt; System\n"],["NetLinx::System","","NetLinx/System.html","","<p>A collection of resources loaded onto a NetLinx master. Workspace -&gt;\nProject -&gt; System\n"],["NetLinx::SystemFile","","NetLinx/SystemFile.html","",""],["NetLinx::Workspace","","NetLinx/Workspace.html","","<p>A NetLinx Studio workspace. Collection of projects. Workspace -&gt; Project\n-&gt; System\n"],["<<","NetLinx::Project","NetLinx/Project.html#method-i-3C-3C","(system)","<p>Alias to add a system.\n"],["<<","NetLinx::System","NetLinx/System.html#method-i-3C-3C","(file)","<p>Alias to add a file.\n"],["<<","NetLinx::Workspace","NetLinx/Workspace.html#method-i-3C-3C","(project)","<p>Alias to add a project.\n"],["compile","NetLinx::Project","NetLinx/Project.html#method-i-compile","()","<p>Compile all systems in this project.\n"],["compile","NetLinx::System","NetLinx/System.html#method-i-compile","()","<p>Compile this system.\n"],["compile","NetLinx::Workspace","NetLinx/Workspace.html#method-i-compile","()","<p>Compile all projects in this workspace.\n"],["compiler_include_paths","NetLinx::System","NetLinx/System.html#method-i-compiler_include_paths","()","<p>See Test::NetLinx::Compilable.\n"],["compiler_library_paths","NetLinx::System","NetLinx/System.html#method-i-compiler_library_paths","()","<p>See Test::NetLinx::Compilable.\n"],["compiler_module_paths","NetLinx::System","NetLinx/System.html#method-i-compiler_module_paths","()","<p>See Test::NetLinx::Compilable.\n"],["compiler_target_files","NetLinx::System","NetLinx/System.html#method-i-compiler_target_files","()","<p>See Test::NetLinx::Compilable.\n"],["include?","NetLinx::Project","NetLinx/Project.html#method-i-include-3F","(file)","<p>Returns true if the project contains the specified file.\n"],["include?","NetLinx::System","NetLinx/System.html#method-i-include-3F","(file)","<p>Returns true if the project contains the specified file.\n"],["include?","NetLinx::Workspace","NetLinx/Workspace.html#method-i-include-3F","(file)","<p>Returns true if the workspace contains the specified file.\n"],["new","NetLinx::Project","NetLinx/Project.html#method-c-new","(**kvargs)",""],["new","NetLinx::System","NetLinx/System.html#method-c-new","(**kvargs)",""],["new","NetLinx::SystemFile","NetLinx/SystemFile.html#method-c-new","(**kvargs)",""],["new","NetLinx::Workspace","NetLinx/Workspace.html#method-c-new","(**kvargs)",""],["path","NetLinx::Workspace","NetLinx/Workspace.html#method-i-path","()","<p>Directory the workspace resides in.\n"],["to_s","NetLinx::Project","NetLinx/Project.html#method-i-to_s","()","<p>Returns the project name.\n"],["to_s","NetLinx::System","NetLinx/System.html#method-i-to_s","()","<p>Returns the system name.\n"],["to_s","NetLinx::SystemFile","NetLinx/SystemFile.html#method-i-to_s","()","<p>Print the SystemFile&#39;s name.\n"],["to_s","NetLinx::Workspace","NetLinx/Workspace.html#method-i-to_s","()","<p>Returns the name of the workspace.\n"]]}}
data/doc/js/searcher.js DELETED
@@ -1,228 +0,0 @@
1
- Searcher = function(data) {
2
- this.data = data;
3
- this.handlers = [];
4
- }
5
-
6
- Searcher.prototype = new function() {
7
- // search is performed in chunks of 1000 for non-blocking user input
8
- var CHUNK_SIZE = 1000;
9
- // do not try to find more than 100 results
10
- var MAX_RESULTS = 100;
11
- var huid = 1;
12
- var suid = 1;
13
- var runs = 0;
14
-
15
- this.find = function(query) {
16
- var queries = splitQuery(query);
17
- var regexps = buildRegexps(queries);
18
- var highlighters = buildHilighters(queries);
19
- var state = { from: 0, pass: 0, limit: MAX_RESULTS, n: suid++};
20
- var _this = this;
21
-
22
- this.currentSuid = state.n;
23
-
24
- if (!query) return;
25
-
26
- var run = function() {
27
- // stop current search thread if new search started
28
- if (state.n != _this.currentSuid) return;
29
-
30
- var results =
31
- performSearch(_this.data, regexps, queries, highlighters, state);
32
- var hasMore = (state.limit > 0 && state.pass < 4);
33
-
34
- triggerResults.call(_this, results, !hasMore);
35
- if (hasMore) {
36
- setTimeout(run, 2);
37
- }
38
- runs++;
39
- };
40
- runs = 0;
41
-
42
- // start search thread
43
- run();
44
- }
45
-
46
- /* ----- Events ------ */
47
- this.ready = function(fn) {
48
- fn.huid = huid;
49
- this.handlers.push(fn);
50
- }
51
-
52
- /* ----- Utilities ------ */
53
- function splitQuery(query) {
54
- return jQuery.grep(query.split(/(\s+|::?|\(\)?)/), function(string) {
55
- return string.match(/\S/)
56
- });
57
- }
58
-
59
- function buildRegexps(queries) {
60
- return jQuery.map(queries, function(query) {
61
- return new RegExp(query.replace(/(.)/g, '([$1])([^$1]*?)'), 'i')
62
- });
63
- }
64
-
65
- function buildHilighters(queries) {
66
- return jQuery.map(queries, function(query) {
67
- return jQuery.map(query.split(''), function(l, i) {
68
- return '\u0001$' + (i*2+1) + '\u0002$' + (i*2+2);
69
- }).join('');
70
- });
71
- }
72
-
73
- // function longMatchRegexp(index, longIndex, regexps) {
74
- // for (var i = regexps.length - 1; i >= 0; i--){
75
- // if (!index.match(regexps[i]) && !longIndex.match(regexps[i])) return false;
76
- // };
77
- // return true;
78
- // }
79
-
80
-
81
- /* ----- Mathchers ------ */
82
-
83
- /*
84
- * This record matches if the index starts with queries[0] and the record
85
- * matches all of the regexps
86
- */
87
- function matchPassBeginning(index, longIndex, queries, regexps) {
88
- if (index.indexOf(queries[0]) != 0) return false;
89
- for (var i=1, l = regexps.length; i < l; i++) {
90
- if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
91
- return false;
92
- };
93
- return true;
94
- }
95
-
96
- /*
97
- * This record matches if the longIndex starts with queries[0] and the
98
- * longIndex matches all of the regexps
99
- */
100
- function matchPassLongIndex(index, longIndex, queries, regexps) {
101
- if (longIndex.indexOf(queries[0]) != 0) return false;
102
- for (var i=1, l = regexps.length; i < l; i++) {
103
- if (!longIndex.match(regexps[i]))
104
- return false;
105
- };
106
- return true;
107
- }
108
-
109
- /*
110
- * This record matches if the index contains queries[0] and the record
111
- * matches all of the regexps
112
- */
113
- function matchPassContains(index, longIndex, queries, regexps) {
114
- if (index.indexOf(queries[0]) == -1) return false;
115
- for (var i=1, l = regexps.length; i < l; i++) {
116
- if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
117
- return false;
118
- };
119
- return true;
120
- }
121
-
122
- /*
123
- * This record matches if regexps[0] matches the index and the record
124
- * matches all of the regexps
125
- */
126
- function matchPassRegexp(index, longIndex, queries, regexps) {
127
- if (!index.match(regexps[0])) return false;
128
- for (var i=1, l = regexps.length; i < l; i++) {
129
- if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
130
- return false;
131
- };
132
- return true;
133
- }
134
-
135
-
136
- /* ----- Highlighters ------ */
137
- function highlightRegexp(info, queries, regexps, highlighters) {
138
- var result = createResult(info);
139
- for (var i=0, l = regexps.length; i < l; i++) {
140
- result.title = result.title.replace(regexps[i], highlighters[i]);
141
- result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
142
- };
143
- return result;
144
- }
145
-
146
- function hltSubstring(string, pos, length) {
147
- return string.substring(0, pos) + '\u0001' + string.substring(pos, pos + length) + '\u0002' + string.substring(pos + length);
148
- }
149
-
150
- function highlightQuery(info, queries, regexps, highlighters) {
151
- var result = createResult(info);
152
- var pos = 0;
153
- var lcTitle = result.title.toLowerCase();
154
-
155
- pos = lcTitle.indexOf(queries[0]);
156
- if (pos != -1) {
157
- result.title = hltSubstring(result.title, pos, queries[0].length);
158
- }
159
-
160
- result.namespace = result.namespace.replace(regexps[0], highlighters[0]);
161
- for (var i=1, l = regexps.length; i < l; i++) {
162
- result.title = result.title.replace(regexps[i], highlighters[i]);
163
- result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
164
- };
165
- return result;
166
- }
167
-
168
- function createResult(info) {
169
- var result = {};
170
- result.title = info[0];
171
- result.namespace = info[1];
172
- result.path = info[2];
173
- result.params = info[3];
174
- result.snippet = info[4];
175
- return result;
176
- }
177
-
178
- /* ----- Searching ------ */
179
- function performSearch(data, regexps, queries, highlighters, state) {
180
- var searchIndex = data.searchIndex;
181
- var longSearchIndex = data.longSearchIndex;
182
- var info = data.info;
183
- var result = [];
184
- var i = state.from;
185
- var l = searchIndex.length;
186
- var togo = CHUNK_SIZE;
187
- var matchFunc, hltFunc;
188
-
189
- while (state.pass < 4 && state.limit > 0 && togo > 0) {
190
- if (state.pass == 0) {
191
- matchFunc = matchPassBeginning;
192
- hltFunc = highlightQuery;
193
- } else if (state.pass == 1) {
194
- matchFunc = matchPassLongIndex;
195
- hltFunc = highlightQuery;
196
- } else if (state.pass == 2) {
197
- matchFunc = matchPassContains;
198
- hltFunc = highlightQuery;
199
- } else if (state.pass == 3) {
200
- matchFunc = matchPassRegexp;
201
- hltFunc = highlightRegexp;
202
- }
203
-
204
- for (; togo > 0 && i < l && state.limit > 0; i++, togo--) {
205
- if (info[i].n == state.n) continue;
206
- if (matchFunc(searchIndex[i], longSearchIndex[i], queries, regexps)) {
207
- info[i].n = state.n;
208
- result.push(hltFunc(info[i], queries, regexps, highlighters));
209
- state.limit--;
210
- }
211
- };
212
- if (searchIndex.length <= i) {
213
- state.pass++;
214
- i = state.from = 0;
215
- } else {
216
- state.from = i;
217
- }
218
- }
219
- return result;
220
- }
221
-
222
- function triggerResults(results, isLast) {
223
- jQuery.each(this.handlers, function(i, fn) {
224
- fn.call(this, results, isLast)
225
- })
226
- }
227
- }
228
-