crishellco/vue-hubble

View on GitHub
plugin/src/api.js

Summary

Maintainability
A
0 mins
Test Coverage
import { NAMESPACE } from './directive';

const api = (masterOptions) => ({
  all() {
    return [...document.querySelectorAll(`[${NAMESPACE}]`)];
  },

  allMapped() {
    return mapResults(this.all());
  },

  find(selector) {
    return [
      ...document.querySelectorAll(`[${NAMESPACE}][${selector}]`),
      ...document.querySelectorAll(`[${NAMESPACE}][class*="${selector}"]`),
      ...document.querySelectorAll(`[${NAMESPACE}][id*="${selector}"]`),
    ];
  },

  findMapped(selector) {
    return mapResults(this.find(selector));
  },

  first(selector) {
    return this.find(selector).shift();
  },

  resetOptions() {
    window.$hubble.options = { ...masterOptions };
  },
});

function mapResults(nodes) {
  return [...nodes].reduce((result, node) => {
    return {
      ...result,
      [node.getAttribute(`${NAMESPACE}-selector`)]: node,
    };
  }, {});
}

export default api;