{"id":14008585,"url":"https://github.com/shinnn/isogram","last_synced_at":"2025-04-04T19:11:06.803Z","repository":{"id":57278063,"uuid":"14644058","full_name":"shinnn/isogram","owner":"shinnn","description":"Generate Google Analytics tracking code with any isogrammic parameters you like","archived":false,"fork":false,"pushed_at":"2018-12-17T13:32:29.000Z","size":173,"stargazers_count":408,"open_issues_count":2,"forks_count":12,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-03-28T18:12:50.958Z","etag":null,"topics":["cli","code-generator","easter-egg","ecmascript","google-analytics","isogram","javascript","nodejs","variable"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shinnn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-11-23T14:51:43.000Z","updated_at":"2025-01-26T05:59:04.000Z","dependencies_parsed_at":"2022-08-31T04:22:48.518Z","dependency_job_id":null,"html_url":"https://github.com/shinnn/isogram","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinnn%2Fisogram","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinnn%2Fisogram/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinnn%2Fisogram/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinnn%2Fisogram/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shinnn","download_url":"https://codeload.github.com/shinnn/isogram/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247234921,"owners_count":20905854,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","code-generator","easter-egg","ecmascript","google-analytics","isogram","javascript","nodejs","variable"],"created_at":"2024-08-10T11:01:51.977Z","updated_at":"2025-04-04T19:11:06.767Z","avatar_url":"https://github.com/shinnn.png","language":"JavaScript","readme":"# isogram\n\n[![npm version](https://img.shields.io/npm/v/isogram.svg)](https://www.npmjs.com/package/isogram)\n[![Build Status](https://travis-ci.com/shinnn/isogram.svg?branch=master)](https://travis-ci.com/shinnn/isogram)\n[![Coverage Status](https://img.shields.io/coveralls/shinnn/isogram.svg)](https://coveralls.io/github/shinnn/isogram)\n\nGenerate Google Analytics code with any *isogrammic* parameters you like\n\n![Screencast](./demo.gif \"Screencast\")\n\n## Introduction\n\n### Story\n\nHere is the default tracking code of [Google Analytics](https://developers.google.com/analytics/devguides/collection/analyticsjs/).\n\n```javascript\n(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n```\n\nIt has the immediate invoked function with seven parameters `i` `s` `o` `g` `r` `a` `m`.\n\nOn the other hand, [the `index.html`](https://github.com/h5bp/html5-boilerplate/blob/5.3.0/src/index.html) of [HTML5 Boilerplate](https://github.com/h5bp/html5-boilerplate) includes the following tracking code:\n\n```javascript\n(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;e=o.createElement(i);r=o.getElementsByTagName(i)[0];e.src='//www.google-analytics.com/analytics.js';r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));\n```\n\nAs you can see, its parameters are `b` `o` `i` `l` `e` `r`, different from the original's.\nThis amusing alteration is [authored by Mathias Bynens](https://github.com/h5bp/html5-boilerplate/commit/48d49e96d6db282eb9686d31ebbc5cbbbdd4d966 \"Update to Google Universal Analytics\"), based on [the way of optimization and minification he blogged](https://mathiasbynens.be/notes/async-analytics-snippet#universal-analytics).\n\nAfter seeing that, I modularized Bynens's way as this program, *isogram*.\n\n### What it does\n\n*isogram* is a code generator. It enables us to change the parameters of the Google Analytics tracking code, as we like, as long as they are [isogrammic](http://en.wikipedia.org/wiki/Isogram).\n\nIsn't it very useful? Indeed, it isn't. But, I think, *isogram* can surprise the people seeing the source code of your website, [such as Bynens's commit](https://github.com/h5bp/html5-boilerplate/commit/48d49e96d6db282eb9686d31ebbc5cbbbdd4d966#all_commit_comments \"notes on commit\").\n\n## Websites using *isogram*\n\nThe real-life examples that uses the code *isogram* generates in their pages\n\n[apidoc]: \u003chttp://apidocjs.com/\u003e\n[bsync]: \u003chttp://www.browsersync.io/\u003e\n[cdown]: \u003chttps://chrisdown.name\u003e\n[license]: \u003chttp://choosealicense.com\u003e\n[cssnext]: \u003chttp://cssnext.io/\u003e\n[doge]: \u003chttp://dogescript.com/\u003e\n[donavonblog]: \u003chttp://donavon.js.org/\u003e\n[muffins]: \u003chttp://gomuffinsgo.com/\u003e\n[gulp]: \u003chttp://gulpjs.com/\u003e\n[hapi]: \u003chttp://hapijs.com/\u003e\n[inktweb]: \u003chttps://www.inktweb.nl/\u003e\n[jekyll]: \u003chttps://jekyllrb.com/\u003e\n[kanyewest]: \u003chttp://kanyewest.com/\u003e\n[starico]: \u003chttps://stari.co/\u003e\n[tmdpw]: \u003chttp://tmdpw.eu/\u003e\n[zespi]: \u003chttp://zacharyespiritu.com/\u003e\n\n| Website (A - Z)                | URL                           | Tracking code parameters    |\n| ----------------------------- | ----------------------------- | --------------------------- |\n| apiDoc                        | [apidocjs.com][apidoc]        | `a` `p` `i` `d` `o` `c`     |\n| BrowserSync                   | [browsersync.io][bsync]       | `s` `y` `n` `c` `I` `t`     |\n| Chris Down's website          | [chrisdown.name][cdown]       | `c` `d` `o` `w` `n`         |\n| choosealicense.com            | [choosealicense.com][license] | `L` `I` `C` `e` `N` `S` `E` |\n| cssnext                       | [cssnext.io][cssnext]         | `c` `s` `S` `n` `e` `x` `t` |\n| Dogescript                    | [dogescript.com][doge]        | `W` `o` `w` `s` `u` `c` `h` |\n| Donavon West's blog           | [donavon.js.org][donavonblog] | `D` `o` `N` `a` `V` `O` `n` |\n| Go, muffins go!               | [gomuffinsgo.com][muffins]    | `M` `U` `F` `f` `I` `N` `S` |\n| gulp.js                       | [gulpjs.com][gulp]            | `g` `u` `l` `p` `j` `s`     |\n| hapi                          | [hapijs.com][hapi]            | `h` `a` `p` `i` `j` `s`     |\n| Inktweb.nl                    | [inktweb.nl][inktweb]         | `i` `n` `k` `t` `w` `e` `b` |\n| Jekyll                        | [jekyllrb.com][jekyll]        | `j` `e` `k` `y` `l` `L`     |\n| kanyewest.com                 | [kanyewest.com][kanyewest]    | `k` `a` `n` `y` `e`         |\n| starico                       | [stari.co][starico]           | `s` `t` `a` `r` `i` `c` `o` |\n| Tim De Pauw's website         | [tmdpw.eu][tmdpw]             | `t` `m` `d` `p` `w` `e` `u` |\n| Zachary Espiritu's website    | [zacharyespiritu.com][zespi]  | `z` `a` `c` `h` `A` `r` `y` |\n\n*[Feel free to create a pull request to add your site here.](https://github.com/shinnn/isogram/pulls)*\n\n## CLI\n\n### Installation\n\n[Use](https://docs.npmjs.com/cli/install) [npm](https://docs.npmjs.com/about-npm/).\n\n```\nnpm install --global isogram\n```\n\n### Usage\n\n```\nisogram [parameters] [options]\n```\n\n#### Parameters\n\nDefault: `GoOgle`\n\n`[parameters]` need to be a **nonpattern** word with no fewer than 3 and no greater than 7 characters, each of whom can be a valid JavaScript variable name.\n\nFor example, `yummy` is not valid, but `YuMmy` is valid.\n\n#### Options\n\n```\n--id,       -i \u003cID\u003e      Set web property ID\n--domain,   -d \u003cdomain\u003e  Set domain\n--global,   -g \u003cname\u003e    Change global variable name (\"ga\" by default)\n--double,   -w           Use double quotes (single quotes by default)\n--minify,   -m           Minify output like UglifyJS\n--no-color,              Print code in a single color\n--color,    -c           Colorize parameters anyway (enabled by default)\n--no-track,              Just load, don't send a pageview\n--track,    -t           Send a pageview after loading (enabled by default)\n--help,     -h           Print usage information\n--version,  -v           Print version\n```\n\n#### Example\n\n```\nisogram YoyOjs --id 12345678-9 --domain awesome-website.com\n```\n\nyields:\n\n```javascript\n!function(Y,o,y,O,j,s){Y.GoogleAnalyticsObject=y;Y[y]||(Y[y]=function(){\n(Y[y].q=Y[y].q||[]).push(arguments)});Y[y].l=+new Date;j=o.createElement(O);\ns=o.getElementsByTagName(O)[0];j.src='//www.google-analytics.com/analytics.js';\ns.parentNode.insertBefore(j,s)}(window,document,'ga','script');\n\nga('create', 'UA-12345678-9', 'awesome-website.com');\nga('send', 'pageview');\n```\n\n## API\n\nYou can use *isogram* as a JavaScript library instead of CLI.\n\n### Installation\n\n#### Package managers\n\n##### [npm](https://www.npmjs.com/)\n\n```\nnpm install isogram\n```\n\n#### Standalone\n\n[Download the standalone build.](https://raw.githubusercontent.com/shinnn/isogram/master/dist/isogram-standalone.js)\n\n### Usage\n\n#### isogram([*parameters*, *options*])\n\n*parameters*: `String` (3 or more and 7 or less characters)  \n*options*: `Object`  \nReturn: `String`\n\nIt returns a string of Google Analytics JavaScript code.\n\n```javascript\n// Default\nisogram(); //=\u003e '!function(G,o,O,g,l,e){G.GoogleAnalyticsObject=O,G[O]||(G[O]=function(){\\n(G[O].q=G[O].q||[]).push(arguments)}),G[O].l=+new Date,l=o.createElement(g),\\ne=o.getElementsByTagName(g)[0],l.src=\\'//www.google-analytics.com/analytics.js\\',\\ne.parentNode.insertBefore(l,e)}(window,document,\\'ga\\',\\'script\\');\\n\\nga(\\'create\\', \\'UA-XXXXX-X\\', \\'auto\\');\\nga(\\'send\\', \\'pageview\\');'\n\n// Specify parameters\nisogram('abcdef'); //=\u003e '!function(a,b,c,d,e,f){a.GoogleAnalyticsObject=c,a[c]||(a[c]=function(){\\n(a[c].q=a[c].q||[]).push(arguments)}),a[c].l=+new Date,e=b.createElement(d),\\nf=b.getElementsByTagName(d)[0],e.src=\\'//www.google-analytics.com/analytics.js\\',\\nf.parentNode.insertBefore(e,f)}(window,document,\\'ga\\',\\'script\\');\\n\\nga(\\'create\\', \\'UA-XXXXX-X\\', \\'auto\\');\\nga(\\'send\\', \\'pageview\\');'\n```\n\n##### options.id\n\nType: `String`  \nDefault: `XXXXX-X`\n\nSet web property ID. `UA-` prefix maybe omitted.\n\n```javascript\nisogram({id: '36461297-9'}); //=\u003e '!function( ... , \\'UA-36461297-9\\', \\'auto\\');\\nga(\\'send\\', \\'pageview\\');'\n\nisogram({id: 'UA-36461297-9'}) === isogram({id: '36461297-9'}); //=\u003e true\n```\n\n##### options.domain\n\nType: `String`  \nDefault: `auto`\n\nSet domain of the site.\n\n```javascript\nisogram({domain: 'foo.example.com'}); //=\u003e '!function( ... , \\'foo.example.com\\');\\nga(\\'send\\', \\'pageview\\');'\n```\n\n##### options.globalName\n\nType: `String`  \nDefault: `ga`\n\nChange [the global function name](https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#renaming).\n\n```javascript\nisogram({globalName: '__tracker'}); //=\u003e '!function( ... ,document,\\'__tracker\\',\\'script\\');\\n\\n__tracker(\\'create\\', \\'UA-XXXXX-X\\', \\'auto\\');\\n__tracker(\\'send\\', \\'pageview\\');'\n```\n\n##### options.minify\n\nType: `Boolean`  \nDefault: `false`\n\nOmit unnecessary whitespaces and newlines from the result.\n\n##### options.singleQuotes\n\nType: `Boolean`  \nDefault: `true`\n\n`false` replaces all single quotes with double quotes.\n\n##### options.color\n\nType: `Boolean`  \nDefault: `false`\n\nColorize the parameters with [ANSI escape code](https://wikipedia.org/wiki/ANSI_escape_code#Colors).\n\n##### options.track\n\nType: `Boolean`  \nDefault: `true`\n\n`false` excludes `create` and `send` commands after the loading code.\n\n## License\n\nCopyright (c) 2013 - 2018 [Shinnosuke Watanabe](https://github.com/shinnn)\n\nLicensed under [the MIT License](./LICENSE).\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinnn%2Fisogram","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshinnn%2Fisogram","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinnn%2Fisogram/lists"}