Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(195)

Side by Side Diff: dart/site/try/code_completion_ui_mock/experiment.js

Issue 197923002: Mock up code completion. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 var currentEntry;
kasperl 2014/03/13 07:39:58 Copyright notice?
2
kasperl 2014/03/13 07:39:58 It would be helpful to have a comment that explain
3 var installedServerResults = false;
4
5 var isDisplayingResults = false;
6
7 (function() {
8 "use strict";
9 function hasModifier(/*KeyboardEvent*/ event) {
10 return event.getModifierState("Alt") ||
11 event.getModifierState("AltGraph") ||
12 event.getModifierState("CapsLock") ||
13 event.getModifierState("Control") ||
14 event.getModifierState("Fn") ||
15 event.getModifierState("Meta") ||
16 event.getModifierState("NumLock") ||
17 event.getModifierState("ScrollLock") ||
18 event.getModifierState("Scroll") ||
19 event.getModifierState("Win") ||
20 event.getModifierState("Shift") ||
21 event.getModifierState("SymbolLock") ||
22 event.getModifierState("OS");
23 }
24 function onKeydown(/*KeyboardEvent*/ event) {
25 if (!isDisplayingResults) {
26 isDisplayingResults = true;
27 document.querySelector('.dart-code-completion').style.display = 'block';
28 installedServerResults = true;
29 window.setTimeout(installServerResults, getRandomInt(1080, 2000));
30 return;
31 }
32 if (!installedServerResults) {
33 installedServerResults = true;
34 window.setTimeout(installServerResults, getRandomInt(1080, 2000));
35 }
36 var keyCode = event.keyCode;
37 var keyIdentifier = event.keyIdentifier;
38 var modifier = hasModifier(event);
39 if (!modifier) {
40 if (keyCode === 40) return moveActive(event, 1);
41 if (keyCode === 38) return moveActive(event, -1);
42 }
43 if (modifier) {
44 if (keyCode === 40) return selectServerResults(event);
45 }
46 console.log([keyCode, keyIdentifier, modifier]);
47 console.dir(event);
48 }
49 function moveActive(/*KeyboardEvent*/ event, /*int*/ distance) {
50 var entries = document.querySelectorAll('.dart-static>.dart-entry');
51 var activeIndex = -1;
52 for (var i = 0; i < entries.length; i++) {
53 if (entries[i].classList.contains('active')) {
54 activeIndex = i;
55 break;
56 }
57 }
58 var newIndex = activeIndex + distance;
59 if (0 <= newIndex && newIndex < entries.length) {
60 var newEntry = entries[newIndex];
61 currentEntry = newEntry;
62 }
63 if (0 <= newIndex && activeIndex !== -1) {
64 entries[activeIndex].classList.remove('active');
65 }
66 var serverResults = document.querySelectorAll('.dart-server>.dart-entry');
67 var serverResultCount = serverResults.length;
68 if (serverResultCount > 0) {
69 var cr = currentEntry.getBoundingClientRect();
70 var sr = document.querySelector('.dart-static').getBoundingClientRect();
71 if (cr.bottom - sr.top > sr.height) {
kasperl 2014/03/13 07:39:58 One of these comparisons use > and the other >=. I
72 if (cr.top - sr.top >= sr.height) {
73 var entry = serverResults[0];
74 entry.parentNode.removeChild(entry);
75 currentEntry.parentNode.insertBefore(entry, currentEntry);
76 currentEntry = entry;
77 serverResultCount--;
78 } else {
79 console.log(cr.bottom - sr.top);
80 }
81 document.querySelector('.dart-static').style.height =
82 String((cr.bottom - sr.top)) + "px";
kasperl 2014/03/13 07:39:58 No need to use String() here. If either the left o
83 } else {
84 currentEntry.scrollIntoView(false);
85 }
86 } else {
87 currentEntry.scrollIntoView(false);
88 }
89 if (serverResultCount === 0) {
90 // document.querySelector('.dart-static').classList.remove('dart-limited-h eight');
kasperl 2014/03/13 07:39:58 Long line. Maybe explain why this is commented out
91 // document.querySelector('.dart-static').style.height = '';
92 document.querySelector('.dart-server').style.display = 'none';
93 }
94 if (currentEntry != null) {
95 currentEntry.classList.add('active');
96 }
97 }
98 function selectServerResults(/*KeyboardEvent*/ event) {
99 var entries = document.querySelectorAll('.dart-static>.dart-entry.active');
100 for (var i = 0; i < entries.length; i++) {
101 entries[i].classList.remove('active');
102 }
103 return moveActive(event, 4);
104 }
105 function installServerResults() {
106 var mockServerResults = document.querySelectorAll('.mock-data>.dart-entry');
107 var results = document.querySelector('.dart-server');
108 results.style.display = 'block';
109 for (var i = 0; i < mockServerResults.length; i++) {
110 var result = mockServerResults[i];
111 result.parentNode.removeChild(result);
112 results.appendChild(result);
113 }
114 }
115 function getRandomInt(min, max) {
116 return Math.floor(Math.random() * (max - min + 1)) + min;
117 }
118 document.body.addEventListener('keydown', onKeydown);
119 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698