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

abquery

v0.3.4

Published

a very lightweight library like JQuery with fewer features and somewhat different

Downloads

10

Readme

abQuery v 0.3.4

Re-designing JQuery : If you are like me, you hate large js libraries

this is minimal library similar to Jquery in some ways with somewhat fewer features but amazing

It was a personal mini project to help me code js faster. If interested you can try it.

Prerequisites:

just a basic javascript knowledge

Installation

To get started quickly try the CDN instead:

compiled with babel for browser compatibility [https://cdn.jsdelivr.net/npm/[email protected]/dist/index.min.js]

or may only be compatible for modern browsers. [https://cdn.jsdelivr.net/npm/[email protected]/dist/mb.index.min.js]

getting started using npm:

npm i abquery --save

import $ from "abquery"

or

const $ = require("abquery")

NOTE: for some hide and show animation features you have to run this:

$.init_style_defaults() this is only for npm, for the cdn no need

usage and api

$ is the main object :: Library

$('query') is similar to document.querySelector but with the $ instance
$('*query') is similar to document.querySelectorAll but with the $ instance
$.new(tagname) or $('<tagname>') it's used to create a html element with the $ instance
$(el) useful when you want an element to have an $ instance as it has useful methods

the arg (el) can be a NodeList or an element or even a list/array of elements

query selector

$("a")
$("a").$$ // ths will get the actual element 
$("a, #navlink, p") //this queries each of those selectors in one instance

query selectorAll

$('*a')
$('* a, .nav-link') // select all _a_ tags and .nav-link in one instance

create new element

$.new('a') or $("<a>")
$.new('a',num=1) default
eg: create 10 anchor tags and append it to a div
let div=$('div')
let anchors=$('<a>',10)
anchors.appendParent(div.$$) || div.append(anchors.$$)

existing elements

$(el)
# usages example
$('*div').on('click',(ev)=>{
        ev // this is a click event
        let e=ev.target // to get the actual element
        $(e).toggleClass("class1,class2,etc").show().attr('id','IDname')
})

Getting actual elements

use .$$ to get the actual element or nodeList(for selectorAll)

use .arr[index] to get an element an a particular index eg: $('*div').arr[0] //first element $('*div').arr[10] //element at index 10

getting new single instances of $ from a query

use [index] to get element as an instance of $ at a particular index eg: $('*div')[0] //first element as an instance $('*div')[10] //element at index 10 as an instance

classes

.addClass(cls)
.rmClass(cls)
.toggleClass(cls)

.class //this will get the className of all the anchors
.class="btn-link d-none" //this will set the className of all the anchors

.hasClass(cls,{someClass: false, someEl: false}) # default
        eg: .hasClass('d-none') // checking a single class
            .hasClass("class1, class1",{someClass=false,someEl=false})
                someEl will be useful if you queried many elements in an instance of $
                 if false returns true only if all the elements have the class
                 else returns true if atleast an element has the class
                someClass is a similar logic like someEl

here are some cool methods and properties

getting or setting properties or attributes

.prop //to get or set any property 
.attr //to get or set any attributes. 

 to GET multiple pass in a list of attrs eg: .attr('attr1,attr2,etc') || .prop('prop1,prop2,etc')
 to SET multiple attrs pass in an object eg: .attr({id:'man',etc}) || prop({width:'56px',etc})
 .attr('id')//to GET a single =>SAME for prop
 .attr('id','hmm')//to SET id to hmm : setting single =>SAME for prop
 .rmAttr('id') // to remove/del an attr
attrs functions similar to props but different

attr('id') and .prop('id') gives the same result but .attr('style') returns the style string and .prop('style') returns the style object

NB: this has notthing to do with this mini library, thant's how js works

hiding and showing elements

.hide() .show() // it does just that
  it can accept params
    ({cls='class-to-show-or-hide',animate='your-animate-class',delay=600,keep=false}={},func_to_run_after)
       delay is the delay time
       keep if true the animate class will be kept else it will be remove after
.toggleDisplay() // it does just that

eventListeners

.on('click', func) //single listener

.on("mouseover, mouseout, click", func) // multiple listeners

You can also write it like this: .on(['mouseover','mouseout','click'], func)

dealing with styles

.css('width')//to get the width
.css('width','100%') // to set the width to 100%
.css('width','100%',true) //to set it as important
.css("margin-top,height,display") //to get those values
.css({width:"100%",display:"flex !important"})// to set it

to add a new element or new query to a query or any instance of $

.$(query) similar to .find in jQuery but you have to prepend '*' for selectorAll and .$new of an instance of $

$("div#main").$new('p').text='this a new paragraph'

NOTE:
   $("div#main").$.new('p') will not work
        because $.new is a static method so it 
        be called on an instance of $
        so use in case of an instance of $:
           eg:$("div#main").$new('p') or  
              $("div#main").$('<p>')

find the p tag in the div#main
$("div#main").$('p')

find all the p tag in the div#main
$("div#main").$("*p") // to querySelcetorAll p tags in the div

$() will query the document as an instance

().$$ equals to document

some methods

 .run //this will run a func for all or the element queried
        eg: .run(func) || .run(e=>{})
 
 .$run //this will run a func for all or the element queried against a variable or array
        eg: .$run(func,arr) || $run((e,var||array_item)=>{},var||array)

 .append // to append a child node/element

 .appendParent // to append to a parent node/element

 .detach // to detach or remove a child node/element

 .detachParent // to detach self from a parent node/element
 .on(event,func) similar to .addEventListener(event,func)
 .debounce 
      $().debounce('mouseover',(e)=>{
        console.log(e.clientX,e.clientY)
      },2000)
 .throttle
      $().throttle('mouseover',(e)=>{
        console.log(e.clientX,e.clientY)
      },2000)
    // if you don't debounce and throttle
    // you may ask Google
    // it's very useful

some properties getters and setters

 .len // to get the length of the query

 .index // to get the index of an element or instance of $ in a query 
 useful for query selectorAll

 .html //to get or set the innerHTML

 .text //to get or set the textContent

 .val //to get or set form inputs or textarea or files or checkboxes or radios etc
    //you do not need to think whether it is .value or .checked or .files etc. it will do the job for you
    
    NOTE: NOT ALL INPUT TYPES CAN BE SET
    

 .children // to get children nodes
  
 .parent // to get an element/node's parent

 .parents // similar to .parent but usefull querySelectorAll/$(*q)

other getters and setters

["title", "lang", "translate", "dir", "hidden", "accessKey", "draggable", "spellcheck", "autocapitalize", "contentEditable", "isContentEditable", "inputMode", "offsetParent", "offsetTop", "offsetLeft", "offsetWidth", "offsetHeight", "innerText", "outerText", "dataset", "nonce", "autofocus", "tabIndex", "attachInternals", "enterKeyHint"]

some useful static methods

$.new(tagname) // to create a new element 
$.id(id) // similar to document.getElementById(id)
        $.id('id1,id2,etc') or $.id('id1')
$.cls(cn) // similar to document.getElementsByClassName(cn)
        $.cls('cn1,cn2,etc') or $.cls('cn1')
$.attrs('attr' or 'attr=value') it can be used to get all element by that attr or "attr=value"
        similar to document.querySelectorAll("[attr or attr=value]")
        $.attrs('attr=val,attr2=val,etc') or $.attrs('attr=val')

$.form_value(input_element) 
        gets the value whether its .checked,.value, select fields

$.form_data(list_of_inputs)
        similar to above but returns an object

$.css_prefix('css style')
        eg: $.css_prefix("transform: scale(.8)")

            returns=> transform: scale(.8);-webkit-transform: scale(.8);-moz-transform: scale(.8);

$.gen_frames(name,frames) 
        it will generate keyframes
        eg: $.gen_frames('animatekf',`0% {${$.css_prefix('transform: scale(1)')}opacity: 1;} 100%{opacity: 0}`)

        returns=>  
        @keyframes animatekf {0% {transform: scale(1);-webkit-transform: scale(1);-moz-transform: scale(1);opacity: 1;} 100%{opacity: 0}}
        @-webkit-keyframes animatekf {0% {transform: scale(1);-webkit-transform: scale(1);-moz-transform: scale(1);opacity: 1;} 100%{opacity: 0}}

$.add_keyframes(name,frames,id=$.styleElementId) 
         does just the above but adds it to the dom
         if the style element id specified does not exist
         it will create it instead
         and later append the keyframes

$.add_style(selector,rules,id=$.styleElementId)
        it is used to create a css style
        eg: to create a new class
            $.add_style('.classname','margin-top:50px;padding:20px 12px;')
            
            Now you can use that class in your elements
$.ready(func) to run the functin on DOMContentLoaded
$.on(event,func,el=document) similar to el.addEventListener(event,func)

$.throttle
        $().click($.throttle((e)=>{
                console.log(e)
        },2000))
$.debounce
        $().on('click', $.debounce((e)=>{
                console.log(e)
        },2000))
some examples

Get a form data without hussle

$("form").$("* input, select, textarea").val //this will return an object which can directly be sent to the server

 NOTE: the inputs should have a name or id attrs SET eg: input type file, can only be set/added by a user interraction

hide and show modals eg: let say there are elements/anchors with a data-toggle="modal" and a data-target property that is equal to a query to toggle like how bootstrap declares its modals

$("*[data-toggle=modal]").on('click',(e)=>$(`$(e.target).attr("data-target")}`).toggleClass("show"))

You can check the code to see the methods

src/index.js

The compiled version dist/index.js and dist/index.min.js or only minified version dist/mb.index.min.js

NOTE:

multiple selectors eg:- $("#nav, a, etc") can ONLY be strings separated by commas.

BUT methods maybe list/array of strings OR strings separated by commas 
        eg:- .addClass(['hide','nav-link', etc]) or .addClass("hide, nav-link, etc")
        either is fine
Also spaces doesn't matter
Eg:- .addClass("show  ,      nav")

!!!ENJOY

more to come

Like modal time-ago tooltips fetch etc

issues are most welcomed