rdoc 6.1.0 → 6.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rdoc might be problematic. Click here for more details.

Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -0
  3. data/README.rdoc +0 -1
  4. data/Rakefile +12 -4
  5. data/lib/rdoc.rb +21 -0
  6. data/lib/rdoc/any_method.rb +52 -7
  7. data/lib/rdoc/class_module.rb +1 -1
  8. data/lib/rdoc/comment.rb +12 -1
  9. data/lib/rdoc/context.rb +10 -2
  10. data/lib/rdoc/context/section.rb +0 -13
  11. data/lib/rdoc/cross_reference.rb +4 -4
  12. data/lib/rdoc/erb_partial.rb +1 -1
  13. data/lib/rdoc/erbio.rb +2 -2
  14. data/lib/rdoc/generator/darkfish.rb +9 -9
  15. data/lib/rdoc/generator/pot.rb +3 -3
  16. data/lib/rdoc/generator/template/darkfish/_head.rhtml +9 -7
  17. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +2 -2
  18. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +2 -2
  19. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
  20. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +2 -2
  21. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
  22. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
  23. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +5 -5
  24. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +5 -5
  25. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +5 -5
  26. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  27. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +4 -4
  28. data/lib/rdoc/generator/template/darkfish/class.rhtml +44 -44
  29. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +35 -6
  30. data/lib/rdoc/generator/template/darkfish/index.rhtml +3 -4
  31. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +22 -99
  32. data/lib/rdoc/generator/template/darkfish/js/search.js +32 -31
  33. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +15 -16
  34. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +16 -16
  35. data/lib/rdoc/generator/template/json_index/js/navigation.js +4 -40
  36. data/lib/rdoc/generator/template/json_index/js/searcher.js +6 -6
  37. data/lib/rdoc/i18n.rb +1 -1
  38. data/lib/rdoc/markdown.kpeg +1 -1
  39. data/lib/rdoc/markdown.rb +16287 -0
  40. data/lib/rdoc/markdown/literals.rb +417 -0
  41. data/lib/rdoc/markup.rb +0 -2
  42. data/lib/rdoc/markup/formatter.rb +1 -1
  43. data/lib/rdoc/markup/parser.rb +58 -42
  44. data/lib/rdoc/markup/pre_process.rb +1 -1
  45. data/lib/rdoc/markup/regexp_handling.rb +41 -0
  46. data/lib/rdoc/markup/to_html.rb +19 -6
  47. data/lib/rdoc/markup/to_html_crossref.rb +18 -6
  48. data/lib/rdoc/options.rb +23 -5
  49. data/lib/rdoc/parser.rb +7 -7
  50. data/lib/rdoc/parser/c.rb +139 -183
  51. data/lib/rdoc/parser/ripper_state_lex.rb +2 -1
  52. data/lib/rdoc/parser/ruby.rb +18 -8
  53. data/lib/rdoc/rd/block_parser.rb +1056 -0
  54. data/lib/rdoc/rd/inline_parser.rb +1208 -0
  55. data/lib/rdoc/rdoc.rb +26 -20
  56. data/lib/rdoc/ri/driver.rb +9 -5
  57. data/lib/rdoc/ri/paths.rb +3 -17
  58. data/lib/rdoc/ri/task.rb +1 -1
  59. data/lib/rdoc/rubygems_hook.rb +2 -2
  60. data/lib/rdoc/servlet.rb +16 -8
  61. data/lib/rdoc/store.rb +6 -14
  62. data/lib/rdoc/task.rb +1 -1
  63. data/lib/rdoc/text.rb +8 -2
  64. data/lib/rdoc/token_stream.rb +8 -3
  65. data/lib/rdoc/tom_doc.rb +6 -7
  66. data/lib/rdoc/version.rb +1 -1
  67. data/man/ri.1 +247 -0
  68. data/rdoc.gemspec +194 -10
  69. metadata +10 -86
  70. data/.document +0 -5
  71. data/.gitignore +0 -14
  72. data/.travis.yml +0 -21
  73. data/appveyor.yml +0 -36
  74. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
  75. data/lib/rdoc/markup/formatter_test_case.rb +0 -764
  76. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -115
