tor_extend 1.0.2

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 (56) hide show
  1. data/Change.log +12 -0
  2. data/ReadME.txt +190 -0
  3. data/doc/ReadME_txt.html +301 -0
  4. data/doc/Tor.html +140 -0
  5. data/doc/Tor/Bridge.html +145 -0
  6. data/doc/Tor/CachedDesc.html +472 -0
  7. data/doc/Tor/Constants.html +185 -0
  8. data/doc/Tor/Router.html +146 -0
  9. data/doc/Tor/StatsObj.html +1209 -0
  10. data/doc/Tor/TController.html +1111 -0
  11. data/doc/created.rid +7 -0
  12. data/doc/images/add.png +0 -0
  13. data/doc/images/brick.png +0 -0
  14. data/doc/images/brick_link.png +0 -0
  15. data/doc/images/bug.png +0 -0
  16. data/doc/images/bullet_black.png +0 -0
  17. data/doc/images/bullet_toggle_minus.png +0 -0
  18. data/doc/images/bullet_toggle_plus.png +0 -0
  19. data/doc/images/date.png +0 -0
  20. data/doc/images/delete.png +0 -0
  21. data/doc/images/find.png +0 -0
  22. data/doc/images/loadingAnimation.gif +0 -0
  23. data/doc/images/macFFBgHack.png +0 -0
  24. data/doc/images/package.png +0 -0
  25. data/doc/images/page_green.png +0 -0
  26. data/doc/images/page_white_text.png +0 -0
  27. data/doc/images/page_white_width.png +0 -0
  28. data/doc/images/plugin.png +0 -0
  29. data/doc/images/ruby.png +0 -0
  30. data/doc/images/tag_blue.png +0 -0
  31. data/doc/images/tag_green.png +0 -0
  32. data/doc/images/transparent.png +0 -0
  33. data/doc/images/wrench.png +0 -0
  34. data/doc/images/wrench_orange.png +0 -0
  35. data/doc/images/zoom.png +0 -0
  36. data/doc/index.html +90 -0
  37. data/doc/js/darkfish.js +153 -0
  38. data/doc/js/jquery.js +18 -0
  39. data/doc/js/navigation.js +142 -0
  40. data/doc/js/search.js +94 -0
  41. data/doc/js/search_index.js +1 -0
  42. data/doc/js/searcher.js +228 -0
  43. data/doc/lib/constants_rb.html +96 -0
  44. data/doc/lib/httpmod_rb.html +95 -0
  45. data/doc/lib/tcontroller_rb.html +93 -0
  46. data/doc/lib/tor_extend_rb.html +97 -0
  47. data/doc/lib/tstats_rb.html +93 -0
  48. data/doc/rdoc.css +543 -0
  49. data/doc/table_of_contents.html +159 -0
  50. data/lib/constants.rb +106 -0
  51. data/lib/httpmod.rb +89 -0
  52. data/lib/tcontroller.rb +475 -0
  53. data/lib/tor_extend.rb +189 -0
  54. data/lib/tstats.rb +514 -0
  55. data/tor_extend.gemspec +26 -0
  56. metadata +138 -0
