• Stars
    star
    1,060
  • Rank 41,839 (Top 0.9 %)
  • Language
    JavaScript
  • License
    Other
  • Created over 10 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Lightweight URL argument and parameter parser

arg.js

Arg.js gives you quick and easy access to parameters in the URL.

Installing

Changes

v1.3

  • BUG: Empty arrays result in extra &&&&

v1.2

  • Simplified project structure and file names
  • Minified version included in /dist
  • Resolves decoding URL issues #17
  • Fix for Arg.query() in IE 8 #19
  • Use hasOwnProperty when looping though arguments
v1.1
  • Added Arg(key) shorter interface as well as Arg.get(key).
  • Ignores undefined/empty keys and values.
  • Cleans up edge cases (i.e. where paths are present in parse() calls etc).
  • Will now optionally coerce a native type out of value if possible (i.e. Number, Boolean, undefined, etc). To not coerce, set Arg.coerceMode = false
  • Better handling of complex objects that have mixed nested objects/arrays. See new test case added to test/spec/arg.js for an example object that was failing and is no longer failing.
  • Added support for anchors in Arg.url(path, params, anchorString) (i.e. no longer assumes they're variables if it's a string)
v1
  • Launch

People who like arg.js, also like:

Usage

Getting stuff

The examples here assume this path:

page.html?name=Mat&address[0].city=London&address[0].country=UK&address[1].city=Boulder&address[1].country=US#?fromhash=true

Get a single value

Arg("name")
//= "Mat"

It will get the value from both the query segment, and the hash segment.

Arg("fromhash")
//= "true"

Get an array

Arg("address")
//= [
//    { city: "London", country: "UK" },
//    { city: "Boulder", country: "US" }
//  ]

Get an object

Arg("address[0]")
//= { city: "London", country: "UK" }

Get a field from an object in an array

Arg("address[0].city")
//= "London"

Get with a default value

Arg("address[0].something", "Unknown")
//= "Unknown"

Getting everything

Everything with Arg.all()

Arg.all()
//= {
//    address: [
//      { city: "London", country: "UK" },
//      { city: "Boulder", country: "US" }
//    ],
//    fromhash: "true",
//    name: "Mat"
//  }
  • Arg.all() gets all parameters (from the query and hash segments) in one object. Optionally, you can use the query or hash methods to be specific.

Just the query segment with Arg.query()

Arg.query() gets an object made up of all the values in the query segment of the URL. The query segment is everything following the initial ?, but before the # (if there is one.)

Arg.query()
//= {
//    address: [
//      { city: "London", country: "UK" },
//      { city: "Boulder", country: "US" }
//    ],
//    name: "Mat"
//  }
  • Notice how the fromhash value is missing.

Just the hash segment with Arg.hash()

Arg.hash() gets an object made up of all the values in the hash segment of the URL. The hash segment is anything following the #.

Arg.hash()
//= {
//    fromhash: "true"
//  }

Parsing your own strings with Arg.parse()

Instead of using the current URL, you can be explicit by using the Arg.parse method.

var myArgs = "name=Mat&company=Stretchr";
Arg.parse(myArgs);
//= {
//    name: "Mat",
//    company: "Stretchr"
//  }

Building URLs and querystrings

Arg.url() helper

The Arg.url() function builds a URL, and has a few overloaded versions.

Arg.url(params) - just the params

Passing just an object will generate a URL based on the current location, just changing the parameters.

Arg.url({name: "Mat", company: "Stretchr"});
//= "path/to/current/page?name=Mat&company=Stretchr"

If you set Arg.urlUseHash = true, then the parameters will be placed in the hash segment of the new URL following the #? seperator:

Arg.urlUseHash = true;
Arg.url({name: "Mat", company: "Stretchr"});
//= "path/to/current/page#?name=Mat&company=Stretchr"
Arg.url(path, params) - explicit path

Being explicit about a path in the first argument will use that location instead.

Arg.url("http://www.stretchr.com/", {name: "Mat", company: "Stretchr"});
//= "http://www.stretchr.com/?name=Mat&company=Stretchr"
Arg.url(path, query, hash) - explicit query and hash parameters in one URL

If you want to use query and hash paremeters, pass a path and two objects.