@@ -13,11 +13,10 @@
13
13
  </nav>
14
14
 
15
15
  <main role="main">
16
- <% if @options.main_page and
16
+ <%- if @options.main_page and
17
17
  main_page = @files.find { |f| f.full_name == @options.main_page } then %>
18
18
  <%= main_page.description %>
19
- <% else %>
19
+ <%- else -%>
20
20
  <p>This is the API documentation for <%= @title %>.
21
- <% end %>
21
+ <%- end -%>
22
22
  </main>
23
-
@@ -8,6 +8,7 @@
8
8
  */
9
9
 
10
10
  /* Provide console simulation for firebug-less environments */
11
+ /*
11
12
  if (!("console" in window) || !("firebug" in console)) {
12
13
  var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
13
14
  "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
@@ -16,41 +17,35 @@ if (!("console" in window) || !("firebug" in console)) {
16
17
  for (var i = 0; i < names.length; ++i)
17
18
  window.console[names[i]] = function() {};
18
19
  };
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
- };
20
+ */
29
21
 
30
22
 
31
23
  function showSource( e ) {
32
24
  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();
25
+ while (!target.classList.contains('method-detail')) {
26
+ target = target.parentNode;
27
+ }
28
+ if (typeof target !== "undefined" && target !== null) {
29
+ target = target.querySelector('.method-source-code');
30
+ }
31
+ if (typeof target !== "undefined" && target !== null) {
32
+ target.classList.toggle('active-menu')
33
+ }
41
34
  };
42
35
 
43
36
  function hookSourceViews() {
44
- $('.method-heading').click( showSource );
37
+ document.querySelectorAll('.method-heading').forEach(function (codeObject) {
38
+ codeObject.addEventListener('click', showSource);
39
+ });
45
40
  };
46
41
 
47
42
  function hookSearch() {
48
- var input = $('#search-field').eq(0);
49
- var result = $('#search-results').eq(0);
50
- $(result).show();
43
+ var input = document.querySelector('#search-field');
44
+ var result = document.querySelector('#search-results');
45
+ result.classList.remove("initially-hidden");
51
46
 
52
- var search_section = $('#search-section').get(0);
53
- $(search_section).show();
47
+ var search_section = document.querySelector('#search-section');
48
+ search_section.classList.remove("initially-hidden");
54
49
 
55
50
  var search = new Search(search_data, input, result);
56
51
 
@@ -77,85 +72,13 @@ function hookSearch() {
77
72
  }
78
73
 
79
74
  search.select = function(result) {
80
- var result_element = result.get(0);
81
- window.location.href = result_element.firstChild.firstChild.href;
75
+ window.location.href = result.firstChild.firstChild.href;
82
76
  }
83
77
 
84
78
  search.scrollIntoView = search.scrollInWindow;
85
79
  };
86
80
 
