For formatting, searching, and rewriting JavaScript.

Related tags

QA Tools jsfmt
Overview

jsfmt

NPM version Build Status Dependency Status Coverage Status

For formatting, searching, and rewriting JavaScript. Analogous to gofmt.

Installation

npm install -g jsfmt

Usage

$ jsfmt --help
Usage:
  jsfmt [--no-format] [--save-ast] [--diff|--list|--write] [--validate] [--rewrite PATTERN|--search PATTERN] [--json|--ast] [<file>...]
  jsfmt (--version | --help)

Options:
  -h --help                      Show this help text
  --version                      Show jsfmt version
  -d --diff                      Show diff against original file
  -l --list                      List the files which differ from jsfmt output
  -v --validate                  Validate the input file(s)
  --no-format                    Do not format the input file(s)
  -w --write                     Overwrite the original file with jsfmt output
  -j --json                      Tell jsfmt that the file being parsed is json
  -a --ast                       Tell jsfmt that the file being parsed is in JSON AST
  --save-ast                     Output the resulting js in JSON AST format
  -r=PATTERN --rewrite PATTERN   Rewrite rule (e.g., 'a.slice(b, len(a) -> a.slice(b)')
  -s=PATTERN --search PATTERN    Search rule (e.g., 'a.slice')

If no path is given it will read from stdin. A directory path will recurse over all *.js files in the directory.

Note that the AST options (--ast and --save-ast) are experimental and may be removed.

Formatting

For formatting jsfmt uses esformatter.

.jsfmtrc

Any of the esformatter formatting options can be overwritten via a .jsfmtrc file. The file is parsed using rc, which accepts either a json or ini formatted file.

A .jsfmtrc will be read if it exists in any of the following directories:

  • a local .jsfmtrc or the first found looking in ./ ../ ../../ ../../../ etc.
  • $HOME/.jsfmtrc
  • $HOME/.jsfmt/config
  • $HOME/.config/jsfmt
  • $HOME/.config/jsfmt/config
  • /etc/jsfmtrc
  • /etc/jsfmt/config

jsfmt will also attempt to pickup and use the configured indent variable from your .jshintrc configuration file, if present.

Rewriting

The --rewrite flag allows rewriting portions of the JavaScript's AST before formatting. This is especially handy for intelligent renaming and handling API changes from a library. The rewrite rule must be a string of the form:

pattern -> replacement

Both pattern and replacement must be valid JavaScript. In pattern, single-character lowercase identifiers serve as wildcards matching arbitrary expressions; those expressions will be substituted for the same identifiers in the replacement.

Example

Rewrite occurences of _.reduce to use native reduce:

jsfmt --rewrite "_.reduce(a, b, c) -> a.reduce(b, c)" reduce.js

Searching

The --search flag allows searching through a JavaScript's AST. The search rule is very similar to the rewrite rule but just outputs expressions that match the given search expression. The search expression must be valid JavaScript.

Example

Find occurences of _.reduce:

jsfmt --search "_.reduce(a, b, c)" reduce.js

Validating

The --validate flag will print any errors found by esprima while parsing the JavaScript.

Example

jsfmt --validate bad.js

API

Formatting

jsfmt.format(<javascript_string>, <config_object>) // Returns formatted JavaScript
jsfmt.formatJSON(<JSON_string>, <config_object>) // Returns formatted JSON
var config = jsfmt.getConfig(); // Loads the jsfmt config from the appropriate rc file or default config object

Example

var jsfmt = require('jsfmt');
var fs = require('fs');

var js = fs.readFileSync('unformatted.js');
var config = jsfmt.getConfig();

js = jsfmt.format(js, config);

Rewriting

jsfmt.rewrite(<javascript_string>, <rewrite_rule>) // Returns rewritten JavaScript

Example

var jsfmt = require('jsfmt');
var fs = require('fs');

var js = fs.readFileSync('each.js');

js = jsfmt.rewrite(js, "_.each(a, b) -> a.forEach(b)");

Searching