Arg.url("http://www.stretchr.com/", {name: "Mat", company: "Stretchr"}, {comment: 123});
//= "http://www.stretchr.com/?name=Mat&company=Stretchr#?comment=123";

Arg.stringify

The Arg.stringify method lets you easily encode an object into a query string.

Arg.stringify({ name: "Mat" });
//= name=Mat
Encoding objects
Arg.stringify({ one: { two: { three: 3 }}});
//= one.two.three=3
Encoding arrays
Arg.stringify({list:["one","two","three"]});
//= list[0]=one&list[1]=two&list[2]=three

License

by Mat Ryer and Ryan Quinn Copyright (c) 2013 Stretchr, Inc.

Please consider promoting this project if you find it useful.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

More Repositories

1

testify

A toolkit with common assertions and mocks that plays nicely with the standard library
Go
22,028
star
2

objx

Go package for dealing with maps, slices, JSON and other data.
Go
670
star
3

gomniauth

Authentication framework for Go applications.
Go
637
star
4

goweb

A lightweight RESTful web framework for Go
Go
632
star
5

over.js

Elegant function overloading in JavaScript.
JavaScript
147
star
6

gorc

Recursive go testing, done better.
Go
141
star
7

powerwalk

Package for concurrently walking files
Go
104
star
8

stew

Stew is a very high performance package that extends common Go objects providing better alternatives or wrappers.
Go
67
star
9

hoard

A fast, smart caching package for Go
Go
59
star
10

github-stars

Returns the aggregate number of stars for a user/org or single repo
JavaScript
52
star
11

signature

URL signing package for Go
Go
38
star
12

codecs

Provides interfaces, functions and codecs that can be used to encode/decode data to/from various formats.
Go
31
star
13

filetypes.js

A complete list of file types, extensions and mime types in JavaScript.
JavaScript
18
star
14

pat

Go package for patterns and best practices
Go
15
star
15

readcaster

Go package for elegantly broadcasting one io.Reader source to many io.Readers
Go
14
star
16

commander

A Go package that makes it easy to create a command line interface.
Go
12
star
17

todo

A Go package that helps you remember the DO in TODO
Go
12
star
18

ottox

Plugins for the Otto Go JavaScript parser and interpreter
Go
12
star
19

thru

The worlds simplest web server
Go
11
star
20

slog

Logging package for Go
Go
10
star
21

jsonblend

A command line tool providing extensive capabilities for combining json objects.
Go
9
star
22

piglatin

English -> Pig Latin translator package for Go - TDD tutorial code
Go
9
star
23

respond

Go package for building data APIs
Go
7
star
24

sdk-go

Go SDK for Stretchr platform
Go
7
star
25

pools

pools is a go package for managing a suite of differently sized slices of objects backed by sync.Pool
5
star
26

tracer

A quick and dirty tracing package for Go
Go
5
star
27

bits

A simple bit manipulation package for Go.
Go
4
star
28

tdd-present

TDD Presentation code
Go
4
star
29

sdk-cocoa

Cocoa and iOS SDK for the Stretchr Platform
Objective-C
3
star
30

fanjs

JavaScript code for fanning elements in a circular pattern
JavaScript
3
star
31

sdk-ruby

Ruby SDK for the Stretchr Platform
Ruby
2
star
32

excerpt-search

Returns a highlighted excerpt from a block of text based on search terms
JavaScript
2
star
33

stretchr.github.io

The Stretchr.com homepage
JavaScript
2
star
34

jbaas

jsonblend as a service.
Go
2
star
35

sdk-js

HTML5 and JavaScript SDK for Stretchr
JavaScript
2
star
36

jsonblend-website

jsonblend website
JavaScript
2
star
37

config

Package that provides easy configuration management for Go programs
Go
2
star
38

sandiego

Repo for San Diego crime data workshop projects
2
star
39

cmds

Elegant command line and external tool management package for Go
Go
2
star
40

issues

Bug tracking for Stretchr platform
1
star
41

TagSpot

iOS application and HTML page showing example integrations into Stretchr
Objective-C
1
star
42

stretchr-backbone

Backbone.js adapter for Stretchr
JavaScript
1
star