npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@colorfulcompany/simple-dom-transmitter

v0.1.0

Published

A simple pattern for conveying events from one DOM element to the other

Downloads

5

Readme

SimpleDOMTransmitter

A simple pattern for conveying events from one DOM element to the other

何をするものか

「『ある要素』の『何かのイベント』に対応して『何かする』」の書き方に新しいレールを作る。

使い方

  • SimpleDOMTransmitter を継承する
  • 継承した class に process() と handler() を定義して処理を記述する
  • 継承した class の run() と listen() を使って処理を開始する
    • 処理対象の要素はこれらのメソッドに src, target として与える
  • コード読み込み後すぐに動かしたいものは process() に定義して .run() で呼び出す
  • なんらかのイベントを待ちたい時は handler() に定義して .listen() で呼び出す

具体的なコード例

以下のような「処理対象」と「イベント」と「処理内容」が密結合したコードをやめて、

$(selector).on(<event>, function(event) {
  ...
})

以下のような「処理対象の要素を特定するコード」と「処理を開始するためのコード」、および

const backBtn = document.querySelector('#back-top-top')
const navBar = document.querySelector('.nav')

NavbarEventBindToButton.run({ src: navBar, target: backBtn })
HideBackButton.run({ src: backBtn })
HideBackButton.listen({ on: 'nav-is-back', src: backBtn })
ShowBackButton.listen({ on: 'nav-has-gone', src: backBtn })
BacktoTop.listen({ on: 'click', src: backBtn, target: window })

以下のような「処理を定義するコード」に分離する。

class HideBackButton extends SimpleDOMTransmitter {
  hide () {
    this.target.style.display = 'none'
  }
  process () {
    this.hide()
  }
  handler () {
    this.hide()
  }
}

ここで大事なことは、process() や handler() およびそこから呼び出されるメソッドの中では最初に与える src か target 以外の要素に触れようとしないこと。あくまで処理対象の要素は最初に与えた二つだけにするというルールを守る。

デモ

simple-dom-transmitter-demo-es6 - Plunker

手元でのデモの動かし方

  • git clone
  • yarn install
  • yarn run build
  • open examples/index.html

達成したいこと

上の制約によって

  • 複雑な処理を「二つの要素の関係性の組み合わせ」で記述することで一つ一つをシンプルに保つ
  • 処理の流れに適宜名前を付ける
  • 処理の中で他の要素を新たに呼ばない

を実現する。言い換えるとこの class は有名な SOLID の原則のうち、以下の二つを強制するものである。

  • Single Responsibility Principle
  • Dependency Inversion Principle

これらを守ることで、以下のようにコードリーディングを容易にする。

  • 最初にやりたいこと(意図)に名前が付くので目的を理解しやすい
  • 処理の流れを最後まで読まなくても最初に関係する要素が分かるので影響範囲を把握しやすい

この結果、

  • testability
  • reviewability
  • maintainnability

の三つを維持することを意図している。