jsfmt.search(<javascript_string>, <search_expression>) // Returns array of matches

Example

var jsfmt = require('jsfmt');
var fs = require('fs');

var js = fs.readFileSync('component.js');

jsfmt.search(js, "R.Component.create(a, { dependencies: z })").forEach(function(matches, wildcards) {
  console.log(wildcards.z);
});

Validating

jsfmt.validate(<javascript_string>) // Returns errors found while parsing JavaScript
jsfmt.validateJSON(<JSON_string>) // Returns errors found while parsing JSON

Example

var jsfmt = require('jsfmt');
var fs = require('fs');

var js = fs.readFileSync('each.js');
var errors = jsfmt.validate(js);

for (var i = 0; i < errors.length; i++) {
  console.error(errors[i]);
}

Plugins

Since jsfmt uses esformatter under the covers for formatting your code you can utilize any esformatter plugins with jsfmt. Please see https://github.com/millermedeiros/esformatter/#plugins for more information.

JSX

There exists a plugin esformatter-jsx which provides support for formatting JSX with esformatter. Please see https://github.com/royriojas/esformatter-jsx/wiki/Usage-with-jsfmt for more information on setting up with jsfmt.

Links

Changelog

v0.4.0

  • Added two new command-line args for AST formatting. Note that these are experimental and may be removed.
  • Removed --config option in favor of .jsfmtrc and better docs around rc.
  • Updated esformatter and using new esformatter plugin for automatic brace insertion.
  • Updated style guide to include esformatter changes.
  • Fixes and cleanup for shebang.
  • Support for variable arguments using ES6 rest syntax.
  • General rewrite cleanup.
  • Changing exit code to -1 on missing arg failure.
  • Updates to rc and other dependencies.

v0.3.2

  • Adding support for UnaryExpression
  • Fixing bug where rewrite types were not being set properly

v0.3.1

  • Fixed bug when searching for expressions within BlockStatement or Program body
  • Added JSON support

v0.3.0

  • Added CONTRIBUTING
  • Added tests
  • Added Gruntfile for development
  • Added CI support
  • Added style guide
  • Added default formatting config
  • Exposed jsfmt.getConfig api method for loading jsfmt config
  • Exposed jsfmt.format(js[, options]) api method for formatting
  • Added --validate option and exposed jsfmt.validate api method
  • Pinned dependencies

v0.2.0

  • Add rc and --config config.json support for formatting configuration
  • Making --format the default action
  • Fix support for shebang at the top of js files, e.g. #!/usr/bin/env node
  • Fix jsfmt diff mode where whitespace was unaccounted for due to -b git diff option

v0.1.1

  • Initial release

License

Apache License, Version 2.0. Copyright 2014 Rdio, Inc.

Comments
  • format as ast in the right spot

    format as ast in the right spot

    so I made a bug :( I wasn't formatting back to an AST for any of the other options other than printing to stdout, this fixes that.

    The only thing now that might be a little weird, is if you try to use --diff or --list when the original is not an AST but you use --save-ast not sure how I wanted to handle it, but leaving as-is for now.

    opened by brettlangdon 22
  • Add ability to override esformatter options

    Add ability to override esformatter options

    Mostly I was looking for a way to format to 4 spaces and not 2. Originally I added a cli option to set the number of spaces to indent, but I think this might be a better option?

    Also I wasn't sure how I should document an example (if you feel one is necessary).

    enhancement 
    opened by brettlangdon 18
  • Block statements

    Block statements

    If someone could play around with this (test it out) I'd appreciate it. I've added some tests and it seems to work great but I want to make sure I didn't miss any edge cases.

    This fixes #28

    opened by jimfleming 13
  • JSON support

    JSON support

    This might already work, I haven't tested it. But it would be nice if it formatted json too (since its a "subset" of js anyway).

    I suspect it will choke on the floating object declaration without an accompanying variable declaration.

    opened by jimfleming 11
  • Grunt

    Grunt

    this addresses #18

    I have been thinking about updating the travis setup to use grunt, that way the travis build will fail when jshint doesn't pass. Thoughts?

    jshint has found a few issues with rewrite.js, think we either need fix the issues or change the jshint config to allow things we want.

    Running "jshint:lib" (jshint) task
    
       lib/rewrite.js
         56 |  if (pattern == null && node != null) {
                           ^ Use '===' to compare with 'null'.
         56 |  if (pattern == null && node != null) {
                                           ^ Use '!==' to compare with 'null'.
         60 |  if (pattern != null && node == null) {
                           ^ Use '!==' to compare with 'null'.
         60 |  if (pattern != null && node == null) {
                                           ^ Use '===' to compare with 'null'.
         64 |  if (wildcards != null && isWildcard(pattern)) {
                             ^ Use '!==' to compare with 'null'.
         87 |      && match(wildcards, pattern.value, node.value);
                   ^ Bad line breaking before '&&'.
         93 |      && match(wildcards, pattern.property, node.property);
                   ^ Bad line breaking before '&&'.
        103 |      && match(wildcards, pattern.right, node.right);
                   ^ Bad line breaking before '&&'.
        106 |      && match(wildcards, pattern.test, node.test)
                   ^ Bad line breaking before '&&'.
        107 |      && match(wildcards, pattern.update, node.update)
                   ^ Bad line breaking before '&&'.
        108 |      && match(wildcards, pattern.body, node.body);
                   ^ Bad line breaking before '&&'.
        170 |      && match(wildcards, pattern.init, node.init);
                   ^ Bad line breaking before '&&'.
        194 |      if (wildcards != null && isWildcard(replacement)) {
                                 ^ Use '!==' to compare with 'null'.
        207 |      for (var i = 0; i < replacement.elements.length; i++) {
                              ^ 'i' is already defined.
        217 |      for (var i = 0; i < replacement.arguments.length; i++) {
                              ^ 'i' is already defined.
        223 |      for (var i = 0; i < replacement.params.length; i++) {
                              ^ 'i' is already defined.
        226 |      for (var i = 0; i < replacement.defaults.length; i++) {
                              ^ 'i' is already defined.
        233 |      for (var i = 0; i < replacement.params.length; i++) {
                              ^ 'i' is already defined.
        236 |      for (var i = 0; i < replacement.defaults.length; i++) {
                              ^ 'i' is already defined.
        250 |      for (var i = 0; i < replacement.declarations.length; i++) {
                              ^ 'i' is already defined.
        273 |      for (var i = 0; i < replacement.properties.length; i++) {
                              ^ 'i' is already defined.
        310 |}
              ^ Missing semicolon.
        327 |      })
                     ^ Missing semicolon.
        331 |}
              ^ Missing semicolon.
    
    >> 24 errors in 6 files
    
    opened by brettlangdon 11
  • switch tab:

    switch tab: "case" align with "switch"

    Hi,

    I note that switch statement use wrong tabulation:

    function execute() {
      switch (test) {
      case a:
        break;
      }
    }
    

    It should be:

    function execute() {
      switch (test) {
        case a:
          break;
      }
    }
    

    Let me know if I miss configuration possibilities or if you can enhance jsfmt with this?

    Thank you!

    opened by damienleroux 10
  • Comments can create syntax errors with `else if`

    Comments can create syntax errors with `else if`

    If I jsfmt this:

    if(a)
      a(); // run a
    else if(b)
      b(); // run b
    else {
      c(); // run c
    }
    

    It does some crazy munging into the comment:

    if (a)
      a(); // run aelse if (b)b()
      ; // run b else {
      c(); // run c
    }
    

    If I do it without the comments it at least doesn't cause a syntax error, but does it make it quite ugly:

    if (a)
      a();else if (b)b()
      ; else {
      c();
    }
    
    bug 
    opened by yobert 10
  • jsfmt diff

    jsfmt diff

    jsfmt diff ignores space changes git diff -b and when running jsfmt --diff=true --format=true ./rewrite.js I missed a bunch of continuation changes that I didn't actually intend to make:

    diff --git a/rewrite.js b/rewrite.js
    index 3675a93..9a638b0 100644
    --- a/rewrite.js
    +++ b/rewrite.js
    @@ -84,13 +84,13 @@ function match(wildcards, pattern, node) {
             return false;
           }
           return match(wildcards, pattern.key, node.key)
    -          && match(wildcards, pattern.value, node.value);
    +      && match(wildcards, pattern.value, node.value);
         case 'MemberExpression':
           if (pattern.computed != node.computed) {
             return false;
           }
           return match(wildcards, pattern.object, node.object)
    -          && match(wildcards, pattern.property, node.property);
    +      && match(wildcards, pattern.property, node.property);
         case 'ArrayExpression':
           return partial(wildcards, pattern.elements, node.elements);
         case 'ObjectExpression':
    @@ -100,12 +100,12 @@ function match(wildcards, pattern, node) {
             return false;
           }
           return match(wildcards, pattern.left, node.left)
    -          && match(wildcards, pattern.right, node.right);
    +      && match(wildcards, pattern.right, node.right);
         case 'ForStatement':
           return match(wildcards, pattern.init, node.init)
    -          && match(wildcards, pattern.test, node.test)
    -          && match(wildcards, pattern.update, node.update)
    -          && match(wildcards, pattern.body, node.body);
    +      && match(wildcards, pattern.test, node.test)
    +      && match(wildcards, pattern.update, node.update)
    +      && match(wildcards, pattern.body, node.body);
         case 'VariableDeclaration':
    

    is this the desired behavior? if not, I might suggest removing the -b option from jsfmt diff.

    opened by brettlangdon 10
  • Fixes rewrite for es6 code

    Fixes rewrite for es6 code

    It looks like this issue stemmed from us using different AST parsers for different features:

    • Rewrite is using falafel, whose default is Acorn
    • Esprima is used everywhere else

    This PR migrates away from Acorn for rewrite by providing an esprima parser.

    This PR creates an internal interface for parsing/walking which centralises control of which parser implementation we use and how we walk the AST.

    opened by akiellor 9
  • Problem with object expression containing getters and setters

    Problem with object expression containing getters and setters

    When running jsfmt -v test.js where test.js contains:

    var o = {
        a: 0,
        get b() {}, 
        set c(x) {}
    };
    

    I get no error, but with:

    var o = {
        get b() {}, 
        set c(x) {}
    };
    

    I get test.js [TypeError: Cannot read property 'value' of undefined]

    and with:

    var o = {
        get b() {}, 
    };
    

    I get test.js [TypeError: Cannot read property 'root' of undefined]

    bug 
    opened by andrelillvede 9
  • allow saving and loading in ast format

    allow saving and loading in ast format

    @jimfleming, this was my attempt at trying to support loading/saving as AST, I dont expect it to be perfect, but a random attempt.

    tries to take care of #102

    opened by brettlangdon 9
  • SyntaxError: 'import' and 'export' may only appear at the top level

    SyntaxError: 'import' and 'export' may only appear at the top level

    I am using react 16.8.6. My code is working fine but I am getting syntax error. jsfmt don't support below import code. exportCsv = () => { this.setState({ isExporting: true }); import('./exportToCsvV2').then(bundle => { try { // some code } catch (e) { throw e; } }); };

    opened by naisargparmar 0
  • Bump deep-extend from 0.4.2 to 0.6.0

    Bump deep-extend from 0.4.2 to 0.6.0

    Bumps deep-extend from 0.4.2 to 0.6.0.

    Changelog

    Sourced from deep-extend's changelog.

    v0.6.0

    • Updated "devDependencies" versions to fix vulnerability alerts
    • Dropped support of io.js and node.js v0.12.x and lower since new versions of "devDependencies" couldn't work with those old node.js versions (minimal supported version of node.js now is v4.0.0)

    v0.5.1

    • Fix prototype pollution vulnerability (thanks to @​mwakerman for the PR)
    • Avoid using deprecated Buffer API (thanks to @​ChALkeR for the PR)

    v0.5.0

    • Auto-testing provided by Travis CI;
    • Support older Node.JS versions (v0.11.x and v0.10.x);
    • Removed tests files from npm package.
    Commits
    • f3f2b4f more versions of node.js to test by travis-ci
    • 3d85253 package.json: updated "engines"
    • 8b8aef9 dropped support of old node.js versions
    • 120fd97 increased "devDependencies" (mocha) up enough to fix vulnerability
    • 235821a decreasing versions of "devDependencies" to fix tests for older node versions
    • a1eb0eb README: removed "download" stats badge
    • 7bebe75 CHANGELOG: info for 0.5.2 version
    • 16b328f 0.5.2
    • 0402225 updated "devDependencies" to fix vulnerability alerts
    • 2e0110e prepared v0.5.1 release
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Fork

    Fork

    Given this repository has not been updated in quite some time, and has open security vulnerabilities, I propose that we follow an Apache-compatible license and publish an updated fork to npm as a separate package.

    opened by mcandre 1
  • Multiple vulnerabilities in deep-extend

    Multiple vulnerabilities in deep-extend

    Please update the deep-extend dependency to at least v0.5.1, in order to resolve multiple security risks:

    • https://npmjs.com/advisories/612
    • https://npmjs.com/advisories/612
    opened by mcandre 0
  • Regular Expression Denial of Service

    Regular Expression Denial of Service

    Please patch or replace esformatter so that the debug dependency rises to:

    • 2.6.9
    • 3.1.0
    • 4.0.0

    In order to resolve a security risk.

    https://www.npmjs.com/advisories/534

    opened by mcandre 0
Releases(v0.5.3)
  • v0.5.3(Feb 3, 2016)

  • v0.5.2(Oct 31, 2015)

    • Update Esprima to 2.7 (#171)
    • Run jsfmt on source code (#173)
    • Run jsfmt + diff in test suite (#174)
    • Update dependencies (#176)
    • Add docs about plugin usage (#178)
    • Update esformatter (#180)
    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Sep 30, 2015)

  • v0.5.0(Sep 30, 2015)

    • Allow overriding default plugins via .jsfmtrc config file.
    • Improved error reporting: log errors to stderr and more consistent exit status codes.
    • Better es6 support through upgraded dependencies: esformatter, esprima and escodegen.
    Source code(tar.gz)
    Source code(zip)
  • v0.4.1(Sep 30, 2015)

    • Upgrade esformatter to 0.5.0.
    • Use process.stdout.write instead of console.log to avoid outputting extra newline
    • Utilize esformatter-var-each to format vars on individual lines.
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Sep 17, 2014)

    • Added two new command-line args for AST formatting. Note that these are experimental and may be removed.
    • Removed --config option in favor of .jsfmtrc and better docs around rc.
    • Updated esformatter and using new esformatter plugin for automatic brace insertion.
    • Updated style guide to include esformatter changes.
    • Fixes and cleanup for shebang.
    • Support for variable arguments using ES6 rest syntax.
    • General rewrite cleanup.
    • Changing exit code to -1 on missing arg failure.
    • Updates to rc and other dependencies.
    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Jun 17, 2014)

  • v0.3.1(Jun 11, 2014)

  • v0.3.0(Jun 11, 2014)

    • Added CONTRIBUTING
    • Added tests
    • Added Gruntfile for development
    • Added CI support
    • Added style guide
    • Added default formatting config
    • Exposed jsfmt.getConfig api method for loading jsfmt config
    • Exposed jsfmt.format(js[, options]) api method for formatting
    • Added --validate option and exposed jsfmt.validate api method
    • Pinned dependencies
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Jun 3, 2014)

    • Add rc and --config config.json support for formatting configuration
    • Making --format the default action
    • Fix support for shebang at the top of js files, e.g. #!/usr/bin/env node
    • Fix jsfmt diff mode where whitespace was unaccounted for due to -b git diff option
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Jun 3, 2014)

Find and fix problems in your JavaScript code.

ESLint Website | Configuring | Rules | Contributing | Reporting Bugs | Code of Conduct | Twitter | Mailing List | Chat Room ESLint is a tool for ident

ESLint 21.9k Dec 31, 2022
Magic number detection for JavaScript

Magic number detection for javascript. Let Buddy sniff out the unnamed numerical constants in your code. Overview What are magic numbers? Installation

Daniel St. Jules 827 Dec 24, 2022
The JavaScript Code Quality Tool

JSLint, The JavaScript Code Quality Tool Douglas Crockford [email protected] 2019-03-15 jslint.js contains the jslint function. It parses and a

Douglas Crockford 3.5k Jan 6, 2023
🌟 JavaScript Style Guide, with linter & automatic code fixer

JavaScript Standard Style Sponsored by English • Español (Latinoamérica) • Français • Bahasa Indonesia • Italiano (Italian) • 日本語 (Japanese) • 한국어 (Ko

Standard JS 27.8k Dec 31, 2022
Beautifier for javascript

JS Beautifier This little beautifier will reformat and re-indent bookmarklets, ugly JavaScript, unpack scripts packed by Dean Edward’s popular packer,

null 8k Jan 3, 2023
Detect copy-pasted and structurally similar code

Detect copy-pasted and structurally similar JavaScript code. Requires Node.js 6.0+, and supports ES6, JSX as well as Flow. Note: the project has been

Daniel St. Jules 3.5k Dec 26, 2022
Tiny JavaScript library (1kB) by CurrencyRate.today, providing simple way and advanced number, money and currency formatting and removes all formatting/cruft and returns the raw float value.

Zero dependency tiny JavaScript library (1kB bytes) by CurrencyRate.today, providing simple way and advanced number, money and currency formatting and removes all formatting/cruft and returns the raw float value.

Yurii De 11 Nov 8, 2022
A probabilistic programming language based on pattern-rewriting

MJr-compiler MJr is a probabilistic programming language based on pattern-rewriting, heavily inspired by MarkovJunior by Maxim Gumin. This project pro

Andrew Kay 35 Dec 15, 2022
A string of four operations of the library, can solve the js digital calculation accuracy of scientific notation and formatting problems, support for thousands of decimal point formatting output operations

A string of four operations of the library, can solve the js digital calculation accuracy of scientific notation and formatting problems, support for thousands of decimal point formatting output operations

null 10 Apr 6, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
Pure JavaScript (VanillaJS) dropdown menu, with multiple select and searching support

JS Select Pure JavaScript (VanillaJS) dropdown menu, with multiple select and searching support How to use To use the select plugins, two main file mu

Luigi Verolla 4 Mar 17, 2022
AdsPower supports Local API, which has functions like reading and writing account configuration information, opening and closing browsers, searching for accounts.

AdsPower supports Local API, which has functions like reading and writing account configuration information, opening and closing browsers, searching for accounts. Besides, it can cooperate with Selenium and Puppeteer to execute browser operations automatically.

AdsPower Official 20 Dec 1, 2022
Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.

Select2 Select2 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and pagination of results. To get started, ch

Select2 25.5k Jan 1, 2023
Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.

Select2 Select2 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and pagination of results. To get started, ch

Select2 25.5k Jan 4, 2023
⊞ The modern way to work with tables. Blazing fast facet-filtering, sorting, and searching.

Table Elements The easiest way to integrate Meilisearch into your frontend as a data source for your tables. These components will allow you to kick-s

Open Web 10 Nov 21, 2022
A fast-searching and space-saving browser specially designed for programmers.

Programmer Browser A fast-searching and space-saving browser specially designed for programmers. ⭐ Support Us If you like our project, do not forget t

Özgür 571 Jan 1, 2023
The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with Bootstrap 5 support.

bootstrap-select The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with

SnapAppointments 9.7k Dec 30, 2022