87
- function highlightTarget( anchor ) {
88
- console.debug( "Highlighting target '%s'.", anchor );
89
-
90
- $("a[name]").each( function() {
91
- if ( $(this).attr("name") == anchor ) {
92
- if ( !$(this).parent().parent().hasClass('target-section') ) {
93
- console.debug( "Wrapping the target-section" );
94
- $('div.method-detail').unwrap( 'div.target-section' );
95
- $(this).parent().wrap( '<div class="target-section"></div>' );
96
- } else {
97
- console.debug( "Already wrapped." );
98
- }
99
- }
100
- });
101
- };
102
-
103
- function highlightLocationTarget() {
104
- console.debug( "Location hash: %s", window.location.hash );
105
- if ( ! window.location.hash || window.location.hash.length == 0 ) return;
106
-
107
- var anchor = window.location.hash.substring(1);
108
- console.debug( "Found anchor: %s; matching %s", anchor, "a[name=" + anchor + "]" );
109
-
110
- highlightTarget( anchor );
111
- };
112
-
113
- function highlightClickTarget( event ) {
114
- console.debug( "Highlighting click target for event %o", event.target );
115
- try {
116
- var anchor = $(event.target).attr( 'href' ).substring(1);
117
- console.debug( "Found target anchor: %s", anchor );
118
- highlightTarget( anchor );
119
- } catch ( err ) {
120
- console.error( "Exception while highlighting: %o", err );
121
- };
122
- };
123
-
124
- function loadAsync(path, success, prefix) {
125
- $.ajax({
126
- url: prefix + path,
127
- dataType: 'script',
128
- success: success,
129
- cache: true
130
- });
131
- };
132
-
133
- $(document).ready( function() {
81
+ document.addEventListener('DOMContentLoaded', function() {
134
82
  hookSourceViews();
135
- highlightLocationTarget();
136
- $('ul.link-list a').bind( "click", highlightClickTarget );
137
-
138
- var search_scripts_loaded = {
139
- navigation_loaded: false,
140
- search_loaded: false,
141
- search_index_loaded: false,
142
- searcher_loaded: false,
143
- }
144
-
145
- var search_success_function = function(variable) {
146
- return (function (data, status, xhr) {
147
- search_scripts_loaded[variable] = true;
148
-
149
- if (search_scripts_loaded['navigation_loaded'] == true &&
150
- search_scripts_loaded['search_loaded'] == true &&
151
- search_scripts_loaded['search_index_loaded'] == true &&
152
- search_scripts_loaded['searcher_loaded'] == true)
153
- hookSearch();
154
- });
155
- }
156
-
157
- loadAsync('js/navigation.js', search_success_function('navigation_loaded'), rdoc_rel_prefix);
158
- loadAsync('js/search.js', search_success_function('search_loaded'), rdoc_rel_prefix);
159
- loadAsync('js/search_index.js', search_success_function('search_index_loaded'), index_rel_prefix);
160
- loadAsync('js/searcher.js', search_success_function('searcher_loaded'), rdoc_rel_prefix);
83
+ hookSearch();
161
84
  });
@@ -1,29 +1,29 @@
1
1
  Search = function(data, input, result) {
2
2
  this.data = data;
3
- this.$input = $(input);
4
- this.$result = $(result);
3
+ this.input = input;
4
+ this.result = result;
5
5
 
6
- this.$current = null;
7
- this.$view = this.$result.parent();
6
+ this.current = null;
7
+ this.view = this.result.parentNode;
8
8
  this.searcher = new Searcher(data.index);
9
9
  this.init();
10
10
  }
11
11
 
12
- Search.prototype = $.extend({}, Navigation, new function() {
12
+ Search.prototype = Object.assign({}, Navigation, new function() {
13
13
  var suid = 1;
14
14
 
15
15
  this.init = function() {
16
16
  var _this = this;
17
17
  var observer = function(e) {
18
- switch(e.originalEvent.keyCode) {
18
+ switch(e.keyCode) {
19
19
  case 38: // Event.KEY_UP
20
20
  case 40: // Event.KEY_DOWN
21
21
  return;
22
22
  }
23
- _this.search(_this.$input[0].value);
23
+ _this.search(_this.input.value);
24
24
  };
25
- this.$input.keyup(observer);
26
- this.$input.click(observer); // mac's clear field
25
+ this.input.addEventListener('keyup', observer);
26
+ this.input.addEventListener('click', observer); // mac's clear field
27
27
 
28
28
  this.searcher.ready(function(results, isLast) {
29
29
  _this.addResults(results, isLast);
@@ -34,7 +34,7 @@ Search.prototype = $.extend({}, Navigation, new function() {
34
34
  }
35
35
 
36
36
  this.search = function(value, selectFirstMatch) {
37
- value = jQuery.trim(value).toLowerCase();
37
+ value = value.trim().toLowerCase();
38
38
  if (value) {
39
39
  this.setNavigationActive(true);
40
40
  } else {
@@ -43,23 +43,23 @@ Search.prototype = $.extend({}, Navigation, new function() {
43
43
 
44
44
  if (value == '') {
45
45
  this.lastQuery = value;
46
- this.$result.empty();
47
- this.$result.attr('aria-expanded', 'false');
46
+ this.result.innerHTML = '';
47
+ this.result.setAttribute('aria-expanded', 'false');
48
48
  this.setNavigationActive(false);
49
49
  } else if (value != this.lastQuery) {
50
50
  this.lastQuery = value;
51
- this.$result.attr('aria-busy', 'true');
52
- this.$result.attr('aria-expanded', 'true');
51
+ this.result.setAttribute('aria-busy', 'true');
52
+ this.result.setAttribute('aria-expanded', 'true');
53
53
  this.firstRun = true;
54
54
  this.searcher.find(value);
55
55
  }
56
56
  }
57
57
 
58
58
  this.addResults = function(results, isLast) {
59
- var target = this.$result.get(0);
59
+ var target = this.result;
60
60
  if (this.firstRun && (results.length > 0 || isLast)) {
61
- this.$current = null;
62
- this.$result.empty();
61
+ this.current = null;
62
+ this.result.innerHTML = '';
63
63
  }
64
64
 
65
65
  for (var i=0, l = results.length; i < l; i++) {
@@ -70,25 +70,26 @@ Search.prototype = $.extend({}, Navigation, new function() {
70
70
 
71
71
  if (this.firstRun && results.length > 0) {
72
72
  this.firstRun = false;
73
- this.$current = $(target.firstChild);
74
- this.$current.addClass('search-selected');
73
+ this.current = target.firstChild;
74
+ this.current.classList.add('search-selected');
75
75
  }
76
- if (jQuery.browser.msie) this.$element[0].className += '';
76
+ //TODO: ECMAScript
77
+ //if (jQuery.browser.msie) this.$element[0].className += '';
77
78
 
78
- if (isLast) this.$result.attr('aria-busy', 'false');
79
+ if (isLast) this.result.setAttribute('aria-busy', 'false');
79
80
  }
80
81
 
81
82
  this.move = function(isDown) {
82
- if (!this.$current) return;
83
- var $next = this.$current[isDown ? 'next' : 'prev']();
84
- if ($next.length) {
85
- this.$current.removeClass('search-selected');
86
- $next.addClass('search-selected');
87
- this.$input.attr('aria-activedescendant', $next.attr('id'));
88
- this.scrollIntoView($next[0], this.$view[0]);
89
- this.$current = $next;
90
- this.$input.val($next[0].firstChild.firstChild.text);
91
- this.$input.select();
83
+ if (!this.current) return;
84
+ var next = isDown ? this.current.nextElementSibling : this.current.previousElementSibling;
85
+ if (next) {
86
+ this.current.classList.remove('search-selected');
87
+ next.classList.add('search-selected');
88
+ this.input.setAttribute('aria-activedescendant', next.getAttribute('id'));
89
+ this.scrollIntoView(next, this.view);
90
+ this.current = next;
91
+ this.input.value = next.firstChild.firstChild.text;
92
+ this.input.select();
92
93
  }
93
94
  return true;
94
95
  }
@@ -19,28 +19,28 @@
19
19
  <p>Here you can browse local documentation from the ruby standard library and
20
20
  your installed gems.
21
21
 
22
- <% extra_dirs = installed.select { |_, _, _, type,| type == :extra } %>
23
- <% unless extra_dirs.empty? %>
22
+ <%- extra_dirs = installed.select { |_, _, _, type,| type == :extra } -%>
23
+ <%- unless extra_dirs.empty? -%>
24
24
  <h2>Extra Documentation Directories</h2>
25
25
 
26
26
  <p>The following additional documentation directories are available:</p>
27
27
 
28
28
  <ol>
29
- <% extra_dirs.each do |name, href, exists, _, path| %>
29
+ <%- extra_dirs.each do |name, href, exists, _, path| -%>
30
30
  <li>
31
- <% if exists %>
31
+ <%- if exists -%>
32
32
  <a href="<%= href %>"><%= h name %></a> (<%= h path %>)
33
- <% else %>
33
+ <%- else -%>
34
34
  <%= h name %> (<%= h path %>; <i>not available</i>)
35
- <% end %>
35
+ <%- end -%>
36
36
  </li>
37
- <% end %>
37
+ <%- end -%>
38
38
  </ol>
39
- <% end %>
39
+ <%- end -%>
40
40
 
41
- <% gems = installed.select { |_, _, _, type,| type == :gem } %>
42
- <% missing = gems.reject { |_, _, exists,| exists } %>
43
- <% unless missing.empty? then %>
41
+ <%- gems = installed.select { |_, _, _, type,| type == :gem } -%>
42
+ <%- missing = gems.reject { |_, _, exists,| exists } -%>
43
+ <%- unless missing.empty? then -%>
44
44
  <h2>Missing Gem Documentation</h2>
45
45
 
46
46
  <p>You are missing documentation for some of your installed gems.
@@ -53,11 +53,10 @@
53
53
  the following commands.
54
54
 
55
55
  <ul>
56
- <% names = missing.map { |name,| name.sub(/-([^-]*)$/, '') }.uniq %>
57
- <% names.each do |name| %>
56
+ <%- names = missing.map { |name,| name.sub(/-([^-]*)$/, '') }.uniq -%>
57
+ <%- names.each do |name| -%>
58
58
  <li><kbd>gem rdoc <%=h name %></kbd>
59
- <% end %>
59
+ <%- end -%>
60
60
  </ul>
61
- <% end %>
61
+ <%- end -%>
62
62
  </main>
63
-
@@ -2,11 +2,11 @@
2
2
  <main role="main">
3
3
  <h1 class="class"><%= h @title %></h1>
4
4
 
5
- <% simple_files = @files.select { |f| f.text? } %>
6
- <% unless simple_files.empty? then %>
5
+ <%- simple_files = @files.select { |f| f.text? } -%>
6
+ <%- unless simple_files.empty? then -%>
7
7
  <h2 id="pages">Pages</h2>
8
8
  <ul>
9
- <% simple_files.sort.each do |file| %>
9
+ <%- simple_files.sort.each do |file| -%>
10
10
  <li class="file">
11
11
  <a href="<%= file.path %>"><%= h file.page_name %></a>
12
12
  <%
@@ -14,45 +14,45 @@
14
14
  table = file.parse(file.comment).table_of_contents
15
15
  unless table.empty? then %>
16
16
  <ul>
17
- <% table.each do |heading| %>
17
+ <%- table.each do |heading| -%>
18
18
  <li><a href="<%= file.path %>#<%= heading.aref %>"><%= heading.plain_html %></a>
19
- <% end %>
19
+ <%- end -%>
20
20
  </ul>
21
- <% end %>
21
+ <%- end -%>
22
22
  </li>
23
- <% end %>
23
+ <%- end -%>
24
24
  </ul>
25
- <% end %>
25
+ <%- end -%>
26
26
 
27
27
  <h2 id="classes">Classes and Modules</h2>
28
28
  <ul>
29
- <% @modsort.each do |klass| %>
29
+ <%- @modsort.each do |klass| -%>
30
30
  <li class="<%= klass.type %>">
31
31
  <a href="<%= klass.path %>"><%= klass.full_name %></a>
32
- <% table = []
32
+ <%- table = []
33
33
  table.concat klass.parse(klass.comment_location).table_of_contents
34
34
  table.concat klass.section_contents
35
35
 
36
36
  unless table.empty? then %>
37
37
  <ul>
38
- <% table.each do |item| %>
38
+ <%- table.each do |item| -%>
39
39
  <li><a href="<%= klass.path %>#<%= item.aref %>"><%= item.plain_html %></a>
40
- <% end %>
40
+ <%- end -%>
41
41
  </ul>
42
- <% end %>
42
+ <%- end -%>
43
43
  </li>
44
- <% end %>
44
+ <%- end -%>
45
45
  </ul>
46
46
 
47
47
  <h2 id="methods">Methods</h2>
48
48
  <ul>
49
- <% @store.all_classes_and_modules.map do |mod|
49
+ <%- @store.all_classes_and_modules.map do |mod|
50
50
  mod.method_list
51
51
  end.flatten.sort.each do |method| %>
52
52
  <li class="method">
53
53
  <a href="<%= method.path %>"><%= h method.pretty_name %></a>
54
54
  &mdash;
55
55
  <span class="container"><%= method.parent.full_name %></span>
56
- <% end %>
56
+ <%- end -%>
57
57
  </ul>
58
58
  </main>
@@ -10,10 +10,8 @@ Navigation = new function() {
10
10
  this.initNavigation = function() {
11
11
  var _this = this;
12
12
 
13
- $(document).keydown(function(e) {
13
+ document.addEventListener('keydown', function(e) {
14
14
  _this.onkeydown(e);
15
- }).keyup(function(e) {
16
- _this.onkeyup(e);
17
15
  });
18
16
 
19
17
  this.navigationActive = true;
@@ -21,20 +19,6 @@ Navigation = new function() {
21
19
 
22
20
  this.setNavigationActive = function(state) {
23
21
  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
22
  }
39
23
 
40
24
  this.onkeydown = function(e) {
@@ -46,7 +30,6 @@ Navigation = new function() {
46
30
  case 38: //Event.KEY_UP:
47
31
  if (e.keyCode == 38 || e.ctrlKey) {
48
32
  if (this.moveUp()) e.preventDefault();
49
- this.startMoveTimeout(false);
50
33
  }
51
34
  break;
52
35
  case 39: //Event.KEY_RIGHT:
@@ -55,33 +38,14 @@ Navigation = new function() {
55
38
  case 40: //Event.KEY_DOWN:
56
39
  if (e.keyCode == 40 || e.ctrlKey) {
57
40
  if (this.moveDown()) e.preventDefault();
58
- this.startMoveTimeout(true);
59
41
  }
60
42
  break;
61
43
  case 13: //Event.KEY_RETURN:
62
- if (this.$current) e.preventDefault();
63
- this.select(this.$current);
44
+ if (this.current) e.preventDefault();
45
+ this.select(this.current);
64
46
  break;
65
47
  }
66
- if (e.ctrlKey && e.shiftKey) this.select(this.$current);
67
- }
68
-
69
- this.clearMoveTimeout = function() {
70
- clearTimeout(this.moveTimeout);
71
- this.moveTimeout = null;
72
- }
73
-
74
- this.startMoveTimeout = function(isDown) {
75
- if (!$.browser.mozilla && !$.browser.opera) return;
76
- if (this.moveTimeout) this.clearMoveTimeout();
77
- var _this = this;
78
-
79
- var go = function() {
80
- if (!_this.moveTimeout) return;
81
- _this[isDown ? 'moveDown' : 'moveUp']();
82
- _this.moveTimeout = setTimeout(go, 100);
83
- }
84
- this.moveTimeout = setTimeout(go, 200);
48
+ if (e.ctrlKey && e.shiftKey) this.select(this.current);
85
49
  }
86
50
 
87
51
  this.moveRight = function() {