Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save r7kamura/b14133b9df05b7d361b3 to your computer and use it in GitHub Desktop.
Save r7kamura/b14133b9df05b7d361b3 to your computer and use it in GitHub Desktop.
import KeyStringDetector from 'key-string'
const detector = new KeyStringDetector();
function changeModeIntent(DOM) {
const documentStream = DOM.select('.header-format-switcher-document-button').events('click').map(() => 'document');
const slideStream = DOM.select('.header-format-switcher-slide-button').events('click').map(() => 'slide');
const changeModeStream = documentStream.merge(slideStream);
return { changeModeStream };
}
function keyboardStreamIntent(DOM) {
const keyboardStream = DOM.select(':root').events('keydown').map((event) => detector.detect(event));
return { keyboardStream };
}
function moveToFirstSlideIntent(DOM) {
const firstSlideStream = DOM.select('.header-slide-controller-first-slide-button').events('click');
return { firstSlideStream };
}
function moveToLastSlideIntent(DOM) {
const lastSlideStream = DOM.select('.header-slide-controller-last-slide-button').events('click');
return { lastSlideStream };
}
function moveToNextSlideIntent(DOM) {
const keyboardStream = keyboardStreamIntent(DOM).keyboardStream;
const fromKeyboard = keyboardStream.filter((keyString) => keyString === 'Right');
const fromClick = DOM.select('.header-slide-controller-next-slide-button').events('click');
const nextSlideStream = fromKeyboard.merge(fromClick);
return { nextSlideStream };
}
function moveToPreviousSlideIntent(DOM) {
const keyboardStream = keyboardStreamIntent(DOM).keyboardStream;
const fromKeyboard = keyboardStream.filter((keyString) => keyString === 'Left');
const fromClick = DOM.select('.header-slide-controller-previous-slide-button').events('click');
const previousSlideStream = fromKeyboard.merge(fromClick);
return { previousSlideStream };
}
export default function (DOM) {
return {
...changeModeIntent(DOM),
...moveToFirstSlideIntent(DOM),
...moveToLastSlideIntent(DOM),
...moveToNextSlideIntent(DOM),
...moveToPreviousSlideIntent(DOM)
};
}
@r7kamura
Copy link
Author

r7kamura commented Oct 3, 2015

DOMから提供されるイベントソースを入力として受け取り、ユーザが何を求めているのかを表すイベントソースを出力として返す関数を、intent として公開している。

@r7kamura
Copy link
Author

r7kamura commented Oct 3, 2015

intentは、更に小さな複数のintentに分割できるように実装してる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment