aboutsummaryrefslogtreecommitdiff
path: root/src/console/components/completion.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/console/components/completion.js')
-rw-r--r--src/console/components/completion.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/console/components/completion.js b/src/console/components/completion.js
new file mode 100644
index 0000000..5033b5c
--- /dev/null
+++ b/src/console/components/completion.js
@@ -0,0 +1,61 @@
+export default class Completion {
+ constructor(wrapper, store) {
+ this.wrapper = wrapper;
+ this.store = store;
+ this.prevState = {};
+ }
+
+ update() {
+ let state = this.store.getState();
+ if (JSON.stringify(this.prevState) === JSON.stringify(state)) {
+ return;
+ }
+
+ this.wrapper.innerHTML = '';
+
+ for (let i = 0; i < state.completions.length; ++i) {
+ let group = state.completions[i];
+ let title = this.createCompletionTitle(group.name);
+ this.wrapper.append(title);
+
+ for (let j = 0; j < group.items.length; ++j) {
+ let item = group.items[j];
+ let li = this.createCompletionItem(item.icon, item.caption, item.url);
+ this.wrapper.append(li);
+
+ if (i === state.groupSelection && j === state.itemSelection) {
+ li.classList.add('vimvixen-completion-selected');
+ }
+ }
+ }
+
+ this.prevState = state;
+ }
+
+ createCompletionTitle(text) {
+ let doc = this.wrapper.ownerDocument;
+ let li = doc.createElement('li');
+ li.className = 'vimvixen-console-completion-title';
+ li.textContent = text;
+ return li;
+ }
+
+ createCompletionItem(icon, caption, url) {
+ let doc = this.wrapper.ownerDocument;
+
+ let captionEle = doc.createElement('span');
+ captionEle.className = 'vimvixen-console-completion-item-caption';
+ captionEle.textContent = caption;
+
+ let urlEle = doc.createElement('span');
+ urlEle.className = 'vimvixen-console-completion-item-url';
+ urlEle.textContent = url;
+
+ let li = doc.createElement('li');
+ li.style.backgroundImage = 'url(' + icon + ')';
+ li.className = 'vimvixen-console-completion-item';
+ li.append(captionEle);
+ li.append(urlEle);
+ return li;
+ }
+}