@@ -0,0 +1,94 @@
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
+
@@ -0,0 +1 @@
1
+ var search_data = {"index":{"searchIndex":["tor","bridge","cacheddesc","constants","router","statsobj","tcontroller","attach_stream()","bridges()","cir_status()","closeallcircuits()","closecircuit()","continent_count()","continent_count_uniq()","continent_getfingerprint()","continent_list()","continent_stat()","continent_stat_uniq()","country_count()","country_count_uniq()","country_getfingerprint()","country_getip()","country_list()","country_stat()","country_stat_uniq()","dbconnect()","ds()","extendcir()","extendcir_slowly()","genkml()","get_bridges()","get_countryname()","get_entryguards()","get_geoiprecord()","get_httperrors()","get_latlng()","get_purposeip()","get_uniqid()","getconf()","getinfo()","net_status()","new()","newstreams()","ors()","readall()","setconf()","signal()","sr()","stat()","topcountries()","topcountries_uniq()","readme"],"longSearchIndex":["tor","tor::bridge","tor::cacheddesc","tor::constants","tor::router","tor::statsobj","tor::tcontroller","tor::tcontroller#attach_stream()","tor::tcontroller#bridges()","tor::tcontroller#cir_status()","tor::tcontroller#closeallcircuits()","tor::tcontroller#closecircuit()","tor::statsobj#continent_count()","tor::statsobj#continent_count_uniq()","tor::statsobj#continent_getfingerprint()","tor::statsobj#continent_list()","tor::statsobj#continent_stat()","tor::statsobj#continent_stat_uniq()","tor::statsobj#country_count()","tor::statsobj#country_count_uniq()","tor::statsobj#country_getfingerprint()","tor::statsobj#country_getip()","tor::statsobj#country_list()","tor::statsobj#country_stat()","tor::statsobj#country_stat_uniq()","tor::cacheddesc#dbconnect()","tor::tcontroller#ds()","tor::tcontroller#extendcir()","tor::tcontroller#extendcir_slowly()","tor::statsobj#genkml()","tor::tcontroller#get_bridges()","tor::statsobj#get_countryname()","tor::tcontroller#get_entryguards()","tor::cacheddesc#get_geoiprecord()","tor::tcontroller#get_httperrors()","tor::statsobj#get_latlng()","tor::tcontroller#get_purposeip()","tor::statsobj#get_uniqid()","tor::tcontroller#getconf()","tor::tcontroller#getinfo()","tor::tcontroller#net_status()","tor::cacheddesc::new()","tor::tcontroller#newstreams()","tor::cacheddesc#ors()","tor::cacheddesc#readall()","tor::tcontroller#setconf()","tor::tcontroller#signal()","tor::tcontroller#sr()","tor::cacheddesc#stat()","tor::statsobj#topcountries()","tor::statsobj#topcountries_uniq()",""],"info":[["Tor","","Tor.html","","<p>Tor includes the TController class, which inherits the methods from\nBendiken’s page Tor::Controller class …\n"],["Tor::Bridge","","Tor/Bridge.html","","<p>Tor::Bridge is a class for the active record database holding the\nip-addresses and port for the bridges …\n"],["Tor::CachedDesc","","Tor/CachedDesc.html","","<p>Tor::CachedDesc is a class used to read cached descriptors into a database.\nThe ip address, fingerprint, …\n"],["Tor::Constants","","Tor/Constants.html","","<p>This module contains constants for the Tor module such as a COUNLATLNG\n"],["Tor::Router","","Tor/Router.html","","<p>Tor::Router is a class for the active record database holding the\nip-addresses, platform, fingerprint, …\n"],["Tor::StatsObj","","Tor/StatsObj.html","","<p>This class can be used to obtain a variety of statistics or data from\nTor::Router. The same user have …\n"],["Tor::TController","","Tor/TController.html","","<p>Tor:TController is an extension of the Tor::Controller class, providing\nmore methods. It inherits all …\n"],["attach_stream","Tor::TController","Tor/TController.html#method-i-attach_stream","(stream_no, cir_num ,hop_count)","<p>This attaches streams to circuits. No documentation yet.\n"],["bridges","Tor::TController","Tor/TController.html#method-i-bridges","()","<p>Returns all the brdiges in the database as an array.\n<p>Tor::TController.bridges =&gt; [{:ipaddr, :port, …\n"],["cir_status","Tor::TController","Tor/TController.html#method-i-cir_status","()","<p>This returns the circuit-status in an array, or an empty array on failure\n<p><strong>Get the circuit-status from</strong> ...\n"],["closeallcircuits","Tor::TController","Tor/TController.html#method-i-closeallcircuits","()","<p>This attempts to close all open circuits.\n<p><strong>Closing all circuits</strong>\n\n<pre>Tor::TController.closeallcircuits</pre>\n"],["closecircuit","Tor::TController","Tor/TController.html#method-i-closecircuit","(circnum)","<p>This attempts to close a single circuit.\n<p><strong>Closing circuits</strong>\n\n<pre>Tor::TController.closecircuit(15)</pre>\n"],["continent_count","Tor::StatsObj","Tor/StatsObj.html#method-i-continent_count","(code,*platform)","<p>This returns the number of OR IP addresses from the continent with the code\nused as input (and optionally …\n"],["continent_count_uniq","Tor::StatsObj","Tor/StatsObj.html#method-i-continent_count_uniq","(code,*platform)","<p>This returns the number of OR IP addresses from the continent with the code\nused as input (and optionally …\n"],["continent_getfingerprint","Tor::StatsObj","Tor/StatsObj.html#method-i-continent_getfingerprint","(continent_filter,*platform)","<p>This retuns an array of all OR fingerprints from Tor::Router using a filter\nof continents and optional …\n"],["continent_list","Tor::StatsObj","Tor/StatsObj.html#method-i-continent_list","(*platform)","<p>This returns a list of all continents that have contributed to the OR IP\naddresses in Tor::Router It …\n"],["continent_stat","Tor::StatsObj","Tor/StatsObj.html#method-i-continent_stat","(allcontinents,*platform)","<p>It takes an array of continent codes as input, and produces a hash with the\ncontinent codes as keys and …\n"],["continent_stat_uniq","Tor::StatsObj","Tor/StatsObj.html#method-i-continent_stat_uniq","(allcontinents,*platform)","<p>It takes an array of continent codes as input, and produces a hash with the\ncontinent codes as keys and …\n"],["country_count","Tor::StatsObj","Tor/StatsObj.html#method-i-country_count","(code,*platform)","<p>This returns the number of OR IP addresses from the country with the code\nused as input (and optionally …\n"],["country_count_uniq","Tor::StatsObj","Tor/StatsObj.html#method-i-country_count_uniq","(countryfilter,*platform)","<p>This returns the total number of uniq identities found in the database.\n<p>&lt;b&gt;Get total number of routers ...\n"],["country_getfingerprint","Tor::StatsObj","Tor/StatsObj.html#method-i-country_getfingerprint","(country_filter,*platform)","<p>This retuns an array of all OR fingerprints from the Tor::Router using a\nfilter of countries and optional …\n"],["country_getip","Tor::StatsObj","Tor/StatsObj.html#method-i-country_getip","(country_filter,*platform)","<p>This retuns an array of all OR IP addresses from the Tor::Router using a\nfilter of countries and optional …\n"],["country_list","Tor::StatsObj","Tor/StatsObj.html#method-i-country_list","(*platform)","<p>This returns a list of all countries that have contributed to the OR IP\naddresses in Tor::Router It can …\n"],["country_stat","Tor::StatsObj","Tor/StatsObj.html#method-i-country_stat","(countrycodes,*platform)","<p>It takes an array of country codes as input, and produces a hash with the\ncountry codes as keys and the …\n"],["country_stat_uniq","Tor::StatsObj","Tor/StatsObj.html#method-i-country_stat_uniq","(countrycodes,*platform)","<p>It takes an array of country codes as input, and produces a hash with the\ncountry codes as keys and the …\n"],["dbconnect","Tor::CachedDesc","Tor/CachedDesc.html#method-i-dbconnect","(*dbconfig)","<p>Tor::dbconnect() method connects using the optional database config passed\nas argument. It creates an …\n"],["ds","Tor::TController","Tor/TController.html#method-i-ds","()","<p>Returns the an array of of directory servers from the consensus.\n<p>Tor::TController.ds =&gt; [w.x.y.z:port, …\n"],["extendcir","Tor::TController","Tor/TController.html#method-i-extendcir","(circnum,or_list)","<p>This creates/extends a circuit over multiple nodes. A new circuit is\ncreated if cir_num == 0.\n<p><strong>Creating</strong> ...\n"],["extendcir_slowly","Tor::TController","Tor/TController.html#method-i-extendcir_slowly","(orarray)","<p>This builds a circuit to each member of the array argument, skipping any\nnode that fails to connect. …\n"],["genkml","Tor::StatsObj","Tor/StatsObj.html#method-i-genkml","(mapname,*platform)","<p>This method generates a KML using the locations in Tor::Router database. It\ntakes a name for the KML …\n"],["get_bridges","Tor::TController","Tor/TController.html#method-i-get_bridges","(url, cacheddesc, *config)","<p>This gets 3 bridge IP addresses from the Tor bridge website. proxyconfig is\noptional. default proxyconfig …\n"],["get_countryname","Tor::StatsObj","Tor/StatsObj.html#method-i-get_countryname","(ccode)","<p>This returns the country name from the country code.\n<p>@example Get country name from country code\n\n<pre>Tor::StatsObj.get_countryname(&quot;FR&quot;)</pre>\n"],["get_entryguards","Tor::TController","Tor/TController.html#method-i-get_entryguards","()","<p>This gets enty guards from the control port of tor using the getinfo\n“entry-guards” command …\n"],["get_geoiprecord","Tor::CachedDesc","Tor/CachedDesc.html#method-i-get_geoiprecord","(ipaddr)","<p>This returns the Geoip record from one of the database files used in\nTor::CachedDesc.\n"],["get_httperrors","Tor::TController","Tor/TController.html#method-i-get_httperrors","()","<p>This returns the number of HTTP errors from the\nTor::TController.get_bridges command\n"],["get_latlng","Tor::StatsObj","Tor/StatsObj.html#method-i-get_latlng","(country_code)","<p>This returns the [latitude,longitude] from the country code. Using the\nconstant Tor::Constants::COUNLATLNG …\n"],["get_purposeip","Tor::TController","Tor/TController.html#method-i-get_purposeip","(nodetype)","<p>This gets the IP addresses for ORs based on the characteristics of the OR.\nExample of the properties …\n"],["get_uniqid","Tor::StatsObj","Tor/StatsObj.html#method-i-get_uniqid","(countryfilter,*platform)","<p>This returns the id of uniq identities in the database\n<p>@example Get Uniq id of ORs in the UK\n\n<pre>Tor::Stats.Obj.get_uniqid(&quot;GB&quot;) ...</pre>\n"],["getconf","Tor::TController","Tor/TController.html#method-i-getconf","(confname)","<p>This gets a configuration from Tor. The arguments of this command might be\ncase sensitive. It returns …\n"],["getinfo","Tor::TController","Tor/TController.html#method-i-getinfo","(*args)","<p>This method sends the “GETINFO” protocol message with the arguments.\n<p><strong>Getting more information</strong> ...\n"],["net_status","Tor::TController","Tor/TController.html#method-i-net_status","()","<p>This returns an array of hash tables with the fingerprints of all onion\nrouters that have not been marked …\n"],["new","Tor::CachedDesc","Tor/CachedDesc.html#method-c-new","(geoip_path)","<p>This initialises the stat attribute of the CachedDesc class that can be\nused to get data from Tor::Router …\n"],["newstreams","Tor::TController","Tor/TController.html#method-i-newstreams","()","<p>This returns all the new streams that have not been assigned to a circuit\n"],["ors","Tor::CachedDesc","Tor/CachedDesc.html#method-i-ors","()","<p>Returns the Router database class. Allows interation with the database as\nan instance of Active::Base …\n"],["readall","Tor::CachedDesc","Tor/CachedDesc.html#method-i-readall","(filename)","<p>Read a file and put all the ralated information into the Tor::Router\ndatabase.\n"],["setconf","Tor::TController","Tor/TController.html#method-i-setconf","(confname,value)","<p>This sets a configuration in Tor to a value.\n<p><strong>Setting Tor config</strong>\n\n<pre>Tor::TController.setconf(&quot;__DisablePredictedCircuits&quot;,1) ...</pre>\n"],["signal","Tor::TController","Tor/TController.html#method-i-signal","(args)","<p>This method sends “signals” protocol message with the arguments.\n<p><strong>Reload Tor config from file</strong> ...\n"],["sr","Tor::TController","Tor/TController.html#method-i-sr","(command, *args)","<p>This sends commands and returns the protocol response code along with an\narray containing the results …\n"],["stat","Tor::CachedDesc","Tor/CachedDesc.html#method-i-stat","()","<p>This initialises the stat attribute of the CachedDesc class that can be\nused to get data from Tor::Router …\n"],["topcountries","Tor::StatsObj","Tor/StatsObj.html#method-i-topcountries","(num,*platform)","<p>This returns the top n-countries. An optional platform parameter can be\npassed to this and returns an …\n"],["topcountries_uniq","Tor::StatsObj","Tor/StatsObj.html#method-i-topcountries_uniq","(num,*platform)","<p>This returns the top n-countries. An optional platform parameter can be\npassed to this and returns an …\n"],["ReadME","","ReadME_txt.html","","<p>Please see the Unlicence disclaimer in Bendiken’s tor-ruby gem.\n<p><strong>Installation instruction </strong>\n<p>Run “gem …\n"]]}}
@@ -0,0 +1,228 @@
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
+
@@ -0,0 +1,96 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
6
+
7
+ <title>ReadME</title>
8
+
9
+ <link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet">
10
+
11
+ <script type="text/javascript">
12
+ var rdoc_rel_prefix = "../";
13
+ </script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
16
+ <script type="text/javascript" charset="utf-8" src="../js/navigation.js"></script>
17
+ <script type="text/javascript" charset="utf-8" src="../js/search_index.js"></script>
18
+ <script type="text/javascript" charset="utf-8" src="../js/search.js"></script>
19
+ <script type="text/javascript" charset="utf-8" src="../js/searcher.js"></script>
20
+ <script type="text/javascript" charset="utf-8" src="../js/darkfish.js"></script>
21
+
22
+
23
+ <body class="file">
24
+ <nav id="metadata">
25
+ <nav id="home-section" class="section">
26
+ <h3 class="section-header">
27
+ <a href="../index.html">Home</a>
28
+ <a href="../table_of_contents.html#classes">Classes</a>
29
+ <a href="../table_of_contents.html#methods">Methods</a>
30
+ </h3>
31
+ </nav>
32
+
33
+
34
+ <nav id="search-section" class="section project-section" class="initially-hidden">
35
+ <form action="#" method="get" accept-charset="utf-8">
36
+ <h3 class="section-header">
37
+ <input type="text" name="search" placeholder="Search" id="search-field"
38
+ title="Type to search, Up and Down to navigate, Enter to load">
39
+ </h3>
40
+ </form>
41
+
42
+ <ul id="search-results" class="initially-hidden"></ul>
43
+ </nav>
44
+
45
+
46
+ <div id="project-metadata">
47
+ <nav id="fileindex-section" class="section project-section">
48
+ <h3 class="section-header">Pages</h3>
49
+
50
+ <ul>
51
+
52
+ <li class="file"><a href="../ReadME_txt.html">ReadME</a>
53
+
54
+ </ul>
55
+ </nav>
56
+
57
+ <nav id="classindex-section" class="section project-section">
58
+ <h3 class="section-header">Class and Module Index</h3>
59
+
60
+ <ul class="link-list">
61
+
62
+ <li><a href="../Tor.html">Tor</a>
63
+
64
+ <li><a href="../Tor/Bridge.html">Tor::Bridge</a>
65
+
66
+ <li><a href="../Tor/CachedDesc.html">Tor::CachedDesc</a>
67
+
68
+ <li><a href="../Tor/Constants.html">Tor::Constants</a>
69
+
70
+ <li><a href="../Tor/Router.html">Tor::Router</a>
71
+
72
+ <li><a href="../Tor/StatsObj.html">Tor::StatsObj</a>
73
+
74
+ <li><a href="../Tor/TController.html">Tor::TController</a>
75
+
76
+ </ul>
77
+ </nav>
78
+
79
+ </div>
80
+ </nav>
81
+
82
+ <div id="documentation" class="description">
83
+
84
+ <p>This module contains constants for the <a href="../Tor.html">Tor</a> module
85
+ such as a COUNLATLNG</p>
86
+
87
+ </div>
88
+
89
+
90
+
91
+ <footer id="validator-badges">
92
+ <p><a href="http://validator.w3.org/check/referer">[Validate]</a>
93
+ <p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 3.11.
94
+ <p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
95
+ </footer>
96
+
@@ -0,0 +1,95 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
6
+
7
+ <title>ReadME</title>
8
+
9
+ <link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet">
10
+
11
+ <script type="text/javascript">
12
+ var rdoc_rel_prefix = "../";
13
+ </script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
16
+ <script type="text/javascript" charset="utf-8" src="../js/navigation.js"></script>
17
+ <script type="text/javascript" charset="utf-8" src="../js/search_index.js"></script>
18
+ <script type="text/javascript" charset="utf-8" src="../js/search.js"></script>
19
+ <script type="text/javascript" charset="utf-8" src="../js/searcher.js"></script>
20
+ <script type="text/javascript" charset="utf-8" src="../js/darkfish.js"></script>
21
+
22
+
23
+ <body class="file">
24
+ <nav id="metadata">
25
+ <nav id="home-section" class="section">
26
+ <h3 class="section-header">
27
+ <a href="../index.html">Home</a>
28
+ <a href="../table_of_contents.html#classes">Classes</a>
29
+ <a href="../table_of_contents.html#methods">Methods</a>
30
+ </h3>
31
+ </nav>
32
+
33
+
34
+ <nav id="search-section" class="section project-section" class="initially-hidden">
35
+ <form action="#" method="get" accept-charset="utf-8">
36
+ <h3 class="section-header">
37
+ <input type="text" name="search" placeholder="Search" id="search-field"
38
+ title="Type to search, Up and Down to navigate, Enter to load">
39
+ </h3>
40
+ </form>
41
+
42
+ <ul id="search-results" class="initially-hidden"></ul>
43
+ </nav>
44
+
45
+
46
+ <div id="project-metadata">
47
+ <nav id="fileindex-section" class="section project-section">
48
+ <h3 class="section-header">Pages</h3>
49
+
50
+ <ul>
51
+
52
+ <li class="file"><a href="../ReadME_txt.html">ReadME</a>
53
+
54
+ </ul>
55
+ </nav>
56
+
57
+ <nav id="classindex-section" class="section project-section">
58
+ <h3 class="section-header">Class and Module Index</h3>
59
+
60
+ <ul class="link-list">
61
+
62
+ <li><a href="../Tor.html">Tor</a>
63
+
64
+ <li><a href="../Tor/Bridge.html">Tor::Bridge</a>
65
+
66
+ <li><a href="../Tor/CachedDesc.html">Tor::CachedDesc</a>
67
+
68
+ <li><a href="../Tor/Constants.html">Tor::Constants</a>
69
+
70
+ <li><a href="../Tor/Router.html">Tor::Router</a>
71
+
72
+ <li><a href="../Tor/StatsObj.html">Tor::StatsObj</a>
73
+
74
+ <li><a href="../Tor/TController.html">Tor::TController</a>
75
+
76
+ </ul>
77
+ </nav>
78
+
79
+ </div>
80
+ </nav>
81
+
82
+ <div id="documentation" class="description">
83
+
84
+ <p>httpmod functions - extends net/http</p>
85
+
86
+ </div>
87
+
88
+
89
+
90
+ <footer id="validator-badges">
91
+ <p><a href="http://validator.w3.org/check/referer">[Validate]</a>
92
+ <p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 3.11.
93
+ <p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
94
+ </footer>
95
+