GithubHelp home page GithubHelp logo

ryanve / ssv Goto Github PK

View Code? Open in Web Editor NEW
7.0 1.0 0.0 210 KB

Space Separated Values. JavaScript library for spaced data. Fun and fast for classnames and beyond :two_hearts:

Home Page: https://ryanve.dev/ssv

License: Universal Permissive License v1.0

JavaScript 72.28% CSS 3.39% HTML 24.33%
javascript strings ssv classnames css-classes opensource spaces blink-182 spaced classes

ssv's Introduction

ssv

<script src="ssv.js"></script>
npm install ssv
const ssv = require("ssv")

methods

all

Test if SSV contains all search values

ssv.all(SSV="", search="")
ssv.all("mark tom travis", "scott") // false
ssv.all("mark tom travis", "mark tom") // true
ssv.all("mark tom travis", "mark scott") // false

and

  • Get unique values present both in left and right
  • Ideal for intersecting
ssv.and(left="", right="")
ssv.and("", "mark") // ""
ssv.and("mark matt travis", "tom scott") // ""
ssv.and("mark tom tom", "mark tom travis") // "mark tom"
let many = ["mark tom", "mark travis", "mark matt"]
many.reduce(ssv.and) // "mark"

any

Test if SSV contains any search values

ssv.any(SSV="", search="")
ssv.any("mark tom travis", "matt") // false
ssv.any("mark tom travis", "mark") // true
ssv.any("mark tom travis", "mark scott") // true
ssv.any("mark tom travis", "mark travis") // true

at

Get the value at index

ssv.at(SSV="", index)
ssv.at("mark tom travis", 0) // "mark"
ssv.at("mark tom travis", 1) // "tom"
ssv.at("mark tom travis", -1) // "travis"
ssv.at("mark tom travis", -2) // "tom"
ssv.at("mark tom travis", 5) // ""

blank

Test if SSV is blank

ssv.blank(SSV="")
ssv.blank("travis") // false
ssv.blank("      ") // true
ssv.blank("") // true
ssv.blank(0) // false
ssv.blank() // true

count

Count SSV values

ssv.count(SSV="")
ssv.count("matt matt matt") // 3
ssv.count("mark      tom ") // 2

edit

  • Edit an SSV string via an object or string
  • Optimal for batch editing CSS classes
  • Keys for falsey values are removed
  • Keys for truthy values are added
  • Removals process before adds
  • Result is compact and unique
  • Like ssv.or if boss is string
  • ssv.state uses ssv.edit
ssv.edit(SSV="", boss={})
ssv.edit("mark tom travis", {
  "matt": true,
  "tom scott": false
}) // "mark travis matt"

ssv.edit("mark", {
  "mark travis": true,
  "travis": false
}) // "mark travis"
ssv.edit("mark tom scott", Object.assign(
  { scott: false },
  { travis: true }
)) // "mark tom travis"
let bosses = [/* objects or strings */]
bosses.reduce(ssv.edit, "") // forward
bosses.reduceRight(ssv.edit, "") // backward

gum

Concatenate with compact space

ssv.gum(left="", right="")
ssv.gum("mark tom", "scott travis") // "mark tom scott travis"
ssv.gum("mark tom", "tom   travis") // "mark tom tom travis"
let many = ["tom tom", null, "travis travis", ""]
many.reduce(ssv.gum) // "tom tom travis travis"

jam

Compact excess space

ssv.jam(SSV)
ssv.jam("  mark  travis   matt ") // "mark travis matt"
ssv.jam("  matt      ") // "matt"
ssv.jam("  0     182 ") // "0 182"
ssv.jam(-182) // "-182"
ssv.jam(182) // "182"
ssv.jam(" ") // ""
ssv.jam(0) // "0"
ssv.jam() // ""

not

  • Get values in left that are not in right
  • Ideal for removing values or diffing
ssv.not(left="", right="")
ssv.not("mark tom travis", "tom") // "mark travis"
ssv.not("mark tom tom", "mark matt") // "tom tom"
ssv.not("matt matt matt", "") // "matt matt matt"
ssv.not("mark mark", "tom tom") // "mark mark"
ssv.not("mark tom tom tom", "tom") // "mark"
let many = ["mark tom", "mark travis", "mark matt"]
many.reduce(ssv.not) // "tom"

or

  • Get unique values found in left or right or both
  • Ideal for adding values or unioning
ssv.or(left="", right="")
ssv.or("mark tom ", "travis tom") // "mark tom travis"
ssv.or("mark tom tom", "travis tom") // "mark tom travis"
ssv.or("matt mark", "matt") // "matt mark"
let many = ["mark tom", "mark travis", "mark matt"]
many.reduce(ssv.or) // "mark tom travis matt"

say

Simply stringify unknown

ssv.say(unknown="")
ssv.say(undefined) // ""
ssv.say(null) // ""
ssv.say(0) // "0"
ssv.say(NaN) // "NaN"
ssv.say(182) // "182"
ssv.say("tom") // "tom"
ssv.say(true) // "true"
ssv.say(false) // "false"
ssv.say(new Number(182), "182")
ssv.say(new String("tom"), "tom")
ssv.say(new Boolean(true), "true")
  • Used internally when expecting strings
  • Not intended for arrays or plain objects
  • Join arrays instead like [].join(" ")
  • Plain objects may use ssv.edit or ssv.state

split

Split SSV into dense array

ssv.split(SSV)
ssv.split("mark tom travis") // ["mark", "tom", "travis"]
ssv.split("     mark  tom ") // ["mark", "tom"]
ssv.split("0 0  182       ") // ["0", "0", "182"]
ssv.split(0) // ["0"]
ssv.split(" ") // []
ssv.split("") // []
ssv.split() // []

state

ssv.state(state={})
ssv.state("mark  tom  ") // "mark tom"
ssv.state({
  "mark travis": true,
  "matt": true,
  "tom scott": false
}) // "mark travis matt"

ssv.state({
  "mark": true,
  "mark travis": true,
  "travis": false
}) // "mark mark travis"
let states = [/* objects or strings */]
ssv.yolo(states.map(ssv.state).join(" "))

xor

  • Get unique values found in either left or right but not both
  • Ideal for toggling values
ssv.xor(left="", right="")
ssv.xor("", "mark mark") // "mark"
ssv.xor("mark tom", "mark") // "tom"
ssv.xor("mark tom", "travis") // "mark tom travis"
ssv.xor("mark tom", "travis tom") // "mark travis"
ssv.xor("mark tom travis", "tom matt") // "mark travis matt"
ssv.xor("mark tom tom", "mark mark") // "tom"
ssv.xor("mark mark", "tom tom") // "mark tom"
let many = ["mark tom", "mark travis", "mark matt"]
many.reduce(ssv.xor) // "tom travis mark matt"
many.reduceRight(ssv.xor) // "matt travis mark tom"

yolo

  • Get unique SSV values
  • Hella fast unique loop
  • Be unique because yolo
  • Case sensitive
ssv.yolo(SSV="")
ssv.yolo("tom tom travis") // "tom travis"
ssv.yolo("Na na na na   ") // "Na na"
ssv.yolo("Na na na na".toLowerCase()) // "na"

ssv's People

Contributors

dependabot[bot] avatar ryanve avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.