diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000000..c59ce4ee74 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,104 @@ + +version: 2 + +# YAML anchors/aliases. See; +# - https://circleci.com/blog/circleci-hacks-reuse-yaml-in-your-circleci-config-with-yaml/ +# - https://github.com/circleci/frontend/blob/master/.circleci/config.yml +references: + common_config: &common_config + working_directory: /var/www/code + docker: + # @see https://github.com/massgov/Drupal-Container + - image: massgov/drupal-container:1.0.1-ci + +jobs: + build: + <<: *common_config + steps: + - checkout + - restore_cache: + name: Restore NPM Cache + keys: + - site-npm-v1-{{ checksum "styleguide/yarn.lock" }} + - site-npm-v1- + - run: { name: 'NPM Install', command: 'cd styleguide && yarn' } + - save_cache: + name: Save NPM cache + key: site-npm-v1-{{ checksum "styleguide/yarn.lock" }} + paths: [ styleguide/node_modules ] + - run: { name: 'Generate style guide', command: 'php styleguide/core/console --generate' } + - run: { name: 'Build assets', command: 'cd styleguide && node_modules/.bin/gulp prod' } + - persist_to_workspace: + root: /var/www + paths: [code] + + test: + working_directory: /home/circleci/code + docker: + - image: circleci/python:2.7.14 + steps: + - attach_workspace: {at: /home/circleci} + - setup_remote_docker + - run: docker-compose up --no-start web backstop + - run: | + docker cp ./ $(docker-compose ps -q backstop):/src/ + docker cp ./styleguide/public/. $(docker-compose ps -q web):/usr/share/nginx/html + - run: docker-compose run backstop test + - run: + command: docker cp $(docker-compose ps -q backstop):/src/backstopjs/. ./backstopjs/ + when: always + - store_artifacts: + path: ./backstopjs + destination: backstop + - store_test_results: + path: backstopjs/reports/ci + + deploy_branch: + <<: *common_config + steps: + - add_ssh_keys + - attach_workspace: {at: /var/www} + - run: + name: "Prepare Git" + command: | + git config --global user.email "ci.bot@mass.gov" + git config --global user.name "MassGov Bot" + - run: { name: 'Deploy artifacts', command: "cd styleguide && node_modules/.bin/gulp artifacts:publish" } + - run: { name: 'Deploy S3', command: "cd styleguide && node_modules/.bin/gulp patternlab:publish" } + + deploy_tag: + <<: *common_config + steps: + - add_ssh_keys + - attach_workspace: {at: /var/www} + - run: + name: "Prepare Git" + command: | + git config --global user.email "ci.bot@mass.gov" + git config --global user.name "MassGov Bot" + - run: { name: 'Configure NPM', command: 'echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc'} + - run: { name: 'Release Artifacts', command: "cd styleguide && node_modules/.bin/gulp artifacts:release" } + - run: { name: 'Release S3', command: "cd styleguide && node_modules/.bin/gulp patternlab:release" } + - run: { name: 'Release NPM', command: "cd styleguide && node_modules/.bin/gulp npm:release" } + +workflows: + version: 2 + build_branch: + jobs: + - build + - test: + requires: [build] + - deploy_branch: + requires: [build] + + build_tag: + jobs: + - build: + filters: + branches: { ignore: /.*/ } + tags: { only: /.*/ } + - deploy_tag: + requires: [build] + filters: + branches: { ignore: /.*/ } + tags: { only: /.*/ } diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000000..289d945077 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,369 @@ +# Contributing to Mayflower + +Thanks for contributing to Mayflower! Please take a minute to review the process outlined in this document to ensure that contribution is easy and effective for everyone involved. + +**On this page:** +1. [Using the issue tracker](#using-the-issue-tracker) + 1. [Issue Labels](#issue-labels) +1. [Bug Reports](#bug-reports) +1. [Feature Requests](#feature-requests) +1. [Submitting Pull Requests](#submitting-pull-requests) + 1. [Getting started](#getting-started) + 1. [Get Set Up](#get-set-up) + 1. [Forking the repo](#forking-the-repo) + 1. [Cloning the repo](#cloning-the-repo) + 1. [Installing project dependencies](#installing-project-dependencies) + 1. [Keeping in sync](#keeping-in-sync) + 1. [Creating or Editing a Pattern](#creating-or-editing-a-pattern) + 1. [Coding Guildelines](#coding-guidelines) + 1. [Submitting your work](#submitting-your-work) + 1. [Spinning up a branch](#spinning-up-a-branch) + 1. [Working with Pattern Lab](#working-with-pattern-lab) + 1. [Committing your work](#committing-your-work) + 1. [Pushing your branch](#pushing-your-branch) + 1. [Deploying your work](#deploying-your-work) + 1. [Creating a Pull Request](#creating-a-pull-request) + 1. [Review by Maintainers](#review-by-maintainers) + +## Using the issue tracker +The [issue tracker](https://github.com/massgov/mayflower/issues) is the preferred channel for [bug reports](#bug-reports), [features requests](#feature-requests) and [submitting pull requests](submitting-pull-requests). + +### Issue Labels +We use labels to help identify and organize issues. Here's what they represent and how we use them: + +- `browser bug` - Issues that are reported to us that are the result of a browser-specific bug. These are diagnosed with reduced test cases and result in an issue opened on that browser's own bug tracker. +- `confirmed` - Issues that have been confirmed with a reduced test case and identify a bug in Mayflower. +- `css` - Issues stemming from our compiled CSS or source Sass files. +- `docs` - Issues for improving or updating our documentation. +- `examples` - Issues involving the example patterns (i.e. content or data) included on our site. +- `feature` - Issues asking for a new feature to be added, or an existing one to be extended or modified. +- `build` - Issues with our build system, which is used to run all our tests, concatenate and compile source files, and more. +- `PRs welcome` - Issues we need or would love help from the community to resolve. +- `js` - Issues stemming from our compiled or source JavaScript files. +- `meta` - Issues with the project itself or our GitHub repository. + +## Bug Reports +A bug is a _demonstrable problem_ that is caused by the code in the repository. Good bug reports are extremely helpful, so thanks! + +Guidelines for bug reports: + +1. **Use the GitHub issue search** — check if the issue has already been + reported. + +2. **Check if the issue has been fixed** — try to reproduce it using the + latest `master` or `dev` branch in the repository. + +3. **Isolate the problem** — ideally create a [reduced test + case](https://css-tricks.com/reduced-test-cases/) and a live example. + +A good bug report shouldn't leave others needing to chase you up for more information. Please try to be as detailed as possible in your report. What is your environment? What steps will reproduce the issue? What browser(s) and OS experience the problem? Do other browsers show the bug differently? What would you expect to be the outcome? All these details will help people to fix any potential bugs. + +Example: + +> Short and descriptive example bug report title +> +> The browser/OS environment and Mayflower Version in which it occurs. + +> Expected behavior - what you would expect to happen on the page / site. + +> Existing behavior - what is currently happen on the page / site. + +> If suitable, include the steps required to reproduce the bug. +> +> 1. This is the first step +> 2. This is the second step +> 3. Further steps, etc. +> +> `` - a link to the reduced test case +> +> Any other information you want to share that is relevant to the issue being reported. This might include the lines of code that you have identified as causing the bug, and potential solutions (and your opinions on their merits). + +## Feature requests + +Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and aims of the project. It's up to *you* to make a strong case to convince the project's designers and developers of the merits of this feature. Please provide as much detail and context as possible. + +## Pull Requests + +Good pull requests—patches, improvements, new features—are a fantastic help! + +**Please ask first** before embarking on any significant pull request (e.g. implementing features, refactoring code, porting to a different language), otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project. + +### Work in source directories +You can modify these files in order to resolve issues and add new features: + - Styles: [`/styleguide/source/assets/scss/`](https://github.com/massgov/mayflower/tree/master/styleguide/source/assets/scss) +- Javascript functionality: [`/styleguide/source/assets/js/`](https://github.com/massgov/mayflower/tree/master/styleguide/source/assets/js) + - Pattern markup, documentation, and data: [`/styleguide/source/_patterns`](https://github.com/massgov/mayflower/tree/master/styleguide/source/_patterns) + +**Please do not edit the `gh-pages` branch.** That branch is generated and used to deploy work for testing. + +### Getting Started + +#### Get set up + +In order to run Mayflower locally, you need to have some things installed and set up on your machine. See [setting up your machine](../docs/machine-setup.md). + +#### Forking the repo + +A fork is a *copy* of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project. Learn more about forking repositories on [Github Help](https://help.github.com/articles/fork-a-repo/). + +1. Visit the [Mayflower repo on Github](https://github.com/massgov/mayflower) +1. Click the "Fork" icon in the upper right of the page +1. This will create a fork of the project under your user account which you can browse to at: `https://github.com//mayflower` + +#### Cloning the repo +Right now, you have a fork of the Mayflower repository, but you don't have the files in that repository on your computer. Let's create a clone of your fork locally on your computer. + +1. `git clone git@github.com:/mayflower.git` +1. Or, if you don't have [ssh set up on your local environment or with github](https://help.github.com/articles/connecting-to-github-with-ssh/), navigate to your fork of the Mayflower repository at `https://github.com//mayflower`. + 1. Follow from Step 2 of [Github Help: Cloning a repository](https://help.github.com/articles/cloning-a-repository/). +1. You now have a local representation of *your* Mayflower! Change directory into the repo root: `cd mayflower` + +#### Installing project dependencies + +1. Move into the styleguide directory `cd styleguide` +1. Generate pattern lab default files `php core/console --generate` +1. Install npm dependencies `npm install` + +#### Keeping in sync + +In order to make it easy to keep your fork in sync with the original (`massgov/mayflower`), add the original as a remote: + +``` +git remote add upstream git@github.com:massgov/mayflower.git +``` + +If you check your remotes (`git remote -v`), you can now see that you have two "remotes" that your local repo is pointed towards: `origin`, which points to *your* Mayflower fork, and `upstream`, which points to `massgov/mayflower`. + +### Creating or Editing a Pattern +When creating a new pattern for Mayflower, you should always check to see if the pattern you want to create already exist or could be built by adding a new variant to an existing pattern. If you can't find a good pattern, then you will need to figure out what type of pattern you need to make (Atom, Molecule, Organism, etc...). See Mayflower's Atomic Design [documentation](../docs/atomic-design.md) as a reference. + +When creating a variant of an existing pattern, you need to make sure you aren't actually creating a new pattern. It's mosty a gut feeling, but you can usually tell if you find yourself adding a lot of extra code to make the variant. Most variants are built by adding or hiding optional content or adding a modifier CSS class to switch styles. + +Your new or modified pattern should follow Mayflowers coding guidelines below. + +### Coding Guidelines + +#### General Standards +- Two space indentation (not tabs) +- Unix line endings for new patterns +- Keep existing line ending types for existing patterns (mix of windows and unix) +- File names, CSS classes, and Data Objects are consistent for each pattern. + - Example below for the Action Finder pattern + - Markup => `action-finder.twig` + - Data => `action-finder.json` + - Data Object => `{ "actionFinder": { ... } }` + - Sass => `\_action-finder.scss` + - CSS class => `.ma__action-finder: { ... }` + - JavaScript => `actionFinder.js` + - JS Selector Class => `$('.js-action-finder');` + - Documentation => `action-finder.md` +- All files (expect JavaScript) are saved in their appropriate category (Atoms, Molecules, Organisms, etc...) + +#### Twig standards +- File name must be unique across all categories, accept pages which can use any name +- The pattern's name will be the file name so use short, but descriptive file names (ie: action-finder, button, decorative-link) +- Follow the guide for [Atomic Design](../docs/atomic-design) to determine what Markup is valid for your category +- CSS class names: + - Follow the [BEM](http://getbem.com/naming/) methodology + - Start with the 'ma__' namespace + - At the block level, matches the file name (ie: action-finder.twig => ma__action-finder) + - [Modifier](http://getbem.com/naming/) level classes are always pair with the corresponding [Block](http://getbem.com/naming/) or [Element](http://getbem.com/naming/) level class (ie class="ma\_\_action-finder ma\_\_action-finder--no-bg") +- Background images by content editors + - Background images are usually added inline (ie: style="background-image: ...") to the html element that shows the image + - For very images greater than 800px wide, we normally swap them for smaller images on narrow screens + - Use a unique ID on the html element that shows the image + - Use that same unique ID in a style block that sets the background images using CSS media queries + - See the Page Banner organism as an example. +- Variables: + - Use camelCase + - Are always set to a value + - If a variable is expecting an object (i.e. `{...}`) which is not being used, set it to `null` in the `.json` file + - If a variable is expecting a value (i.e. a string or integer) which is not being used, set it to `""` in the `.json` file + - Declared at the top of the file if used multiple times or just above where it is going to be used + - Do not use or create global variables + - Use the Twig `|merge` option if you need to pass custom data to a included pattern +- Including patterns + - Set the variable used by the pattern before including it. (ie: `{% set actionFinder = foo.af %}{% include "action-finder.twig" %}`) + - Blocks are used in Templates to allow Pages to include new or override existing patterns + - When including an unknown pattern we use the `{% include item.path with item.data %}` method where `path` is a string value pointing to the pattern (ie: "path": "@atoms/01-buttons/button.twig") and `data` is the corresponding data object used by that pattern (ie: "data": { button": { ... }}) + - Sometimes it's better to create a variant of an existing pattern and include that verses creating a new pattern. +- Scope + - Do not be afraid to break your Pattern into smaller patterns + - Look for Atoms or Molecules within your code + - [BEM](http://getbem.com/naming/) methodology can be used as a guide to help break your pattern into smaller patterns + - If you find yourself wanting to add an Element CSS class to another Element CSS class, you probably have a separate pattern to break out. (ie: .ma__action-finder\_\_featured-item\_\_text, .ma__action-finder\_\_feature-item\_\_link => Feature Item should be a sepearate pattern) + +#### JSON data standards +- File name matches the corresponding Twig file + - Use `filename~variant.json` to create pattern variants +- Is located in the same folder as the corresponding Twig file +- If this content of the file is consistent for every page, the file can be saved in the 'source/\_data' folder +- Variables + - All variables are name spaced (ie: { "actionFinder": { "your-variables": "here" }} ) + - Name space should match the file name (ie: action-finder.json => actionFinder: { ... }) + - Use camel case for variable names + - Set to `""` for empty strings or numbers and `null` for an empty object + - Dummy content (ie: lorem ipsum) can be used for all Patterns except Pages + - For Pages, use real content whenever possible + +#### MD (documentation) standards +- Name of the file matches the corresponding Twig file +- For variants, the file name matches the corresponding json file with the `~` replaced by a `-` +- Is located in the same folder as the corresponding Twig file +- Documentation Templates exist for a [base](../docs/documentation-template.md) and [variants](../docs/documentation-template-variant.md) + +#### SCSS standards +- Name of the file matches the CSS [Block](http://getbem.com/naming/) level name (ie: ma\_\_action-finder => \_action-finder.scss) +- Will be saved in the appropriate category folder (ie: source/assets/scss/01-atoms) or theme category folder (ie: source/assets/scss/06-theme/01-atoms) +- Code + - [Element](http://getbem.com/naming/) and [Modifier](http://getbem.com/naming/) level selectors are written using a short hand SASS method => `&__element` or `&--modifier` + - All selectors are nested within the block level class (`.ma\_\_action-finder { a { ... } &\_\_element { ... } }`) + - Properties are sorted Alphabetically with one exception + - If a `position` is used then it's sub properties (bottom, left, right, top) are placed after the position property. + - Media queries are nested within the selector they target (ie: `&\_\_item { padding: 40px; @media($bp-small-max) { padding: 20px; }}`) +- Variables are used for all colors ($c-...) and breakpoints ($bp-...) +- local variables, if namespaced (ie: `$action-finder-min-height: 40px;` is namespaced to `action-finder`), can be added to the top of the file (ie: `\_action-finder.scss`) +- Mixins + - Each mixin has it's own file which is bundled into a main mixin.scss file. + - Should be used over generic CSS classes +- Theme Files (`scss/06-theme`) + - These files contain all of the branding for your pattern + - Properties used in these files primarily include: + - Background-color + - Background-image (if not used inline in the twig file) + - Border-color + - Color + - Fill + - Font-style + - Font-weight + - Outline-color + - Stroke + - Note avoid using shorthand properties that include theme properties (ie: `border: 2px solid;`) since many of them set a default color, making them harder to override in the theme file. Use specific properties instead (ie: `border-width: 2px;`) + +#### Javascript standards +- Check for generic code first since we may already have the code you need in a generic file (ie: accordion.js) +- Check for helper files (ie: cookies.js) that can be imported into your specific file instead of recreating code +- New files should match the name of the pattern (ie: main-nav.twig => mainNav.js) they apply to or have a generic name (ie: accordion.js) +- File names are camelCase +- Files follow a basic [starter](../docs/javascript-template.md) template that uses Node Modules and jQuery. +- Variables + - if pointing to a jQuery object, start with '$' (ie: `const $el = $('.js-action-finder');`) + - `const` should be used for variables that aren't supposed to be changed. +- Including your file + - Added the file to the list of imports in 'js/index.js' + - List is in alphabetical order + - Maintain alignment of the 'from' values + - Node's import / export modules are used to bundle files +- JS classes + - Never target CSS classes used for styling in your code + - Use CSS classes that start with `js-` to target html elements (ie: `.js-accordion`) + - Name your JS classes to be generic (ie: `.js-accordion`) or use the patterns name (ie: `.js-action-finder`) +- Code + - Your code should start with a jQuery each statement to determine if the component exists and to allow it to work with multiple versions on the page + - ES6 code is allowed and polyfilled to work with IE11 +- Vendor files should always be loaded asychronously to avoid blocking the page from loading (ie: google APIs js files) + +#### SVG icons +- SVG files are converted into twig files using the gulp svg2twig task +- Inline fill or stroke colors should be removed from the .svg file whenever possible + + +### Submitting your work + +#### Creating a branch + +Any new features and non-emergency bugfixes should branch from the `dev` branch. Hot fixes (production bug fixes) should be branched from the latest release `tag` in the `master` branch. + +Make sure your local branch (`dev` for features, `master` for prod bugs) is up-to-date with the `upstream` repo (`massgov/mayflower`). + +If you just forked it, you're probably all set. But if there have been a lot of changes to `massgov/mayflower` since you forked it, yours might be out of sync. Here's how to get yours in sync: + +``` +git checkout dev +git fetch upstream +git merge upstream/dev +git push origin dev +``` + +Now you can create your new branch: + +``` +git checkout -b my-issue-number-feature-name +``` + +If you were working on ticket DP-1234-create-backto-link, then you would type: + +``` +git checkout -b DP-1234-create-backto-link +``` + +#### Working with Pattern Lab + +Serve Mayflower locally and as you save your changes, it will update automatically: + +1. Read the [Pattern Lab docs](http://patternlab.io/docs/index.html)! +1. Run `gulp` from the `/styleguide` directory. +1. Browse to [http://localhost:3000/](http://localhost:3000/) (or port shown in gulp output if you've configured it differently) +1. Familiarize yourself with Mayflower: + - You can use the menu to look at whole page layouts (pages), templates, components (organisms and molecules), child elements (molecules and atoms), and some nuts and bolts (base). + - You can emulate different device sizes by using the size buttons at the top right of the menu bar (S M L FULL RANDOM DISCO). + - You can learn about patterns by clicking the top right COG icon, then selecting "Show Pattern Info" from the drop down. +1. All work is done in the `/styleguide/source` directory. + - Most patterns will have a `.twig` [markup file](https://twig.sensiolabs.org/), `.json` default [data file](http://patternlab.io/docs/data-pattern-specific.html), and `.md` [documentation file](http://patternlab.io/docs/pattern-documenting.html) in the `/styleguide/source/_patterns` directory. + - If a pattern has styles associated with it, the corresponding `.scss` files can be found in the `/styleguide/source/assets/scss` directory. We use [SMACSS](https://smacss.com/book/categorizing) to organize and [BEM](http://getbem.com/introduction/) to structure our [scss](http://sass-lang.com/guide) which gets compiled to css during build and automatically with the `gulp` task running. + - If a pattern has js functionality associated with it, the corresponding [ES6 module](https://hacks.mozilla.org/2015/08/es6-in-depth-modules/) `.js` file can be found in the `/styleguide/source/assets/js/modules` directory. +1. These assets will automatically recompile and the browser will refresh as you save changes. + +##### Other notes + +* It is helpful to have 2 terminal tabs open when working on this project: one to manage `gulp` tasks and the other to manage `git`. From the tab running `gulp`, type `CTRL` + `C` to kill that task when you're done. +* `gulp` will build the Pattern Lab static assets and generate a static site in the `/styleguide/public` directory. See `/styleguide/tools/gulp/gulp-readme.md`. +* Pattern Lab specific files are in the `/styleguide/public/styleguide` directory (the `styleguide.html` file is automatically generated when twig templates are updated). + +#### Committing your work + +Make your changes and commit them. Ensure that you only commit the thing you're working on. Make sure that you commit in logical blocks. + +Chris Beam explains [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/): +> ... a well-crafted Git commit message is the best way to communicate context about a change to fellow developers (and indeed to their future selves). A diff will tell you *what* changed, but only the commit message can properly tell you *why*. + +We also love the model Git commit message in Tim Pope's [A Note About Git Commit Messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). + +#### Pushing your branch +In order to create a Pull Request (PR) where maintainers can review your work, you first need to push your branch to the `origin` remote (i.e. your Mayflower fork). + +To push a new branch up to your fork: + +``` +git push -u origin DP-1234-create-backto-link +``` + +This will create the branch on your Mayflower fork. The `-u` flag links this branch with the remote one, so that in the future, you can simply type `git push origin`. + +#### Deploying your work + +Once your work is complete, deploy your branch to your Mayflower fork's Github Pages, so that its functionality can be tested and reviewed by someone who doesn't have Mayflower running locally. See [our deployment docs](../docs/developer-deploy.md) for step by step instructions. + +#### Creating a Pull Request +Pull requests (PRs) let you tell others about changes you've pushed to a repository on GitHub. Once a pull request is opened, you can discuss and review the potential changes with collaborators and add follow-up commits before the changes are merged into the repository. + +1. Follow the steps on [Github Help: Creating a pull request from a fork](https://help.github.com/articles/creating-a-pull-request-from-a-fork/). + - Make sure that the "base fork" points to `massgov/mayflower` and that "base" (branch) points to `dev` for features, `master` for production bug fixes. + - For your PR title, please use: `TICKET Description of ticket`, i.e. `DP-1234 Add back-to button on Announcement template`. Follow the PR template for the rest of the information. Keep in mind: + - Anyone could be reading this Pull Request, so the content and tone may inform people other than those taking part, now or later. + - Be explicit about what feedback you want, if any: a quick pair of eyes on the code, discussion on the technical approach, critique on design, a review of copy. + - Be explicit about when you want feedback, if the Pull Request is work in progress, say so. A prefix of “[WIP]” in the title is a simple, common pattern to indicate that state. + - @mention individuals that you specifically want to involve in the discussion, and mention why. (“/cc @jesconstantine for clarification on this logic”) + - @mention teams that you want to involve in the discussion, and mention why. (“/cc @github/security, any concerns with this approach?”) + +#### Review by Maintainers + +Once you've opened your PR, Mayflower maintainers will review and either request changes or merge it. + +Thanks again! + +*** + +## Acknowledgements + +Thanks to the [Twitter Bootstrap](https://github.com/twbs/bootstrap) for having great contribution guidelines, and also to Rob Allen's [The beginner's guide to contributing to a GitHub project](https://akrabat.com/the-beginners-guide-to-contributing-to-a-github-project/) and Matt Stauffer's [How to contribute to an open-source GitHub project using your own fork](https://mattstauffer.co/blog/how-to-contribute-to-an-open-source-github-project-using-your-own-fork) for providing helpful instructions on working with Github open source projects. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..a621f98ba0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,19 @@ +Before opening an issue: + +- [Search for duplicate or closed issues](https://github.com/massgov/mayflower/issues?utf8=%E2%9C%93&q=is%3Aissue) +- Read the [contributing guidelines](https://github.com/massgov/mayflower/blob/master/CONTRIBUTING.md) + +When reporting a bug, include: + +- Mayflower version +- Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile) +- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser) +- Description (write a sentence or two about the issue) +- Steps to reproduce on live site +- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) + +When suggesting a feature, include: + +- As much detail as possible for what we should add and why it's important to Mayflower +- Relevant links to prior art, screenshots, or live demos whenever possible + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..01ce684bf4 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,37 @@ + +Any PRs being created needs a changelog.txt file before being merged into dev. See: [Change Log Instructions](https://github.com/massgov/mayflower/blob/dev/docs/change-log-instructions.md) + + +## Description + + +## Related Issue / Ticket + +- [JIRA issue]() +- [Github issue]() + +## Steps to Test + + +1. + +## Screenshots +Use something like [licecap](http://www.cockos.com/licecap/) to capture gifs to demonstrate behaviors. + + +## Additional Notes: + +Anything else to add? + +#### Impacted Areas in Application + + +* + +#### @TODO + + +* + +#### Today I learned... + diff --git a/README.md b/README.md index fbe621979f..a79b35f7f0 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,53 @@ -# Style Guide -This living styleguide is built using PatternLab. - -## Machine set up -1. Install PHP -2. Install NodeJS version 6.9.4 (https://nodejs.org/en/download/) -3. Install GulpJS, via command line `npm install -g gulp` - -## Set up instructions -1. Clone Repo -2. Move into the styleguide directory `cd mayflower/styleguide` -3. Generate pattern lab default files `php core/console --generate` -4. Install npm dependencies `npm install` - -## Generate a styleguide -### For local development -1. run `gulp` -2. launch browser at http://localhost:3000/ or port shown in gulp output -3. Browser will automatically refresh as you make changes - -### For a dev environment -1. run 'gulp build' - -### For a production environment -1. run 'gulp prod' - -# Working with PatternLab -* All work is done in the source folder. -* Mark-up is in the source/_patterns directory. -* Front end assets can be found in the source/assets directory -* Gulp will handle the conversion of files from source to public -* Pattern Lab specific files are in the /public/styleguide directory (the styleguide.html file is automatically generated when twig templates are updated) - -# Release Deployment -Tagged releases are automatically (via CircleCI) deployed to the [Mayflower Artifacts](https://github.com/palantirnet/mayflower-artifacts) repo for consumption by the Palantir team. Tags should follow [semantic versioning](https://github.com/sindresorhus/semver-regex) conventions. +# Mayflower [![GitHub version](https://badge.fury.io/gh/massgov%2Fmayflower.svg)](https://badge.fury.io/gh/massgov%2Fmayflower) +Mayflower is the enterprise design system for the Commonwealth of Massachusetts. + +## Getting Started + +### Setting up your environment + +In order to run Mayflower locally, you need to have some things installed and set up on your machine. Follow the steps in [setting up your machine](docs/machine-setup.md). + +#### Demo Install +- Follow the steps in [Demo Install](docs/demo-install.md) to get a copy of the project up and running on your local machine for *demo* and *testing* purposes. + +## Contribute + +Please follow the steps in [Contributing docs](.github/CONTRIBUTING.md) to set up your fork and repo for *development* and *contribution* purposes. + +## Deployment + +### Developer Deployment + +Every time a branch passes CircleCI it will deploy the code to a the following URL `http://mayflower.digital.mass.gov/b//index.html` which will allow the developer to share the URL with reviewers to test their code. + +### Production Deployment + +Mayflower release managers with the necessary repo permissions can see [Release docs](docs/release.md) for steps on deploying code to production (i.e. do a release). + +## Generating assets + +This project comes with gulp tasks to build Mayflower's static assets (html, css, js, + images) without serving them locally. See the [gulp-readme](styleguide/tools/gulp/gulp-readme.md) for more information. + +### Mayflower Artifacts +Some Mass Digital Services projects (i.e. [massgov/mass](https://github.com/massgov/mass)) use twig templates in addition to the static assets (html, css, js, image) from Mayflower. To establish that dependency, those projects point their dependency manager (i.e. [composer](https://getcomposer.org/doc/00-intro.md)) to the [Mayflower Artifacts](https://github.com/massgov/mayflower-artifacts) repository, which is a collection of Mayflower build artifacts with both twig and static assets. Learn more about Mayflower Artifacts in the [massgov/openmass docs](https://github.com/massgov/openmass/blob/master/docs/Mayflower.md#mayflower-artifacts). + +## Built With + +* [Pattern Lab 2 (PHP)](http://patternlab.io/docs/index.html) - The pattern framework / static site generator +* [Twig](https://twig.sensiolabs.org/) - The templating language +* [TwigJS](https://github.com/twigjs/twig.js/wiki) - For clientside rendering of twig templates (see [ajaxPattern](styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.md)) + +## Versioning + +We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/massgov/mayflower/tags). + +Learn about how Mayflower versions work in our [Semantic Versioning](docs/versioning.md) docs. + +## License + +This project is licensed under the is licensed under the GNU General Public License v2.0 - see the [LICENSE.txt](LICENSE.txt) file for details. + +## Acknowledgments + +* [Atomic Design](http://atomicdesign.bradfrost.com/chapter-2/) methodology by Brad Frost +* This awesome [README template](https://gist.github.com/PurpleBooth/109311bb0361f32d87a2) by [@PurpleBooth](https://gist.github.com/PurpleBooth) diff --git a/backstopjs/.gitignore b/backstopjs/.gitignore new file mode 100644 index 0000000000..a157bc7fff --- /dev/null +++ b/backstopjs/.gitignore @@ -0,0 +1,3 @@ +/node_modules +/runs +/reports \ No newline at end of file diff --git a/backstopjs/backstop.js b/backstopjs/backstop.js new file mode 100644 index 0000000000..570490591f --- /dev/null +++ b/backstopjs/backstop.js @@ -0,0 +1,70 @@ + +var walk = require('./walk-dir'); +var path = require('path'); + +var patternPath = `${__dirname}/../styleguide/public/patterns/`; + +/** + * Scan for page and template patterns. + */ +var files = walk(patternPath) + .filter(function(f) { + // Only *.html + return f.match(/\.html$/) + // Not index.html/markup-only.html + && !f.match(/(\/index|markup-only)\.html$/) + // Only templates and pages. + && f.match(/\/(04-templates|05-pages)/) + // Not the readme (has version #) + && !f.match(/05-pages-readme2.html$/) + }); + +/** + * Map discovered HTML files to Backstop scenarios. + */ +var scenarios = files.map(function(file) { + return { + label: path.basename(file, '.html').replace('05-pages-', 'page-').replace('04-templates-', 'template-').replace('-', ' '), + url: `http://web/patterns/${path.relative(patternPath, file)}`, + misMatchThreshold: 0.05 + } +}); + + + +module.exports = { + "id": "regression", + "viewports": [ + { + "label": "phone", + "width": 320, + "height": 480 + }, + { + "label": "tablet", + "width": 1024, + "height": 768 + } + ], + "engineOptions": { + "waitTimeout": "10000", + "chromeFlags": ['--force-device-scale-factor=1'] + }, + "onBeforeScript": "onBefore.js", + "onReadyScript": "onReady.js", + "scenarios": scenarios, + "paths": { + "bitmaps_reference": `${__dirname}/reference`, + "bitmaps_test": `${__dirname}/runs`, + "engine_scripts": `${__dirname}/scripts`, + "html_report": `${__dirname}/reports/html`, + "ci_report": `${__dirname}/reports/ci`, + }, + "report": ["browser", "CI"], + "engine": "chrome", + "engineFlags": [], + "asyncCaptureLimit": 3, + "asyncCompareLimit": 10, + "debug": false, + "debugWindow": false +} diff --git a/backstopjs/reference/regression_page_ERROR-403_0_document_0_phone.png b/backstopjs/reference/regression_page_ERROR-403_0_document_0_phone.png new file mode 100644 index 0000000000..1ab8b3d0c7 Binary files /dev/null and b/backstopjs/reference/regression_page_ERROR-403_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_ERROR-403_0_document_1_tablet.png b/backstopjs/reference/regression_page_ERROR-403_0_document_1_tablet.png new file mode 100644 index 0000000000..5774aac2f1 Binary files /dev/null and b/backstopjs/reference/regression_page_ERROR-403_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_ERROR-404_0_document_0_phone.png b/backstopjs/reference/regression_page_ERROR-404_0_document_0_phone.png new file mode 100644 index 0000000000..bfffa81c25 Binary files /dev/null and b/backstopjs/reference/regression_page_ERROR-404_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_ERROR-404_0_document_1_tablet.png b/backstopjs/reference/regression_page_ERROR-404_0_document_1_tablet.png new file mode 100644 index 0000000000..a96e444c3e Binary files /dev/null and b/backstopjs/reference/regression_page_ERROR-404_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_ERROR-500_0_document_0_phone.png b/backstopjs/reference/regression_page_ERROR-500_0_document_0_phone.png new file mode 100644 index 0000000000..78ae44ea7d Binary files /dev/null and b/backstopjs/reference/regression_page_ERROR-500_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_ERROR-500_0_document_1_tablet.png b/backstopjs/reference/regression_page_ERROR-500_0_document_1_tablet.png new file mode 100644 index 0000000000..90d5079739 Binary files /dev/null and b/backstopjs/reference/regression_page_ERROR-500_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_G2G-G2G-ORG-Health-Services_0_document_0_phone.png b/backstopjs/reference/regression_page_G2G-G2G-ORG-Health-Services_0_document_0_phone.png new file mode 100644 index 0000000000..2b00b071d0 Binary files /dev/null and b/backstopjs/reference/regression_page_G2G-G2G-ORG-Health-Services_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_G2G-G2G-ORG-Health-Services_0_document_1_tablet.png b/backstopjs/reference/regression_page_G2G-G2G-ORG-Health-Services_0_document_1_tablet.png new file mode 100644 index 0000000000..8f6d90c5fd Binary files /dev/null and b/backstopjs/reference/regression_page_G2G-G2G-ORG-Health-Services_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_G2G-G2G-Service-Unemployment-Benefits_0_document_0_phone.png b/backstopjs/reference/regression_page_G2G-G2G-Service-Unemployment-Benefits_0_document_0_phone.png new file mode 100644 index 0000000000..69a9b610b5 Binary files /dev/null and b/backstopjs/reference/regression_page_G2G-G2G-Service-Unemployment-Benefits_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_G2G-G2G-Service-Unemployment-Benefits_0_document_1_tablet.png b/backstopjs/reference/regression_page_G2G-G2G-Service-Unemployment-Benefits_0_document_1_tablet.png new file mode 100644 index 0000000000..cd4d4b6b57 Binary files /dev/null and b/backstopjs/reference/regression_page_G2G-G2G-Service-Unemployment-Benefits_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_Homepage_0_document_0_phone.png b/backstopjs/reference/regression_page_Homepage_0_document_0_phone.png new file mode 100644 index 0000000000..78f7f2699b Binary files /dev/null and b/backstopjs/reference/regression_page_Homepage_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_Homepage_0_document_1_tablet.png b/backstopjs/reference/regression_page_Homepage_0_document_1_tablet.png new file mode 100644 index 0000000000..9935e429f0 Binary files /dev/null and b/backstopjs/reference/regression_page_Homepage_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_binder-page-cover_0_document_0_phone.png b/backstopjs/reference/regression_page_binder-page-cover_0_document_0_phone.png new file mode 100644 index 0000000000..c76fb2854f Binary files /dev/null and b/backstopjs/reference/regression_page_binder-page-cover_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_binder-page-cover_0_document_1_tablet.png b/backstopjs/reference/regression_page_binder-page-cover_0_document_1_tablet.png new file mode 100644 index 0000000000..b21c8ba3d0 Binary files /dev/null and b/backstopjs/reference/regression_page_binder-page-cover_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_binder-page-internal_0_document_0_phone.png b/backstopjs/reference/regression_page_binder-page-internal_0_document_0_phone.png new file mode 100644 index 0000000000..c95bfdba7e Binary files /dev/null and b/backstopjs/reference/regression_page_binder-page-internal_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_binder-page-internal_0_document_1_tablet.png b/backstopjs/reference/regression_page_binder-page-internal_0_document_1_tablet.png new file mode 100644 index 0000000000..7bd4af583b Binary files /dev/null and b/backstopjs/reference/regression_page_binder-page-internal_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_bio-page_0_document_0_phone.png b/backstopjs/reference/regression_page_bio-page_0_document_0_phone.png new file mode 100644 index 0000000000..c31932df2a Binary files /dev/null and b/backstopjs/reference/regression_page_bio-page_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_bio-page_0_document_1_tablet.png b/backstopjs/reference/regression_page_bio-page_0_document_1_tablet.png new file mode 100644 index 0000000000..393b540017 Binary files /dev/null and b/backstopjs/reference/regression_page_bio-page_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_board-decision_0_document_0_phone.png b/backstopjs/reference/regression_page_board-decision_0_document_0_phone.png new file mode 100644 index 0000000000..f9c82a9d2e Binary files /dev/null and b/backstopjs/reference/regression_page_board-decision_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_board-decision_0_document_1_tablet.png b/backstopjs/reference/regression_page_board-decision_0_document_1_tablet.png new file mode 100644 index 0000000000..14bb5cf095 Binary files /dev/null and b/backstopjs/reference/regression_page_board-decision_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_detail-for-service-howto-location_0_document_0_phone.png b/backstopjs/reference/regression_page_detail-for-service-howto-location_0_document_0_phone.png new file mode 100644 index 0000000000..e533de9ce7 Binary files /dev/null and b/backstopjs/reference/regression_page_detail-for-service-howto-location_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_detail-for-service-howto-location_0_document_1_tablet.png b/backstopjs/reference/regression_page_detail-for-service-howto-location_0_document_1_tablet.png new file mode 100644 index 0000000000..3804d16741 Binary files /dev/null and b/backstopjs/reference/regression_page_detail-for-service-howto-location_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_event-end-date-with-time_0_document_0_phone.png b/backstopjs/reference/regression_page_event-end-date-with-time_0_document_0_phone.png new file mode 100644 index 0000000000..72233db193 Binary files /dev/null and b/backstopjs/reference/regression_page_event-end-date-with-time_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_event-end-date-with-time_0_document_1_tablet.png b/backstopjs/reference/regression_page_event-end-date-with-time_0_document_1_tablet.png new file mode 100644 index 0000000000..86bad5cba5 Binary files /dev/null and b/backstopjs/reference/regression_page_event-end-date-with-time_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_event-end-date_0_document_0_phone.png b/backstopjs/reference/regression_page_event-end-date_0_document_0_phone.png new file mode 100644 index 0000000000..682518a0e4 Binary files /dev/null and b/backstopjs/reference/regression_page_event-end-date_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_event-end-date_0_document_1_tablet.png b/backstopjs/reference/regression_page_event-end-date_0_document_1_tablet.png new file mode 100644 index 0000000000..8e9bca14a9 Binary files /dev/null and b/backstopjs/reference/regression_page_event-end-date_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_event-listing_0_document_0_phone.png b/backstopjs/reference/regression_page_event-listing_0_document_0_phone.png new file mode 100644 index 0000000000..a92474bb76 Binary files /dev/null and b/backstopjs/reference/regression_page_event-listing_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_event-listing_0_document_1_tablet.png b/backstopjs/reference/regression_page_event-listing_0_document_1_tablet.png new file mode 100644 index 0000000000..776b5c658f Binary files /dev/null and b/backstopjs/reference/regression_page_event-listing_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_event-public-meeting-agenda_0_document_0_phone.png b/backstopjs/reference/regression_page_event-public-meeting-agenda_0_document_0_phone.png new file mode 100644 index 0000000000..c6cc778fc3 Binary files /dev/null and b/backstopjs/reference/regression_page_event-public-meeting-agenda_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_event-public-meeting-agenda_0_document_1_tablet.png b/backstopjs/reference/regression_page_event-public-meeting-agenda_0_document_1_tablet.png new file mode 100644 index 0000000000..704a826c25 Binary files /dev/null and b/backstopjs/reference/regression_page_event-public-meeting-agenda_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_event-public-meeting-minutes_0_document_0_phone.png b/backstopjs/reference/regression_page_event-public-meeting-minutes_0_document_0_phone.png new file mode 100644 index 0000000000..9c1951f47d Binary files /dev/null and b/backstopjs/reference/regression_page_event-public-meeting-minutes_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_event-public-meeting-minutes_0_document_1_tablet.png b/backstopjs/reference/regression_page_event-public-meeting-minutes_0_document_1_tablet.png new file mode 100644 index 0000000000..15e0a020f8 Binary files /dev/null and b/backstopjs/reference/regression_page_event-public-meeting-minutes_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_event-public-meeting_0_document_0_phone.png b/backstopjs/reference/regression_page_event-public-meeting_0_document_0_phone.png new file mode 100644 index 0000000000..d6c1bee481 Binary files /dev/null and b/backstopjs/reference/regression_page_event-public-meeting_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_event-public-meeting_0_document_1_tablet.png b/backstopjs/reference/regression_page_event-public-meeting_0_document_1_tablet.png new file mode 100644 index 0000000000..e992360d19 Binary files /dev/null and b/backstopjs/reference/regression_page_event-public-meeting_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_event-recurring_0_document_0_phone.png b/backstopjs/reference/regression_page_event-recurring_0_document_0_phone.png new file mode 100644 index 0000000000..08a0159292 Binary files /dev/null and b/backstopjs/reference/regression_page_event-recurring_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_event-recurring_0_document_1_tablet.png b/backstopjs/reference/regression_page_event-recurring_0_document_1_tablet.png new file mode 100644 index 0000000000..53a9a0ace3 Binary files /dev/null and b/backstopjs/reference/regression_page_event-recurring_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_event_0_document_0_phone.png b/backstopjs/reference/regression_page_event_0_document_0_phone.png new file mode 100644 index 0000000000..b51cd2a647 Binary files /dev/null and b/backstopjs/reference/regression_page_event_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_event_0_document_1_tablet.png b/backstopjs/reference/regression_page_event_0_document_1_tablet.png new file mode 100644 index 0000000000..19f7111b0e Binary files /dev/null and b/backstopjs/reference/regression_page_event_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_executive-order_0_document_0_phone.png b/backstopjs/reference/regression_page_executive-order_0_document_0_phone.png new file mode 100644 index 0000000000..8ef8a93d16 Binary files /dev/null and b/backstopjs/reference/regression_page_executive-order_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_executive-order_0_document_1_tablet.png b/backstopjs/reference/regression_page_executive-order_0_document_1_tablet.png new file mode 100644 index 0000000000..e6a78d2d99 Binary files /dev/null and b/backstopjs/reference/regression_page_executive-order_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_form-page-example_0_document_0_phone.png b/backstopjs/reference/regression_page_form-page-example_0_document_0_phone.png new file mode 100644 index 0000000000..3cbb15fa3c Binary files /dev/null and b/backstopjs/reference/regression_page_form-page-example_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_form-page-example_0_document_1_tablet.png b/backstopjs/reference/regression_page_form-page-example_0_document_1_tablet.png new file mode 100644 index 0000000000..6b828486f3 Binary files /dev/null and b/backstopjs/reference/regression_page_form-page-example_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_guide-section-all-fields_0_document_0_phone.png b/backstopjs/reference/regression_page_guide-section-all-fields_0_document_0_phone.png new file mode 100644 index 0000000000..092c9470d9 Binary files /dev/null and b/backstopjs/reference/regression_page_guide-section-all-fields_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_guide-section-all-fields_0_document_1_tablet.png b/backstopjs/reference/regression_page_guide-section-all-fields_0_document_1_tablet.png new file mode 100644 index 0000000000..d64d9e6343 Binary files /dev/null and b/backstopjs/reference/regression_page_guide-section-all-fields_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_guide_0_document_0_phone.png b/backstopjs/reference/regression_page_guide_0_document_0_phone.png new file mode 100644 index 0000000000..d864201e4b Binary files /dev/null and b/backstopjs/reference/regression_page_guide_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_guide_0_document_1_tablet.png b/backstopjs/reference/regression_page_guide_0_document_1_tablet.png new file mode 100644 index 0000000000..114f808ed5 Binary files /dev/null and b/backstopjs/reference/regression_page_guide_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_howto_0_document_0_phone.png b/backstopjs/reference/regression_page_howto_0_document_0_phone.png new file mode 100644 index 0000000000..b24627eb79 Binary files /dev/null and b/backstopjs/reference/regression_page_howto_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_howto_0_document_1_tablet.png b/backstopjs/reference/regression_page_howto_0_document_1_tablet.png new file mode 100644 index 0000000000..ee1d706474 Binary files /dev/null and b/backstopjs/reference/regression_page_howto_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_information-details-preContent-media_0_document_0_phone.png b/backstopjs/reference/regression_page_information-details-preContent-media_0_document_0_phone.png new file mode 100644 index 0000000000..cf294884b8 Binary files /dev/null and b/backstopjs/reference/regression_page_information-details-preContent-media_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_information-details-preContent-media_0_document_1_tablet.png b/backstopjs/reference/regression_page_information-details-preContent-media_0_document_1_tablet.png new file mode 100644 index 0000000000..fcc792fb34 Binary files /dev/null and b/backstopjs/reference/regression_page_information-details-preContent-media_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_information-details-table-of-contents_0_document_0_phone.png b/backstopjs/reference/regression_page_information-details-table-of-contents_0_document_0_phone.png new file mode 100644 index 0000000000..e4d984a79f Binary files /dev/null and b/backstopjs/reference/regression_page_information-details-table-of-contents_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_information-details-table-of-contents_0_document_1_tablet.png b/backstopjs/reference/regression_page_information-details-table-of-contents_0_document_1_tablet.png new file mode 100644 index 0000000000..9dcd7856a6 Binary files /dev/null and b/backstopjs/reference/regression_page_information-details-table-of-contents_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_information-details_0_document_0_phone.png b/backstopjs/reference/regression_page_information-details_0_document_0_phone.png new file mode 100644 index 0000000000..87296d88e1 Binary files /dev/null and b/backstopjs/reference/regression_page_information-details_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_information-details_0_document_1_tablet.png b/backstopjs/reference/regression_page_information-details_0_document_1_tablet.png new file mode 100644 index 0000000000..f7f6792ee3 Binary files /dev/null and b/backstopjs/reference/regression_page_information-details_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_listing-links_0_document_0_phone.png b/backstopjs/reference/regression_page_listing-links_0_document_0_phone.png new file mode 100644 index 0000000000..c2e0b7db24 Binary files /dev/null and b/backstopjs/reference/regression_page_listing-links_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_listing-links_0_document_1_tablet.png b/backstopjs/reference/regression_page_listing-links_0_document_1_tablet.png new file mode 100644 index 0000000000..a145bc0a35 Binary files /dev/null and b/backstopjs/reference/regression_page_listing-links_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_location-general-content_0_document_0_phone.png b/backstopjs/reference/regression_page_location-general-content_0_document_0_phone.png new file mode 100644 index 0000000000..fb97b814b8 Binary files /dev/null and b/backstopjs/reference/regression_page_location-general-content_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_location-general-content_0_document_1_tablet.png b/backstopjs/reference/regression_page_location-general-content_0_document_1_tablet.png new file mode 100644 index 0000000000..d0af27ff06 Binary files /dev/null and b/backstopjs/reference/regression_page_location-general-content_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_location-listing_0_document_0_phone.png b/backstopjs/reference/regression_page_location-listing_0_document_0_phone.png new file mode 100644 index 0000000000..8a71d3658a Binary files /dev/null and b/backstopjs/reference/regression_page_location-listing_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_location-listing_0_document_1_tablet.png b/backstopjs/reference/regression_page_location-listing_0_document_1_tablet.png new file mode 100644 index 0000000000..5f717b5cf8 Binary files /dev/null and b/backstopjs/reference/regression_page_location-listing_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_location-park-content_0_document_0_phone.png b/backstopjs/reference/regression_page_location-park-content_0_document_0_phone.png new file mode 100644 index 0000000000..dd686b7f53 Binary files /dev/null and b/backstopjs/reference/regression_page_location-park-content_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_location-park-content_0_document_1_tablet.png b/backstopjs/reference/regression_page_location-park-content_0_document_1_tablet.png new file mode 100644 index 0000000000..8f7efb0154 Binary files /dev/null and b/backstopjs/reference/regression_page_location-park-content_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_organization-boards_0_document_0_phone.png b/backstopjs/reference/regression_page_organization-boards_0_document_0_phone.png new file mode 100644 index 0000000000..7583e51f2a Binary files /dev/null and b/backstopjs/reference/regression_page_organization-boards_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_organization-boards_0_document_1_tablet.png b/backstopjs/reference/regression_page_organization-boards_0_document_1_tablet.png new file mode 100644 index 0000000000..a3c98dbf15 Binary files /dev/null and b/backstopjs/reference/regression_page_organization-boards_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_organization-detail_0_document_0_phone.png b/backstopjs/reference/regression_page_organization-detail_0_document_0_phone.png new file mode 100644 index 0000000000..6002e8f65f Binary files /dev/null and b/backstopjs/reference/regression_page_organization-detail_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_organization-detail_0_document_1_tablet.png b/backstopjs/reference/regression_page_organization-detail_0_document_1_tablet.png new file mode 100644 index 0000000000..055fd41868 Binary files /dev/null and b/backstopjs/reference/regression_page_organization-detail_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_organization-elected-official_0_document_0_phone.png b/backstopjs/reference/regression_page_organization-elected-official_0_document_0_phone.png new file mode 100644 index 0000000000..b31d7ab92e Binary files /dev/null and b/backstopjs/reference/regression_page_organization-elected-official_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_organization-elected-official_0_document_1_tablet.png b/backstopjs/reference/regression_page_organization-elected-official_0_document_1_tablet.png new file mode 100644 index 0000000000..990a944fb5 Binary files /dev/null and b/backstopjs/reference/regression_page_organization-elected-official_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_organization_0_document_0_phone.png b/backstopjs/reference/regression_page_organization_0_document_0_phone.png new file mode 100644 index 0000000000..7965de9ada Binary files /dev/null and b/backstopjs/reference/regression_page_organization_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_organization_0_document_1_tablet.png b/backstopjs/reference/regression_page_organization_0_document_1_tablet.png new file mode 100644 index 0000000000..ff0a2aad72 Binary files /dev/null and b/backstopjs/reference/regression_page_organization_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_page-alert_0_document_0_phone.png b/backstopjs/reference/regression_page_page-alert_0_document_0_phone.png new file mode 100644 index 0000000000..b9b0063f2e Binary files /dev/null and b/backstopjs/reference/regression_page_page-alert_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_page-alert_0_document_1_tablet.png b/backstopjs/reference/regression_page_page-alert_0_document_1_tablet.png new file mode 100644 index 0000000000..942fbea1f1 Binary files /dev/null and b/backstopjs/reference/regression_page_page-alert_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_people-listing_0_document_0_phone.png b/backstopjs/reference/regression_page_people-listing_0_document_0_phone.png new file mode 100644 index 0000000000..8286493d37 Binary files /dev/null and b/backstopjs/reference/regression_page_people-listing_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_people-listing_0_document_1_tablet.png b/backstopjs/reference/regression_page_people-listing_0_document_1_tablet.png new file mode 100644 index 0000000000..4db74017af Binary files /dev/null and b/backstopjs/reference/regression_page_people-listing_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_policy-advisory-directive_0_document_0_phone.png b/backstopjs/reference/regression_page_policy-advisory-directive_0_document_0_phone.png new file mode 100644 index 0000000000..5f7992b086 Binary files /dev/null and b/backstopjs/reference/regression_page_policy-advisory-directive_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_policy-advisory-directive_0_document_1_tablet.png b/backstopjs/reference/regression_page_policy-advisory-directive_0_document_1_tablet.png new file mode 100644 index 0000000000..30364a0352 Binary files /dev/null and b/backstopjs/reference/regression_page_policy-advisory-directive_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_press-listing_0_document_0_phone.png b/backstopjs/reference/regression_page_press-listing_0_document_0_phone.png new file mode 100644 index 0000000000..70b95c2b78 Binary files /dev/null and b/backstopjs/reference/regression_page_press-listing_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_press-listing_0_document_1_tablet.png b/backstopjs/reference/regression_page_press-listing_0_document_1_tablet.png new file mode 100644 index 0000000000..eed8c49899 Binary files /dev/null and b/backstopjs/reference/regression_page_press-listing_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_press-release-with-image_0_document_0_phone.png b/backstopjs/reference/regression_page_press-release-with-image_0_document_0_phone.png new file mode 100644 index 0000000000..42980fdaa7 Binary files /dev/null and b/backstopjs/reference/regression_page_press-release-with-image_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_press-release-with-image_0_document_1_tablet.png b/backstopjs/reference/regression_page_press-release-with-image_0_document_1_tablet.png new file mode 100644 index 0000000000..62836fd38b Binary files /dev/null and b/backstopjs/reference/regression_page_press-release-with-image_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_press-release-with-video_0_document_0_phone.png b/backstopjs/reference/regression_page_press-release-with-video_0_document_0_phone.png new file mode 100644 index 0000000000..d29e64e882 Binary files /dev/null and b/backstopjs/reference/regression_page_press-release-with-video_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_press-release-with-video_0_document_1_tablet.png b/backstopjs/reference/regression_page_press-release-with-video_0_document_1_tablet.png new file mode 100644 index 0000000000..0229114187 Binary files /dev/null and b/backstopjs/reference/regression_page_press-release-with-video_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_press-release_0_document_0_phone.png b/backstopjs/reference/regression_page_press-release_0_document_0_phone.png new file mode 100644 index 0000000000..81e3660169 Binary files /dev/null and b/backstopjs/reference/regression_page_press-release_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_press-release_0_document_1_tablet.png b/backstopjs/reference/regression_page_press-release_0_document_1_tablet.png new file mode 100644 index 0000000000..0f0bc5d17d Binary files /dev/null and b/backstopjs/reference/regression_page_press-release_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_readme_0_document_0_phone.png b/backstopjs/reference/regression_page_readme_0_document_0_phone.png new file mode 100644 index 0000000000..f9d8392bdd Binary files /dev/null and b/backstopjs/reference/regression_page_readme_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_readme_0_document_1_tablet.png b/backstopjs/reference/regression_page_readme_0_document_1_tablet.png new file mode 100644 index 0000000000..05f4eee9a2 Binary files /dev/null and b/backstopjs/reference/regression_page_readme_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_regulation_0_document_0_phone.png b/backstopjs/reference/regression_page_regulation_0_document_0_phone.png new file mode 100644 index 0000000000..6905bd0d6d Binary files /dev/null and b/backstopjs/reference/regression_page_regulation_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_regulation_0_document_1_tablet.png b/backstopjs/reference/regression_page_regulation_0_document_1_tablet.png new file mode 100644 index 0000000000..88bdac88f5 Binary files /dev/null and b/backstopjs/reference/regression_page_regulation_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_rules-of-court_0_document_0_phone.png b/backstopjs/reference/regression_page_rules-of-court_0_document_0_phone.png new file mode 100644 index 0000000000..cfb35aaf34 Binary files /dev/null and b/backstopjs/reference/regression_page_rules-of-court_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_rules-of-court_0_document_1_tablet.png b/backstopjs/reference/regression_page_rules-of-court_0_document_1_tablet.png new file mode 100644 index 0000000000..24492c43fe Binary files /dev/null and b/backstopjs/reference/regression_page_rules-of-court_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_section-landing_0_document_0_phone.png b/backstopjs/reference/regression_page_section-landing_0_document_0_phone.png new file mode 100644 index 0000000000..9e23e9a4cf Binary files /dev/null and b/backstopjs/reference/regression_page_section-landing_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_section-landing_0_document_1_tablet.png b/backstopjs/reference/regression_page_section-landing_0_document_1_tablet.png new file mode 100644 index 0000000000..50ffa8b641 Binary files /dev/null and b/backstopjs/reference/regression_page_section-landing_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_service_0_document_0_phone.png b/backstopjs/reference/regression_page_service_0_document_0_phone.png new file mode 100644 index 0000000000..5a638bd01f Binary files /dev/null and b/backstopjs/reference/regression_page_service_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_service_0_document_1_tablet.png b/backstopjs/reference/regression_page_service_0_document_1_tablet.png new file mode 100644 index 0000000000..43388de61f Binary files /dev/null and b/backstopjs/reference/regression_page_service_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_site-alert_0_document_0_phone.png b/backstopjs/reference/regression_page_site-alert_0_document_0_phone.png new file mode 100644 index 0000000000..893b93d3f6 Binary files /dev/null and b/backstopjs/reference/regression_page_site-alert_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_site-alert_0_document_1_tablet.png b/backstopjs/reference/regression_page_site-alert_0_document_1_tablet.png new file mode 100644 index 0000000000..aa4aadd1c1 Binary files /dev/null and b/backstopjs/reference/regression_page_site-alert_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_topic-your-government_0_document_0_phone.png b/backstopjs/reference/regression_page_topic-your-government_0_document_0_phone.png new file mode 100644 index 0000000000..bcc6dd1695 Binary files /dev/null and b/backstopjs/reference/regression_page_topic-your-government_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_topic-your-government_0_document_1_tablet.png b/backstopjs/reference/regression_page_topic-your-government_0_document_1_tablet.png new file mode 100644 index 0000000000..808a524c4e Binary files /dev/null and b/backstopjs/reference/regression_page_topic-your-government_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_topic_0_document_0_phone.png b/backstopjs/reference/regression_page_topic_0_document_0_phone.png new file mode 100644 index 0000000000..2b1d686e17 Binary files /dev/null and b/backstopjs/reference/regression_page_topic_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_topic_0_document_1_tablet.png b/backstopjs/reference/regression_page_topic_0_document_1_tablet.png new file mode 100644 index 0000000000..746678c989 Binary files /dev/null and b/backstopjs/reference/regression_page_topic_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_transition_0_document_0_phone.png b/backstopjs/reference/regression_page_transition_0_document_0_phone.png new file mode 100644 index 0000000000..83b4f89ef6 Binary files /dev/null and b/backstopjs/reference/regression_page_transition_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_transition_0_document_1_tablet.png b/backstopjs/reference/regression_page_transition_0_document_1_tablet.png new file mode 100644 index 0000000000..4a8886b4a0 Binary files /dev/null and b/backstopjs/reference/regression_page_transition_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_page_video-transcript_0_document_0_phone.png b/backstopjs/reference/regression_page_video-transcript_0_document_0_phone.png new file mode 100644 index 0000000000..aa77638aa2 Binary files /dev/null and b/backstopjs/reference/regression_page_video-transcript_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_page_video-transcript_0_document_1_tablet.png b/backstopjs/reference/regression_page_video-transcript_0_document_1_tablet.png new file mode 100644 index 0000000000..d7077d7713 Binary files /dev/null and b/backstopjs/reference/regression_page_video-transcript_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-alert_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-alert_0_document_0_phone.png new file mode 100644 index 0000000000..405c2962c1 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-alert_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-alert_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-alert_0_document_1_tablet.png new file mode 100644 index 0000000000..7300c4a6c6 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-alert_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-binder-page_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-binder-page_0_document_0_phone.png new file mode 100644 index 0000000000..0784c8297d Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-binder-page_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-binder-page_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-binder-page_0_document_1_tablet.png new file mode 100644 index 0000000000..f77b6f1a6b Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-binder-page_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-bio_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-bio_0_document_0_phone.png new file mode 100644 index 0000000000..e11e8d7524 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-bio_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-bio_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-bio_0_document_1_tablet.png new file mode 100644 index 0000000000..f57e095d14 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-bio_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-court-rules_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-court-rules_0_document_0_phone.png new file mode 100644 index 0000000000..0c940cdeb6 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-court-rules_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-court-rules_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-court-rules_0_document_1_tablet.png new file mode 100644 index 0000000000..fda1584ef1 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-court-rules_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-details_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-details_0_document_0_phone.png new file mode 100644 index 0000000000..03b24da90c Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-details_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-details_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-details_0_document_1_tablet.png new file mode 100644 index 0000000000..29c3c30b73 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-details_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-event_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-event_0_document_0_phone.png new file mode 100644 index 0000000000..26e81fbf58 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-event_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-event_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-event_0_document_1_tablet.png new file mode 100644 index 0000000000..9b9c31d5fd Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-event_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-form-page_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-form-page_0_document_0_phone.png new file mode 100644 index 0000000000..586277e514 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-form-page_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-form-page_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-form-page_0_document_1_tablet.png new file mode 100644 index 0000000000..a92d292524 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-form-page_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-information-details_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-information-details_0_document_0_phone.png new file mode 100644 index 0000000000..97ffbdf48d Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-information-details_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-information-details_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-information-details_0_document_1_tablet.png new file mode 100644 index 0000000000..90b30f2604 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-information-details_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-location_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-location_0_document_0_phone.png new file mode 100644 index 0000000000..d0c27bac8c Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-location_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-location_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-location_0_document_1_tablet.png new file mode 100644 index 0000000000..a786492594 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-location_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-organization-detail_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-organization-detail_0_document_0_phone.png new file mode 100644 index 0000000000..14c99e4d85 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-organization-detail_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-organization-detail_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-organization-detail_0_document_1_tablet.png new file mode 100644 index 0000000000..43192008d0 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-organization-detail_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-policy-advisory_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-policy-advisory_0_document_0_phone.png new file mode 100644 index 0000000000..8aaff940f0 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-policy-advisory_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-policy-advisory_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-policy-advisory_0_document_1_tablet.png new file mode 100644 index 0000000000..a9af95af30 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-policy-advisory_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-press_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-press_0_document_0_phone.png new file mode 100644 index 0000000000..504fab1caf Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-press_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-press_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-press_0_document_1_tablet.png new file mode 100644 index 0000000000..7d55673ab0 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-press_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-services_0_document_0_phone.png b/backstopjs/reference/regression_template_01-content-types-services_0_document_0_phone.png new file mode 100644 index 0000000000..bd4a3404cd Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-services_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_01-content-types-services_0_document_1_tablet.png b/backstopjs/reference/regression_template_01-content-types-services_0_document_1_tablet.png new file mode 100644 index 0000000000..dcf6413be2 Binary files /dev/null and b/backstopjs/reference/regression_template_01-content-types-services_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_narrow-template-green_0_document_0_phone.png b/backstopjs/reference/regression_template_narrow-template-green_0_document_0_phone.png new file mode 100644 index 0000000000..1ef6b753d1 Binary files /dev/null and b/backstopjs/reference/regression_template_narrow-template-green_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_narrow-template-green_0_document_1_tablet.png b/backstopjs/reference/regression_template_narrow-template-green_0_document_1_tablet.png new file mode 100644 index 0000000000..5f4524de32 Binary files /dev/null and b/backstopjs/reference/regression_template_narrow-template-green_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_narrow-template_0_document_0_phone.png b/backstopjs/reference/regression_template_narrow-template_0_document_0_phone.png new file mode 100644 index 0000000000..594893e2e6 Binary files /dev/null and b/backstopjs/reference/regression_template_narrow-template_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_narrow-template_0_document_1_tablet.png b/backstopjs/reference/regression_template_narrow-template_0_document_1_tablet.png new file mode 100644 index 0000000000..723a648d9b Binary files /dev/null and b/backstopjs/reference/regression_template_narrow-template_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_single-column_0_document_0_phone.png b/backstopjs/reference/regression_template_single-column_0_document_0_phone.png new file mode 100644 index 0000000000..1197716164 Binary files /dev/null and b/backstopjs/reference/regression_template_single-column_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_single-column_0_document_1_tablet.png b/backstopjs/reference/regression_template_single-column_0_document_1_tablet.png new file mode 100644 index 0000000000..1af44fe537 Binary files /dev/null and b/backstopjs/reference/regression_template_single-column_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_stacked-row-template_0_document_0_phone.png b/backstopjs/reference/regression_template_stacked-row-template_0_document_0_phone.png new file mode 100644 index 0000000000..40a7ed6965 Binary files /dev/null and b/backstopjs/reference/regression_template_stacked-row-template_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_stacked-row-template_0_document_1_tablet.png b/backstopjs/reference/regression_template_stacked-row-template_0_document_1_tablet.png new file mode 100644 index 0000000000..3361e23ff9 Binary files /dev/null and b/backstopjs/reference/regression_template_stacked-row-template_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_two-column-reversed_0_document_0_phone.png b/backstopjs/reference/regression_template_two-column-reversed_0_document_0_phone.png new file mode 100644 index 0000000000..0bb8185237 Binary files /dev/null and b/backstopjs/reference/regression_template_two-column-reversed_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_two-column-reversed_0_document_1_tablet.png b/backstopjs/reference/regression_template_two-column-reversed_0_document_1_tablet.png new file mode 100644 index 0000000000..c719603928 Binary files /dev/null and b/backstopjs/reference/regression_template_two-column-reversed_0_document_1_tablet.png differ diff --git a/backstopjs/reference/regression_template_two-column_0_document_0_phone.png b/backstopjs/reference/regression_template_two-column_0_document_0_phone.png new file mode 100644 index 0000000000..0ab531df2c Binary files /dev/null and b/backstopjs/reference/regression_template_two-column_0_document_0_phone.png differ diff --git a/backstopjs/reference/regression_template_two-column_0_document_1_tablet.png b/backstopjs/reference/regression_template_two-column_0_document_1_tablet.png new file mode 100644 index 0000000000..44ef62cb90 Binary files /dev/null and b/backstopjs/reference/regression_template_two-column_0_document_1_tablet.png differ diff --git a/backstopjs/scripts/noAnimationHelper.js b/backstopjs/scripts/noAnimationHelper.js new file mode 100644 index 0000000000..a97def71c3 --- /dev/null +++ b/backstopjs/scripts/noAnimationHelper.js @@ -0,0 +1,20 @@ +module.exports = function(chromy) { + /** + * Writes a CSS property to set transition and animation + * delays and duration to 0ms. + */ + chromy.evaluate(function() { + var style = document.createElement('style'); + style.type = 'text/css'; + var styleNode = document.createTextNode( + '*, *::before, *::after {\n' + + ' animation-delay: 0ms !important;\n' + + ' animation-duration: 0ms !important;\n' + + ' transition-duration: 0ms !important;\n' + + ' transition-delay: 0ms !important;\n' + + '}' + ); + style.appendChild(styleNode); + document.head.appendChild(style); + }); +} \ No newline at end of file diff --git a/backstopjs/scripts/noGoogleHelper.js b/backstopjs/scripts/noGoogleHelper.js new file mode 100644 index 0000000000..831fac78ff --- /dev/null +++ b/backstopjs/scripts/noGoogleHelper.js @@ -0,0 +1,36 @@ +module.exports = function(chromy) { + /** + * Hides elements that are problematic during visual testing. + * * Google Maps, which may not load all the way + * * YouTube Videos, which display differently sometimes (A/B testing maybe?) + */ + chromy.evaluate(function() { + var style = document.createElement('style'); + style.type = 'text/css'; + var styleNode = document.createTextNode( + '.fluid-width-video-wrapper:after {' + + ' background: black;' + + ' content: \'\';' + + ' position: absolute;' + + ' top: 0;' + + ' left: 0;' + + ' right: 0;' + + ' bottom: 0;' + + ' z-index: 100;' + + '}' + + '.js-google-map:before {' + + ' background: #B2DEA2;\n' + + ' content: \' \';\n' + + ' display: block;\n' + + ' position: absolute;\n' + + ' top: 0;\n' + + ' left: 0;\n' + + ' right: 0;\n' + + ' bottom: 0;\n' + + ' z-index: 100;\n' + + '}' + ); + style.appendChild(styleNode); + document.head.appendChild(style); + }); +} \ No newline at end of file diff --git a/backstopjs/scripts/onBefore.js b/backstopjs/scripts/onBefore.js new file mode 100644 index 0000000000..74dbe622bd --- /dev/null +++ b/backstopjs/scripts/onBefore.js @@ -0,0 +1,4 @@ +module.exports = function (chromy, scenario, vp) { + // IGNORE ANY CERT WARNINGS + chromy.ignoreCertificateErrors(); +}; diff --git a/backstopjs/scripts/onReady.js b/backstopjs/scripts/onReady.js new file mode 100644 index 0000000000..425497d51e --- /dev/null +++ b/backstopjs/scripts/onReady.js @@ -0,0 +1,7 @@ +module.exports = function (chromy, scenario, vp) { + console.log('SCENARIO > ' + scenario.label); + //require('./clickAndHoverHelper')(chromy, scenario); + require('./noAnimationHelper')(chromy, scenario); + require('./noGoogleHelper')(chromy, scenario); + // add more ready handlers here... +}; diff --git a/backstopjs/walk-dir.js b/backstopjs/walk-dir.js new file mode 100644 index 0000000000..7eae928ea6 --- /dev/null +++ b/backstopjs/walk-dir.js @@ -0,0 +1,23 @@ + +const fs = require('fs'); +const path = require('path'); + +function walkDir(dir) { + var files = fs.readdirSync(dir); + var filelist = []; + + files.forEach(function(file) { + var absfile = path.join(dir, file) + if(fs.statSync(absfile).isDirectory()) { + // var theseFiles = walkDir(absfile).map(subfile => path.join(file, subfile)) + filelist = filelist.concat(walkDir(absfile)); + } + else { + filelist.push(absfile) + } + }); + + return filelist; +} + +module.exports = walkDir; \ No newline at end of file diff --git a/changelogs/DP-8804.txt b/changelogs/DP-8804.txt new file mode 100644 index 0000000000..11c6b4ad7d --- /dev/null +++ b/changelogs/DP-8804.txt @@ -0,0 +1,4 @@ +___DESCRIPTION___ +Updated +Patch +- DP-8804: Updates Google Maps API version used in Mayflower. diff --git a/changelogs/template.txt b/changelogs/template.txt new file mode 100644 index 0000000000..7604b1f23a --- /dev/null +++ b/changelogs/template.txt @@ -0,0 +1,28 @@ +___DESCRIPTION___ +Change_type (see below) +Change_impact (see below) +- DP-1234: Adds apples to apple trees for admin apple pickers + +___SEMANTIC VERSION (see below)___ + + +___POST DEPLOY STEPS___ +1. Do this +2. Then do this + +___CHANGE TYPES___ +- Added for new features. +- Changed for changes in existing functionality. +- Deprecated for soon-to-be removed features. +- Removed for now removed features. +- Fixed for any bug fixes. +- Security in case of vulnerabilities. + +Note: See http://keepachangelog.com/ for more info about changelogs. + +___CHANGE IMPACT___ +- Minor +- Major +- Patch + +Note: Refer to `docs/versioning.md` for more info about change impact according to semantic versioning. diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 29766fee73..0000000000 --- a/circle.yml +++ /dev/null @@ -1,26 +0,0 @@ -machine: - php: - version: 5.5.36 - -general: - artifacts: - - "public/assets" - build_dir: styleguide - -dependencies: - override: - - php core/console --generate - - npm install - -test: - override: - - npm run gulp prod - -deployment: - release: - tag: /\bv?(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[\da-z\-]+(?:\.[\da-z\-]+)*)?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?\b/ - owner: massgov - commands: - - git config --global user.email "devops@palantir.net" - - git config --global user.name "palantirnet-temp1" - - vendor/bin/phing deploy diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000..193c3ce9c5 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3.1' + +services: + # BackstopJS. + backstop: + image: backstopjs/backstopjs:v3.1.21 + volumes: + - ./:/src + depends_on: + - web + shm_size: 1gb + entrypoint: [backstop, --config=/src/backstopjs/backstop.js] + + # Static file server. + web: + image: nginx:alpine + volumes: + - ./styleguide/public:/usr/share/nginx/html diff --git a/docs/atomic-design.md b/docs/atomic-design.md new file mode 100644 index 0000000000..ff90e197ec --- /dev/null +++ b/docs/atomic-design.md @@ -0,0 +1,91 @@ +# Atomic Design in Mayflower + +## About Atomic Design +The Mayflower style library is built using Atomic Design. The way I tend to think of building a site using Atomic Design is to see it as a LEGO set where your combining a collection of small re-usable parts to make a variety of different models. Atomic Design is similar in nature, where you define a collection of small html parts called Atoms and then use those to build a variety of different components to build your site. + +You can find an excellent description of Atomic Design on Brad Frost's [blog](http://atomicdesign.bradfrost.com/chapter-2/). + +We are following his guide fairly closely, but I differ when it comes to Molecules and Organisms. He sees them as being defined based on their complexity, but I found in practice that it was difficult to make that distinction. I like to think of Molecules as larger Atoms (components with custom styling or additional content) and Organisms as being smaller templates (component level) + +### Atoms (an "indivisible unit") +An Atom is the smallest possible pattern in Atomic Design. They are the building blocks to create more complex Patterns. In most cases, a simple html element (`a`, `h1`, `button`, etc...) is considered an Atom. More complex html elements (`table`, `ul`, `figure`, etc...) are also considered Atoms, because the individual parts (`li`,`td`,`figcaption`) cannot be used on their own. + +There can be cases where a simple html element is too small to be considered an Atom. If your design creates a dependency between two elements, then they should be combined into a single Atom. For example, an `input` is always supposed to be paired with a `label` for accessibility. In this case, the `input` element alone would be too small to be an Atom. Instead, you would pair the `input` with a `label` to create the Input Atom. + + +#### Quick guide: +* A simple html element (`a`, `h1`, `button`, etc...) or complex (`table`, `ul`, `figure`, etc...) HTML element +* Might pair html elements if there is a dependency +* Almost always uses a theme SCSS file to style the element +* Contains the smallest set of elements possible +* Almost always renders content data +* Can contain `include` statements to add an icon or another dependent Atom. + +#### Examples +1. http://mayflower.digital.mass.gov/?p=atoms-button + * This is an example of a single html element => `button` or `a` tag. +2. http://mayflower.digital.mass.gov/?p=atoms-input-checkbox + * This is an example of an atom that can't be broken down any further. The Mayflower style guide would never use the `input type=checkbox` element by itself so this atom requires the outer span tag and corresponding label. + + +### Molecules - (stylized collection) +A Molecule is a stylized collection of Atoms, HTML elements and even other Molecules that are combined to create a new pattern for a simple task. These patterns usually accomplish a single goal like a stylized link (ie: Callout Link) or a menu of links (ie: Footer Links). Molecules have the greatest flexibility of all the patterns so please make sure you're not building an Atom or Organism. + +#### Quick guide: +* Includes other patterns (Atoms or Molecules) or HTML elements + * Currently, some patterns are incorrectly categorized so including an Organism is acceptable. (ie: Rich Text organism) +* Can render content data or pass it on to other patterns +* Almost always uses a theme SCSS file to style the element + +#### Example +http://mayflower.digital.mass.gov/?p=molecules-image-promo +* This is an example of a molecule that includes other patterns, renders content data and has some theme-based css applied. + + +### Organisms - (layout of patterns) +An Organism is a layout of other patterns. HTML5 elements and CSS styling used in an Organism are for laying out the included patterns. All content to be rendered is passed on to the included patterns. The only styling done for an Organism would be to help define the layout the patterns, like background-colors and borders. + +#### Quick guide: +* Includes other patterns (Atoms, Molecules, or Organisms). +* All content data is rendered by included patterns. +* CSS styles used are only for layout (flex box, float ...) or to visually define the layout (backgrounds, borders) +* Often times it doesn't use a theme SCSS file +* Data used by the Organism is used to control the layout + +#### Example +http://mayflower.digital.mass.gov/?p=organisms-event-listing +* This is an example of an organism that includes other patterns, passes all content data to another pattern, has theme based css related to layout applied, and has a data variable to switch between a list and grid views. + +### Templates +* Template patterns define the layout and basic patterns needed when constructing a page. Like Organisms, templates contain html elements to determine the layout and can include other patterns. The also use Twig Blocks to provide locations for including additional patterns or overridding default patterns. + +#### Quick guide: +* Similar to Organisms, but at the page level +* Provides the basic layout for a page +* Contains Twig Blocks to include optional patterns or to override default patterns +* Might have some CSS or JavaScript associated with it. + +#### Example +http://mayflower.digital.mass.gov/?p=templates-location +* This is an example of a template for location type pages. +* There are several patterns included +* CSS is used to layout the basic structure of the page +* Additional Patterns can be added to two Twig Blocks, pageContent and sidebar +* The page header and the page footer are contained in Twig Blocks, pre-content and post-content, that can be overridden if needed. + +### Pages +Pages are used to show an example of how a template can be used. Pages should extend an existing template to determine the basic layout for the page, use real content in the JSON similar to that used on the live site, and include any additional optional patterns to complete the page. The page constructed should closely matche what we expect a final page to look like on the live site. + +#### Quick guide: +* Extends a template +* Might include other patterns within a template's Twig Blocks +* Contains real content within the json data (when available) +* Rarely has any CSS or JavaScript associated with it + +#### Example +http://mayflower.digital.mass.gov/?p=pages-location-park-content +* This is an example of a Location page +* It extends the location template +* Several patterns are included in the pageContent and sidebar Twig Blocks +* Real Content is used for the future Mt Greylock State Park page +* There is no CSS or JS directly associated with this page diff --git a/docs/change-log-instructions.md b/docs/change-log-instructions.md new file mode 100644 index 0000000000..07d2e53d97 --- /dev/null +++ b/docs/change-log-instructions.md @@ -0,0 +1,20 @@ +# Change Log Instructions + +This documentation outlines a simple series of steps to keep `release-notes.md` up-to-date, avoid merge conflicts, and better surface post deply steps. + +## Dev: Before You Submit a PR for a Feature Branch or Hot Fix + +1. Make a copy of `changelogs/template.txt` with the ticket number as the name (example: `DP-1234.txt`). If there is no ticket number for the contribution, just use the branch name and your initials (`awesome- feature-branch.txt`). +1. Write a plain language description of the feature you're contributing. It needs to include the name, what changed, and who it impacts. +1. Write down any post deploy steps that need to be performed (Examples: `This change will effect the local build. Make sure all developers know what steps to take after this gets in to dev`). +1. Commit the file and open your PR. + +## Release Master: When you are Releasing + +Do this after your open your release branch: + +1. In `release-notes.md`, create a new section for the release with "Added", "Changed", and "Removed" sub-sections. +1. Go through each `changelogs/*.txt` file and copy the description into the appropriate sub-section of `release-notes.md`. +1. Keep a list of post deployment steps handy for yourself. +1. After the last description is copied and you have all the post deployment steps, delete all files in `changelogs/` except for `changelogs/template.txt.` +1. Commit changes to the release branch. diff --git a/docs/demo-install.md b/docs/demo-install.md new file mode 100644 index 0000000000..12f8cc70e6 --- /dev/null +++ b/docs/demo-install.md @@ -0,0 +1,16 @@ +# Demo Install + +Follow these steps to get up and running to *demo* or *test* Mayflower. Developers should see our [Contribute docs](/.github/CONTRIBUTING.md) for directions on how to set up your repo for development and contribution purposes. + +1. Clone this repo `git clone git@github.com:massgov/mayflower.git` +1. Move into the styleguide directory `cd mayflower/styleguide` +1. Generate pattern lab default files `php core/console --generate` +1. Install npm dependencies `npm install` +1. Run `gulp` +1. Browse to [http://localhost:3000/](http://localhost:3000/) (or port shown in gulp output if you've configured it differently) +1. Take a look through Mayflower! + - You can use the menu to look at whole page layouts (pages), templates, components (organisms and molecules), child elements (molecules and atoms), and some nuts and bolts (base). + - You can emulate different device sizes by using the size buttons at the top right of the menu bar (S M L FULL RANDOM DISCO). + - You can learn about patterns by clicking the top right COG icon, then selecting "Show Pattern Info" from the drop down. +1. When you're done looking, type `CTRL` + `C` from your active terminal session to kill the `gulp` task. You can always run `gulp` again from the `mayflower/styleguide` directory to get it back up and running. +1. We're constantly working to add new features, so if you want to make sure you have the latest and greatest remember to run `git pull` before you run `gulp`! diff --git a/docs/documentation-template-variant.md b/docs/documentation-template-variant.md new file mode 100644 index 0000000000..6108dda313 --- /dev/null +++ b/docs/documentation-template-variant.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Contact List](./?p=organisms-contact-list) pattern showing an example with accordions disabled. + +### How to generate +* set the `blah` variable to ... diff --git a/docs/documentation-template.md b/docs/documentation-template.md new file mode 100644 index 0000000000..46d6d1253c --- /dev/null +++ b/docs/documentation-template.md @@ -0,0 +1,29 @@ +### Description +This is a sample of documentation to use for patterns. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Comp Heading +* Contact Us + +### Variant options +* describe the different variants that can be created and link them to the actual variant + +### JavaScript Used +* This pattern uses JavaScript for the accordions (js/modules/accordions.js) + +### Variables +~~~ +contactList: { + viewSpecific: + type: boolean, + compHeading: { + type: compHeading / optional + }, + contacts:[{ + type: array of contactUs / required + }] +} +~~~ diff --git a/docs/javascript-template.md b/docs/javascript-template.md new file mode 100644 index 0000000000..450612294e --- /dev/null +++ b/docs/javascript-template.md @@ -0,0 +1,27 @@ +### JavaScript starter code + +~~~ +export default function (window,document,$,undefined) { + + $('.js-file-name').each(function(){ + const $el = $(this), + const $target = $el.find('.js-file-name-target'); + + // an escape clause can help with performance and ensure we're safe to continue + if(reasonToNotContinue === true) { + return; + } + + // events bound to this specific pattern instance + $target.on('click', function(){ + // do something + }); + }); + + // common functionality for each pattern + function($el) { + + } + +}(window,document,jQuery); +~~~ diff --git a/docs/machine-setup.md b/docs/machine-setup.md new file mode 100644 index 0000000000..c3c86ea9cf --- /dev/null +++ b/docs/machine-setup.md @@ -0,0 +1,11 @@ +# Setting up your environment + +In order to run Mayflower locally, you need to have some things installed and set up on your machine: + +1. Install PHP ([v5.6.4](https://secure.php.net/get/php-5.6.4.tar.bz2/from/a/mirror)) + - See steps for [windows](https://www.sitepoint.com/how-to-install-php-on-windows/) || [mac os](https://ryanwinchester.ca/posts/install-php-5-6-in-osx-10-with-homebrew) +2. Install NodeJS ([v6.9.4+](https://treehouse.github.io/installation-guides/mac/node-mac.html)) + - Switch Node Package Manager (NPM) to the correct directory `npm config set prefix /usr/local` + - If you need a different version of NodeJS for another project, you can use a tool like [N](https://github.com/tj/n) or [NVM](https://github.com/creationix/nvm) to manage multiple versions. +3. Install GulpJS [globally](https://docs.npmjs.com/getting-started/installing-npm-packages-globally) + - Run `npm install -g gulp-cli` from your command line diff --git a/docs/release.md b/docs/release.md new file mode 100644 index 0000000000..598db1d2db --- /dev/null +++ b/docs/release.md @@ -0,0 +1,48 @@ +# Release to production +Mayflower release managers with the necessary repo permissions can follow these steps to deploy code to production (i.e. do a release). + +*Note: the following steps assume that your local machine and repository is already set up and functioning according to our [Getting Started docs](../.github/CONTRIBUTING.md#getting-started).* + +## Communicate to the team +1. If there is new code to be delivered, notify the team at least two hours ahead of time that a release is coming. Follow the [Communicate Releases](https://wiki.state.ma.us/display/massgovredesign/Communicating+Releases) instructions for Upcoming Deployments. + +## Creating the release +1. Check out the [massgov/mayflower `dev` branch](https://github.com/massgov/mayflower/commits/dev): + 1. `git checkout dev` + 1. Pull the latest from upstream `git pull dev`. + 1. `cd styleguide` +1. Create a release branch + 1. `git checkout -b release-#.#.#` where `#.#.#` is the next version (i.e. `5.0.0`). Read more about [Mayflower and semantic versioning](docs/versioning.md) to ensure that your are creating the right type of version. + 1. Add [release notes](https://github.com/massgov/mayflower/blob/dev/docs/change-log-instructions.md) to the top of [release notes](/release-notes.md) based on the "changelog.txt" files, remove all the "changelog.txt" files and then commit these changes. + 1. Run `npm install` in case the release includes new packages. + 1. Update the version of the npm package by editing the `version` field in the `package.json` with `#.#.#` for the release. + 1. Commit your version change from `package.json`. + 1. Push release branch to `massgov/mayflower` (i.e. `git push release-#.#.#`). + +## Deployment +1. Wait for [the circle build](https://circleci.com/gh/massgov/mayflower) to pass, which will deploy your release branch to staging automagically :). +1. Verify release notes against the site rendered at: `https://mayflower.digital.mass.gov/b//index.html`. +1. Smoke test Mayflower (a quick way to do this is to browse around to some of the different pages in the "pages" menu and do a quick gut check) +1. Open a Github Pull Request to merge (no squash!) the release branch into the `master` branch. + 1. Add the relevant release notes to the PR notes. + 1. This is a great time to verify one more time that your release [is following semantic versioning](versioning.md) properly (i.e. not pushing out breaking changes in a minor release). + +## Create a tag +1. [Create a production release](https://help.github.com/articles/creating-releases/) off the `master` branch in GitHub: + 1. Tag version: `#.#.#` (your release number) + 1. **@ Target: `master`** <<<<<<- important! :) + 1. Release title: `#.#.#` (your release number) + 1. Describe the release: paste your release notes markdown here, after the release version/date line, add a link to the release PR (protip: type `#` and you'll get an autocomplete dropdown to get to your pr) +1. Wait for [the circle builds](https://circleci.com/gh/massgov/mayflower) to pass +1. Smoke test [Prod](http://mayflower.digital.mass.gov) + - Make sure the home page reflects the date and version + +## Post Deployment +1. Open a GitHub Pull Request to merge `master` into `dev` (this should only bring an updated `release-notes.md`, `package.json`). If a feature was reverted on the release branch, have a peer do the merge after a review. +1. In JIRA Go to the [DP project](https://jira.state.ma.us/projects/DP/). + 1. Click on the Releases icon on the left side (it looks like a boat/ship). + 1. Add a new release version with today's date. + 1. Go to each shipped JIRA issue and update the Fix Version/s field. + 1. Go to the list of issues contained within the release version and copy the URL (link to this issue from release notes). +1. Follow the [Communicate Releases](https://wiki.state.ma.us/display/massgovredesign/Communicating+Releases) instructions for Deployment Completed to email Release Notes to the team. +1. Celebrate!! diff --git a/docs/s3-architecture.md b/docs/s3-architecture.md new file mode 100644 index 0000000000..3f51284b59 --- /dev/null +++ b/docs/s3-architecture.md @@ -0,0 +1,15 @@ +# Mayflower / Amazon S3 Architecture + +We host Mayflower (i.e. the static output of a Pattern Lab “build”) in an amazon s3 bucket, at which we point mayflower.digital.mass.gov. The table below describes our architecture for the various bucket sub folders. + + +|mayflower.digital.mass.gov paths| +|---| + +|Name|URL path|Example|Purpose|What code gets deployed here?|When does code get deployed here?|How does code get deployed here?|Permanent or temporary?| +|---|---|---|---|---|---|---|---| +|**Production**|/|mayflower.digital.mass.gov/|The latest and greatest version of Mayflower. Mostly used for browsing and (soon) implementation documentation from the home page.|Pattern Lab build artifacts from a production tag (i.e. 5.10.0) cut off master branch..|During the release process, when a release branch is merged into master.|Release manager executes a script command. See release docs.|Permanent (and dynamic, i.e. the contents change when a new release is deployed here)| +|**Latest minor**|/v//|/v/5/|The latest minor version within a given major: implementers who link to these css/js/font/icon assets get safe updates automatically|Pattern Lab build artifacts from a production tag (i.e. 5.10.0) cut off master branch. Note: if the production tag starts a new major release, then a new / directory will be created automatically.|During the release process, when a release branch is merged into master.|Release manager executes a script command. See release docs.|Permanent (and dynamic, i.e. the contents change when a new release is deployed here)| +|**Staging**|/b/release-#.#.#/|/b/release-5.11.0/|A given release branch; used to stage an upcoming release for functional / integration testing.|Pattern Lab build artifacts from the release branch.|When a release branch (which has an open PR) has a new commit pushed.|CircleCI deploys as part of build for the release branch.|Temporary (can be deleted when the release testing is done) @TODO script this| +|**Dev**|/b/dev/|/b/dev/|Bleeding edge of our codebase; used for browsing all of the code that has been merged into dev branch prior to release.|Pattern Lab build artifacts from the dev branch. |When a feature PR is squashed and merged into dev branch.|CircleCI deploys as part of build for the dev branch.|Permanent (and dynamic, i.e. the contents change when new work is merged in)| +|**Feature branch**|/b//|/b/DP-1234-my-ticket/|The feature development done on a particular branch; used for internal and external review functional tests.|Pattern Lab build artifacts from the feature branch.|When a feature branch (which has an open PR) has a new commit pushed.|CircleCI deploys as part of build for the feature branch.|Temporary (can be deleted when the feature testing is done) @TODO script this diff --git a/docs/versioning.md b/docs/versioning.md new file mode 100644 index 0000000000..76448130c6 --- /dev/null +++ b/docs/versioning.md @@ -0,0 +1,64 @@ +# Semantic Versioning + +The Mayflower Style Library is using [Semantic Versioning](http://semver.org/) to convey meaning about the underlying code and what has been modified from one version to the next to help consumers keep their sites up to date with the latest features and bug fixes. + +### Key Terms +* Markup - The twig or html code for a pattern +* Assets - The SVG icons, fonts, CSS, and JavaScript files +* Data Object - The JSON data variables used for a pattern + + +## Our Contract with the consumer +- *Patch:* consumer doesn't need to re-write any Markup, things just get better, nothing breaks just by updating +- *Minor:* consumer doesn't need to re-write any Markup unless specifically stated in the release notes, has access to new features available, maybe an option to do something a better way, nothing breaks just by updating +- *Major:* consumer has to walk through a 'migration' step to update since this will break things + + +## The Basics +Versions of Mayflower are denoted by three values 1.0.0 that represent Major, Minor, and Patch changes respectively. Major changes can contain Minor changes which can contain Patch changes. When Major and Minor versions are made the numbers to the right will always be reset to zero. + +### Patch versions (0.0.1) +A Patch version is created to resolve issues found within a pattern in Mayflower. The changes made will only be done to Mayflower's Assets in a manner that doesn't require changes to the Markup or Data Object. + +#### How to upgrade +A Patch version may require updating your site to use one or more newer files within Mayflower's Assets. + +#### Example of possible changes +* CSS or JavaScript modified to resolve a styling or interaction issue (ie: link color or button trigger). +* SVG icon replaced with a new version +* Fonts changed to include additional font weights + +#### Example Version +[5.1.1](https://github.com/massgov/mayflower/releases/tag/5.1.1) - Was done to resolve a issue found with the Rich Text Pattern. When a Table atom was added, it would appear un-styled. To resolve the issue, we corrected one of the CSS selectors from `.rich-text table` to `.ma__rich-text table`. + + +### Minor versions (0.1.0) +A Minor version is created when new features are added to an existing Pattern, a new Pattern is created, or an issue has been resolved that required Markup changes. New features will always be written as an optional extension of the existing pattern without requiring any modifications to the existing Markup or Data Object. + +#### How to upgrade +A Minor version may require updating your site to use one or more newer files within Mayflower's Assets, enhancing an existing Pattern with new Markup or Data Object, creating new Markup and Data Object for a new Pattern, or modifying existing Markup to resolve an issue. Markup changes made to resolve an issue, will be noted in the release notes. + +#### Example of possible changes +* New Pattern created (ie: a new button atom). +* Additional Markup or Data Object for a new feature added to an existing Pattern (ie: an optional title added to the Link List organism). +* Existing Markup enhanced to work with a new optional feature (ie: new 'ma__comp-heading--centered' css class added to the Comp Heading pattern to center the heading). +* Broken Markup, CSS, or JS changed to resolve an issue (ie: typo found in a class name, twig variable, or CSS selector) + +#### Example version +[5.4.0](https://github.com/massgov/mayflower/releases/tag/5.4.0) - We introduced several new patterns and resolved a few issues with existing patterns. The new patterns were introduced to facilitate new Executive Order and Policy Advisory pages. We also resolved several issues we found in the previous 5.3 version. + + +### Major versions (1.0.0) +A Major version is created when the new code will break existing code unless updates are made to the Markup or Data Object. + +#### How to upgrade +A Major version will require carefully updating your site's Assets, Markup, or Data Object. A full site wide regression test is advised. + +#### Example of possible changes +* Data Object updated to replace an existing variable (ie: renaming 'url' to 'href'). +* Data Object changed to use a different data Type (ie: switching the 'centered' value from Type String to Type Boolean). +* Patterns renamed or moved to a new folder (ie: renaming Action Map to Google Map). +* Markup changed so it becomes dependent on new variables (ie: new 'color' variable required to set existing background). + +#### Example Version +[5.0.0](https://github.com/massgov/mayflower/releases/tag/5.0.0) - We had to change the Data Object to introduce a new Announcement Page and fix some issues with our patterns. This page required a new pattern with a socialLinks Data Object, but that Data Object was already being used in the Footer pattern so we had to rename the existing one to footerSocialLinks. We also found inconsistency with patterns using `url` instead of `href` variables so those were all updated to use `href`. diff --git a/docs/visual-regression.md b/docs/visual-regression.md new file mode 100644 index 0000000000..34180e4445 --- /dev/null +++ b/docs/visual-regression.md @@ -0,0 +1,28 @@ +Visual Regression Testing +========================= + +This repository uses [BackstopJS](https://garris.github.io/BackstopJS/) for visual regression testing! BackstopJS works by collecting *reference* images of Template and Page patterns. Reference images are later compared to the current state after you make changes. + +### Prerequisites: + +* [Docker and Docker Compose](https://www.docker.com/community-edition#/download) must be installed. + +### Workflow: +First, ensure you've run a pattern lab build. +Then, to check how your current work compares with the reference screenshots that are committed to the repository, run the following: + +```bash +docker-compose run backstop test +open backstopjs/reports/html/index.html +``` + +When you are ready to commit your work, you will want to update the reference screenshots with the new ones that reflect your changes. To do that, run: + +```bash +docker-compose run backstop test # Capture screenshots of the current state +docker-compose run backstop approve # Accept these screenshots as the new references. +git add backstopjs/references +git commit -m "Updating reference screenshots" +``` + +Backstop also runs in CircleCI, so your build may fail if you do not update the reference screenshots when you make changes. diff --git a/release-notes.md b/release-notes.md index 1c0bc18275..7bb97d9aa3 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,5 +1,634 @@ # Mayflower Release Notes +All notable changes to this project will be documented in this file. + +See [Change Log Instructions](docs/changelog-log-instructions.md) for directions on updating this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) + +``` +: Human-friendly description, with hyperlinked patterns () +``` + +**For example** +- DP-1234: The short description text on a [service detail](http://mayflower.digital.mass.gov/?p=pages-detail-for-service-howto-location) page banner ([@organisms/by-template/page-banner](http://mayflower.digital.mass.gov/?p=organisms-page-banner)) should now render ([PR #493](https://github.com/massgov/mayflower/pull/493)) + +## 5.29.0 (6/20/2018) + +### Added +- DP-9146/DP-8825: Adds teaser listing group organism to apply accordion behavior to multiple teaser listings at once. + +### Changed +- DP-9243: MF fix info details to show contact and related in sidebar as well as bottom on desktop. + +### Removed +- DP-1234: Removed alt value from the state seal since the text "Mass.gov" is duplicate to the content in the followed . + + +## 5.28.0 (6/13/2018) + +### Added +- DP-8825: Adds teaser listing group organism to apply accordion behavior to multiple teaser listings at once. + +## 5.27.0 (6/06/2018) + +### Added +- DP-8992, DP-8993, DP-8969: Adds a new 'contact row' organism to get around limitations of existing contact component options. + +### Changed +- DP-8897: Relationship indicator change to expose organization on public pages +- DP-9077: Relationship indicator changes + + +## 5.26.0 (5/30/2018) + +### Fixed +- DP-8574: Update jQuery version for stickyTOC Firefox bug. + +### Added +- DP-7363: Enable srcset on the image pattern and demonstrate usage on Press Release with Image Page. + +### Changed +- DP-6907: Change default ordered list type styling in rich text fields. +- DP-9010: MF Update row order for boards page. + + +## 5.25.0 (5/23/2018) + +### Changed +- DP-8631: Provides twig blocks to support overrides and template mapping of data. +- DP-8854: Update the footer template to match the one in Drupal. +- DP-8949: Mayflower Subpatterns for General Teaser. + +### Fixed +- DP-9057 - Fix IE11 bug where featured image in mosaic was not appearing. + +## 5.24.0 (5/16/2018) + +### Fixed +- DP-8956: Update contact us to provide a way to keep address above other information even if there is only two contact groups. + +## 5.23.0 (5/15/2018) + +### Added +- DP-8825: Adds an expandable/accordion variation to the teaser listing organism. +- DP-8942: Add missing content examples in JSON for elected official page. + +### Changed +- DP-8924: reorder sections in organization page to have featured topics above news. +- DP-8940: Increases font size of short description on org pages to match production website +- DP-8948: Close up contact information on org pages extra horizontal spacing + +### Fixed +- DP-8890: Always print expander and let JavaScript control visibility. + + +## 5.22.0 (5/9/2018) + +### Added +- DP-6715: Allow main content of image-promos to be overwritten. + +### Changed +- DP-7761: Take html out of map pin title. +- DP-8363: Replace the site logo image with the seal image + text. +- DP-8877: MF create front end code to support display of short description on org page that is separate from contact row. +- DP-8880: Allow a block to be overridden for the sidebar of the stacked row section pattern. +- DP-8891: re-orders Mayflower elements for the Org page variations. + +## 5.21.0 (5/2/2018) + +### Added +- DP-8711: Added support for multiple entries in the page-banner-linked organism. + +### Changed +- DP-8441: Use explicit height instead of responsive iframe container if height is provided. +- DP-8516: Provides twig blocks to support overrides and template mapping of data for person bio page. +- DP-8712: Support 2nd executive in elected official About Row as option. +- DP-8738: Add additional blocks to contact us pattern. +- DP-8612: Elected--contact row adjustments. +- DP-8730: Elected--services heading color change. +- DP-8738: Elected--limit space of contact section logo. + +### Removed +- DP-8602: Remove unused slick plugin + +## 5.20.1 (4/26/2018) + +### Fixed +- Reverted the DP-8612: Add column-layout variation to 'contact us'. + +## 5.20.0 (4/25/2018) + +### Added +- DP-8569: Add missing header on binder cover page template. +- DP-8594: Adds twig blocks for overriding during implementation of the row reorder for elected officials. +- DP-8612: Add column-layout variation to 'contact us'. +- DP-8674: Adds and uses WOFF2 variants for webfonts. + +### Changed +- DP-7500: Update image-link-list to allow overriding the links without losing functionality. +- DP-7600: Extracts looped items into separate patterns. +- DP-7600: Provides twig blocks to support overrides and template mapping of data. +- DP-8597: Social links on elected org page overlap executive area when the links are long or more than x number. +- DP-8642: Fix erroneous width limitation on page-intro sub-title affecting the bio page. +- DP-8648: Fix gap with image background on Elected Official Organization page for wide-widths. + +### Fixed +- DP-8701: Replace lost image link styles. +- Fix social media icon colors in Firefox. + +## 5.19.0 (4/18/2018) + +### Added +- Adds the current mass.gov site logo for the header of the website to mayflower's image assets and allow hiding back-to button in header. + +### Changed +- DP-8362: Replace svg templates and template calls with icon() function. Added a processor for icons inserted in alert ajax version. +- DP-8440: Add component spacing to quote organism. +- DP-8454: Switch to TwigJS for rendering result-headings in javascript. +- DP-8454: Switch to TwigJS for rendering pagination in javascript. +- DP-8517: Updates image link rows layout. +- DP-8519: Updates rough transition on expansion. +- DP-8522: Modifies image link grid layout. +- DP-8524: Clean up the release to production documentation in Mayflower. +- DP-8586: Reduce minimum spacing for about section. + +### Fixed +- DP-8453: Prevent loading of result heading template until it is required. + +### Removed +- DP-8362: Remove svg icon twig templates which replaced with svg files under assets. + +## 5.18.1 (4/5/2018) + +### Changed +- Bumped the version up to 5.18.1 in the package.json. + +## 5.18.0 (4/5/2018) + +### Added +- DP-7564: Fixes issue with black line over "Who we serve" stacked row on Elected org page. Fixes issue with media queries on Elected org page. +- DP-8051: Adds page banner variation for use in elected and org detail pages. +- DP-8176: People in curated lists + +### Changed +- DP-7483: Organization block list fix. +- DP-8221: Truncates featured item titles past character limit. +- DP-8339: Automate the release process for Mayflower. +- DP-8402: Use dynamic Pattern Lab variables to reduce the amount of files that need to change during the release workflow. +- DP-8455: Make image URLs optional on search banner to allow setting randomized image in javascript. + +### Fixed +- DP-7624: Adds cover page example of binder +- DP-8126: Avoid making two ajax calls to the same endpoint when there are two ajax patterns on the same page. +- DP-8378: Fix the page banner display issue in mobile for Topic, Organizaion and Service pages. +- DP-8400: Add fix for binder page jumplinks. +- DP-8436: Moves post content for information details and fixes handling text in sticky header after toc jump link is clicked. + +## 5.17.0 (3/29/2018) + +### Added +- DP-8341: Added visual regression testing for all templates and pages. + +### Fixed +- DP-8378: Fix the page banner display issue in mobile for Topic, Organizaion and Service pages. +- DP-8406: Corrects sticky TOC selector and positioning. Corrects drupal integration styling of page flipper on binder navigation. + +### Changed +- DP-8332: Update build process for Mayflower to Circle 2.0 + +## 5.16.0 (3/23/2018) + +### Added: +- DP-7758: Adds Organization Detail content-type template. +- DP-7766: Adds Sticky Table of Contents organism pattern for use in Information Details content-type. +- DP-7767: Adds Overlay Table of Contents organism pattern, Adds Interal Binder Page example. +- DP-7341: Adds Person Card organism and About Section organism for use on Elected Official pages. + +## Changed: +- DP-7767: Changes to the `section` objects and `title` property of the Table of Contents Hierarchy organism data object to better support extensions. + + +## 5.15.0 (3/21/2018) + +### Added +- DP-6181: Add contact name to email and phone number links in contacts to be announced by screen readers along with the email address and phone number within the links. So, AT device users could have more clarity for what the email address or phone number is for. +- DP-6522: Adds new components and modifies existing ones to enable generalized listings of content, and specifically allows lists of user bios. Adds support for individual user bio pages. +- DP-6883: Add icon.function.php to pull svg icon source from /assets/svg-icons/ instead of the twig templates in @atoms/05-icons/. +- DP-8000: Adds new blocks to table-of-contents.twig and created new molecule twig expandable-sections.twig. +- DP-8290: Adds optional clearAll button to PressFilters for mayflower-react + + +### Changed +- DP-6883: Replace a call for svg icon templates with the new icon function for document download. The other icons continue to be rendered with the existing twig templates in @atoms/05-icons/. +- DP-7564: Changed Mayflower templates used for the Featured Items Mosaic component on Organization Landing Pages. This change should not impact any existing functionality, since the related component is not yet in use. +- DP-7963: Breaks out a contact item from a contact group and provides binder and info details related twig blocks to be overridden in implementation. +- DP-7976: Adds block to twig so we can override how link list decorative link is rendered. + +### Fixed +- DP-8023: Block and conditional logic updates for info details +- DP-8203: Fix header alert to be displayed in its given space +- DP-8203: Remove accordion button in side column contact + +### Removed +- DP-8190: Remove the background color from the iframe container +- Remove unused data for decorative links in link list pattern, and set the title for see all link. +- Remove sidebarHeading block renders sidebarHeading as an option of compHeading (back port mayflower-react) + +## 5.14.0 (2/28/2018) + + +### Added +- DP-7786: Added: atoms/buttons/button-toggle as a new pattern, and inline, small modifiers for label. #711 #712 +- DP-2082: [a11y] Add intuitive info to the + symbols for accordion buttons #687 + - make screen readers not announce the + button in contact accordion + - add accordion status announcement with aria-label +- DP-7063: Added SVG Chat icon #664 +- (For dev and release masters:) Added change log for the PR process #708 #715 +- DP-7624: binder cover page components #698 + - New Organism variation "illustrated-header~inverted" + - New Organism "table-of-contents-hierarchy" + - New Content Type "binder-page" + +### Changed +- DP-6352: [a11y] change tell us what you think button on all pages to be last item to get keyboard focus #678 +- DP-3222-3914: [a11y] heading levels adjustment for imagePromo items #682 +- DP-6351: [a11y] Change pagination on location listing to be heading #679 +- DP-6350: [a11y] Change search query field place holder text in location #683 +- DP-2405: Change the container for an abbreviation in a page banner title to from #688 + +### Fixed +- DP-6712: Fix the Video Dimensions on the Service Detail Page #674 +- DP-1553: [a11y] Correct aria role value #699 +- DP-2403: [a11y] Text info for the social media icons in the footer #691 + + +### Removed +- DP-3198: a11y Keyboard focus indicator usability for main menus #676 + - Removed the poor supported aria-controles from the main navigation tabs to remove the non-functional keyboard instruction in JAWS with Firefox. +- DP-3252: [a11y] Remove IDs from svg icons #681 + +## 5.13.0 (2/16/2018) + +### Changed +- DP-7907: Adds support for details to [@molecules/callout-link](https://mayflower.digital.mass.gov/?p=molecules-callout-link-with-details&view=c) (e.g calls to action on a location page header). This includes adding an eyebrow, white theme variant, time note, and emphasized text to the callout link molecule. #703 + +### Added + +- DP-7307 & DP-7483: organization image links #670 + - Add logo link molecule & logo list organism for use on service page + - Add block + - Adding accordion behaivor to image link lists + +### Fixed + +- DP-7307 & DP-7483: organization image links #670 + - relative pathing so things work everywhere + - remove borders when logo list is in sidebar, align left text & images when no image present for some links + - rename logoLink to imageLink, add variant for block treatment + - fix indentation, spacing + - adjust accordion toggle for various length of items + +## 5.12.4 (2/13/2018) + +### Fixed +- (For release masters:) `sed` from bash script on macos is not being very kind. Iterating on the release script again. + +## 5.12.3 (2/13/2018) + +### Fixed +- (For release masters:) Touch up release docs and iterate on s3 deploy scripts for smoother release. + +## 5.12.2 (2/8/2018) + +### Fixed +- (For release masters:) Touch up release docs and iterate on s3 deploy scripts for smoother release. + +## 5.12.1 (2/8/2018) + +### Fixed +- (For devs) Iterate on the release process to make it more smooth. + +## 5.12.0 (2/7/2018) + +### Changed +- DP-7718: Adds support for Description text to [@molecules/callout-link](https://mayflower.digital.mass.gov/?p=molecules-callout-link-as-description&view=c) (e.g calls to action on a location page header). +- D-7725: Adds Support for Blue Variant of [@atoms/colored-heading](https://mayflower.digital.mass.gov/?p=atoms-colored-heading-blue&view=c) (e.g. header in the press filter organism) + +## Fixed +- DP-7359: Make line breaks on word in [richtext](https://mayflower.digital.mass.gov/?p=organisms-rich-text) links compatible with non-chrome browsers. +- DP-7490: Adjust the [page banner](https://mayflower.digital.mass.gov/?p=organisms-page-banner-as-overlay) and its children for flexble height. + +## Added +- (For Devs): Adds shell scripts and circle config to deploy feature branches and production tags to mayflower.digital.mass.gov [s3 bucket|https://github.com/massgov/mayflower/blob/dev/docs/s3-architecture.md] AND to publish static assets on [NPM|https://www.npmjs.com/package/@massds/mayflower]. See new [release process|https://github.com/massgov/mayflower/blob/dev/docs/release.md] + +## 5.11.0 (2/5/2018) + +### Changed +- DP-7478 - Page based alerts can now span multiple rows as needed. +- DP-7193 - Contact Accordians now have a more flexible layout for better experience on wider widths. + +### Added +- DP-7265 - Add new 'Mosaic Grid' organism with 'Featured Item' molecules for use on ['Organization Elected Official' pages](https://mayflower.digital.mass.gov/?p=pages-organization-elected-official). + +## 5.10.1 (1/3/2018) + +### Changed +- DP-7252 - We've made the ajax pattern respect cache (i.e. the get request no longer appends a cache busting querystring "_= parameter). + +## 5.10.0 (12/13/2017) + +### Added +- DP-5817 - Give a warm welcome our newest Mayflower page type: [Rules of Court](https://mayflower.digital.mass.gov/?p=pages-rules-of-court). This page can be used by legal professionals to publish court rulings, standing orders, and evidence guides. Notice the new optional javascript functionality added to the [rich text](http://mayflower.digital.mass.gov/?p=organisms-rich-text&view=c) pattern to provide heading indentation and anchor links (as seen on the [Rules of Court](https://mayflower.digital.mass.gov/?p=pages-rules-of-court) page). Also note the new accordion functionality added to the [listing table](http://mayflower.digital.mass.gov/?p=molecules-listing-table) pattern (as seen on the [Rules of Court](https://mayflower.digital.mass.gov/?p=pages-rules-of-court) page). +- DP-5991 - We've added an event page with [Public Meeting Notice](https://mayflower.digital.mass.gov/?p=pages-event-public-meeting) functionality: posted/updated information, public testimony callout, agenda, minutes, and participating organizations. Related, we've also added a full page display for [event minutes](https://mayflower.digital.mass.gov/?p=pages-event-public-meeting-minutes) and [event agendas](https://mayflower.digital.mass.gov/?p=pages-event-public-meeting-agenda). +- DP-6517 - We've added a nifty new pattern to our family: [Ajax Pattern](https://mayflower.digital.mass.gov/?p=organisms-ajax-pattern&view=c). With this pattern, you can render dynamic content in any existing Mayflower pattern client side with the help of the TwigJS library. Read the [pattern docs](https://mayflower.digital.mass.gov/?p=organisms-ajax-pattern&view=c) to learn more and see it in action on the [Park Location page](https://mayflower.digital.mass.gov/?p=pages-location-park-content&view=c) -- the site and page alerts are all rendered using this new pattern! + +### Changed +- DP-5916 - We've increased the vertical spacing between the phone number and description on the [Image Promo](http://mayflower.digital.mass.gov/?p=molecules-image-promo-with-map-link&view=c) pattern as it appears on [location listing pages](http://mayflower.digital.mass.gov/?p=pages-location-listing). +- DP-6916 - We've fixed the bug where long sidebar contact "learn more" links (i.e. on [How To pages](http://mayflower.digital.mass.gov/?p=pages-howto) were being hyphenated. + +### Migrate Path +- DP-5817 - To implement this new page type, follow the [content type template pattern](https://mayflower.digital.mass.gov/?p=templates-court-rules&view=c). Note the [backwards compatible extension of the listing table molecule](https://github.com/massgov/mayflower/pull/651/files#diff-831775c0ca12ca6116f93daaa9958ee0R7) to provide accordion function using the existing accordion js module and the [extension of the rich text organism](https://github.com/massgov/mayflower/pull/651/files#diff-085d4a2070c5f2bff38e4817c382b3beR4) (and new [JS](https://github.com/massgov/mayflower/pull/651/files#diff-e8d7776e501f946139bb194df89bef71R10)) to add "outline" indentation and heading anchor links. +- DP-5916 - You'll get [this style patch (from PR#645)](https://github.com/massgov/mayflower/pull/645/files) just by updating your css files! +- DP-5991 - See the [event content template](http://mayflower.digital.mass.gov/?p=templates-event&view=c) for instructions on implementing this new pattern variation. +- DP-6517 - Follow the [usage guidelines in the pattern docs](https://mayflower.digital.mass.gov/?p=organisms-ajax-pattern&view=c) to implement this new client side rendering feature. See [an example implementation](https://github.com/massgov/mayflower/pull/644/files#diff-6619abb22969d972a21c93eb45ce97beR3) with a data transform function. +- DP-6916 - You'll get [this style patch (from PR#646)](https://github.com/massgov/mayflower/pull/646/files) just by updating your css files! + +## 5.9.1 (11/29/2017) + +Bump version to appease the automation Gods. + +## 5.9.0 (11/28/2017) + +### Added +- DP-5385 - The [Suggested Pages](http://mayflower.digital.mass.gov/?p=organisms-suggested-pages) pattern (i.e. Related Locations) now includes an optional more link so that it can be implemented to only render 3 entries and link to the rest. +- DP-5858 - Styles have been added which hide the "Tell us what you think" button and ensure that contact accordions are expanded when a page is printed. +- DP-6111 - Event teaser listings now have a ["no event" state](http://mayflower.digital.mass.gov/?p=organisms-event-listing-past-as-grid) which will render when the pattern is included on a page but no future events are provided. + +### Changed +- DP-4534 - The [header tags](http://mayflower.digital.mass.gov/?p=molecules-header-tags) molecule (i.e. relationship indicators) has been updated to support 3+ tags by adding a show/hide button to collapse and expand the tags. +- DP-4572 - The dateline (i.e. BOSTON -) style on a press release page has been updated to be bold with an emdash appended. +- DP-5388 - The page banner on a Service Page will now fit longer text content (i.e. up to 400px in height). +- DP-5515 - [Service](http://mayflower.digital.mass.gov/?p=pages-service) and [Org](http://mayflower.digital.mass.gov/?p=pages-organization) page "action finder" titles (i.e. What would you like to do?) have been updated to sentence case. +- DP-5518 - The style for the feedback form (i.e. Did you find what you're looking for) textarea is more consistent when a user clicks yes / no. +- DP-5523 - When appearing consecutively (i.e. on a [Service Page](http://mayflower.digital.mass.gov/?p=pages-service) the grey background of the second "action finder" (i.e. What you need to know) will line up more consistently with the first. +- DP-5914 - The spacing has been fixed on [Topic page Section links](http://mayflower.digital.mass.gov/?p=pages-topic) (i.e. Topic cards) which display Callout links (i.e. links to Services). +- DP-6106 - The mobile styling for the banner on [Topic pages](http://mayflower.digital.mass.gov/?p=pages-topic&w=350px) has been made more consistent to other page banners: the height is flexible, the content is vertically centered, the icon removed, and the colored background fills the width of the screen. + +### Removed +- DP-3060 - The outline has been removed from the Heading which appeared when a [How-To](http://mayflower.digital.mass.gov/?p=pages-howto) subnav anchor link (i.e. "Next Steps") is clicked. +- DP-5914 - Remove extra padding on callout links + +### Migrate Path +- DP-5385 - To use the new more link for Suggested Pages, populate the optional `suggestPages.more` property with the data for a Link pattern. +- DP-4572 - To apply this style fix, wrap your press release dateline (i.e. BOSTON) text in `span.ma__rich-text__flame`. (See [massgov/mass PR #1304](https://github.com/massgov/mass/pull/1304/files)) +- DP-5515 - The title text for "action finders" (i.e. What you need to know) are configurable, so just update your implementation to use sentence case to meet our styleguide standards! +- DP-6111 - To use the new "no events" state for a listing of Event Teasers (i.e. on Org pages), populate the `eventListing.emptyText` and `eventListing.pastMore` properties and leave `eventListing.events` array empty. (See [massgov/mass PR #1443](https://github.com/massgov/mass/pull/1443/files)) + +## 5.8.1 + +#### Added +- DP-4717 - Devs can use the new technical docs which describe the process for [working with patterns](https://github.com/massgov/mayflower/blob/dev/.github/CONTRIBUTING.md#creating-or-editing-a-pattern) and [atomic design](https://github.com/massgov/mayflower/blob/dev/docs/atomic-design.md). + +#### Fixed +- DP-6145 Fix icon overlap bug in time callout organism +- DP-5915 Fix section links component by updating line height and increasing margin top on list items (except first one). +- DP-4517 - The [@molecules/header-tags](http://mayflower.digital.mass.gov/?p=molecules-header-tags) pattern no longer forces Title/Upper case for its contents. (This will fix the case of the relationship indicators on Mass.gov). + + +## 5.8.0 + +### Thanks! + +We want to give a quick shout out and thanks to all of our friends who have helped to get Mayflower to where it is today through there contributions over the last year: @jasonstanbery, @reenybeeny, @iansholtys, @labbydev, @nstriedinger, @lukewertz, @gleroux02, and @plusjeff. + +And a special warm thanks to our largest contributor by far, @legostud, for all of the thoughtfulness, care, and ingenuity with which you've crafted this project! + +We hope to see you all around in code. :) + +### Added + +- DP-4968 - The [Location page](http://mayflower.digital.mass.gov/?p=pages-location-general-content) now supports a "Downloads" section which could be helpful for adding a pdf map, for example. +- DP-4581 / 5023 - We've added sort and filter functionality to the [Event Listing](http://mayflower.digital.mass.gov/?p=pages-event-listing) page! Now you can enter a town or zip to sort events by proximity and you can filter events by a future date time frame. (Also, developers will notice that the Event and Location listing js is shared, since the functionality is so similar.) ([PR #589](https://github.com/massgov/mayflower/pull/589)) +- DP-5341 - We've created a new pattern called [Collapsible Content](http://mayflower.digital.mass.gov/?p=organisms-collapsible-content)! Eventually this pattern could be used for functionality like [Contact Us as accordion](https://mayflower.digital.mass.gov/?p=molecules-contact-us-collapsed-with-more-link) where it will accept child patterns using the `path / data` construct similar to Rich Text, sidebar widgets, etc. ([PR #581](https://github.com/massgov/mayflower/pull/581)) +- DP-4323 / 4325 - We've finished documenting all the patterns! (PRs [#545](https://github.com/massgov/mayflower/pull/545), [#546](https://github.com/massgov/mayflower/pull/546)). + +### Changed + +- DP-5307 - In response to some Mass.gov content author feedback, Users will notice that the [image + map banner (i.e. the Location Banner)](http://mayflower.digital.mass.gov/?p=organisms-location-banner) on the [Location page](http://mayflower.digital.mass.gov/?p=pages-location-general-content) has been made more narrow and fits within the page content width constraints. This allows for a more convenient image size (of 800x400) to be used. ([PR #576](https://github.com/massgov/mayflower/pull/576)) +- DP-3222 / 3914 - Several Mayflower patterns now support optional configuration for their included heading element levels. (Technical note: This work compensates for the fact that many assistive technologies are not quite up to date with the HTML spec which we have been following all along) ([PR #590](https://github.com/massgov/mayflower/pull/590)) +- DP-4318 - Users will notice that the font size for links in the sidebar are more consistent. (See example on the ["Social" and "Offered By" on the Service page](http://mayflower.digital.mass.gov/?p=pages-service)). ([PR #588](https://github.com/massgov/mayflower/pull/588)) +- DP-5653 - Our [Location listing](http://mayflower.digital.mass.gov/?p=pages-location-listing) and [Event listing](http://mayflower.digital.mass.gov/?p=pages-event-listing) page geosort functionality is now 8 times more cost effective (from 2 api credits down to .25 api credits!) ([PR #602](https://github.com/massgov/mayflower/pull/602)) +- DP-3763 - Users will notice that the zoom level has been set to a more appropriate level on maps which have only 1 marker (i.e. on the [Location page (general content)](http://mayflower.digital.mass.gov/?p=pages-location-general-content)). ([PR #604](https://github.com/massgov/mayflower/pull/604)) +- DP-5234 / 5177 - We've made some backwards-compatible updates to several patterns. See [PR #571](https://github.com/massgov/mayflower/pull/571) for details. +- Github #565 - Devs will notice that we've updated some npm packages. ([PR #565](https://github.com/massgov/mayflower/pull/565)) + +### Removed + +- DP-4313 - Users will notice that the logo image has been removed from the [Service page](http://mayflower.digital.mass.gov/?p=pages-service). ([PR #596](https://github.com/massgov/mayflower/pull/596)) +- DP-4858 - Users will notice that the "DRAFT" status indication has been removed from the front end of the [Decision page](http://mayflower.digital.mass.gov/?p=pages-service). ([PR #597](https://github.com/massgov/mayflower/pull/597)) + +### Migrate Path + +- DP-4968 - To use this new "Downloads" section feature on the Location page, populate `mainContent.formDownloads`, include the respective jumplink" in `stickyNav.anchorLinks` wherever you build the Location page data structure, and update your Location page level templating to `include @organisms/by-author/form-downloads.twig`! (See [PR #587 files](https://github.com/massgov/mayflower/pull/587/files)) +- DP-5307 - Ensure that the images being used for `locationBanner.bgNarrow` are 800x400 as this is now the only image which will render. (See work tracked in massgov/mass [PR #1188](https://github.com/massgov/mass/pull/1188)) +- DP-3222/3914 - To use this new heading level config feature, set the optional heading levels for page patterns where you implement page level templating. (See work tracked in massgov/mass [PR #1157](https://github.com/massgov/mass/pull/1157)) +- DP-4313 - To remove the logo from your Service page implementation, simply do not send data in `introSidebar.logo` wherever you do your page level data structuring for this page type. (See [PR #596 files](https://github.com/massgov/mayflower/pull/596/files)) +- DP-4858 - To remove the visual DRAFT status from your Decision page implementation, simply do not send data in `pageHeader.publishState` wherever you do your page level data structuring for this page type. (See [PR #597 files](https://github.com/massgov/mayflower/pull/597/files)) +- DP-5234/DP-5177 - We did our best to make these updates backwards compatible, which should mean that you don't need change anything. You can check [PR #571](https://github.com/massgov/mayflower/pull/571/files) for details and also track tests for Mass.gov in [PR# 1386](https://github.com/massgov/mass/pull/1386) +- Github [#565](https://github.com/massgov/mayflower/pull/565) - Delete `styleguide/npm_modules` and run `npm install` + + +## 5.7.2 + +### Added + +### Changed + +- DP-5466 - Users can now enter in a zip or town in the town/zip location listing filter and press enter (i.e. without selecting an item from the autocomplete dropdown) AND select an autocomplete item from teh drop down to sort locations. + +## 5.7.1 + +### Added + +### Changed + +- DP-5466 - Users can now enter in a zip or town in the town/zip location listing filter and press enter (i.e. without selecting an item from the autocomplete dropdown) to sort locations. + +### Removed + +### Migration path + +## 5.7.0 + +### Added + +- DP-4730 - Users will now notice there is now an option to render an [Event page with an end date](http://mayflower.digital.mass.gov/?p=pages-event-end-date). ([PR #566](https://github.com/massgov/mayflower/pull/566)) +- DP-4881 - The [Press release page](http://mayflower.digital.mass.gov/?p=pages-press-release) now renders with (optional) subtitle content. ([PR #556](https://github.com/massgov/mayflower/pull/556)) +- DP-3235 - Screen reader users are now informed of the [download link](http://mayflower.digital.mass.gov/?p=molecules-download-link) file size. ([PR #522](https://github.com/massgov/mayflower/pull/522)) +- DP-3234 - Screen reader users are now informed of a page's category (i.e. Decision, Regulation) in [the context of the page title](http://mayflower.digital.mass.gov/?p=organisms-page-header). (See also [`@organisms/by-template/illustrated-header`](http://mayflower.digital.mass.gov/?p=organisms-illustrated-header), [PR #509](https://github.com/massgov/mayflower/pull/509)) +- DP-3232, 1369 - Screen reader users can now associate key actions link content with their respective heading content. Also, there is now a [variant to the Comp heading](http://mayflower.digital.mass.gov/?p=atoms-comp-heading-as-sidebar-heading) which renders styled as a Sidebar Heading. ([PR #518](https://github.com/massgov/mayflower/pull/518)) +- DP-5175 - A "more" link will now render on different sections of [Service](http://mayflower.digital.mass.gov/?p=pages-service) and [Service Detail](http://mayflower.digital.mass.gov/?p=pages-detail-for-service-howto-location) pages. ([PRs #570](https://github.com/massgov/mayflower/pull/570), [#551](https://github.com/massgov/mayflower/pull/551)) +- DP-4591 - A "learn more" link has been added to the [contact us molecule](http://mayflower.digital.mass.gov/?p=molecules-contact-us-collapsed-with-more-link), as seen on [How-To pages](http://mayflower.digital.mass.gov/?p=pages-howto) which can provide a link to learn more about an organization referenced by a contact. ([PR #542](https://github.com/massgov/mayflower/pull/542)) +- DP-4508 - A new component ([content eyebrow](http://mayflower.digital.mass.gov/?p=organisms-content-eyebrow)) i.e. "relationship indicators") has been created and added to pages that use [illustrated header](http://mayflower.digital.mass.gov/?p=organisms-illustrated-header) (i.e. [guides](http://mayflower.digital.mass.gov/?p=pages-guide)) and [page banner](http://mayflower.digital.mass.gov/?p=organisms-page-banner-as-columns) (i.e. [topic pages](http://mayflower.digital.mass.gov/?p=pages-topic) and [services](http://mayflower.digital.mass.gov/?p=pages-service)). ([PR #539](https://github.com/massgov/mayflower/pull/539)) +- DP-3909 - [Tabular data](http://mayflower.digital.mass.gov/?p=organisms-tabular-data) (i.e. Fees) can now have an optional text description, as seen on the [How-to page](http://mayflower.digital.mass.gov/?p=pages-howto). ([PR #538](https://github.com/massgov/mayflower/pull/538)) +- DP-4211 - We created a new [iframe](http://mayflower.digital.mass.gov/?p=atoms-iframe) pattern. (PRs [#510](https://github.com/massgov/mayflower/pull/510), [#574](https://github.com/massgov/mayflower/pull/574)) + +### Changed + +- DP-1900 - Contact address "Directions" (i.e. in [page header organism as seen on Location Pages](http://mayflower.digital.mass.gov/?p=organisms-page-header-for-location) links now remain on one line; fixed for Firefox browser. ([PR #543](https://github.com/massgov/mayflower/pull/543)) +- DP-3189 - The details of a piece of contact information (i.e. the hours of operation for a phone number) are now easier to read (i.e. stronger, italics removed). ([PR #512](https://github.com/massgov/mayflower/pull/512)) +- DP-4311 - The content for the [Org. Landing Page](http://mayflower.digital.mass.gov/?p=pages-organization) "finder" subheadings in Mayflower are now service-oriented ([PR #540](https://github.com/massgov/mayflower/pull/540)) +- DP-4103 - Card titles on Topic page cards are now properly aligned when using the IE 11 browser. ([PR #526](https://github.com/massgov/mayflower/pull/526)) +- DP-3195 - Visitors navigating using a keyboard will have an easier time keeping track of their cursor focus through the [main navigation pattern](http://mayflower.digital.mass.gov/?p=molecules-main-nav). ([PR #495](https://github.com/massgov/mayflower/pull/495)) +- DP-4195 - When a visitor uses Google translator the [callout links](http://mayflower.digital.mass.gov/?p=molecules-callout-link) boxes will render correctly. ([PR #535](https://github.com/massgov/mayflower/pull/535)) +- Fix typos and adhere to style guide ([PRs #549](https://github.com/massgov/mayflower/pull/549), [#563](https://github.com/massgov/mayflower/pull/563), [#562](https://github.com/massgov/mayflower/pull/562), [#561](https://github.com/massgov/mayflower/pull/561), [#560](https://github.com/massgov/mayflower/pull/560)). +- DP-4877 - Vertical spacing between multiple signees for press release has been increased. ([PR #555](https://github.com/massgov/mayflower/pull/555)) +- DP-3228 - Accordion functionality (as seen in [Emergency Alerts](http://mayflower.digital.mass.gov/?p=organisms-emergency-alerts) and mobile [Section Links](http://mayflower.digital.mass.gov/?p=organisms-section-links) now properly announce their open/closed state to screen reader users. ([PR #499](https://github.com/massgov/mayflower/pull/499)) +- DP-5394 - Location listings functionality works in IE11 ([PR #580](https://github.com/massgov/mayflower/pull/580)) + +### Removed +- DP-4480 - The filter for the [action finder](http://mayflower.digital.mass.gov/?p=organisms-action-finder) has been removed (as seen on [Service pages](http://mayflower.digital.mass.gov/?p=pages-service)). Soon, when there are +6 links, "More" links will render to replace this functionality. ([PR #536](https://github.com/massgov/mayflower/pull/536)) + +### Migrate path + +- DP-4730 - To use this new end date feature, update [`@molecules/event-teaser.twig`](https://github.com/massgov/mayflower/blob/dev/styleguide/source/_patterns/02-molecules/event-teaser.twig) by adding the `raw|nl2br` filters to the `eventTeaser.date.summary` variable as seen in [PR #566](https://github.com/massgov/mayflower/pull/566/commits/e7568e32d5f7005b82ca0c2eb980ee9a57d1b3b1). +- DP-3235 - To use this new accessibility feature, update `@molecules/download-links.twig` with the visually hidden span element as seen in [PR #522](https://github.com/massgov/mayflower/pull/522/files). +- DP-3234 - To use this new accessibility feature, update `@organisms/by-tempate/page-header`, `@organisms/by-template/illustrated-header` with visually hidden span and aria-hidden attribute; and populate the `prefix` or `category` variable as seen in [PR #509](https://github.com/massgov/mayflower/pull/522/files). +- DP-3232, 1369 - To use this new accessibility feature, populate the `keyActions.compHeading.id` variable and add the 'aria-labelledby' property to [`@organisms/by-author/key-actions`](http://mayflower.digital.mass.gov/?p=organisms-key-actions) as seen in [PR #518](https://github.com/massgov/mayflower/pull/518/files). To use the new feature which renders a sidebar set `compHeading.sidebar` to `true` and add the conditional block to the top of [`@organisms/by-author/key-actions`](http://mayflower.digital.mass.gov/?p=organisms-key-actions) as seen in [PR #518](https://github.com/massgov/mayflower/pull/518/files). +- DP-3195 - To use this new accessibility feature, add the tabindex to the [@molecules/main-nav](http://mayflower.digital.mass.gov/?p=molecules-main-nav) pattern as seen in [PR #495](https://github.com/massgov/mayflower/pull/495). +- DP-4195 - To get this fix, update [`@molecules/callout-link`](http://mayflower.digital.mass.gov/?p=molecules-callout-link) as seen in [PR #535](https://github.com/massgov/mayflower/pull/535). +- DP-5175 - To get this new "more" link functionality for link list and form downloads, populate the `linkList.more` and `formDownloads.more` variables and update the [`@organisms/by-author/link-list`](http://mayflower.digital.mass.gov/?p=organisms-link-list) and [`@organisms/by-author/form-downloads`](http://mayflower.digital.mass.gov/?p=organisms-form-downloads) templates as seen in [PR #551](https://github.com/massgov/mayflower/pull/551/files). +- DP-4591 - To use this new contact us "learn more" link functionality, populate the `contactUs.decorativeLink` variable and update [`@molecules/contact-us`](http://mayflower.digital.mass.gov/?p=molecules-contact-us) as seen in [PR #542](https://github.com/massgov/mayflower/pull/542/files). +- DP-4508 - To use this new component, populate the `contentEyebrow` variable and create [`@organisms/by-template/content-eyebrow`](http://mayflower.digital.mass.gov/?p=organisms-content-eyebrow) as seen in [PR #539](https://github.com/massgov/mayflower/pull/539/files). +- DP-3909 - To use this new description feature, populate the `tabularData.description` variable and update [`@organisms/by-author/tabular-data`](http://mayflower.digital.mass.gov/?p=organisms-tabular-data) as seen in [PR #538](https://github.com/massgov/mayflower/pull/538/files). +- DP-3228 - To use this accessibility fix, update the [`@molecules/button-alert`](http://mayflower.digital.mass.gov/?p=molecules-button-alert) [`@organisms/by-template/emergency-alerts`](http://mayflower.digital.mass.gov/?p=organisms-emergency-alerts) and [`@molecules/section-links`](http://mayflower.digital.mass.gov/?p=organisms-section-links) patterns as seen in [PR #499](https://github.com/massgov/mayflower/pull/499/files). + +## 5.6.1 + +## Added + +## Changed +- For developers - update the deploy script to not require an asset path by default for a prod or fork deploy and to not set the default to mayflower/assets for prod releases. + +## Removed + +## 5.6.0 + +### Added +- DP-4181 - Folks browsing through the repository will notice new documentation which explains how to get set up, develop, and make other contributions to Mayflower! This documentation is linked from the [shiny new repo readme](https://github.com/massgov/mayflower). ([PR #532](https://github.com/massgov/mayflower/pull/532)) +- DP-4053 - Developers can now follow a documented build + deploy process to ship their code to their own GitHub Pages where their work can be seen and tested! This documentation is linked from the [shiny new repo readme](https://github.com/massgov/mayflower). ([PR #530](https://github.com/massgov/mayflower/pull/530)) +- DP-4046 - The change above is possible because we can now host Mayflower from a subdirectory (i.e. .github.io/mayflower)! ([PR #503](https://github.com/massgov/mayflower/pull/503)) +- DP-4080 - Developers, reviewers, and release managers can (and should!) now follow documentation on Semantic Versioning as it applies to Mayflower. This means we have guidelines to help reviewers understand what kind of change the code they are reviewing is and to help release managers understand what kind of version of Mayflower they are releasing. This documentation is linked from the [shiny new repo readme](https://github.com/massgov/mayflower). ([PR #504](https://github.com/massgov/mayflower/pull/504)) +- We documented all the things! Well, almost all. :) Check out patterns used on [Service](http://mayflower.digital.mass.gov/?p=pages-service), [How-To's](http://mayflower.digital.mass.gov/?p=pages-howto), [Guides](http://mayflower.digital.mass.gov/?p=pages-guide), [Locations](http://mayflower.digital.mass.gov/?p=pages-location-park-content), [Topics](http://mayflower.digital.mass.gov/?p=pages-topic), and [Events](http://mayflower.digital.mass.gov/?p=pages-event) and prepare ready to be informed! (Remember you can navigate to child patterns by clicking links down in the "Lineage" section.) More goodness coming soon. (PRs [#521](https://github.com/massgov/mayflower/pull/521), [#523](https://github.com/massgov/mayflower/pull/523), [#524](https://github.com/massgov/mayflower/pull/524), [#527](https://github.com/massgov/mayflower/pull/527), [#529](https://github.com/massgov/mayflower/pull/529), [#533](https://github.com/massgov/mayflower/pull/533)) + +### Changed +- Outside contribution from @sghoweri - Developers will notice that we now use a fork of Pattern Lab maintained by a Drupal Pattern Lab GitHub organization, with hopes of innovating, and iterating on Pattern Lab and merging changes back upstream to the main Pattern Lab fork. + + This also allows us to see pattern inheritance: browse to a pattern, click the cog icon in the top-right corner, click show pattern info, and see where else patterns are used and which child patterns a given pattern contains. (PRs [#488](https://github.com/massgov/mayflower/pull/488) and [#519](https://github.com/massgov/mayflower/pull/519)) Thanks Salem! + - Outside contribution from @evanlovely - Developers will notice an improvement to the automatic build + browser reload during local development. ([PR #506](https://github.com/massgov/mayflower/pull/506)) Thanks Evan! +- Developers will notice standardization on a pattern for writing pattern modification classes, this accounts for nearly all of the backwards-compatible `.twig` changes in this release. +- Developers and implementers will notice that [`@molecules/footnote`](http://mayflower.digital.mass.gov/?p=molecules-footnote) now has an option to render as plain text (as seen in Mass.gov Regulation pages, etc.) ([PR #541](https://github.com/massgov/mayflower/pull/541)) +- Contribution from our very own @meghandavis - See that typo on the [Press Listing page](http://mayflower.digital.mass.gov/?p=pages-press-listing)? Nope. That's because it's fixed! Thanks Meghan!! + +### Removed +- DP-4603 - For developers, the `phing deploy` task which circle kicks off to deploy to `massgov/mayflower-artifacts` no longer writes to `env.js` (since it's been removed) to set a theme path for js. ([PR #544](https://github.com/massgov/mayflower/pull/544)) Implementers should do this work in their site codebase. See an example of this at [Mass.gov PR #1065](https://github.com/massgov/mass/pull/1065) + +### Migrate path + +- See note for DP-4603 above for steps to implement this change. + +## 5.5.0 + +Here comes another Mayflower release, hot off the summertime presses! We've got 2 new page types and lots of little improvements and fixes coming your way. + + **JIRA fans can check out the [release tickets](https://jira.state.ma.us/projects/DP/versions/14642) for more information.* + **Mayflower project consumers can take a look at PR's below to confirm, make, and test any markup changes introduced by this release prior to updating in production.* + +### New Features +- New page type: [Board Decisions](http://mayflower.digital.mass.gov/?p=pages-board-decision), which is used for rulings, decisions and opinions issued by agency boards or individuals given the authority to decide specific matters. ([@pages/board-decision](http://mayflower.digital.mass.gov/?p=pages-board-decision), See [PR #494](https://github.com/massgov/mayflower/pull/494)) +- We've also added an example [Form Page](http://mayflower.digital.mass.gov/?p=pages-form-page-example) to highlight form styles (projects likely implement forms using other services) (See [PR #490](https://github.com/massgov/mayflower/pull/490) - Markup) +- News ([@organisms/by-author/press-listing](http://mayflower.digital.mass.gov/?p=organisms-press-listing)) and events ([@organisms/by-author/event-listing](http://mayflower.digital.mass.gov/?p=organisms-event-listing)) are now surfaced on additional page types (See [PR #498](https://github.com/massgov/mayflower/pull/498) - Markup) + +### Improvements +- We've added some keyboard functionality to our google map ([@molecules/googlemap](http://mayflower.digital.mass.gov/?p=molecules-google-map)) pattern (See [PR #489](https://github.com/massgov/mayflower/pull/489) - JS only) +- We've made the [Regulation page type](http://mayflower.digital.mass.gov/?p=pages-regulation) more uniform to other "law" page types (See [PR #494](https://github.com/massgov/mayflower/pull/494) - Markup)) + +### Fixes +- The short description text on a [service detail](http://mayflower.digital.mass.gov/?p=pages-detail-for-service-howto-location) page banner ([@organisms/by-template/page-banner](http://mayflower.digital.mass.gov/?p=organisms-page-banner)) should render (See [PR #493](https://github.com/massgov/mayflower/pull/493)) +- Assistive tech like screenreaders will now read callout stats ([@molecules/callout-stats](http://mayflower.digital.mass.gov/?p=molecules-callout-stats)) more naturally (See [PR #500](https://github.com/massgov/mayflower/pull/500) - Markup + CSS) +- Semantic search form ([@molecules/header-search]()) label and placeholder text are more understandable (See [PR #485](https://github.com/massgov/mayflower/pull/485) - Markup + demo content) + +## 5.4.0 +In this new minor release, we've introduced two new Law pages: Policy Advisory and Executive Order, along with several improvements and fixes. + +**Projects implementing Mayflower should see the [release tickets](https://jira.state.ma.us/projects/DP/versions/14641) and confirm, make, and test any markup changes introduced by this release prior to updating in production.* + +### New Features +- Created a [Policy Advisory](http://mayflower.digital.mass.gov/?p=pages-policy-advisory-directive) page type (`@pages/policy-advisory-directive`, `@templates/01-content-types/policy-advisory`) used for Directives, Letter Rulings, Administrative Procedures, Opinions, TIRs. (DP-3825) +- Created an [Executive Order](http://mayflower.digital.mass.gov/?p=pages-executive-order) page type (`@pages/executive-order.twig +`, touched `@molecules/image-promo.twig`, `@molecules/listing-table.twig`) (DP-3829) + +### Improvements +- We now have a medium icon (`@atoms/05-icons/svg-medium`) available for patterns like the social media link lists (DP-3495) +- News items can now have an optional featured image (`@templates/01-content-types/press`) (DP-3831) +- Detail page (for service, how-to, location - `@pages/detail-for-service-howto-location`) has been updated: removed key actions, added video (`@atoms/09-media/video`) and map (`@organisms/by-author/mapped-locations`) (DP-3891) + +### Fixes +- We've made "Directions" link text (`@molecules/contact-group`) more helpful for screen readers (DP-3227) +- Callout alert links (`@organisms/by-author/callout-alert`) are now more semantic and accessible (DP-3236) +- The "Go to class Mass.gov" link no longer overlaps with the skip-to link (`@organisms/by-template/header`) for keyboard users (DP-3191) +- Sticky nav links (`@molecules/sticky-nav`) for location and location detail pages are now consistent (DP-3822) +- Inactive (i.e. clickable) sort buttons (`@atoms/01-buttons/button-sort`) now appear clickable, like a link (DP-3890) +- Homepage > popular searches underline (`@organisms/search-banner.scss`) is now centered (DP-3895) +- Background images on illustrated links (`@molecules/illustrated-link`) no longer repeats right edge (DP-4026) +- Long text renders in the sidebar correctly (`@atoms/content_link.scss`) (DP-2352) +- Page banner images (`@organisms/page_banner.scss`) will scale as large as possible (be zoomed out) to cover the page banner. (DP-4310) + +## 5.3.0 +We've added some functionality to the location listings organism ([@organisms/by-author/location-listing](http://mayflower.digital.mass.gov/?p=organisms-location-listing))! You can sort, filter, and paginate listing results! + +Note: The location listing organism is made up of lots of other patterns: + - [@molecules/location-filters](http://mayflower.digital.mass.gov/?p=molecules-location-filters) + - [@molecules/results-heading](http://mayflower.digital.mass.gov/?p=molecules-results-heading) + - [@molecules/google-map](http://mayflower.digital.mass.gov/?p=molecules-google-map) + - [@molecules/pagination](http://mayflower.digital.mass.gov/?p=molecules-pagination) + - [@organisms/by-author/image-promos](http://mayflower.digital.mass.gov/?p=organisms-image-promos) + + And of course, you can still use those patterns in other components! + +## 5.2.0 + +In this short-but-sweet minor release we add a new pilot logo to the header, create a new fixed call to action that floats left/right down at the bottom of the page (see: `@molecules/floating-action.md`), and fix a pesky bug that was centering many headings that should not have been centered. + +## 5.1.0 + +To kick June off, there's a new Mayflower minor release. Announcements Listings and Events are the headliners, but lots of improvements make an appearance at the concert too. + +For folks that want to see all the notes: +https://jira.state.ma.us/projects/DP/versions/14638 + +### NEW FEATURES + +- Announcing all the things! Announcement Listing pages cover everything from press releases to speeches. Additionally, content on this page can be filtered by type, agency, topic, and other classifications. +- Event listings and event details for single instance events and those that recur. +- Directions link now appears after clicking on map pins +- All available activities at a location are now listed on Location pages +- Video description/transcript page has been added +- "Your Government" version of Topic pages now exist + +### IMPROVEMENTS + +- The main menu (at the top of all pages) is much more accessible with improved ordering if you're tabbing between links. +- Consistent spacing between patterns has been added. +- Southbridge location page had its banner coursel replaced with a banner image and Google map. +- Coloring and spacing fixes on the homepage. +- Wording and width adjusted on guides. +- Adjustments to the Location page, with some items removed (quick actions, breadcrumbs, wait times) and added (key actions, contact list). +- Key actions added to Location Park page. +- Details content type is more adaptive to different screen sizes. +- Small label/text changes and other tiny adjustments on Org, G2G, Section Landing, Topic Transition, Helpful Links, Service, Location, and Event Listin pages. + ## 5.0.0 Sometimes you have to break a few eggs to make an Omlette. For our next major release (5.0), we're introducing a new Announcement page type and had to change some existing code in progress. @@ -68,18 +697,18 @@ As part of this release we fixed a few issues. ### SUMMARY If you'd like to read about these changes in JIRA: -* [DP-2042](https://jira.state.ma.us/browse/DP-2042) - [Pattern Lab] Location Listings -* [DP-2078](https://jira.state.ma.us/browse/DP-2078) - [dev] Update Interstitial Page Code +* [DP-2042](https://jira.state.ma.us/browse/DP-2042) - [Pattern Lab] Location Listings +* [DP-2078](https://jira.state.ma.us/browse/DP-2078) - [dev] Update Interstitial Page Code * [DP-2400](https://jira.state.ma.us/browse/DP-2400) - [a11y] Add more context to the linked text "Log in to..." * [DP-2693](https://jira.state.ma.us/browse/DP-2693) - [dev] Update template to remove arrow in Activities -* [DP-2734](https://jira.state.ma.us/browse/DP-2734) - [Pattern Lab] Regulations +* [DP-2734](https://jira.state.ma.us/browse/DP-2734) - [Pattern Lab] Regulations * [DP-2853](https://jira.state.ma.us/browse/DP-2853) - [dev] Contact section appears even when there is no additional contact added. -* [DP-2963](https://jira.state.ma.us/browse/DP-2963) - [Pattern Lab] Update color variable names +* [DP-2963](https://jira.state.ma.us/browse/DP-2963) - [Pattern Lab] Update color variable names * [DP-3094](https://jira.state.ma.us/browse/DP-3094) - [mf] Update "Service Detail" page to match inputs on build specs * [DP-3149](https://jira.state.ma.us/browse/DP-3149) - [mf] - Ordered Steps - remove number if only one step * [DP-3151](https://jira.state.ma.us/browse/DP-3151) - [mf] - Rich Text - nested ordered list * [DP-3152](https://jira.state.ma.us/browse/DP-3152) - [mf] - Image Promo - optional description -* [DP-3155](https://jira.state.ma.us/browse/DP-3155) - [mf] - Location Filters - Refactor layout to accommodate more tags +* [DP-3155](https://jira.state.ma.us/browse/DP-3155) - [mf] - Location Filters - Refactor layout to accommodate more tags ### NEW FEATURES @@ -91,7 +720,7 @@ If you'd like to read about these changes in JIRA: 1. We've revisited how we named our Sass color variables. Instead of using $c-theme-blue for example we are now using $c-theme-primary. This update will make it easy for others to create new color schemes for the Mayflower Patterns. 2. The Location Listing page (Pages > Map listing human services) has been updated from the MVP version to the final version. The Filters area was expanded to include additonal choices. The Results area was updated to include tags to show which filters are currently being applied along with pagination. The Results are also using a newer design that highlights the active or hovered location and makes the corresponding map marker bounce. 3. For the Image Promo pattern, we've changed the description from being a required field to being an optional field. -4. After testing the transition page with low to no vision users, we identified that changing the message from a paragraph to an H1 tag was an added benefit. +4. After testing the transition page with low to no vision users, we identified that changing the message from a paragraph to an H1 tag was an added benefit. ### FIXED @@ -101,7 +730,7 @@ As part of this release we fixed a few issues. 2. The Image Promo pattern was updated to check to check if the read more link has a "text" value before adding that link to prevent an empty link from being added. 3. When an Ordered Step pattern was added to a page with only one step, the number icon was still being shown and the html was being read as a list of one. This pattern now checks the length of steps to render and only renders it as a numbered list if there are multiple steps. Otherwise it just outputs a single Action Step item. 4. When a nested ordered list was added to a Rich Text pattern, the nested list items were also being rendered as numbers. We've updated this to render letters instead. -5. The utility nav was having issue with accessibilty trying to understand the "login to..." link found in the utility nav. A hidden element has been added to the link to provide more information that screen readers can see. +5. The utility nav was having issue with accessibilty trying to understand the "login to..." link found in the utility nav. A hidden element has been added to the link to provide more information that screen readers can see. ## 4.0.0 @@ -158,7 +787,7 @@ If you'd like to read about this changes in JIRA: * The new header layout includes a a spot for a description and a nifty new image size. * We've introduced some new variations to the card component (Molecules > Section Links) on the Topic Page: * You can now choose between regular links (by default) or callout links (Molecules > Section Links Callout Links). This will help to call out How-To's and tasks associated with a service on a given topic page. - * For those times when we don't want to fill the card up with too many links but we want people to know there are more goodies, we've add an optional more link to the bottom of the card. + * For those times when we don't want to fill the card up with too many links but we want people to know there are more goodies, we've add an optional more link to the bottom of the card. ## 3.6.0 @@ -167,14 +796,14 @@ If you'd like to read about these changes in JIRA: * [DP-2114](https://jira.state.ma.us/browse/DP-2114) - [pattern lab] Service Page * [DP-2181](https://jira.state.ma.us/browse/DP-2181) - Update Guide Page in Mayflower -* [DP-2206](https://jira.state.ma.us/browse/DP-2206) - Implement org page level structured data json+ld object in Mayflower +* [DP-2206](https://jira.state.ma.us/browse/DP-2206) - Implement org page level structured data json+ld object in Mayflower * [DP-2569](https://jira.state.ma.us/browse/DP-2569) - Change header in Service page * [DP-2471](https://jira.state.ma.us/browse/DP-2471) - Mayflower: guide section with all possible elements ### NEW FEATURES - Ahem... introducing the latest page type to our family: Services! (Pages > Service Unemployment Benefits). This is a great page type to use to help surface tons of information related to services, including: branding information, instructional videos, links to how-to's, location information listings, etc. -- We're making Org Landing Pages (Pages > Org Landing Page) more machine and search friendly by adding a Government Organization structured data pattern (Meta > Schema > Government Organization) to the bottom of the page markup. -- For Mayflower implementers, we've created an example Guide page which shows all of the possible elements that can go into a Guide section (Pages > Guide Section Example) +- We're making Org Landing Pages (Pages > Org Landing Page) more machine and search friendly by adding a Government Organization structured data pattern (Meta > Schema > Government Organization) to the bottom of the page markup. +- For Mayflower implementers, we've created an example Guide page which shows all of the possible elements that can go into a Guide section (Pages > Guide Section Example) ### IMPROVEMENTS - We've revisited the guide page with some updates. We've consolidated the formerly 3 guide pages into one shiny new guide page with just those components that our content friends have identified as being pertinent: diff --git a/scripts/deploy-latest-minor-s3.sh b/scripts/deploy-latest-minor-s3.sh new file mode 100755 index 0000000000..24c428ee66 --- /dev/null +++ b/scripts/deploy-latest-minor-s3.sh @@ -0,0 +1,118 @@ +#!/bin/bash +# include shared functions +. ../scripts/deploy-s3-functions.sh + +# Deploying a latest minor version of Mayflower to Amazon S3: +# mayflower.digital.mass.gov// +# ---------------------------------------------------------------------------- +# +# Note: this script updates the latest minor asset URLs which Mayflower consumers may use in their implementations. Make sure you are not deploying any breaking changes! See: https://github.com/massgov/mayflower/blob/dev/docs/versioning.md for help determining +# +# Run from /styleguide, must have a clean working directory. +# +# Usage: +# ../scripts/deploy-latest-minor-s3.sh [-b (git-branch-or-tag)] +# -b Build source: the git branch or tag from which to build (required) +# +# Description: +# 1. Validate the passed arguments: build source +# 2. Attempt to checkout passed build source +# 3. Get to mayflower/styleguide directory +# 4. Build pattern lab static assets +# 5. Copy static assets (build output: styleguide/public/) into a new temp directory +# 6. Execute gulp command to deploy to s3 +# 7. Remove the temp directory +# 8. Check out the previous branch + +# Default variables +buildSrc=false + +# Get passed arguments +while getopts :b: option +do + case "${option}" in + b) buildSrc=${OPTARG};; + : ) line="Missing argument for parameter [-${OPTARG}]"; + log "error" "$line"; + exit 1;; + \? ) line="Whoops, this script only accepts arguments for: git build branch/tag [-b]"; + log "error" "$line"; + exit 1;; + esac +done + +# 1. Validate build source environment argument exists and is valid git branch or tag +validateBuildSource "$buildSrc" + +# Confirm latest minor and production deploys if a human is executing this script. +if [ ! CIRCLECI ]; +then + read -p "This script executes a latest minor deploy (i.e. to mayflower.digital.mass.gov//).\n\nThis will affect all projects which use our latest minor asset links.\n\nAre you sure you want to proceed? [y/n] " -n 1 -r + echo # move to a new line + if [[ ! $REPLY =~ ^[Yy]$ ]]; + then + line="Aborting deploy..." + log "error" "$line"; + exit 1; + fi +fi + +# Validate that we have a production tag (i.e. 5.10.0) +line="Validating that ${buildSrc} is a prod tag..." +log "log" "$line"; + +majorVersion=$(getMajorVersion "$buildSrc") +if [[ ${majorVersion} == "false" ]]; +then + line="Your build source doesn't appear to be a prod tag. Please run the script again and pass the -b argument your desired production tag (i.e. 5.10.0)" + log "error" "$line"; + exit 1; +else + line="Nice! ${buildSrc} appears to be a prod tag (within major version ${majorVersion})." + log "success" "$line"; +fi + +# 2. Checkout the build source +checkoutBuildSource "$buildSrc" + +# 3. Get to styleguide directory +cdStyleguide + +# 4. Build pattern to generate prod static assets +buildMayflower "https://mayflower.digital.mass.gov/$majorVersion" + +# 5. Copy built assets in /public into new tmp directory + +# Make temp directory to copy public assets +line="Making ~/tmp/mayflower/$subDir directory..." +log "log" "$line"; + +if [ -d "~/tmp" ]; +then + mkdir ~/tmp/mayflower + mkdir ~/tmp/mayflower/${subDir} +else + mkdir ~/tmp + mkdir ~/tmp/mayflower + mkdir ~/tmp/mayflower/${subDir} +fi + +# Copy +line="Copying Pattern Lab build output to ~/tmp/mayflower/$subDir directory..." +log "log" "$line"; +cp -r public/. ~/tmp/mayflower/${subDir} >/dev/null + +# 7. Run gulp task to deploy to s3 bucket +line="Uploading contents of ~/tmp/mayflower/$subDir to Mayflower s3 bucket..." +log "log" "$line"; +if ! gulp s3; then + line="gulp s3 task failed" + log "error" "$line"; + exit 1; +else + line="Woo-hoo! The deploy completed successfully.\n\n You should be able to browse to your deployed code at:\n\n https://mayflower.digital.mass.gov/${subDir}/" + log "success" "$line"; +fi + +# 8. Clean up tmp directory + 9. get back to where we want to be. +cleanup diff --git a/scripts/deploy-mayflower.sh b/scripts/deploy-mayflower.sh new file mode 100755 index 0000000000..a29182cb3d --- /dev/null +++ b/scripts/deploy-mayflower.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# include shared functions +. ../scripts/deploy-s3-functions.sh + +# Deploys the latest production release of Mayflower to Amazon S3 and push the NPM package: +# -------------------------------------------------------------- +# +# Run from /styleguide, must have a clean working directory. +# +# Usage: +# ../scripts/deploy-mayflower.sh [-b (git-branch-or-tag)] +# -b Build source: the git branch or tag from which to build (required) +# +# Description: +# 1. Validate the passed arguments: build source +# 2. Execute ./scripts/deploy-s3.sh with release tag (deploys to mayflower.digital.mass.gov/#.#.#/) +# 3. Execute ./scripts/deploy-latest-minor-s3.sh with release tag (deploys to mayflower.digital.mass.gov/#/) +# 4. Execute ./scripts/deploy-prod-s3.sh with release tag (deploys to mayflower.digital.mass.gov) +# 5. Execute ./scripts/deploy-npm.sh with release tag (pushes package to https://www.npmjs.com/package/@massds/mayflower) + +# Default argument values +buildSrc=false + +# Get passed arguments +while getopts :b: option +do + case "${option}" in + b) buildSrc=${OPTARG};; + : ) line="Missing argument for parameter [-${OPTARG}]"; + log "error" "$line"; + exit 1;; + \? ) line="Whoops, this script only accepts arguments for: git build branch/tag [-b]"; + log "error" "$line"; + exit 1;; + esac +done + +# 1. Validate build source environment argument exists and is valid git branch or tag +validateBuildSource + +# Get to /styleguide +cdStyleguide + +# 2. Deploy tag to mayflower.digital.mass.gov/#.#.#/ where #.#.# is your tag version +# Execute shell script in a different process (see: http://www.lostsaloon.com/technology/how-to-call-shell-script-sh-file-from-another-shell-script/) +if ! ../scripts/deploy-s3.sh -b ${buildSrc}; then +line="Hmmm looks like the deploy to mayflower.digital.mass.gov// failed. Hopefully you got a helpful error message from the script execution output." + log "error" "$line"; + exit 1; +else + line="Moving on to execute deploy to mayflower.digital.mass.gov//..." + log "log" "$line"; +fi + +# Get to /styleguide +cdStyleguide + +# 3. Deploy tag to mayflower.digital.mass.gov/#/ where # is the current major version +# Execute shell script in a different process (see: http://www.lostsaloon.com/technology/how-to-call-shell-script-sh-file-from-another-shell-script/) + +if ! ../scripts/deploy-latest-minor.sh -b ${buildSrc}; then +line="Hmmm looks like the deploy to mayflower.digital.mass.gov// failed. Hopefully you got a helpful error message from the script execution output." + log "error" "$line"; + exit 1; +else + line="Moving on to execute deploy to mayflower.digital.mass.gov..." + log "log" "$line"; +fi + +# Get to /styleguide +cdStyleguide + +# 4. Deploy tag to mayflower.digital.mass.gov +# Execute shell script in a different process (see: http://www.lostsaloon.com/technology/how-to-call-shell-script-sh-file-from-another-shell-script/) + +if ! ../scripts/deploy-prod-s3.sh -b ${buildSrc}; then +line="Hmmm looks like the deploy to mayflower.digital.mass.gov failed. Hopefully you got a helpful error message from the script execution output." + log "error" "$line"; + exit 1; +else + line="Moving on to execute package and push to https://www.npmjs.com/package/@massds/mayflower..." + log "log" "$line"; +fi + +# Get to /styleguide +cdStyleguide + +# 5. Package contents and push to NPM +# Execute shell script in a different process (see: http://www.lostsaloon.com/technology/how-to-call-shell-script-sh-file-from-another-shell-script/) + +../scripts/deploy-npm.sh -b ${buildSrc} diff --git a/scripts/deploy-npm.sh b/scripts/deploy-npm.sh new file mode 100755 index 0000000000..539e987e46 --- /dev/null +++ b/scripts/deploy-npm.sh @@ -0,0 +1,117 @@ +#!/bin/bash +# include shared functions +. ../scripts/deploy-s3-functions.sh + +# Deploying a branch or tag Mayflower to Amazon S3: +# mayflower.digital.mass.gov/git-branch-or-tag-name +# ----------------------------------------------------- +# +# Run from /styleguide, must have a clean working directory. +# +# Usage: +# ../scripts/deploy-npm.sh [-b (git-branch-or-tag)] +# -b Build source: the git branch or tag from which to build (required) +# +# Description: +# 1. Validate the passed arguments: build source +# 2. Attempt to checkout passed build source +# 3. Get to mayflower/styleguide directory +# 4. Build pattern lab static assets +# 5. Copy static assets (build output: styleguide/public/assets) into tmp/mayflower directory +# 6. Copy other NPM goodies (README, npmignore, etc.) to tmp/mayflower directory +# 7. Package assets and deploy NPM package +# 8. Remove the temp directory +# 9. Check out the previous branch + +# Default variables +buildSrc=false + +# Get passed arguments +while getopts :b: option +do + case "${option}" in + b) buildSrc=${OPTARG};; + : ) line="Missing argument for parameter [-${OPTARG}]"; + log "error" "$line"; + exit 1;; + \? ) line="Whoops, this script only accepts arguments for: git build branch/tag [-b]"; + log "error" "$line"; + exit 1;; + esac +done + +# 1. Validate build source environment argument exists and is valid git branch or tag name +validateBuildSource + +# 2. Checkout the build source +checkoutBuildSource + +# Confirm authentication if a human is executing this script. +if [ ! CIRCLECI ]; +then + read -p "In order to push the mayflower package to NPM, you need to be authenticated on NPM, either by: \n\n1) Having an .npmrc file with credentials for the @massds account (or your own NPM account if you're added to the Mayflower package as an owner) in your Mayflower repo root (this file is not and should not be versioned -- ask a team member for credentials)\nSee: https://docs.npmjs.com/files/npmrc#per-project-config-file\n\n2) Having an NPM_TOKEN having environment variable for @massds\nSee: http://blog.npmjs.org/post/118393368555/deploying-with-npm-private-modules \n\n3) Authenticating from the npm CLI (Note: you must be added to the Mayflower NPM package project as an owner -- ask a team member for help)\n See: https://docs.npmjs.com/getting-started/publishing-npm-packages#preparation \n\n\nAre you sure you want to proceed? [y/n] " -n 1 -r + echo # move to a new line + if [[ ! $REPLY =~ ^[Yy]$ ]]; + then + line="No sweat! Just let a MassDS know that you need help pushing the latest Mayflower up to NPM." + log "error" "$line"; + exit 1; + fi +fi + +line="You've indicated a deploy to npm @${buildSrc}" +log "log" "$line"; + +# 3. Get to styleguide directory +cdStyleguide + +# 4. Build pattern to generate prod static assets +buildMayflower + +# 5. Copy built assets in /public into new tmp directory +# Make temp directory to copy public assets +line="Making ~/tmp/mayflower/npm directory..." +log "log" "$line"; + +if [ -d "~/tmp" ]; +then + mkdir ~/tmp/mayflower +else + mkdir ~/tmp + mkdir ~/tmp/mayflower +fi + +# 6. Copy package assets to temp directory +line="Copying compiled Mayflower npm package assets to ~/tmp/mayflower directory..." +log "log" "$line"; +cp -r public/assets/. ~/tmp/mayflower >/dev/null +cp package.json ~/tmp/mayflower +cp npm-shrinkwrap.json ~/tmp/mayflower +cp ../README.md ~/tmp/mayflower +cp ../LICENSE.txt ~/tmp/mayflower +cp -a ./.npmignore ~/tmp/mayflower +cp -a ./.npmrc ~/tmp/mayflower + +# Get to tmp directory +line="Moving into ~/tmp/mayflower directory..." +log "log" "$line"; +cd ~/tmp/mayflower + +# 7. Run npm pack to test +# npm pack + +# 7. Package and deploy NPM +line="Publishing contents of ~/tmp/mayflower to Mayflower npm package..." +log "log" "$line"; + +if ! npm publish --access=public; then + line="npm publish failed" + log "error" "$line"; + exit 1; +else + line="Woo-hoo! The deploy completed successfully.\n\n You should be able to browse to your npm package at:\n\n https://www.npmjs.com/package/@massds/mayflower" + log "success" "$line"; +fi + +# 8. Clean up tmp directory + #9 get back to where we want to be. +cleanup diff --git a/scripts/deploy-prod-s3.sh b/scripts/deploy-prod-s3.sh new file mode 100755 index 0000000000..36ab435da8 --- /dev/null +++ b/scripts/deploy-prod-s3.sh @@ -0,0 +1,112 @@ +#!/bin/bash +# include shared functions +. ../scripts/deploy-s3-functions.sh + +# Deploying the latest production release of Mayflower to Amazon S3: +# mayflower.digital.mass.gov/ +# -------------------------------------------------------------- +# +# Run from /styleguide, must have a clean working directory. +# +# Usage: +# ../scripts/deploy-prod-s3.sh [-b (git-branch-or-tag)] +# -b Build source: the git branch or tag from which to build (required) +# +# Description: +# 1. Validate the passed arguments: build source +# 2. Attempt to checkout passed build source +# 3. Get to mayflower/styleguide directory +# 4. Build pattern lab static assets +# 5. Copy static assets (build output: styleguide/public/) into a new temp directory +# 6. Execute gulp command to deploy to s3 +# 7. Remove the temp directory +# 8. Check out the previous branch + +# Default argument values +buildSrc=false + +# Get passed arguments +while getopts :b: option +do + case "${option}" in + b) buildSrc=${OPTARG};; + : ) line="Missing argument for parameter [-${OPTARG}]"; + log "error" "$line"; + exit 1;; + \? ) line="Whoops, this script only accepts arguments for: git build branch/tag [-b]"; + log "error" "$line"; + exit 1;; + esac +done + +# 1. Validate build source environment argument exists and is valid git branch or tag +validateBuildSource "$buildSrc" + +# Confirm production deploy if a human is executing this script. +if [ ! CIRCLECI ]; +then + read -p "This script executes a deploy to production, which will update the content at mayflower.digital.mass.gov.\n\nAre you sure you want to proceed? [y/n] " -n 1 -r + echo # move to a new line + if [[ ! $REPLY =~ ^[Yy]$ ]]; + then + line="Aborting deploy..." + log "error" "$line"; + exit 1; + fi +fi + +# Validate that we have a production tag (i.e. 5.10.0) +line="Validating that ${buildSrc} is a prod tag..." +log "log" "$line"; + +if [[ $(isProdTag "$buildSrc") == "true" ]]; +then + line="Nice! ${buildSrc} appears to be a prod tag." + log "success" "$line"; +else + line="Your build source doesn't appear to be a prod tag. Please run the script again and pass the -b argument your desired production tag (i.e. 5.10.0)" + log "error" "$line"; + exit 1; +fi + +# 2. Checkout the build source +checkoutBuildSource "$buildSrc" + +# 3. Get to styleguide directory +cdStyleguide + +# 5. Build pattern to generate prod static assets +buildMayflower "https://mayflower.digital.mass.gov" + +# 6. Copy built assets in /public into new tmp directory +# Make temp directory to copy public assets +line="Making ~/tmp/mayflower directory..." +log "log" "$line"; + +if [ -d "~/tmp" ]; +then + mkdir ~/tmp/mayflower +else + mkdir ~/tmp + mkdir ~/tmp/mayflower +fi + +# Copy +line="Copying Pattern Lab build output to ~/tmp/mayflower directory..." +log "log" "$line"; +cp -r public/. ~/tmp/mayflower >/dev/null + +# 7. Run gulp task to deploy to s3 bucket +line="Uploading contents of ~/tmp/mayflower to Mayflower s3 bucket..." +log "log" "$line"; +if ! gulp s3; then + line="gulp s3 task failed" + log "error" "$line"; + exit 1; +else + line="Woo-hoo! The deploy completed successfully.\n\n You should be able to browse to your deployed code at:\n\n https://mayflower.digital.mass.gov/" + log "success" "$line"; +fi + +# 8. Clean up tmp directory + #9 get back to where we want to be. +cleanup diff --git a/scripts/deploy-s3-functions.sh b/scripts/deploy-s3-functions.sh new file mode 100755 index 0000000000..7678686cd5 --- /dev/null +++ b/scripts/deploy-s3-functions.sh @@ -0,0 +1,124 @@ +#!/bin/bash +# +# Shared functions used when deploying Mayflower to Amazon S3 +# ------------------------------------------------------------- + +# Steps to clean up after script execution +# Runs on success and failure. +function cleanup { + # Remove temp directory + line="Cleaning up tmp dir..." + log "log" "$line"; + + rm -rf ~/tmp/mayflower + + # Check out the previous branch + line="Checking out your previous branch..." + log "log" "$line"; + + git checkout @{-1} +} + +# Output success or error log during execution +function log { + # parameters + local theLogType=$1 + local theMessage=$2 + + if [ "$theLogType" == "success" ]; then + echo -e "\n\x1B[01;92m [success] "${theMessage}"\x1B[0m \n" + elif [ "$theLogType" == "error" ]; then + echo -e "\n\x1B[01;91m [error] "${theMessage}"\x1B[0m \n" >&2 + else + echo -e "\n\x1B[01;34m [info] "${theMessage}"\x1B[0m \n" + fi +} + +# Determines if a build source is a prod tag (i.e. 5.10.0 with no letters) +function isProdTag { + local theTag=$1 + + if [[ ${theTag} =~ ^[0-9]+\.+[0-9]+\.+[0-9]+$ ]]; + then + echo "true" + else + echo "false" + fi +} + +# Determines major version from a passed parameter (i.e. 5.10.0 -> 5) +function getMajorVersion { + local theTag=$1 + + if [[ $(isProdTag "$theTag") == "true" ]]; + then + # Split the buildSrc by '.' and put into an array. + IFS='.' read -ra VERSION <<< "$theTag"; + echo ${VERSION[0]} + else + echo "false"; + fi +} + +# Validate the -b argument is an actual git branch or tag +function validateBuildSource { + # parameters + local buildSrc=$1 + + # Validate build source environment argument exists + if [ "$buildSrc" = false ]; + then + line="Whoops, we need a git branch or tag name to checkout and build from [-b]." + log "error" "$line"; + exit 1; + fi + + # Validate that passed build source is a valid git branch or tag + git rev-parse ${buildSrc} &>/dev/null + if [ "$?" -ne 0 ]; + then + line="Hmmm, couldn't find a branch/tag named ${buildSrc}... check spelling and make sure you've pulled it." + log "error" "$line"; + exit 1; + else + line="Validated git build source: ${buildSrc}..." + log "success" "$line"; + fi +} + +# Check out the build source +function checkoutBuildSource { + # parameters + local buildSrc=$1 + + line="Checking out the build source: ${buildSrc}" + log "log" "$line"; + + if ! git checkout ${buildSrc}; + then + line="Could not check out $buildSrc, please make sure your working directory is clean and that you have fetched the latest from your remote." + log "error" "$line"; + exit 1; + fi +} + +# Get to the styleguide directory +function cdStyleguide { + # Get to styleguide directory (inside of repo root), does not assume repo root is "mayflower" + line="Changing directory into /styleguide..." + log "log" "$line"; + + cd $(git rev-parse --show-toplevel)/styleguide +} + +# Build patterns to generate prod static assets +function buildMayflower { + line="Generating mayflower patterns..." + log "log" "$line"; + export BASE_URL="$1" + php core/console --generate >/dev/null + + line="Building mayflower static assets..." + log "log" "$line"; + gulp prod >/dev/null +} diff --git a/scripts/deploy-s3.sh b/scripts/deploy-s3.sh new file mode 100755 index 0000000000..d1e5b41670 --- /dev/null +++ b/scripts/deploy-s3.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# include shared functions +. ../scripts/deploy-s3-functions.sh + +# Deploying a branch or tag Mayflower to Amazon S3: +# mayflower.digital.mass.gov/git-branch-or-tag-name/ +# ----------------------------------------------------- +# +# Run from /styleguide, must have a clean working directory. +# +# Usage: +# ../scripts/deploy-s3.sh [-b (git-branch-or-tag)] +# -b Build source: the git branch or tag from which to build (deploys to subdirectory named by that branch or tag) (required) +# +# Description: +# 1. Validate the passed arguments: build source +# 2. Attempt to checkout passed build source +# 3. Get to mayflower/styleguide directory +# 4. Build pattern lab static assets +# 5. Copy static assets (build output: styleguide/public/) into a new temp directory +# 6. Execute gulp command to deploy to s3 +# 7. Remove the temp directory +# 8. Check out the previous branch + +# Default variables +buildSrc=false + +# Get passed arguments +while getopts :b: option +do + case "${option}" in + b) buildSrc=${OPTARG};; + : ) line="Missing argument for parameter [-${OPTARG}]"; + log "error" "$line"; + exit 1;; + \? ) line="Whoops, this script only accepts arguments for: git build branch/tag [-b]"; + log "error" "$line"; + exit 1;; + esac +done + +# 1. Validate build source environment argument exists and is valid git branch or tag name +validateBuildSource "$buildSrc" + +# 2. Checkout the build source +checkoutBuildSource "$buildSrc" + +line="You've indicated a deploy to mayflower.digital.mass.gov/${buildSrc}" +log "log" "$line"; + +# 3. Get to styleguide directory +cdStyleguide + +# 4. Build pattern to generate prod static assets +buildMayflower "https://mayflower.digital.mass.gov/$buildSrc" + +# 5. Copy built assets in /public into new tmp directory +# Make temp directory to copy public assets +line="Making ~/tmp/mayflower/$subDir directory..." +log "log" "$line"; + +if [ -d "~/tmp" ]; +then + mkdir ~/tmp/mayflower + mkdir ~/tmp/mayflower/${subDir} +else + mkdir ~/tmp + mkdir ~/tmp/mayflower + mkdir ~/tmp/mayflower/${subDir} +fi + +# Copy +line="Copying Pattern Lab build output to ~/tmp/mayflower/$subDir directory..." +log "log" "$line"; +cp -r public/. ~/tmp/mayflower/${subDir} >/dev/null + +# 7. Run gulp task to deploy to s3 bucket +line="Uploading contents of ~/tmp/mayflower/$subDir to Mayflower s3 bucket..." +log "log" "$line"; +if ! gulp s3; then + line="gulp s3 task failed" + log "error" "$line"; + exit 1; +else + line="Woo-hoo! The deploy completed successfully.\n\n You should be able to browse to your deployed code at:\n\n https://mayflower.digital.mass.gov/${subDir}/" + log "success" "$line"; +fi + +# 8. Clean up tmp directory + #9 get back to where we want to be. +cleanup diff --git a/styleguide/.browserslistrc b/styleguide/.browserslistrc new file mode 100644 index 0000000000..63288b7cd9 --- /dev/null +++ b/styleguide/.browserslistrc @@ -0,0 +1,7 @@ +# Browsers we support: + +> 1% +last 3 versions +Firefox ESR +Opera 12.1 +ie >= 9 diff --git a/styleguide/.gitignore b/styleguide/.gitignore index 2c6378dccb..f6d095e982 100644 --- a/styleguide/.gitignore +++ b/styleguide/.gitignore @@ -5,6 +5,9 @@ public/* !public/styleguide public/styleguide/html/styleguide.html public/styleguide/data/patternlab-data.js +source/_data/url.json !public/index.html - +.npmrc /deploy +/npm +/artifact diff --git a/styleguide/.npmignore b/styleguide/.npmignore new file mode 100644 index 0000000000..ec7cadff17 --- /dev/null +++ b/styleguide/.npmignore @@ -0,0 +1,13 @@ +## We package from within a deploy script, essentially within /public/assets/ + +css/pattern-scaffolding* +css/pilot* +css/gov-theme* +data +js/helpers +js/index.js +js/modules +js/templates +js/vendor +patterns +.npmrc diff --git a/styleguide/composer.json b/styleguide/composer.json index 7072bcfc1d..620d1aa531 100644 --- a/styleguide/composer.json +++ b/styleguide/composer.json @@ -23,13 +23,33 @@ "PatternLab": "core/src/" } }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/drupal-pattern-lab/patternlab-php-core" + }, + { + "type": "vcs", + "url": "https://github.com/drupal-pattern-lab/patternengine-php-twig" + }, + { + "type": "vcs", + "url": "https://github.com/drupal-pattern-lab/styleguidekit-assets-default" + }, + { + "type": "vcs", + "url": "https://github.com/drupal-pattern-lab/styleguidekit-twig-default" + } + ], "require": { "php": ">=5.4", "pattern-lab/core": "^2.0.0", "pattern-lab/patternengine-twig": "^2.0.0", + "pattern-lab/styleguidekit-assets-default": "^3.0.0", "pattern-lab/styleguidekit-twig-default": "^3.0.0", "phing/phing": "^2.14", - "pear/versionControl_git": "dev-master" + "pear/versionControl_git": "dev-master", + "cweagans/composer-patches": "^1.6" }, "scripts": { "post-install-cmd": [ @@ -58,7 +78,15 @@ "starterKitSuggestions": [ "pattern-lab/starterkit-twig-base", "pattern-lab/starterkit-twig-demo" - ] + ], + "config": { + "overrideConfig": false + } + }, + "patches": { + "pattern-lab/core": { + "temporarily revert array_replace_recursive function": "patches/PsuedoPatternRule.patch" + } } } } diff --git a/styleguide/composer.lock b/styleguide/composer.lock index 3f4eeec087..58485326ab 100644 --- a/styleguide/composer.lock +++ b/styleguide/composer.lock @@ -4,8 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "105d8714f4dc0e2d40c685b4a6ac7232", - "content-hash": "4a0a35d9c41e4ef20ffdf7e05f984aac", + "content-hash": "4189b09f8f3fdee726110079f6a59040", "packages": [ { "name": "alchemy/zippy", @@ -67,32 +66,77 @@ "tar", "zip" ], - "time": "2016-02-15 22:46:40" + "time": "2016-02-15T22:46:40+00:00" + }, + { + "name": "cweagans/composer-patches", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/cweagans/composer-patches.git", + "reference": "b3036f23b73570ab5d869e345277786c8eb248a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/b3036f23b73570ab5d869e345277786c8eb248a9", + "reference": "b3036f23b73570ab5d869e345277786c8eb248a9", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": ">=5.3.0" + }, + "require-dev": { + "composer/composer": "~1.0", + "phpunit/phpunit": "~4.6" + }, + "type": "composer-plugin", + "extra": { + "class": "cweagans\\Composer\\Patches" + }, + "autoload": { + "psr-4": { + "cweagans\\Composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Cameron Eagans", + "email": "me@cweagans.net" + } + ], + "description": "Provides a way to patch Composer packages.", + "time": "2017-03-19T18:18:52+00:00" }, { "name": "doctrine/collections", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", - "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", + "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "doctrine/coding-standard": "~0.1@dev", + "phpunit/phpunit": "^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -133,7 +177,7 @@ "collections", "iterator" ], - "time": "2015-04-14 22:21:58" + "time": "2017-01-03T10:49:41+00:00" }, { "name": "kevinlebrun/colors.php", @@ -184,20 +228,20 @@ "console", "shell" ], - "time": "2016-04-12 20:58:34" + "time": "2016-04-12T20:58:34+00:00" }, { "name": "michelf/php-markdown", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/michelf/php-markdown.git", - "reference": "156e56ee036505ec637d761ee62dc425d807183c" + "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/156e56ee036505ec637d761ee62dc425d807183c", - "reference": "156e56ee036505ec637d761ee62dc425d807183c", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/1f51cc520948f66cd2af8cbc45a5ee175e774220", + "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220", "shasum": "" }, "require": { @@ -235,20 +279,20 @@ "keywords": [ "markdown" ], - "time": "2015-12-24 01:37:31" + "time": "2016-10-29T18:58:20+00:00" }, { "name": "pattern-lab/core", - "version": "v2.5.0", + "version": "v2.8.0", "source": { "type": "git", - "url": "https://github.com/pattern-lab/patternlab-php-core.git", - "reference": "f5f0ed390fc7c092ab96e97722cdaac4104c6827" + "url": "https://github.com/drupal-pattern-lab/patternlab-php-core.git", + "reference": "1fa44ec8595a1d877d5f9191e90df31d9c3973cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pattern-lab/patternlab-php-core/zipball/f5f0ed390fc7c092ab96e97722cdaac4104c6827", - "reference": "f5f0ed390fc7c092ab96e97722cdaac4104c6827", + "url": "https://api.github.com/repos/drupal-pattern-lab/patternlab-php-core/zipball/1fa44ec8595a1d877d5f9191e90df31d9c3973cc", + "reference": "1fa44ec8595a1d877d5f9191e90df31d9c3973cc", "shasum": "" }, "require": { @@ -265,12 +309,16 @@ "symfony/yaml": "^3.0" }, "type": "library", + "extra": { + "patches_applied": { + "temporarily revert array_replace_recursive function": "patches/PsuedoPatternRule.patch" + } + }, "autoload": { "psr-0": { "PatternLab": "src/" } }, - "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -296,20 +344,25 @@ "style guide", "styleguide" ], - "time": "2016-07-02 23:46:20" + "support": { + "issues": "https://github.com/drupal-pattern-lab/patternlab-php-core/issues", + "wiki": "http://patternlab.io/docs/", + "source": "https://github.com/drupal-pattern-lab/patternlab-php-core/releases" + }, + "time": "2017-07-12T01:36:51+00:00" }, { "name": "pattern-lab/patternengine-twig", - "version": "v2.0.0", + "version": "v2.2.3", "source": { "type": "git", - "url": "https://github.com/pattern-lab/patternengine-php-twig.git", - "reference": "fd6d8e2fd2a98efdc0c070788a8ad9aceb5e724b" + "url": "https://github.com/drupal-pattern-lab/patternengine-php-twig.git", + "reference": "f3254de28b9f0a0a1e1015070209a1e06908a829" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pattern-lab/patternengine-php-twig/zipball/fd6d8e2fd2a98efdc0c070788a8ad9aceb5e724b", - "reference": "fd6d8e2fd2a98efdc0c070788a8ad9aceb5e724b", + "url": "https://api.github.com/repos/drupal-pattern-lab/patternengine-php-twig/zipball/f3254de28b9f0a0a1e1015070209a1e06908a829", + "reference": "f3254de28b9f0a0a1e1015070209a1e06908a829", "shasum": "" }, "require": { @@ -320,7 +373,7 @@ "extra": { "patternlab": { "config": { - "lineageMatch": "{%([ ]+)?include( |\\()["\\']([A-Za-z0-9-_]+)["\\'](\\))?(.*)%}", + "lineageMatch": "{%([ ]+)?(?:include|extends|embed)( |\\()["\\']([\\/.@A-Za-z0-9-_]+)["\\']([\\s\\S+]*?)%}", "lineageMatchKey": 3, "patternExtension": "twig", "twigDebug": false, @@ -340,7 +393,6 @@ "PatternLab\\PatternEngine\\Twig": "src/" } }, - "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -359,20 +411,25 @@ "pattern lab", "twig" ], - "time": "2016-05-19 03:02:14" + "support": { + "issues": "https://github.com/drupal-pattern-lab/patternengine-php-twig/issues", + "wiki": "http://patternlab.io/docs/", + "source": "https://github.com/drupal-pattern-lab/patternengine-php-twig/releases" + }, + "time": "2017-05-25T23:13:15+00:00" }, { "name": "pattern-lab/styleguidekit-assets-default", - "version": "v3.1.1", + "version": "v3.4.2", "source": { "type": "git", - "url": "https://github.com/pattern-lab/styleguidekit-assets-default.git", - "reference": "714fae28f838920bc6b712a469359f073a87c12f" + "url": "https://github.com/drupal-pattern-lab/styleguidekit-assets-default.git", + "reference": "9452f6e032766a0675c2e446d65e6054d2a08a97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pattern-lab/styleguidekit-assets-default/zipball/714fae28f838920bc6b712a469359f073a87c12f", - "reference": "714fae28f838920bc6b712a469359f073a87c12f", + "url": "https://api.github.com/repos/drupal-pattern-lab/styleguidekit-assets-default/zipball/9452f6e032766a0675c2e446d65e6054d2a08a97", + "reference": "9452f6e032766a0675c2e446d65e6054d2a08a97", "shasum": "" }, "type": "patternlab-styleguidekit", @@ -394,7 +451,6 @@ } } }, - "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -418,27 +474,31 @@ "pattern lab", "styleguide" ], - "time": "2016-07-03 00:23:42" + "support": { + "issues": "https://github.com/pattern-lab/styleguidekit-assets-default/issues", + "wiki": "http://patternlab.io/docs/", + "source": "https://github.com/pattern-lab/styleguidekit-assets-default/releases" + }, + "time": "2017-05-25T23:00:23+00:00" }, { "name": "pattern-lab/styleguidekit-twig-default", - "version": "v3.0.0", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/pattern-lab/styleguidekit-twig-default.git", - "reference": "7b38bfe2fb60cde3850cfe8f4f948cdc206d7188" + "url": "https://github.com/drupal-pattern-lab/styleguidekit-twig-default.git", + "reference": "caac6d307814cef521cfeff74e860bb639638041" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pattern-lab/styleguidekit-twig-default/zipball/7b38bfe2fb60cde3850cfe8f4f948cdc206d7188", - "reference": "7b38bfe2fb60cde3850cfe8f4f948cdc206d7188", + "url": "https://api.github.com/repos/drupal-pattern-lab/styleguidekit-twig-default/zipball/caac6d307814cef521cfeff74e860bb639638041", + "reference": "caac6d307814cef521cfeff74e860bb639638041", "shasum": "" }, "require": { "pattern-lab/styleguidekit-assets-default": "^3.0.0" }, "type": "patternlab-styleguidekit", - "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -462,7 +522,12 @@ "styleguide", "twig" ], - "time": "2016-07-04 01:24:27" + "support": { + "issues": "https://github.com/pattern-lab/styleguidekit-twig-default/issues", + "wiki": "http://patternlab.io/docs/", + "source": "https://github.com/pattern-lab/styleguidekit-twig-default/releases" + }, + "time": "2017-05-25T23:01:29+00:00" }, { "name": "pear/console_getopt", @@ -509,24 +574,24 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2015-07-20 20:28:12" + "time": "2015-07-20T20:28:12+00:00" }, { "name": "pear/pear-core-minimal", - "version": "v1.10.1", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "cae0f1ce0cb5bddb611b0a652d322905a65a5896" + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/cae0f1ce0cb5bddb611b0a652d322905a65a5896", - "reference": "cae0f1ce0cb5bddb611b0a652d322905a65a5896", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", "shasum": "" }, "require": { - "pear/console_getopt": "~1.3", + "pear/console_getopt": "~1.4", "pear/pear_exception": "~1.0" }, "replace": { @@ -553,7 +618,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2015-10-17 11:41:19" + "time": "2017-02-28T16:46:11+00:00" }, { "name": "pear/pear_exception", @@ -608,7 +673,7 @@ "keywords": [ "exception" ], - "time": "2015-02-10 20:07:52" + "time": "2015-02-10T20:07:52+00:00" }, { "name": "pear/versioncontrol_git", @@ -652,28 +717,28 @@ } ], "description": "VersionControl_Git is a library that provides OO interface to handle Git repository.", - "time": "2015-11-04 13:03:54" + "time": "2015-11-04T13:03:54+00:00" }, { "name": "phing/phing", - "version": "2.14.0", + "version": "2.16.0", "source": { "type": "git", "url": "https://github.com/phingofficial/phing.git", - "reference": "7dd73c83c377623def54b58121f46b4dcb35dd61" + "reference": "151a0f4d8cebf7711eccc62dde3f09bc36a00d7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phingofficial/phing/zipball/7dd73c83c377623def54b58121f46b4dcb35dd61", - "reference": "7dd73c83c377623def54b58121f46b4dcb35dd61", + "url": "https://api.github.com/repos/phingofficial/phing/zipball/151a0f4d8cebf7711eccc62dde3f09bc36a00d7b", + "reference": "151a0f4d8cebf7711eccc62dde3f09bc36a00d7b", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": ">=5.2.0", + "symfony/yaml": "^3.1" }, "require-dev": { "ext-pdo_sqlite": "*", - "lastcraft/simpletest": "@dev", "mikey179/vfsstream": "^1.6", "pdepend/pdepend": "2.x", "pear/archive_tar": "1.4.x", @@ -688,8 +753,9 @@ "phpunit/phpunit": ">=3.7", "sebastian/git": "~1.0", "sebastian/phpcpd": "2.x", - "squizlabs/php_codesniffer": "~2.2", - "symfony/yaml": "~2.7" + "siad007/versioncontrol_hg": "^1.0", + "simpletest/simpletest": "^1.1", + "squizlabs/php_codesniffer": "~2.2" }, "suggest": { "pdepend/pdepend": "PHP version of JDepend", @@ -702,6 +768,7 @@ "phpunit/php-code-coverage": "Library that provides collection, processing, and rendering functionality for PHP code coverage information", "phpunit/phpunit": "The PHP Unit Testing Framework", "sebastian/phpcpd": "Copy/Paste Detector (CPD) for PHP code", + "siad007/versioncontrol_hg": "A library for interfacing with Mercurial repositories.", "tedivm/jshrink": "Javascript Minifier built in PHP" }, "bin": [ @@ -710,7 +777,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.14.x-dev" + "dev-master": "2.16.x-dev" } }, "autoload": { @@ -743,25 +810,28 @@ "task", "tool" ], - "time": "2016-03-10 21:39:23" + "time": "2016-12-22T20:16:33+00:00" }, { "name": "seld/jsonlint", - "version": "1.4.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "66834d3e3566bb5798db7294619388786ae99394" + "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/66834d3e3566bb5798db7294619388786ae99394", - "reference": "66834d3e3566bb5798db7294619388786ae99394", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77", + "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77", "shasum": "" }, "require": { "php": "^5.3 || ^7.0" }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, "bin": [ "bin/jsonlint" ], @@ -789,7 +859,7 @@ "parser", "validator" ], - "time": "2015-11-21 02:21:41" + "time": "2017-06-18T15:11:04+00:00" }, { "name": "shudrum/array-finder", @@ -829,29 +899,32 @@ ], "description": "ArrayFinder component", "homepage": "https://github.com/Shudrum/ArrayFinder", - "time": "2016-02-01 12:23:32" + "time": "2016-02-01T12:23:32+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.1.2", + "version": "v3.3.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "7f9839ede2070f53e7e2f0849b9bd14748c434c5" + "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7f9839ede2070f53e7e2f0849b9bd14748c434c5", - "reference": "7f9839ede2070f53e7e2f0849b9bd14748c434c5", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67535f1e3fd662bdc68d7ba317c93eecd973617e", + "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e", "shasum": "" }, "require": { "php": ">=5.5.9" }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/expression-language": "~2.8|~3.0", "symfony/stopwatch": "~2.8|~3.0" }, @@ -862,7 +935,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -889,20 +962,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" + "time": "2017-06-09T14:53:08+00:00" }, { "name": "symfony/filesystem", - "version": "v3.1.2", + "version": "v3.3.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "322da5f0910d8aa0b25fa65ffccaba68dbddb890" + "reference": "427987eb4eed764c3b6e38d52a0f87989e010676" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/322da5f0910d8aa0b25fa65ffccaba68dbddb890", - "reference": "322da5f0910d8aa0b25fa65ffccaba68dbddb890", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/427987eb4eed764c3b6e38d52a0f87989e010676", + "reference": "427987eb4eed764c3b6e38d52a0f87989e010676", "shasum": "" }, "require": { @@ -911,7 +984,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -938,20 +1011,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" + "time": "2017-07-11T07:17:58+00:00" }, { "name": "symfony/finder", - "version": "v3.1.2", + "version": "v3.3.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8201978de88a9fa0923e18601bb17f1df9c721e7" + "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8201978de88a9fa0923e18601bb17f1df9c721e7", - "reference": "8201978de88a9fa0923e18601bb17f1df9c721e7", + "url": "https://api.github.com/repos/symfony/finder/zipball/baea7f66d30854ad32988c11a09d7ffd485810c4", + "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4", "shasum": "" }, "require": { @@ -960,7 +1033,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -987,20 +1060,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" + "time": "2017-06-01T21:01:25+00:00" }, { "name": "symfony/process", - "version": "v3.1.2", + "version": "v3.3.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5c11a1a4d4016662eeaf0f8757958c7de069f9a0" + "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5c11a1a4d4016662eeaf0f8757958c7de069f9a0", - "reference": "5c11a1a4d4016662eeaf0f8757958c7de069f9a0", + "url": "https://api.github.com/repos/symfony/process/zipball/07432804942b9f6dd7b7377faf9920af5f95d70a", + "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a", "shasum": "" }, "require": { @@ -1009,7 +1082,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1036,29 +1109,35 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:42:25" + "time": "2017-07-13T13:05:09+00:00" }, { "name": "symfony/yaml", - "version": "v3.1.2", + "version": "v3.3.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de" + "reference": "1f93a8d19b8241617f5074a123e282575b821df8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2884c26ce4c1d61aebf423a8b912950fe7c764de", - "reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de", + "url": "https://api.github.com/repos/symfony/yaml/zipball/1f93a8d19b8241617f5074a123e282575b821df8", + "reference": "1f93a8d19b8241617f5074a123e282575b821df8", "shasum": "" }, "require": { "php": ">=5.5.9" }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1085,38 +1164,42 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" + "time": "2017-06-15T12:58:50+00:00" }, { "name": "twig/twig", - "version": "v1.24.1", + "version": "v1.34.4", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "3566d311a92aae4deec6e48682dc5a4528c4a512" + "reference": "f878bab48edb66ad9c6ed626bf817f60c6c096ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3566d311a92aae4deec6e48682dc5a4528c4a512", - "reference": "3566d311a92aae4deec6e48682dc5a4528c4a512", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/f878bab48edb66ad9c6ed626bf817f60c6c096ee", + "reference": "f878bab48edb66ad9c6ed626bf817f60c6c096ee", "shasum": "" }, "require": { - "php": ">=5.2.7" + "php": ">=5.3.3" }, "require-dev": { + "psr/container": "^1.0", "symfony/debug": "~2.7", - "symfony/phpunit-bridge": "~2.7" + "symfony/phpunit-bridge": "~3.3@dev" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.24-dev" + "dev-master": "1.34-dev" } }, "autoload": { "psr-0": { "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1146,7 +1229,7 @@ "keywords": [ "templating" ], - "time": "2016-05-30 09:11:59" + "time": "2017-07-04T13:19:31+00:00" } ], "packages-dev": [], diff --git a/styleguide/config/config.yml b/styleguide/config/config.yml index c305afcdfc..df60ac132b 100644 --- a/styleguide/config/config.yml +++ b/styleguide/config/config.yml @@ -1,4 +1,4 @@ -v: 2.5.0 +v: 2.6.0 overrideConfig: q ie: - DS_Store @@ -20,7 +20,7 @@ publicDir: public sourceDir: source defaultPattern: pages-readme2 defaultShowPatternInfo: false -lineageMatch: '{%([ ]+)?include( |\()["\']([A-Za-z0-9-_]+)["\'](\))?(.*)%}' +lineageMatch: '{%([ ]+)?(?:include|extends|embed)( |\()["\']([\/.@A-Za-z0-9-_]+)["\']([\s\S+]*?)%}' lineageMatchKey: 3 patternExtension: twig twigDebug: false @@ -36,6 +36,7 @@ ishMinimum: '320' ishMaximum: '2600' ishControlsHide: - hay + - disco styleguideKit: pattern-lab/styleguidekit-twig-default styleguideKitPath: vendor/pattern-lab/styleguidekit-twig-default phpBin: 'C:\php' diff --git a/styleguide/config/listeners.json b/styleguide/config/listeners.json index 699a75d0f5..44c1ee2994 100644 --- a/styleguide/config/listeners.json +++ b/styleguide/config/listeners.json @@ -1 +1 @@ -{ "listeners": [ ] } \ No newline at end of file +{ "listeners": ["\\PatternLab\\DynamicDataListener" ] } diff --git a/styleguide/core/src/PatternLab/DynamicDataListener.php b/styleguide/core/src/PatternLab/DynamicDataListener.php new file mode 100644 index 0000000000..3e030af2f2 --- /dev/null +++ b/styleguide/core/src/PatternLab/DynamicDataListener.php @@ -0,0 +1,103 @@ +addListener('data.gatherStart', 'gatherData'); + } + + public function gatherData() { + $this->setDomain(); + $this->setMayflowerRelease(); + } + + /** + * Read domain from an environment variable and set into data. + */ + public function setDomain() { + $baseUrl = getenv('BASE_URL'); + if($baseUrl) { + $parts = parse_url($baseUrl) + [ + 'scheme' => 'https', + 'host' => 'mayflower.digital.mass.gov', + 'path' => '/' + ]; + $domain = sprintf('%s://%s', $parts['scheme'], $parts['host']); + } + else { + $domain = ''; + } + + + Data::setOption('url', [ + 'domain' => $domain, + // Many places expect this path with no leading or trailing slashes. + 'assetsPath' => trim(trim($parts['path'], '/') . '/assets', '/'), + ]); + Data::setOption('urlDomain', $domain); + Data::setOption('urlPath', $parts['path']); + } + + /** + * Read version from package.json and set into data. + */ + public function setMayflowerRelease() { + $package = json_decode(file_get_contents(__DIR__.'/../../../package.json')); + $version = $package->version; + $date = $this->getGitDate('HEAD'); + + // If we're not on the exact commit that represents the version tag, denote + // that this is a dev version. + if($version === $this->getGitTag()) { + $version = sprintf('v%s', $version); + } + else { + $version = sprintf('v%s-dev', $version); + } + + Data::setOption('mayflower', [ + 'version' => $version, + 'releaseDate' => $date, + ]); + } + + /** + * Return the git tag name for the current commit. + * + * @return bool|string + */ + private function getGitTag() { + $proc = new Process('git describe --tags --exact-match'); + $proc->run(); + return $proc->isSuccessful() ? trim($proc->getOutput()) : FALSE; + } + + /** + * Return the last commit date for a tag or branch. + * + * @param $ref + * The branch or tag name. + * + * @return bool|string + */ + private function getGitDate($ref) { + $proc = new Process('git show -s --format=%ci ' . escapeshellarg($ref)); + $proc->run(); + if($proc->isSuccessful()) { + $date = new \DateTime($proc->getOutput()); + return $date->format('n/j/Y'); + } + return FALSE; + } +} diff --git a/styleguide/core/src/PatternLab/IconHelper.php b/styleguide/core/src/PatternLab/IconHelper.php new file mode 100644 index 0000000000..61f59c52a8 --- /dev/null +++ b/styleguide/core/src/PatternLab/IconHelper.php @@ -0,0 +1,107 @@ + statement. This adds complication + * to Mayflower that isn't really necessary, but it allows us to + * mirror the way we're embedding the SVGs in other applications + * to ensure there are no styling issues. + */ +class IconHelper { + + // Tracks the icons we've seen so we can avoid duplicating IDs. + public static $seen = []; + + /** + * Create a unique ID for a specific SVG file. + * @param $path + * + * @return string + */ + public function getId($path) { + if(isset(self::$seen[$path])) { + self::$seen[$path]++; + } + else { + self::$seen[$path] = 0; + } + $i = self::$seen[$path]; + return sprintf('%s.%d', md5($path), $i); + } + + /** + * Load an SVG element as a DOMElement. + * + * @param $path + * + * @return \DOMElement + */ + public function load($path) { + if(!file_exists($path)) { + throw new \Exception('Invalid icon path: ' . $path); + } + $svg = file_get_contents($path); + $doc = new \DOMDocument('1.0', 'UTF-8'); + $doc->loadXML($svg); + if(!$doc->firstChild) { + throw new \Exception('Malformed SVG found at ' . $path); + } + return $doc->firstChild; + } + + /** + * Export an SVG DOMElement as a symbol string. + * + * @param \DOMElement $sourceNode + * + * @return string + */ + public function exportAsSymbol(\DOMElement $sourceNode) { + $symbol = $sourceNode->ownerDocument->createElementNS($sourceNode->namespaceURI, 'symbol'); + + // Copy attributes from to . + /** @var \DOMAttr $attribute */ + foreach ($sourceNode->attributes as $attribute) { + $symbol->setAttribute($attribute->name, $attribute->value); + } + + // Copy all child nodes from the SVG to the symbol. + // This has to be a double loop due to an issue with DOMNodeList. + // @see http://php.net/manual/en/domnode.appendchild.php#121829 + foreach ($sourceNode->childNodes as $node) { + $children[] = $node; + } + + foreach ($children as $child) { + $symbol->appendChild($child); + } + + return $sourceNode->ownerDocument->saveXML($symbol); + } + + /** + * Get an SVG tag with a statement inside of it. + * + * @param $id + * + * @return string + */ + public function getSvgUse($id) { + return sprintf('', $id); + } + + /** + * Wrap symbol elements into a new SVG element. + * + * @param array $symbols + * + * @return string + */ + public function wrapSymbols(array $symbols) { + return sprintf('%s', implode('', $symbols)); + } +} \ No newline at end of file diff --git a/styleguide/npm-shrinkwrap.json b/styleguide/npm-shrinkwrap.json deleted file mode 100644 index f9718ccbc2..0000000000 --- a/styleguide/npm-shrinkwrap.json +++ /dev/null @@ -1,6349 +0,0 @@ -{ - "name": "MayflowerPatternLibrary", - "version": "2.0.0", - "dependencies": { - "abbrev": { - "version": "1.0.9", - "from": "abbrev@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "dev": true - }, - "accepts": { - "version": "1.3.3", - "from": "accepts@>=1.3.3 <1.4.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "dev": true - }, - "acorn": { - "version": "3.3.0", - "from": "acorn@>=3.1.0 <4.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "from": "acorn-jsx@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "dev": true - }, - "acorn-object-spread": { - "version": "1.0.0", - "from": "acorn-object-spread@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/acorn-object-spread/-/acorn-object-spread-1.0.0.tgz", - "dev": true - }, - "after": { - "version": "0.8.1", - "from": "after@0.8.1", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", - "dev": true - }, - "ajv": { - "version": "4.10.0", - "from": "ajv@>=4.7.0 <5.0.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.10.0.tgz", - "dev": true, - "dependencies": { - "json-stable-stringify": { - "version": "1.0.1", - "from": "json-stable-stringify@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "1.3.0", - "from": "ajv-keywords@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.3.0.tgz", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "from": "align-text@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "dev": true - }, - "alter": { - "version": "0.2.0", - "from": "alter@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "from": "amdefine@>=0.0.4", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "dev": true - }, - "ansi-escapes": { - "version": "1.4.0", - "from": "ansi-escapes@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "dev": true - }, - "ansi-regex": { - "version": "2.0.0", - "from": "ansi-regex@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "from": "ansi-styles@>=2.2.1 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "dev": true - }, - "ansicolors": { - "version": "0.2.1", - "from": "ansicolors@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", - "dev": true - }, - "anymatch": { - "version": "1.3.0", - "from": "anymatch@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "dev": true - }, - "aproba": { - "version": "1.0.4", - "from": "aproba@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.0.4.tgz", - "dev": true - }, - "archy": { - "version": "1.0.0", - "from": "archy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.2", - "from": "are-we-there-yet@>=1.1.2 <1.2.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz", - "dev": true - }, - "argparse": { - "version": "1.0.9", - "from": "argparse@>=1.0.7 <2.0.0", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "dev": true - }, - "arr-diff": { - "version": "2.0.0", - "from": "arr-diff@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "dev": true - }, - "arr-flatten": { - "version": "1.0.1", - "from": "arr-flatten@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "from": "array-differ@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "from": "array-find-index@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "from": "array-union@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "from": "array-uniq@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "from": "array-unique@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.6", - "from": "arraybuffer.slice@0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "from": "arrify@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "from": "asn1@>=0.2.3 <0.3.0", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "dev": true - }, - "asn1.js": { - "version": "4.9.0", - "from": "asn1.js@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.0.tgz", - "dev": true - }, - "assert": { - "version": "1.3.0", - "from": "assert@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "from": "assert-plus@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "dev": true - }, - "assign": { - "version": "0.1.7", - "from": "assign@>=0.1.7", - "resolved": "https://registry.npmjs.org/assign/-/assign-0.1.7.tgz", - "dev": true, - "dependencies": { - "fusing": { - "version": "0.4.0", - "from": "fusing@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/fusing/-/fusing-0.4.0.tgz", - "dev": true - } - } - }, - "ast-traverse": { - "version": "0.1.1", - "from": "ast-traverse@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", - "dev": true - }, - "ast-types": { - "version": "0.9.2", - "from": "ast-types@0.9.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.2.tgz", - "dev": true - }, - "astw": { - "version": "2.0.0", - "from": "astw@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/astw/-/astw-2.0.0.tgz", - "dev": true, - "dependencies": { - "acorn": { - "version": "1.2.2", - "from": "acorn@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", - "dev": true - } - } - }, - "async": { - "version": "1.5.2", - "from": "async@1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "from": "async-each@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "dev": true - }, - "async-each-series": { - "version": "0.1.1", - "from": "async-each-series@0.1.1", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "from": "async-foreach@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "from": "asynckit@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "dev": true - }, - "atob": { - "version": "1.1.3", - "from": "atob@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", - "dev": true - }, - "autoprefixer": { - "version": "6.6.0", - "from": "autoprefixer@>=6.0.0 <7.0.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.6.0.tgz", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "from": "aws-sign2@>=0.6.0 <0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "dev": true - }, - "aws4": { - "version": "1.5.0", - "from": "aws4@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", - "dev": true - }, - "babel-core": { - "version": "5.8.38", - "from": "babel-core@>=5.0.0 <6.0.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", - "dev": true - }, - "babel-plugin-constant-folding": { - "version": "1.0.1", - "from": "babel-plugin-constant-folding@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", - "dev": true - }, - "babel-plugin-dead-code-elimination": { - "version": "1.0.2", - "from": "babel-plugin-dead-code-elimination@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", - "dev": true - }, - "babel-plugin-eval": { - "version": "1.0.1", - "from": "babel-plugin-eval@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", - "dev": true - }, - "babel-plugin-inline-environment-variables": { - "version": "1.0.1", - "from": "babel-plugin-inline-environment-variables@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", - "dev": true - }, - "babel-plugin-jscript": { - "version": "1.0.4", - "from": "babel-plugin-jscript@>=1.0.4 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", - "dev": true - }, - "babel-plugin-member-expression-literals": { - "version": "1.0.1", - "from": "babel-plugin-member-expression-literals@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", - "dev": true - }, - "babel-plugin-property-literals": { - "version": "1.0.1", - "from": "babel-plugin-property-literals@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", - "dev": true - }, - "babel-plugin-proto-to-assign": { - "version": "1.0.4", - "from": "babel-plugin-proto-to-assign@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", - "dev": true - }, - "babel-plugin-react-constant-elements": { - "version": "1.0.3", - "from": "babel-plugin-react-constant-elements@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", - "dev": true - }, - "babel-plugin-react-display-name": { - "version": "1.0.3", - "from": "babel-plugin-react-display-name@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", - "dev": true - }, - "babel-plugin-remove-console": { - "version": "1.0.1", - "from": "babel-plugin-remove-console@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", - "dev": true - }, - "babel-plugin-remove-debugger": { - "version": "1.0.1", - "from": "babel-plugin-remove-debugger@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", - "dev": true - }, - "babel-plugin-runtime": { - "version": "1.0.7", - "from": "babel-plugin-runtime@>=1.0.7 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", - "dev": true - }, - "babel-plugin-undeclared-variables-check": { - "version": "1.0.2", - "from": "babel-plugin-undeclared-variables-check@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", - "dev": true - }, - "babel-plugin-undefined-to-void": { - "version": "1.1.6", - "from": "babel-plugin-undefined-to-void@>=1.1.6 <2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", - "dev": true - }, - "babelify": { - "version": "6.4.0", - "from": "babelify@>=6.3.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-6.4.0.tgz", - "dev": true - }, - "babylon": { - "version": "5.8.38", - "from": "babylon@>=5.8.38 <6.0.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", - "dev": true - }, - "back": { - "version": "1.0.1", - "from": "back@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/back/-/back-1.0.1.tgz", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "from": "backo2@1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "dev": true - }, - "balanced-match": { - "version": "0.4.2", - "from": "balanced-match@>=0.4.1 <0.5.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "dev": true - }, - "Base64": { - "version": "0.2.1", - "from": "Base64@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.5", - "from": "base64-arraybuffer@0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "dev": true - }, - "base64-js": { - "version": "0.0.8", - "from": "base64-js@0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "dev": true - }, - "base64id": { - "version": "0.1.0", - "from": "base64id@0.1.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", - "dev": true - }, - "batch": { - "version": "0.5.3", - "from": "batch@0.5.3", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.0", - "from": "bcrypt-pbkdf@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", - "dev": true, - "optional": true - }, - "beeper": { - "version": "1.1.1", - "from": "beeper@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "dev": true - }, - "better-assert": { - "version": "1.0.2", - "from": "better-assert@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "dev": true - }, - "binary-extensions": { - "version": "1.8.0", - "from": "binary-extensions@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", - "dev": true - }, - "bl": { - "version": "0.9.5", - "from": "bl@>=0.9.1 <0.10.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.26 <1.1.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - } - } - }, - "blob": { - "version": "0.0.4", - "from": "blob@0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "from": "block-stream@*", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "from": "bluebird@>=2.9.33 <3.0.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "dev": true - }, - "bn.js": { - "version": "4.11.6", - "from": "bn.js@>=4.1.1 <5.0.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "from": "boolbase@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "dev": true - }, - "boom": { - "version": "2.10.1", - "from": "boom@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "dev": true - }, - "bourbon": { - "version": "4.2.7", - "from": "bourbon@>=4.2.6 <5.0.0", - "resolved": "https://registry.npmjs.org/bourbon/-/bourbon-4.2.7.tgz", - "dev": true - }, - "bourbon-neat": { - "version": "1.7.2", - "from": "bourbon-neat@1.7.2", - "resolved": "https://registry.npmjs.org/bourbon-neat/-/bourbon-neat-1.7.2.tgz", - "dev": true - }, - "brace-expansion": { - "version": "1.1.6", - "from": "brace-expansion@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", - "dev": true - }, - "braces": { - "version": "1.8.5", - "from": "braces@>=1.8.2 <2.0.0", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "dev": true - }, - "breakable": { - "version": "1.0.0", - "from": "breakable@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", - "dev": true - }, - "brorand": { - "version": "1.0.6", - "from": "brorand@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.0.6.tgz", - "dev": true - }, - "browser-pack": { - "version": "5.0.1", - "from": "browser-pack@>=5.0.0 <6.0.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.13-1 <1.2.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - }, - "through2": { - "version": "1.1.1", - "from": "through2@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "dev": true - } - } - }, - "browser-resolve": { - "version": "1.11.2", - "from": "browser-resolve@>=1.7.1 <2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "dev": true, - "dependencies": { - "resolve": { - "version": "1.1.7", - "from": "resolve@1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "dev": true - } - } - }, - "browser-sync": { - "version": "2.18.5", - "from": "browser-sync@>=2.7.3 <3.0.0", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.18.5.tgz", - "dev": true, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "from": "camelcase@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "from": "cliui@>=3.2.0 <4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "dev": true - }, - "window-size": { - "version": "0.2.0", - "from": "window-size@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "dev": true - }, - "yargs": { - "version": "6.4.0", - "from": "yargs@6.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", - "dev": true - } - } - }, - "browser-sync-client": { - "version": "2.4.4", - "from": "browser-sync-client@2.4.4", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.4.4.tgz", - "dev": true - }, - "browser-sync-ui": { - "version": "0.6.2", - "from": "browser-sync-ui@0.6.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-0.6.2.tgz", - "dev": true - }, - "browserify": { - "version": "10.2.6", - "from": "browserify@>=10.1.1 <11.0.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-10.2.6.tgz", - "dev": true, - "dependencies": { - "glob": { - "version": "4.5.3", - "from": "glob@>=4.0.5 <5.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.13 <2.0.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - }, - "through2": { - "version": "1.1.1", - "from": "through2@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "dev": true - } - } - }, - "browserify-aes": { - "version": "1.0.6", - "from": "browserify-aes@>=1.0.4 <2.0.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", - "dev": true - }, - "browserify-cipher": { - "version": "1.0.0", - "from": "browserify-cipher@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "dev": true - }, - "browserify-des": { - "version": "1.0.0", - "from": "browserify-des@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "dev": true - }, - "browserify-rsa": { - "version": "4.0.1", - "from": "browserify-rsa@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "dev": true - }, - "browserify-sign": { - "version": "4.0.0", - "from": "browserify-sign@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.0.tgz", - "dev": true - }, - "browserify-zlib": { - "version": "0.1.4", - "from": "browserify-zlib@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "dev": true - }, - "browserslist": { - "version": "1.5.1", - "from": "browserslist@>=1.5.1 <1.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.5.1.tgz", - "dev": true - }, - "bs-recipes": { - "version": "1.3.2", - "from": "bs-recipes@1.3.2", - "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.2.tgz", - "dev": true - }, - "buble": { - "version": "0.12.5", - "from": "buble@>=0.12.0 <0.13.0", - "resolved": "https://registry.npmjs.org/buble/-/buble-0.12.5.tgz", - "dev": true - }, - "bubleify": { - "version": "0.5.1", - "from": "bubleify@>=0.5.1 <0.6.0", - "resolved": "https://registry.npmjs.org/bubleify/-/bubleify-0.5.1.tgz", - "dev": true - }, - "buffer": { - "version": "3.6.0", - "from": "buffer@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "dev": true - }, - "buffer-shims": { - "version": "1.0.0", - "from": "buffer-shims@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "from": "buffer-xor@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "from": "builtin-modules@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "dev": true - }, - "builtins": { - "version": "0.0.7", - "from": "builtins@>=0.0.3 <0.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "from": "caller-path@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "dev": true - }, - "callsite": { - "version": "1.0.0", - "from": "callsite@1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "dev": true - }, - "callsites": { - "version": "0.2.0", - "from": "callsites@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "from": "camelcase@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "from": "camelcase-keys@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "dev": true, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "from": "camelcase@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "dev": true - } - } - }, - "caniuse-db": { - "version": "1.0.30000602", - "from": "caniuse-db@>=1.0.30000602 <2.0.0", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000602.tgz", - "dev": true - }, - "cardinal": { - "version": "1.0.0", - "from": "cardinal@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz", - "dev": true - }, - "caseless": { - "version": "0.11.0", - "from": "caseless@>=0.11.0 <0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "from": "center-align@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "from": "chalk@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "dev": true - }, - "cheerio": { - "version": "0.19.0", - "from": "cheerio@>=0.19.0 <0.20.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", - "dev": true - }, - "chokidar": { - "version": "1.6.1", - "from": "chokidar@1.6.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", - "dev": true - }, - "cipher-base": { - "version": "1.0.3", - "from": "cipher-base@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz", - "dev": true - }, - "circular-json": { - "version": "0.3.1", - "from": "circular-json@>=0.3.1 <0.4.0", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", - "dev": true - }, - "clap": { - "version": "1.1.2", - "from": "clap@>=1.0.9 <2.0.0", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.1.2.tgz", - "dev": true - }, - "cli-color": { - "version": "1.1.0", - "from": "cli-color@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.1.0.tgz", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "from": "cli-cursor@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "dev": true - }, - "cli-table": { - "version": "0.3.1", - "from": "cli-table@>=0.3.1 <0.4.0", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "dev": true - }, - "cli-usage": { - "version": "0.1.4", - "from": "cli-usage@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/cli-usage/-/cli-usage-0.1.4.tgz", - "dev": true - }, - "cli-width": { - "version": "2.1.0", - "from": "cli-width@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "from": "cliui@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "dev": true - }, - "clone": { - "version": "1.0.2", - "from": "clone@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "from": "clone-buffer@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "from": "clone-stats@>=0.0.1 <0.0.2", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "dev": true - }, - "cloneable-readable": { - "version": "1.0.0", - "from": "cloneable-readable@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "dev": true - }, - "co": { - "version": "4.6.0", - "from": "co@>=4.6.0 <5.0.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "dev": true - }, - "coa": { - "version": "1.0.1", - "from": "coa@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.1.tgz", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "from": "code-point-at@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "dev": true - }, - "color": { - "version": "0.8.0", - "from": "color@>=0.8.0 <0.9.0", - "resolved": "https://registry.npmjs.org/color/-/color-0.8.0.tgz", - "dev": true - }, - "color-convert": { - "version": "0.5.3", - "from": "color-convert@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", - "dev": true - }, - "color-name": { - "version": "1.1.1", - "from": "color-name@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "dev": true - }, - "color-string": { - "version": "0.3.0", - "from": "color-string@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "dev": true - }, - "colornames": { - "version": "0.0.2", - "from": "colornames@0.0.2", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-0.0.2.tgz", - "dev": true - }, - "colors": { - "version": "1.0.3", - "from": "colors@1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "dev": true - }, - "colorspace": { - "version": "1.0.1", - "from": "colorspace@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.0.1.tgz", - "dev": true - }, - "combine-source-map": { - "version": "0.6.1", - "from": "combine-source-map@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz", - "dev": true, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "from": "convert-source-map@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "from": "source-map@>=0.4.2 <0.5.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "dev": true - } - } - }, - "combined-stream": { - "version": "1.0.5", - "from": "combined-stream@>=1.0.5 <1.1.0", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "dev": true - }, - "commander": { - "version": "2.9.0", - "from": "commander@>=2.5.0 <3.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "dev": true - }, - "commondir": { - "version": "0.0.1", - "from": "commondir@0.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz", - "dev": true - }, - "commoner": { - "version": "0.10.8", - "from": "commoner@>=0.10.3 <0.11.0", - "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "dev": true, - "dependencies": { - "esprima": { - "version": "3.1.3", - "from": "esprima@>=3.1.0 <3.2.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "dev": true - }, - "recast": { - "version": "0.11.18", - "from": "recast@>=0.11.17 <0.12.0", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.18.tgz", - "dev": true - } - } - }, - "component-bind": { - "version": "1.0.0", - "from": "component-bind@1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "dev": true - }, - "component-emitter": { - "version": "1.1.2", - "from": "component-emitter@1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "from": "component-inherit@0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "dev": true - }, - "concat-stream": { - "version": "1.4.10", - "from": "concat-stream@>=1.4.1 <1.5.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.9 <1.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - } - } - }, - "concat-with-sourcemaps": { - "version": "1.0.4", - "from": "concat-with-sourcemaps@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz", - "dev": true - }, - "connect": { - "version": "3.5.0", - "from": "connect@3.5.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.0.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "2.2.0", - "from": "debug@>=2.2.0 <2.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "dev": true - }, - "ms": { - "version": "0.7.1", - "from": "ms@0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "1.3.0", - "from": "connect-history-api-fallback@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "from": "console-browserify@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "from": "console-control-strings@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "dev": true - }, - "constants-browserify": { - "version": "0.0.1", - "from": "constants-browserify@>=0.0.1 <0.1.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz", - "dev": true - }, - "convert-source-map": { - "version": "1.3.0", - "from": "convert-source-map@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.3.0.tgz", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "from": "cookie@0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "dev": true - }, - "core-js": { - "version": "1.2.7", - "from": "core-js@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "dev": true - }, - "create-ecdh": { - "version": "4.0.0", - "from": "create-ecdh@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "dev": true - }, - "create-hash": { - "version": "1.1.2", - "from": "create-hash@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.2.tgz", - "dev": true - }, - "create-hmac": { - "version": "1.1.4", - "from": "create-hmac@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.4.tgz", - "dev": true - }, - "cross-spawn": { - "version": "3.0.1", - "from": "cross-spawn@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "dev": true, - "dependencies": { - "lru-cache": { - "version": "4.0.2", - "from": "lru-cache@>=4.0.1 <5.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "dev": true - } - } - }, - "cryptiles": { - "version": "2.0.5", - "from": "cryptiles@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "dev": true - }, - "crypto-browserify": { - "version": "3.11.0", - "from": "crypto-browserify@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.0.tgz", - "dev": true - }, - "css": { - "version": "2.2.1", - "from": "css@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", - "dev": true, - "dependencies": { - "source-map": { - "version": "0.1.43", - "from": "source-map@>=0.1.38 <0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "dev": true - } - } - }, - "css-select": { - "version": "1.0.0", - "from": "css-select@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz", - "dev": true - }, - "css-what": { - "version": "1.0.0", - "from": "css-what@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz", - "dev": true - }, - "csso": { - "version": "2.2.1", - "from": "csso@>=2.2.1 <2.3.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.2.1.tgz", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "from": "currently-unhandled@>=0.4.1 <0.5.0", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "dev": true - }, - "d": { - "version": "0.1.1", - "from": "d@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "from": "dashdash@>=1.12.0 <2.0.0", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "dev": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "dev": true - } - } - }, - "date-now": { - "version": "0.1.4", - "from": "date-now@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "dev": true - }, - "dateformat": { - "version": "1.0.12", - "from": "dateformat@>=1.0.11 <2.0.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "dev": true - }, - "deap": { - "version": "1.0.0", - "from": "deap@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/deap/-/deap-1.0.0.tgz", - "dev": true - }, - "debug": { - "version": "2.5.1", - "from": "debug@>=2.1.1 <3.0.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.5.1.tgz", - "dev": true - }, - "debug-fabulous": { - "version": "0.0.4", - "from": "debug-fabulous@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.0.4.tgz", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "from": "decamelize@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "from": "deep-is@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "from": "defaults@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "dev": true - }, - "defined": { - "version": "1.0.0", - "from": "defined@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "dev": true - }, - "defs": { - "version": "1.1.1", - "from": "defs@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", - "dev": true, - "dependencies": { - "yargs": { - "version": "3.27.0", - "from": "yargs@>=3.27.0 <3.28.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", - "dev": true - } - } - }, - "del": { - "version": "2.2.2", - "from": "del@>=2.0.2 <3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "from": "delayed-stream@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "from": "delegates@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "dev": true - }, - "depd": { - "version": "1.1.0", - "from": "depd@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "dev": true - }, - "deprecated": { - "version": "0.0.1", - "from": "deprecated@>=0.0.1 <0.0.2", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "dev": true - }, - "deps-sort": { - "version": "1.3.9", - "from": "deps-sort@>=1.3.7 <2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-1.3.9.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.13-1 <1.2.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - }, - "through2": { - "version": "1.1.1", - "from": "through2@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "dev": true - } - } - }, - "des.js": { - "version": "1.0.0", - "from": "des.js@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "from": "destroy@>=1.0.4 <1.1.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "dev": true - }, - "detect-file": { - "version": "0.1.0", - "from": "detect-file@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "dev": true - }, - "detect-indent": { - "version": "3.0.1", - "from": "detect-indent@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "from": "detect-newline@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "dev": true - }, - "detective": { - "version": "4.3.2", - "from": "detective@>=4.3.1 <5.0.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", - "dev": true - }, - "dev-ip": { - "version": "1.0.1", - "from": "dev-ip@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "dev": true - }, - "diagnostics": { - "version": "1.0.1", - "from": "diagnostics@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.0.1.tgz", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.2", - "from": "diffie-hellman@>=5.0.0 <6.0.0", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "dev": true - }, - "doctrine": { - "version": "1.5.0", - "from": "doctrine@>=1.2.2 <2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "dev": true - }, - "dom-serializer": { - "version": "0.1.0", - "from": "dom-serializer@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "dev": true, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "from": "domelementtype@>=1.1.1 <1.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.1.7", - "from": "domain-browser@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "from": "domelementtype@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "from": "domhandler@>=2.3.0 <2.4.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "dev": true - }, - "domutils": { - "version": "1.4.3", - "from": "domutils@>=1.4.0 <1.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", - "dev": true - }, - "duplexer2": { - "version": "0.0.2", - "from": "duplexer2@>=0.0.2 <0.1.0", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.9 <1.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - } - } - }, - "duplexify": { - "version": "3.5.0", - "from": "duplexify@>=3.2.0 <4.0.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", - "dev": true, - "dependencies": { - "end-of-stream": { - "version": "1.0.0", - "from": "end-of-stream@1.0.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", - "dev": true - }, - "once": { - "version": "1.3.3", - "from": "once@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "dev": true - } - } - }, - "easy-extender": { - "version": "2.3.2", - "from": "easy-extender@2.3.2", - "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz", - "dev": true - }, - "eazy-logger": { - "version": "3.0.2", - "from": "eazy-logger@3.0.2", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "from": "ecc-jsbn@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "dev": true, - "optional": true - }, - "ee-first": { - "version": "1.1.1", - "from": "ee-first@1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "dev": true - }, - "elliptic": { - "version": "6.3.2", - "from": "elliptic@>=6.0.0 <7.0.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz", - "dev": true - }, - "emits": { - "version": "1.0.2", - "from": "emits@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/emits/-/emits-1.0.2.tgz", - "dev": true - }, - "emitter-steward": { - "version": "1.0.0", - "from": "emitter-steward@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/emitter-steward/-/emitter-steward-1.0.0.tgz", - "dev": true - }, - "enabled": { - "version": "1.0.2", - "from": "enabled@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "dev": true - }, - "encodeurl": { - "version": "1.0.1", - "from": "encodeurl@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "dev": true - }, - "end-of-stream": { - "version": "0.1.5", - "from": "end-of-stream@>=0.1.5 <0.2.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "dev": true, - "dependencies": { - "once": { - "version": "1.3.3", - "from": "once@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "dev": true - } - } - }, - "engine.io": { - "version": "1.8.0", - "from": "engine.io@1.8.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.0.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "2.3.3", - "from": "debug@2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "dev": true - } - } - }, - "engine.io-client": { - "version": "1.8.0", - "from": "engine.io-client@1.8.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.0.tgz", - "dev": true, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "from": "component-emitter@1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "dev": true - }, - "debug": { - "version": "2.3.3", - "from": "debug@2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "1.3.1", - "from": "engine.io-parser@1.3.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.1.tgz", - "dev": true, - "dependencies": { - "has-binary": { - "version": "0.1.6", - "from": "has-binary@0.1.6", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - } - } - }, - "entities": { - "version": "1.1.1", - "from": "entities@>=1.1.1 <1.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "dev": true - }, - "env-variable": { - "version": "0.0.3", - "from": "env-variable@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.3.tgz", - "dev": true - }, - "error-ex": { - "version": "1.3.0", - "from": "error-ex@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", - "dev": true - }, - "es5-ext": { - "version": "0.10.12", - "from": "es5-ext@>=0.10.8 <0.11.0", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", - "dev": true - }, - "es6-iterator": { - "version": "2.0.0", - "from": "es6-iterator@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", - "dev": true - }, - "es6-map": { - "version": "0.1.4", - "from": "es6-map@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.4.tgz", - "dev": true - }, - "es6-set": { - "version": "0.1.4", - "from": "es6-set@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.4.tgz", - "dev": true - }, - "es6-symbol": { - "version": "3.1.0", - "from": "es6-symbol@>=3.1.0 <3.2.0", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz", - "dev": true - }, - "es6-weak-map": { - "version": "0.1.4", - "from": "es6-weak-map@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.4.tgz", - "dev": true, - "dependencies": { - "es6-iterator": { - "version": "0.1.3", - "from": "es6-iterator@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.3.tgz", - "dev": true - }, - "es6-symbol": { - "version": "2.0.1", - "from": "es6-symbol@>=2.0.1 <2.1.0", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-2.0.1.tgz", - "dev": true - } - } - }, - "escape-html": { - "version": "1.0.3", - "from": "escape-html@>=1.0.3 <1.1.0", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "from": "escape-string-regexp@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "dev": true - }, - "escope": { - "version": "3.6.0", - "from": "escope@>=3.6.0 <4.0.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "dev": true, - "dependencies": { - "es6-weak-map": { - "version": "2.0.1", - "from": "es6-weak-map@>=2.0.1 <3.0.0", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.1.tgz", - "dev": true - } - } - }, - "eslint": { - "version": "2.13.1", - "from": "eslint@>=2.8.0 <3.0.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz", - "dev": true, - "dependencies": { - "glob": { - "version": "7.1.1", - "from": "glob@>=7.0.3 <8.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "dev": true - }, - "globals": { - "version": "9.14.0", - "from": "globals@>=9.2.0 <10.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.14.0.tgz", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "from": "json-stable-stringify@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "dev": true - }, - "lodash": { - "version": "4.17.2", - "from": "lodash@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.2.tgz", - "dev": true - }, - "minimatch": { - "version": "3.0.3", - "from": "minimatch@>=3.0.2 <4.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "dev": true - }, - "user-home": { - "version": "2.0.0", - "from": "user-home@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "dev": true - } - } - }, - "eslint-plugin-react": { - "version": "5.2.2", - "from": "eslint-plugin-react@>=5.0.1 <6.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", - "dev": true - }, - "espree": { - "version": "3.3.2", - "from": "espree@>=3.1.6 <4.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.3.2.tgz", - "dev": true, - "dependencies": { - "acorn": { - "version": "4.0.4", - "from": "acorn@>=4.0.1 <5.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.4.tgz", - "dev": true - } - } - }, - "esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "from": "esprima-fb@>=15001.1001.0-dev-harmony-fb <15001.1002.0", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "dev": true - }, - "esrecurse": { - "version": "4.1.0", - "from": "esrecurse@>=4.1.0 <5.0.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", - "dev": true, - "dependencies": { - "estraverse": { - "version": "4.1.1", - "from": "estraverse@>=4.1.0 <4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", - "dev": true - } - } - }, - "estraverse": { - "version": "4.2.0", - "from": "estraverse@>=4.2.0 <5.0.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "from": "esutils@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "dev": true - }, - "etag": { - "version": "1.7.0", - "from": "etag@>=1.7.0 <2.0.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "dev": true - }, - "event-emitter": { - "version": "0.3.4", - "from": "event-emitter@>=0.3.4 <0.4.0", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz", - "dev": true - }, - "eventemitter3": { - "version": "1.2.0", - "from": "eventemitter3@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "dev": true - }, - "events": { - "version": "1.0.2", - "from": "events@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-1.0.2.tgz", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.0", - "from": "evp_bytestokey@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", - "dev": true - }, - "exit-hook": { - "version": "1.1.1", - "from": "exit-hook@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "from": "expand-brackets@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "dev": true - }, - "expand-range": { - "version": "1.8.2", - "from": "expand-range@>=1.8.1 <2.0.0", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "dev": true - }, - "expand-tilde": { - "version": "1.2.2", - "from": "expand-tilde@>=1.2.2 <2.0.0", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "dev": true - }, - "express": { - "version": "2.5.11", - "from": "express@>=2.5.0 <2.6.0", - "resolved": "https://registry.npmjs.org/express/-/express-2.5.11.tgz", - "dev": true, - "dependencies": { - "connect": { - "version": "1.9.2", - "from": "connect@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-1.9.2.tgz", - "dev": true - }, - "mkdirp": { - "version": "0.3.0", - "from": "mkdirp@0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "dev": true - }, - "qs": { - "version": "0.4.2", - "from": "qs@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.4.2.tgz", - "dev": true - } - } - }, - "extend": { - "version": "3.0.0", - "from": "extend@>=3.0.0 <3.1.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "from": "extend-shallow@>=2.0.1 <3.0.0", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "dev": true - }, - "extendible": { - "version": "0.1.1", - "from": "extendible@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/extendible/-/extendible-0.1.1.tgz", - "dev": true - }, - "extglob": { - "version": "0.3.2", - "from": "extglob@>=0.3.1 <0.4.0", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "dev": true - }, - "extract-github": { - "version": "0.0.5", - "from": "extract-github@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/extract-github/-/extract-github-0.0.5.tgz", - "dev": true - }, - "extsprintf": { - "version": "1.0.2", - "from": "extsprintf@1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "dev": true - }, - "fancy-log": { - "version": "1.2.0", - "from": "fancy-log@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.2.0.tgz", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.5", - "from": "fast-levenshtein@>=2.0.4 <2.1.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz", - "dev": true - }, - "figures": { - "version": "1.7.0", - "from": "figures@>=1.3.5 <2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "dev": true - }, - "file-entry-cache": { - "version": "1.3.1", - "from": "file-entry-cache@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "dev": true - }, - "filename-regex": { - "version": "2.0.0", - "from": "filename-regex@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "from": "fill-range@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "dev": true - }, - "finalhandler": { - "version": "0.5.0", - "from": "finalhandler@0.5.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "2.2.0", - "from": "debug@>=2.2.0 <2.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "dev": true - }, - "ms": { - "version": "0.7.1", - "from": "ms@0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "dev": true - } - } - }, - "find-index": { - "version": "0.1.1", - "from": "find-index@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "from": "find-up@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "dev": true, - "dependencies": { - "path-exists": { - "version": "2.1.0", - "from": "path-exists@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "dev": true - } - } - }, - "findup-sync": { - "version": "0.4.3", - "from": "findup-sync@>=0.4.2 <0.5.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "dev": true - }, - "fined": { - "version": "1.0.2", - "from": "fined@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.0.2.tgz", - "dev": true - }, - "first-chunk-stream": { - "version": "1.0.0", - "from": "first-chunk-stream@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "dev": true - }, - "flagged-respawn": { - "version": "0.3.2", - "from": "flagged-respawn@>=0.3.2 <0.4.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "dev": true - }, - "flat-cache": { - "version": "1.2.2", - "from": "flat-cache@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "dev": true - }, - "for-in": { - "version": "0.1.6", - "from": "for-in@>=0.1.5 <0.2.0", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", - "dev": true - }, - "for-own": { - "version": "0.1.4", - "from": "for-own@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "from": "forever-agent@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "dev": true - }, - "fork-stream": { - "version": "0.0.4", - "from": "fork-stream@>=0.0.4 <0.1.0", - "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", - "dev": true - }, - "form-data": { - "version": "2.1.2", - "from": "form-data@>=2.1.1 <2.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", - "dev": true - }, - "formidable": { - "version": "1.0.17", - "from": "formidable@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz", - "dev": true - }, - "fresh": { - "version": "0.3.0", - "from": "fresh@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "dev": true - }, - "fs-exists-sync": { - "version": "0.1.0", - "from": "fs-exists-sync@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "dev": true - }, - "fs-extra": { - "version": "1.0.0", - "from": "fs-extra@1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "dev": true - }, - "fs-readdir-recursive": { - "version": "0.1.2", - "from": "fs-readdir-recursive@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "from": "fs.realpath@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "dev": true - }, - "fstream": { - "version": "1.0.10", - "from": "fstream@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz", - "dev": true - }, - "function-bind": { - "version": "1.1.0", - "from": "function-bind@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "dev": true - }, - "fusing": { - "version": "0.2.3", - "from": "fusing@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/fusing/-/fusing-0.2.3.tgz", - "dev": true - }, - "gauge": { - "version": "2.7.2", - "from": "gauge@>=2.7.1 <2.8.0", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.2.tgz", - "dev": true, - "dependencies": { - "supports-color": { - "version": "0.2.0", - "from": "supports-color@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "dev": true - } - } - }, - "gaze": { - "version": "0.5.2", - "from": "gaze@>=0.5.1 <0.6.0", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "dev": true - }, - "generate-function": { - "version": "2.0.0", - "from": "generate-function@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "from": "generate-object-property@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "dev": true - }, - "get-caller-file": { - "version": "1.0.2", - "from": "get-caller-file@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "from": "get-stdin@>=4.0.1 <5.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "dev": true - }, - "getpass": { - "version": "0.1.6", - "from": "getpass@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", - "dev": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "dev": true - } - } - }, - "githulk": { - "version": "0.0.7", - "from": "githulk@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/githulk/-/githulk-0.0.7.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "0.7.4", - "from": "debug@>=0.7.0 <0.8.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "dev": true - } - } - }, - "glob": { - "version": "5.0.15", - "from": "glob@>=5.0.15 <6.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "dev": true - }, - "glob-base": { - "version": "0.3.0", - "from": "glob-base@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "dev": true - }, - "glob-parent": { - "version": "2.0.0", - "from": "glob-parent@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "dev": true - }, - "glob-stream": { - "version": "3.1.18", - "from": "glob-stream@>=3.1.5 <4.0.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "dev": true, - "dependencies": { - "glob": { - "version": "4.5.3", - "from": "glob@>=4.3.1 <5.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.33-1 <1.1.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - }, - "through2": { - "version": "0.6.5", - "from": "through2@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "dev": true - } - } - }, - "glob-watcher": { - "version": "0.0.6", - "from": "glob-watcher@>=0.0.6 <0.0.7", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "dev": true - }, - "glob2base": { - "version": "0.0.12", - "from": "glob2base@>=0.0.12 <0.0.13", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "dev": true - }, - "global-modules": { - "version": "0.2.3", - "from": "global-modules@>=0.2.3 <0.3.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "dev": true - }, - "global-prefix": { - "version": "0.1.5", - "from": "global-prefix@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "dev": true - }, - "globals": { - "version": "6.4.1", - "from": "globals@>=6.4.0 <7.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", - "dev": true - }, - "globby": { - "version": "5.0.0", - "from": "globby@>=5.0.0 <6.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "dev": true, - "dependencies": { - "glob": { - "version": "7.1.1", - "from": "glob@>=7.0.3 <8.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "dev": true - }, - "minimatch": { - "version": "3.0.3", - "from": "minimatch@>=3.0.2 <4.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "dev": true - } - } - }, - "globule": { - "version": "0.1.0", - "from": "globule@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "dev": true, - "dependencies": { - "glob": { - "version": "3.1.21", - "from": "glob@>=3.1.21 <3.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "dev": true - }, - "graceful-fs": { - "version": "1.2.3", - "from": "graceful-fs@>=1.2.0 <1.3.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "from": "inherits@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "from": "lodash@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "from": "minimatch@>=0.2.11 <0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dev": true - } - } - }, - "glogg": { - "version": "1.0.0", - "from": "glogg@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "dev": true - }, - "graceful-fs": { - "version": "4.1.11", - "from": "graceful-fs@>=4.1.4 <5.0.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "from": "graceful-readlink@>=1.0.0", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "dev": true - }, - "growly": { - "version": "1.3.0", - "from": "growly@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "dev": true - }, - "gulp": { - "version": "3.9.1", - "from": "gulp@>=3.9.1 <4.0.0", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "dev": true, - "dependencies": { - "semver": { - "version": "4.3.6", - "from": "semver@>=4.1.0 <5.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "dev": true - } - } - }, - "gulp-autoprefixer": { - "version": "3.1.1", - "from": "gulp-autoprefixer@>=3.1.0 <4.0.0", - "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-3.1.1.tgz", - "dev": true - }, - "gulp-cached": { - "version": "1.1.1", - "from": "gulp-cached@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-cached/-/gulp-cached-1.1.1.tgz", - "dev": true - }, - "gulp-concat": { - "version": "2.6.1", - "from": "gulp-concat@>=2.5.2 <3.0.0", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "dev": true, - "dependencies": { - "clone-stats": { - "version": "1.0.0", - "from": "clone-stats@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "from": "replace-ext@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "dev": true - }, - "vinyl": { - "version": "2.0.1", - "from": "vinyl@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.1.tgz", - "dev": true - } - } - }, - "gulp-debug": { - "version": "2.1.2", - "from": "gulp-debug@>=2.1.2 <3.0.0", - "resolved": "https://registry.npmjs.org/gulp-debug/-/gulp-debug-2.1.2.tgz", - "dev": true - }, - "gulp-environments": { - "version": "0.1.1", - "from": "gulp-environments@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/gulp-environments/-/gulp-environments-0.1.1.tgz", - "dev": true, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "from": "camelcase@>=2.0.1 <3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "from": "cliui@>=3.0.3 <4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "dev": true - }, - "yargs": { - "version": "3.32.0", - "from": "yargs@>=3.15.0 <4.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "dev": true - } - } - }, - "gulp-filter": { - "version": "3.0.1", - "from": "gulp-filter@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-3.0.1.tgz", - "dev": true - }, - "gulp-header": { - "version": "1.8.8", - "from": "gulp-header@>=1.2.2 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.8.tgz", - "dev": true - }, - "gulp-if": { - "version": "1.2.5", - "from": "gulp-if@>=1.2.5 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-1.2.5.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.33-1 <1.1.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - }, - "through2": { - "version": "0.6.5", - "from": "through2@>=0.6.2 <0.7.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "dev": true - } - } - }, - "gulp-match": { - "version": "0.2.1", - "from": "gulp-match@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-0.2.1.tgz", - "dev": true, - "dependencies": { - "minimatch": { - "version": "1.0.0", - "from": "minimatch@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", - "dev": true - } - } - }, - "gulp-notify": { - "version": "2.2.0", - "from": "gulp-notify@>=2.2.0 <3.0.0", - "resolved": "https://registry.npmjs.org/gulp-notify/-/gulp-notify-2.2.0.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.33-1 <1.1.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - }, - "through2": { - "version": "0.6.5", - "from": "through2@>=0.6.3 <0.7.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "dev": true - } - } - }, - "gulp-pixrem": { - "version": "1.0.0", - "from": "gulp-pixrem@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-pixrem/-/gulp-pixrem-1.0.0.tgz", - "dev": true, - "dependencies": { - "source-map": { - "version": "0.1.43", - "from": "source-map@>=0.1.39 <0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "dev": true - }, - "vinyl-sourcemaps-apply": { - "version": "0.1.4", - "from": "vinyl-sourcemaps-apply@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.1.4.tgz", - "dev": true - } - } - }, - "gulp-plumber": { - "version": "1.1.0", - "from": "gulp-plumber@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.1.0.tgz", - "dev": true - }, - "gulp-rename": { - "version": "1.2.2", - "from": "gulp-rename@>=1.2.2 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "dev": true - }, - "gulp-run": { - "version": "1.7.1", - "from": "gulp-run@>=1.7.1 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-run/-/gulp-run-1.7.1.tgz", - "dev": true, - "dependencies": { - "clone": { - "version": "0.2.0", - "from": "clone@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "dev": true - }, - "lodash.template": { - "version": "4.4.0", - "from": "lodash.template@>=4.0.2 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "dev": true - }, - "lodash.templatesettings": { - "version": "4.1.0", - "from": "lodash.templatesettings@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "from": "vinyl@>=0.4.6 <0.5.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "dev": true - } - } - }, - "gulp-sass": { - "version": "3.1.0", - "from": "gulp-sass@latest", - "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.1.0.tgz", - "dev": true, - "dependencies": { - "lodash.clonedeep": { - "version": "4.5.0", - "from": "lodash.clonedeep@>=4.3.2 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "dev": true - } - } - }, - "gulp-sourcemaps": { - "version": "1.9.1", - "from": "gulp-sourcemaps@>=1.5.2 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.9.1.tgz", - "dev": true, - "dependencies": { - "acorn": { - "version": "4.0.4", - "from": "acorn@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.4.tgz", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "from": "vinyl@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "dev": true - } - } - }, - "gulp-svgmin": { - "version": "1.2.3", - "from": "gulp-svgmin@>=1.1.2 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-svgmin/-/gulp-svgmin-1.2.3.tgz", - "dev": true - }, - "gulp-svgstore": { - "version": "5.0.5", - "from": "gulp-svgstore@>=5.0.5 <6.0.0", - "resolved": "https://registry.npmjs.org/gulp-svgstore/-/gulp-svgstore-5.0.5.tgz", - "dev": true - }, - "gulp-uglify": { - "version": "1.5.4", - "from": "gulp-uglify@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz", - "dev": true - }, - "gulp-util": { - "version": "3.0.7", - "from": "gulp-util@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", - "dev": true, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "from": "object-assign@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "dev": true - } - } - }, - "gulp-watch": { - "version": "4.3.11", - "from": "gulp-watch@>=4.3.4 <5.0.0", - "resolved": "https://registry.npmjs.org/gulp-watch/-/gulp-watch-4.3.11.tgz", - "dev": true, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "from": "glob-parent@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "from": "is-extglob@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "from": "is-glob@>=3.1.0 <4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "from": "vinyl@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "dev": true - } - } - }, - "gulplog": { - "version": "1.0.0", - "from": "gulplog@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "dev": true - }, - "har-validator": { - "version": "2.0.6", - "from": "har-validator@>=2.0.6 <2.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "dev": true - }, - "has": { - "version": "1.0.1", - "from": "has@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "from": "has-ansi@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "dev": true - }, - "has-binary": { - "version": "0.1.7", - "from": "has-binary@0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "from": "has-cors@1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "from": "has-flag@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "from": "has-gulplog@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "from": "has-unicode@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "dev": true - }, - "hash.js": { - "version": "1.0.3", - "from": "hash.js@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz", - "dev": true - }, - "hawk": { - "version": "3.1.3", - "from": "hawk@>=3.1.3 <3.2.0", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "dev": true - }, - "hoek": { - "version": "2.16.3", - "from": "hoek@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "dev": true - }, - "home-or-tmp": { - "version": "1.0.0", - "from": "home-or-tmp@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.1", - "from": "homedir-polyfill@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "dev": true - }, - "hosted-git-info": { - "version": "2.1.5", - "from": "hosted-git-info@>=2.1.4 <3.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", - "dev": true - }, - "htmlescape": { - "version": "1.1.1", - "from": "htmlescape@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "dev": true - }, - "htmlparser2": { - "version": "3.8.3", - "from": "htmlparser2@>=3.8.1 <3.9.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "dev": true, - "dependencies": { - "domutils": { - "version": "1.5.1", - "from": "domutils@>=1.5.0 <1.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "dev": true - }, - "entities": { - "version": "1.0.0", - "from": "entities@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - } - } - }, - "http-browserify": { - "version": "1.7.0", - "from": "http-browserify@>=1.4.0 <2.0.0", - "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.7.0.tgz", - "dev": true - }, - "http-errors": { - "version": "1.5.1", - "from": "http-errors@>=1.5.0 <1.6.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", - "dev": true - }, - "http-proxy": { - "version": "1.15.2", - "from": "http-proxy@1.15.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "from": "http-signature@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "dev": true - }, - "https-browserify": { - "version": "0.0.1", - "from": "https-browserify@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "dev": true - }, - "iconv-lite": { - "version": "0.4.15", - "from": "iconv-lite@>=0.4.5 <0.5.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "dev": true - }, - "ieee754": { - "version": "1.1.8", - "from": "ieee754@>=1.1.4 <2.0.0", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "dev": true - }, - "ignore": { - "version": "3.2.0", - "from": "ignore@>=3.1.2 <4.0.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.2.0.tgz", - "dev": true - }, - "immutable": { - "version": "3.8.1", - "from": "immutable@3.8.1", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.1.tgz", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "from": "imurmurhash@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "from": "in-publish@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "from": "indent-string@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "dev": true, - "dependencies": { - "repeating": { - "version": "2.0.1", - "from": "repeating@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "dev": true - } - } - }, - "indexof": { - "version": "0.0.1", - "from": "indexof@0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "dev": true - }, - "ini": { - "version": "1.3.4", - "from": "ini@>=1.3.4 <2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "dev": true - }, - "inline-source-map": { - "version": "0.5.0", - "from": "inline-source-map@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz", - "dev": true, - "dependencies": { - "source-map": { - "version": "0.4.4", - "from": "source-map@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "dev": true - } - } - }, - "inquirer": { - "version": "0.12.0", - "from": "inquirer@>=0.12.0 <0.13.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "dev": true, - "dependencies": { - "lodash": { - "version": "4.17.2", - "from": "lodash@>=4.3.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.2.tgz", - "dev": true - } - } - }, - "insert-module-globals": { - "version": "6.6.3", - "from": "insert-module-globals@>=6.4.1 <7.0.0", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-6.6.3.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.13-1 <1.2.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - }, - "through2": { - "version": "1.1.1", - "from": "through2@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "dev": true - } - } - }, - "interpret": { - "version": "1.0.1", - "from": "interpret@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "from": "invert-kv@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "dev": true - }, - "irregular-plurals": { - "version": "1.2.0", - "from": "irregular-plurals@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.2.0.tgz", - "dev": true - }, - "is": { - "version": "3.2.0", - "from": "is@>=3.1.0 <4.0.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.2.0.tgz", - "dev": true - }, - "is-absolute": { - "version": "0.2.6", - "from": "is-absolute@>=0.2.3 <0.3.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "from": "is-arrayish@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "from": "is-binary-path@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "dev": true - }, - "is-buffer": { - "version": "1.1.4", - "from": "is-buffer@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "from": "is-builtin-module@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "dev": true - }, - "is-dotfile": { - "version": "1.0.2", - "from": "is-dotfile@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "from": "is-equal-shallow@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "from": "is-extendable@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "from": "is-extglob@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "from": "is-finite@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "from": "is-fullwidth-code-point@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "from": "is-glob@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "dev": true - }, - "is-integer": { - "version": "1.0.6", - "from": "is-integer@>=1.0.4 <2.0.0", - "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.6.tgz", - "dev": true - }, - "is-my-json-valid": { - "version": "2.15.0", - "from": "is-my-json-valid@>=2.12.4 <3.0.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "from": "is-number@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "dev": true - }, - "is-number-like": { - "version": "1.0.7", - "from": "is-number-like@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.7.tgz", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "from": "is-path-cwd@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "from": "is-path-in-cwd@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "dev": true - }, - "is-path-inside": { - "version": "1.0.0", - "from": "is-path-inside@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "from": "is-plain-obj@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "dev": true - }, - "is-posix-bracket": { - "version": "0.1.1", - "from": "is-posix-bracket@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "from": "is-primitive@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "from": "is-property@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "dev": true - }, - "is-regexp": { - "version": "1.0.0", - "from": "is-regexp@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "dev": true - }, - "is-relative": { - "version": "0.2.1", - "from": "is-relative@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "dev": true - }, - "is-resolvable": { - "version": "1.0.0", - "from": "is-resolvable@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "from": "is-stream@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "from": "is-typedarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "dev": true - }, - "is-unc-path": { - "version": "0.1.2", - "from": "is-unc-path@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "from": "is-utf8@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "dev": true - }, - "is-valid-glob": { - "version": "0.3.0", - "from": "is-valid-glob@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "dev": true - }, - "is-windows": { - "version": "0.2.0", - "from": "is-windows@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "from": "isarray@1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "dev": true - }, - "isexe": { - "version": "1.1.2", - "from": "isexe@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "from": "isobject@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "from": "isstream@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "dev": true - }, - "jodid25519": { - "version": "1.0.2", - "from": "jodid25519@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "dev": true, - "optional": true - }, - "js-base64": { - "version": "2.1.9", - "from": "js-base64@>=2.1.9 <3.0.0", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", - "dev": true - }, - "js-tokens": { - "version": "1.0.1", - "from": "js-tokens@1.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", - "dev": true - }, - "js-yaml": { - "version": "3.7.0", - "from": "js-yaml@>=3.5.1 <4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "dev": true, - "dependencies": { - "esprima": { - "version": "2.7.3", - "from": "esprima@>=2.6.0 <3.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "dev": true - } - } - }, - "jsbn": { - "version": "0.1.0", - "from": "jsbn@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", - "dev": true, - "optional": true - }, - "jsesc": { - "version": "0.5.0", - "from": "jsesc@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "dev": true - }, - "json-align": { - "version": "0.1.0", - "from": "json-align@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/json-align/-/json-align-0.1.0.tgz", - "dev": true, - "dependencies": { - "commander": { - "version": "2.0.0", - "from": "commander@>=2.0.0 <2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz", - "dev": true - } - } - }, - "json-schema": { - "version": "0.2.3", - "from": "json-schema@0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "dev": true - }, - "json-stable-stringify": { - "version": "0.0.1", - "from": "json-stable-stringify@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "from": "json-stringify-safe@>=5.0.1 <5.1.0", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "dev": true - }, - "json3": { - "version": "3.3.2", - "from": "json3@3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "dev": true - }, - "json5": { - "version": "0.4.0", - "from": "json5@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", - "dev": true - }, - "jsonfile": { - "version": "2.4.0", - "from": "jsonfile@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "from": "jsonify@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "dev": true - }, - "jsonparse": { - "version": "1.2.0", - "from": "jsonparse@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "from": "jsonpointer@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "dev": true - }, - "JSONStream": { - "version": "1.3.0", - "from": "JSONStream@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.0.tgz", - "dev": true - }, - "jsprim": { - "version": "1.3.1", - "from": "jsprim@>=1.2.2 <2.0.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", - "dev": true - }, - "jsx-ast-utils": { - "version": "1.3.5", - "from": "jsx-ast-utils@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.3.5.tgz", - "dev": true - }, - "kind-of": { - "version": "3.1.0", - "from": "kind-of@>=3.0.2 <4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", - "dev": true - }, - "klaw": { - "version": "1.3.1", - "from": "klaw@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "dev": true - }, - "kuler": { - "version": "0.0.0", - "from": "kuler@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-0.0.0.tgz", - "dev": true - }, - "labeled-stream-splicer": { - "version": "1.0.2", - "from": "labeled-stream-splicer@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@>=0.0.1 <0.1.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - } - } - }, - "lazy-cache": { - "version": "1.0.4", - "from": "lazy-cache@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "dev": true - }, - "lazy-debug-legacy": { - "version": "0.0.1", - "from": "lazy-debug-legacy@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "from": "lazystream@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "from": "lcid@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "dev": true - }, - "leven": { - "version": "1.0.2", - "from": "leven@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", - "dev": true - }, - "levn": { - "version": "0.3.0", - "from": "levn@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "dev": true - }, - "lexical-scope": { - "version": "1.2.0", - "from": "lexical-scope@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "dev": true - }, - "licenses": { - "version": "0.0.20", - "from": "licenses@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/licenses/-/licenses-0.0.20.tgz", - "dev": true, - "dependencies": { - "async": { - "version": "0.6.2", - "from": "async@>=0.6.0 <0.7.0", - "resolved": "https://registry.npmjs.org/async/-/async-0.6.2.tgz", - "dev": true - }, - "debug": { - "version": "0.8.1", - "from": "debug@0.8.x", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", - "dev": true - } - } - }, - "liftoff": { - "version": "2.3.0", - "from": "liftoff@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "dev": true - }, - "limiter": { - "version": "1.1.0", - "from": "limiter@>=1.0.5 <2.0.0", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.0.tgz", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "from": "load-json-file@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "dev": true - }, - "localtunnel": { - "version": "1.8.2", - "from": "localtunnel@1.8.2", - "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.8.2.tgz", - "dev": true, - "dependencies": { - "cliui": { - "version": "3.2.0", - "from": "cliui@>=3.0.3 <4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "dev": true - }, - "debug": { - "version": "2.2.0", - "from": "debug@2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "dev": true - }, - "ms": { - "version": "0.7.1", - "from": "ms@0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "dev": true - }, - "yargs": { - "version": "3.29.0", - "from": "yargs@3.29.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.29.0.tgz", - "dev": true - } - } - }, - "lodash": { - "version": "3.10.1", - "from": "lodash@>=3.10.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "dev": true - }, - "lodash._arraycopy": { - "version": "3.0.0", - "from": "lodash._arraycopy@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "dev": true - }, - "lodash._arrayeach": { - "version": "3.0.0", - "from": "lodash._arrayeach@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "from": "lodash._baseassign@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "dev": true - }, - "lodash._baseclone": { - "version": "3.3.0", - "from": "lodash._baseclone@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", - "dev": true - }, - "lodash._basecopy": { - "version": "3.0.1", - "from": "lodash._basecopy@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "dev": true - }, - "lodash._basefor": { - "version": "3.0.3", - "from": "lodash._basefor@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "from": "lodash._basetostring@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "from": "lodash._basevalues@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "dev": true - }, - "lodash._bindcallback": { - "version": "3.0.1", - "from": "lodash._bindcallback@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "from": "lodash._getnative@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "from": "lodash._isiterateecall@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "from": "lodash._reescape@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "from": "lodash._reevaluate@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "from": "lodash._reinterpolate@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "from": "lodash._root@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "from": "lodash.assign@>=4.2.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "dev": true - }, - "lodash.assignwith": { - "version": "4.2.0", - "from": "lodash.assignwith@>=4.0.7 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "dev": true - }, - "lodash.clonedeep": { - "version": "3.0.2", - "from": "lodash.clonedeep@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "from": "lodash.defaults@>=4.2.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "from": "lodash.escape@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "dev": true - }, - "lodash.indexof": { - "version": "4.0.5", - "from": "lodash.indexof@>=4.0.5 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.indexof/-/lodash.indexof-4.0.5.tgz", - "dev": true - }, - "lodash.isarguments": { - "version": "3.1.0", - "from": "lodash.isarguments@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "from": "lodash.isarray@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "dev": true - }, - "lodash.isempty": { - "version": "4.4.0", - "from": "lodash.isempty@>=4.2.1 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "dev": true - }, - "lodash.isequal": { - "version": "4.4.0", - "from": "lodash.isequal@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.4.0.tgz", - "dev": true - }, - "lodash.isfinite": { - "version": "3.3.2", - "from": "lodash.isfinite@>=3.3.2 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "from": "lodash.isplainobject@>=4.0.4 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "from": "lodash.isstring@>=4.0.1 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "from": "lodash.keys@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "dev": true - }, - "lodash.mapvalues": { - "version": "4.6.0", - "from": "lodash.mapvalues@>=4.4.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "dev": true - }, - "lodash.memoize": { - "version": "3.0.4", - "from": "lodash.memoize@>=3.0.3 <3.1.0", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.0", - "from": "lodash.mergewith@>=4.6.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", - "dev": true - }, - "lodash.pick": { - "version": "4.4.0", - "from": "lodash.pick@>=4.2.1 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "from": "lodash.restparam@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "from": "lodash.template@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "dev": true - }, - "lodash.templatesettings": { - "version": "3.1.1", - "from": "lodash.templatesettings@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "dev": true - }, - "longest": { - "version": "1.0.1", - "from": "longest@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "dev": true - }, - "loud-rejection": { - "version": "1.6.0", - "from": "loud-rejection@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "from": "lru-cache@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "dev": true - }, - "lru-queue": { - "version": "0.1.0", - "from": "lru-queue@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "dev": true - }, - "magic-string": { - "version": "0.14.0", - "from": "magic-string@>=0.14.0 <0.15.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.14.0.tgz", - "dev": true - }, - "main-bower-files": { - "version": "2.13.1", - "from": "main-bower-files@>=2.7.0 <3.0.0", - "resolved": "https://registry.npmjs.org/main-bower-files/-/main-bower-files-2.13.1.tgz", - "dev": true, - "dependencies": { - "extend": { - "version": "2.0.1", - "from": "extend@>=2.0.1 <3.0.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.1.tgz", - "dev": true - }, - "glob-parent": { - "version": "3.1.0", - "from": "glob-parent@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "dev": true - }, - "glob-stream": { - "version": "5.3.5", - "from": "glob-stream@>=5.3.2 <6.0.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "dev": true, - "dependencies": { - "extend": { - "version": "3.0.0", - "from": "extend@>=3.0.0 <4.0.0", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.33-1 <1.1.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - }, - "through2": { - "version": "0.6.5", - "from": "through2@>=0.6.0 <0.7.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "dev": true - } - } - }, - "globby": { - "version": "2.1.0", - "from": "globby@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-2.1.0.tgz", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "from": "gulp-sourcemaps@1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "from": "is-extglob@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "from": "is-glob@>=3.1.0 <4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "from": "json-stable-stringify@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "from": "object-assign@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "from": "ordered-read-streams@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "dev": true - }, - "strip-bom-stream": { - "version": "1.0.0", - "from": "strip-bom-stream@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "dev": true - }, - "unique-stream": { - "version": "2.2.1", - "from": "unique-stream@>=2.0.2 <3.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "from": "vinyl@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "dev": true - }, - "vinyl-fs": { - "version": "2.4.4", - "from": "vinyl-fs@>=2.4.3 <3.0.0", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "dev": true, - "dependencies": { - "object-assign": { - "version": "4.1.0", - "from": "object-assign@>=4.0.0 <5.0.0", - "dev": true - } - } - } - } - }, - "mana": { - "version": "0.1.41", - "from": "mana@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/mana/-/mana-0.1.41.tgz", - "dev": true, - "dependencies": { - "emits": { - "version": "3.0.0", - "from": "emits@>=3.0.0 <3.1.0", - "resolved": "https://registry.npmjs.org/emits/-/emits-3.0.0.tgz", - "dev": true - }, - "fusing": { - "version": "1.0.0", - "from": "fusing@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/fusing/-/fusing-1.0.0.tgz", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "from": "map-cache@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "from": "map-obj@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "dev": true - }, - "marked": { - "version": "0.3.6", - "from": "marked@>=0.3.6 <0.4.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", - "dev": true - }, - "marked-terminal": { - "version": "1.7.0", - "from": "marked-terminal@>=1.6.2 <2.0.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-1.7.0.tgz", - "dev": true - }, - "math-expression-evaluator": { - "version": "1.2.14", - "from": "math-expression-evaluator@>=1.2.14 <2.0.0", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.14.tgz", - "dev": true - }, - "memoizee": { - "version": "0.3.10", - "from": "memoizee@>=0.3.9 <0.4.0", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.3.10.tgz", - "dev": true - }, - "meow": { - "version": "3.7.0", - "from": "meow@>=3.3.0 <4.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "dev": true - }, - "merge-stream": { - "version": "1.0.1", - "from": "merge-stream@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "from": "micromatch@2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "dev": true - }, - "miller-rabin": { - "version": "4.0.0", - "from": "miller-rabin@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", - "dev": true - }, - "millisecond": { - "version": "0.1.2", - "from": "millisecond@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/millisecond/-/millisecond-0.1.2.tgz", - "dev": true - }, - "mime": { - "version": "1.2.4", - "from": "mime@1.2.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.4.tgz", - "dev": true - }, - "mime-db": { - "version": "1.25.0", - "from": "mime-db@>=1.25.0 <1.26.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", - "dev": true - }, - "mime-types": { - "version": "2.1.13", - "from": "mime-types@>=2.1.7 <2.2.0", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.0", - "from": "minimalistic-assert@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "from": "minimatch@>=2.0.3 <3.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "from": "minimist@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "from": "mkdirp@>=0.5.1 <0.6.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "dev": true, - "dependencies": { - "minimist": { - "version": "0.0.8", - "from": "minimist@0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "dev": true - } - } - }, - "module-deps": { - "version": "3.9.1", - "from": "module-deps@>=3.7.11 <4.0.0", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-3.9.1.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.13 <2.0.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - }, - "through2": { - "version": "1.1.1", - "from": "through2@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "dev": true - } - } - }, - "ms": { - "version": "0.7.2", - "from": "ms@0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "dev": true - }, - "multimatch": { - "version": "2.1.0", - "from": "multimatch@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "dev": true, - "dependencies": { - "minimatch": { - "version": "3.0.3", - "from": "minimatch@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "dev": true - } - } - }, - "multipipe": { - "version": "0.1.2", - "from": "multipipe@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "dev": true - }, - "mute-stream": { - "version": "0.0.5", - "from": "mute-stream@0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "dev": true - }, - "nan": { - "version": "2.5.0", - "from": "nan@>=2.3.2 <3.0.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.5.0.tgz", - "dev": true - }, - "natives": { - "version": "1.1.0", - "from": "natives@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "from": "negotiator@0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "dev": true - }, - "next-tick": { - "version": "0.2.2", - "from": "next-tick@>=0.2.2 <0.3.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", - "dev": true - }, - "node-bourbon": { - "version": "4.2.8", - "from": "node-bourbon@>=4.2.8 <5.0.0", - "resolved": "https://registry.npmjs.org/node-bourbon/-/node-bourbon-4.2.8.tgz", - "dev": true - }, - "node-emoji": { - "version": "1.4.3", - "from": "node-emoji@>=1.4.1 <2.0.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.4.3.tgz", - "dev": true - }, - "node-gyp": { - "version": "3.5.0", - "from": "node-gyp@>=3.3.1 <4.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.5.0.tgz", - "dev": true, - "dependencies": { - "glob": { - "version": "7.1.1", - "from": "glob@^7.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "dev": true - }, - "minimatch": { - "version": "3.0.3", - "from": "minimatch@^3.0.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "dev": true - } - } - }, - "node-neat": { - "version": "1.7.2", - "from": "node-neat@>=1.7.2 <2.0.0", - "resolved": "https://registry.npmjs.org/node-neat/-/node-neat-1.7.2.tgz", - "dev": true - }, - "node-normalize-scss": { - "version": "1.4.0", - "from": "node-normalize-scss@>=1.3.2 <2.0.0", - "resolved": "https://registry.npmjs.org/node-normalize-scss/-/node-normalize-scss-1.4.0.tgz", - "dev": true - }, - "node-notifier": { - "version": "4.6.1", - "from": "node-notifier@>=4.1.0 <5.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz", - "dev": true - }, - "node-sass": { - "version": "4.2.0", - "from": "node-sass@>=4.2.0 <5.0.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.2.0.tgz", - "dev": true, - "dependencies": { - "gaze": { - "version": "1.1.2", - "from": "gaze@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "dev": true - }, - "glob": { - "version": "7.1.1", - "from": "glob@>=7.0.3 <8.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "dev": true - }, - "globule": { - "version": "1.1.0", - "from": "globule@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.1.0.tgz", - "dev": true - }, - "lodash": { - "version": "4.16.6", - "from": "lodash@>=4.16.4 <4.17.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.6.tgz", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "from": "lodash.clonedeep@^4.3.2", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "dev": true - }, - "minimatch": { - "version": "3.0.3", - "from": "minimatch@>=3.0.2 <3.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "dev": true - } - } - }, - "node-uuid": { - "version": "1.4.7", - "from": "node-uuid@>=1.4.7 <1.5.0", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "dev": true - }, - "node.extend": { - "version": "1.1.6", - "from": "node.extend@>=1.1.3 <2.0.0", - "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", - "dev": true - }, - "nopt": { - "version": "3.0.6", - "from": "nopt@>=3.0.0 <3.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "dev": true - }, - "normalize-package-data": { - "version": "2.3.5", - "from": "normalize-package-data@>=2.3.2 <3.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "dev": true - }, - "normalize-path": { - "version": "2.0.1", - "from": "normalize-path@>=2.0.1 <3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "from": "normalize-range@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "dev": true - }, - "npm-registry": { - "version": "0.1.13", - "from": "npm-registry@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/npm-registry/-/npm-registry-0.1.13.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "0.8.1", - "from": "debug@0.8.x", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", - "dev": true - }, - "semver": { - "version": "2.2.1", - "from": "semver@>=2.2.0 <2.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.2.1.tgz", - "dev": true - } - } - }, - "npmlog": { - "version": "4.0.2", - "from": "npmlog@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.0.2.tgz", - "dev": true - }, - "nth-check": { - "version": "1.0.1", - "from": "nth-check@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "dev": true - }, - "num2fraction": { - "version": "1.2.2", - "from": "num2fraction@>=1.2.2 <2.0.0", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "from": "number-is-nan@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "from": "oauth-sign@>=0.8.1 <0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "from": "object-assign@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "from": "object-component@0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "dev": true - }, - "object-path": { - "version": "0.9.2", - "from": "object-path@>=0.9.0 <0.10.0", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", - "dev": true - }, - "object.omit": { - "version": "2.0.1", - "from": "object.omit@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "from": "on-finished@>=2.3.0 <2.4.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "dev": true - }, - "once": { - "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "dev": true - }, - "onetime": { - "version": "1.1.0", - "from": "onetime@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "dev": true - }, - "openurl": { - "version": "1.1.0", - "from": "openurl@1.1.0", - "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.0.tgz", - "dev": true - }, - "opn": { - "version": "4.0.2", - "from": "opn@4.0.2", - "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "dev": true - }, - "optionator": { - "version": "0.8.2", - "from": "optionator@>=0.8.1 <0.9.0", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "dev": true, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "from": "wordwrap@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "dev": true - } - } - }, - "options": { - "version": "0.0.6", - "from": "options@>=0.0.5", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "dev": true - }, - "orchestrator": { - "version": "0.3.8", - "from": "orchestrator@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "dev": true - }, - "ordered-read-streams": { - "version": "0.1.0", - "from": "ordered-read-streams@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "dev": true - }, - "os-browserify": { - "version": "0.1.2", - "from": "os-browserify@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "from": "os-homedir@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "from": "os-locale@>=1.4.0 <2.0.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "from": "os-tmpdir@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "dev": true - }, - "osenv": { - "version": "0.1.4", - "from": "osenv@>=0.0.0 <1.0.0", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "dev": true - }, - "output-file-sync": { - "version": "1.1.2", - "from": "output-file-sync@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "dev": true - }, - "pako": { - "version": "0.2.9", - "from": "pako@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "dev": true - }, - "parents": { - "version": "1.0.1", - "from": "parents@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "dev": true - }, - "parse-asn1": { - "version": "5.0.0", - "from": "parse-asn1@>=5.0.0 <6.0.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.0.0.tgz", - "dev": true - }, - "parse-filepath": { - "version": "1.0.1", - "from": "parse-filepath@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "dev": true - }, - "parse-glob": { - "version": "3.0.4", - "from": "parse-glob@>=3.0.4 <4.0.0", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "from": "parse-json@>=2.2.0 <3.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "from": "parse-passwd@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "dev": true - }, - "parsejson": { - "version": "0.0.3", - "from": "parsejson@0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "dev": true - }, - "parseqs": { - "version": "0.0.5", - "from": "parseqs@0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "dev": true - }, - "parseuri": { - "version": "0.0.5", - "from": "parseuri@0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "dev": true - }, - "parseurl": { - "version": "1.3.1", - "from": "parseurl@>=1.3.1 <1.4.0", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "from": "path-browserify@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "from": "path-dirname@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "dev": true - }, - "path-exists": { - "version": "1.0.0", - "from": "path-exists@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "from": "path-is-inside@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "dev": true - }, - "path-platform": { - "version": "0.11.15", - "from": "path-platform@>=0.11.15 <0.12.0", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "from": "path-root@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "dev": true - }, - "path-root-regex": { - "version": "0.1.2", - "from": "path-root-regex@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "from": "path-type@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "dev": true - }, - "pbkdf2": { - "version": "3.0.9", - "from": "pbkdf2@>=3.0.3 <4.0.0", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.9.tgz", - "dev": true - }, - "pify": { - "version": "2.3.0", - "from": "pify@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "from": "pinkie@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "from": "pinkie-promise@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "dev": true - }, - "pixrem": { - "version": "3.0.2", - "from": "pixrem@>=3.0.0 <3.1.0", - "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-3.0.2.tgz", - "dev": true - }, - "plur": { - "version": "2.1.2", - "from": "plur@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", - "dev": true - }, - "pluralize": { - "version": "1.2.1", - "from": "pluralize@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "dev": true - }, - "portscanner": { - "version": "2.1.1", - "from": "portscanner@2.1.1", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", - "dev": true - }, - "postcss": { - "version": "5.2.6", - "from": "postcss@>=5.0.4 <6.0.0", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.6.tgz", - "dev": true, - "dependencies": { - "supports-color": { - "version": "3.1.2", - "from": "supports-color@>=3.1.2 <4.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "dev": true - } - } - }, - "postcss-value-parser": { - "version": "3.3.0", - "from": "postcss-value-parser@>=3.2.3 <4.0.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "dev": true - }, - "predefine": { - "version": "0.1.2", - "from": "predefine@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/predefine/-/predefine-0.1.2.tgz", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "from": "prelude-ls@>=1.1.2 <1.2.0", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "from": "preserve@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "from": "pretty-hrtime@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "dev": true - }, - "private": { - "version": "0.1.6", - "from": "private@>=0.1.6 <0.2.0", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", - "dev": true - }, - "process": { - "version": "0.11.9", - "from": "process@>=0.11.0 <0.12.0", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.9.tgz", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "dev": true - }, - "progress": { - "version": "1.1.8", - "from": "progress@>=1.1.8 <2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "from": "pseudomap@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "dev": true - }, - "public-encrypt": { - "version": "4.0.0", - "from": "public-encrypt@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "from": "punycode@>=1.4.1 <2.0.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "dev": true - }, - "q": { - "version": "1.4.1", - "from": "q@>=1.1.2 <2.0.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "dev": true - }, - "qs": { - "version": "6.2.1", - "from": "qs@6.2.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "from": "querystring@0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "from": "querystring-es3@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "dev": true - }, - "randomatic": { - "version": "1.1.6", - "from": "randomatic@>=1.1.3 <2.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", - "dev": true - }, - "randombytes": { - "version": "2.0.3", - "from": "randombytes@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz", - "dev": true - }, - "range-parser": { - "version": "1.2.0", - "from": "range-parser@>=1.2.0 <1.3.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "dev": true - }, - "read-only-stream": { - "version": "1.1.1", - "from": "read-only-stream@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-1.1.1.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.0.31 <2.0.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - } - } - }, - "read-pkg": { - "version": "1.1.0", - "from": "read-pkg@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "dev": true - }, - "read-pkg-up": { - "version": "1.0.1", - "from": "read-pkg-up@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "2.2.2", - "from": "readable-stream@>=2.0.2 <3.0.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "dev": true - }, - "readable-wrap": { - "version": "1.0.0", - "from": "readable-wrap@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/readable-wrap/-/readable-wrap-1.0.0.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.13-1 <2.0.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - } - } - }, - "readdirp": { - "version": "2.1.0", - "from": "readdirp@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "dev": true, - "dependencies": { - "minimatch": { - "version": "3.0.3", - "from": "minimatch@>=3.0.2 <4.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "dev": true - } - } - }, - "readline2": { - "version": "1.0.1", - "from": "readline2@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "dev": true - }, - "recast": { - "version": "0.10.33", - "from": "recast@0.10.33", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", - "dev": true, - "dependencies": { - "ast-types": { - "version": "0.8.12", - "from": "ast-types@0.8.12", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "from": "rechoir@>=0.6.2 <0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "dev": true - }, - "redent": { - "version": "1.0.0", - "from": "redent@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "dev": true - }, - "redeyed": { - "version": "1.0.1", - "from": "redeyed@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz", - "dev": true, - "dependencies": { - "esprima": { - "version": "3.0.0", - "from": "esprima@>=3.0.0 <3.1.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz", - "dev": true - } - } - }, - "reduce-css-calc": { - "version": "1.3.0", - "from": "reduce-css-calc@>=1.2.7 <2.0.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "dev": true - }, - "reduce-function-call": { - "version": "1.0.2", - "from": "reduce-function-call@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "dev": true - }, - "regenerate": { - "version": "1.3.2", - "from": "regenerate@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", - "dev": true - }, - "regenerator": { - "version": "0.8.40", - "from": "regenerator@0.8.40", - "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", - "dev": true - }, - "regex-cache": { - "version": "0.4.3", - "from": "regex-cache@>=0.4.2 <0.5.0", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "dev": true - }, - "regexpu": { - "version": "1.3.0", - "from": "regexpu@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", - "dev": true, - "dependencies": { - "esprima": { - "version": "2.7.3", - "from": "esprima@>=2.6.0 <3.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "dev": true - } - } - }, - "regjsgen": { - "version": "0.2.0", - "from": "regjsgen@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "from": "regjsparser@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.0.1", - "from": "remove-trailing-separator@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "from": "repeat-element@>=1.1.2 <2.0.0", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "from": "repeat-string@>=1.5.2 <2.0.0", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "from": "repeating@>=1.1.2 <2.0.0", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "from": "replace-ext@0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "dev": true - }, - "request": { - "version": "2.78.0", - "from": "request@2.78.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.78.0.tgz", - "dev": true, - "dependencies": { - "qs": { - "version": "6.3.0", - "from": "qs@>=6.3.0 <6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.0.tgz", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "from": "require-directory@>=2.1.1 <3.0.0", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "from": "require-main-filename@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "from": "require-uncached@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "from": "requires-port@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "dev": true - }, - "resolve": { - "version": "1.2.0", - "from": "resolve@>=1.1.6 <2.0.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", - "dev": true - }, - "resolve-dir": { - "version": "0.1.1", - "from": "resolve-dir@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "dev": true - }, - "resolve-from": { - "version": "1.0.1", - "from": "resolve-from@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "from": "resolve-url@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "dev": true - }, - "resp-modifier": { - "version": "6.0.2", - "from": "resp-modifier@6.0.2", - "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", - "dev": true, - "dependencies": { - "minimatch": { - "version": "3.0.3", - "from": "minimatch@>=3.0.2 <4.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "dev": true - } - } - }, - "restore-cursor": { - "version": "1.0.1", - "from": "restore-cursor@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "from": "right-align@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "dev": true - }, - "rimraf": { - "version": "2.5.4", - "from": "rimraf@>=2.2.8 <3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "dev": true, - "dependencies": { - "glob": { - "version": "7.1.1", - "from": "glob@>=7.0.5 <8.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "dev": true - }, - "minimatch": { - "version": "3.0.3", - "from": "minimatch@>=3.0.2 <4.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "dev": true - } - } - }, - "ripemd160": { - "version": "1.0.1", - "from": "ripemd160@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-1.0.1.tgz", - "dev": true - }, - "run-async": { - "version": "0.1.0", - "from": "run-async@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "dev": true - }, - "run-sequence": { - "version": "1.2.2", - "from": "run-sequence@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz", - "dev": true - }, - "rx": { - "version": "4.1.0", - "from": "rx@4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "dev": true - }, - "rx-lite": { - "version": "3.1.2", - "from": "rx-lite@>=3.1.2 <4.0.0", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "dev": true - }, - "sass-graph": { - "version": "2.1.2", - "from": "sass-graph@>=2.1.1 <3.0.0", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.1.2.tgz", - "dev": true, - "dependencies": { - "glob": { - "version": "7.1.1", - "from": "glob@^7.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "dev": true - }, - "lodash": { - "version": "4.17.4", - "from": "lodash@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "dev": true - }, - "minimatch": { - "version": "3.0.3", - "from": "minimatch@^3.0.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "dev": true - } - } - }, - "sax": { - "version": "1.2.1", - "from": "sax@>=1.2.1 <1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "dev": true - }, - "semver": { - "version": "5.3.0", - "from": "semver@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0||>=4.0.0 <5.0.0||>=5.0.0 <6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "dev": true - }, - "send": { - "version": "0.14.1", - "from": "send@0.14.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.14.1.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "2.2.0", - "from": "debug@>=2.2.0 <2.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "dev": true - }, - "mime": { - "version": "1.3.4", - "from": "mime@1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "dev": true - }, - "ms": { - "version": "0.7.1", - "from": "ms@0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "dev": true - } - } - }, - "sequencify": { - "version": "0.0.7", - "from": "sequencify@>=0.0.7 <0.1.0", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "dev": true - }, - "serve-index": { - "version": "1.8.0", - "from": "serve-index@1.8.0", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "2.2.0", - "from": "debug@>=2.2.0 <2.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "dev": true - }, - "ms": { - "version": "0.7.1", - "from": "ms@0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "dev": true - } - } - }, - "serve-static": { - "version": "1.11.1", - "from": "serve-static@1.11.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.11.1.tgz", - "dev": true - }, - "server-destroy": { - "version": "1.0.1", - "from": "server-destroy@1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "from": "set-blocking@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "from": "set-immediate-shim@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "dev": true - }, - "setprototypeof": { - "version": "1.0.2", - "from": "setprototypeof@1.0.2", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", - "dev": true - }, - "sha.js": { - "version": "2.4.8", - "from": "sha.js@>=2.3.6 <3.0.0", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", - "dev": true - }, - "shasum": { - "version": "1.0.2", - "from": "shasum@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "dev": true - }, - "shebang-regex": { - "version": "1.0.0", - "from": "shebang-regex@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "dev": true - }, - "shell-quote": { - "version": "0.0.1", - "from": "shell-quote@>=0.0.1 <0.1.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-0.0.1.tgz", - "dev": true - }, - "shelljs": { - "version": "0.6.1", - "from": "shelljs@>=0.6.0 <0.7.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "dev": true - }, - "shellwords": { - "version": "0.1.0", - "from": "shellwords@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.0.tgz", - "dev": true - }, - "shrinkwrap": { - "version": "0.4.0", - "from": "shrinkwrap@latest", - "resolved": "https://registry.npmjs.org/shrinkwrap/-/shrinkwrap-0.4.0.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "0.8.1", - "from": "debug@>=0.8.0 <0.9.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", - "dev": true - }, - "eventemitter3": { - "version": "0.1.6", - "from": "eventemitter3@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-0.1.6.tgz", - "dev": true - } - } - }, - "sigmund": { - "version": "1.0.1", - "from": "sigmund@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "from": "signal-exit@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "dev": true - }, - "simple-fmt": { - "version": "0.1.0", - "from": "simple-fmt@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", - "dev": true - }, - "simple-is": { - "version": "0.2.0", - "from": "simple-is@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", - "dev": true - }, - "slash": { - "version": "1.0.0", - "from": "slash@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "from": "slice-ansi@0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "dev": true - }, - "sntp": { - "version": "1.0.9", - "from": "sntp@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "dev": true - }, - "socket.io": { - "version": "1.6.0", - "from": "socket.io@1.6.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.6.0.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "2.3.3", - "from": "debug@2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "dev": true - } - } - }, - "socket.io-adapter": { - "version": "0.5.0", - "from": "socket.io-adapter@0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "2.3.3", - "from": "debug@2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "dev": true - } - } - }, - "socket.io-client": { - "version": "1.6.0", - "from": "socket.io-client@1.6.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.6.0.tgz", - "dev": true, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "from": "component-emitter@1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "dev": true - }, - "debug": { - "version": "2.3.3", - "from": "debug@2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "dev": true - } - } - }, - "socket.io-parser": { - "version": "2.3.1", - "from": "socket.io-parser@2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "dev": true, - "dependencies": { - "debug": { - "version": "2.2.0", - "from": "debug@2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "ms": { - "version": "0.7.1", - "from": "ms@0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "dev": true - } - } - }, - "source-map": { - "version": "0.5.6", - "from": "source-map@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "dev": true - }, - "source-map-resolve": { - "version": "0.3.1", - "from": "source-map-resolve@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", - "dev": true - }, - "source-map-support": { - "version": "0.2.10", - "from": "source-map-support@>=0.2.10 <0.3.0", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", - "dev": true, - "dependencies": { - "source-map": { - "version": "0.1.32", - "from": "source-map@0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.3.0", - "from": "source-map-url@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", - "dev": true - }, - "sparkles": { - "version": "1.0.0", - "from": "sparkles@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "dev": true - }, - "spdx-correct": { - "version": "1.0.2", - "from": "spdx-correct@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "dev": true - }, - "spdx-expression-parse": { - "version": "1.0.4", - "from": "spdx-expression-parse@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "from": "spdx-license-ids@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "from": "sprintf-js@>=1.0.2 <1.1.0", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "dev": true - }, - "sshpk": { - "version": "1.10.1", - "from": "sshpk@>=1.7.0 <2.0.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", - "dev": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "dev": true - } - } - }, - "stable": { - "version": "0.1.5", - "from": "stable@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.5.tgz", - "dev": true - }, - "statuses": { - "version": "1.3.1", - "from": "statuses@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "dev": true - }, - "stdout-stream": { - "version": "1.4.0", - "from": "stdout-stream@>=1.4.0 <2.0.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "dev": true - }, - "stream-browserify": { - "version": "1.0.0", - "from": "stream-browserify@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.0.27-1 <2.0.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - } - } - }, - "stream-combiner2": { - "version": "1.0.2", - "from": "stream-combiner2@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.0.2.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.17 <1.1.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - }, - "through2": { - "version": "0.5.1", - "from": "through2@>=0.5.1 <0.6.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", - "dev": true - }, - "xtend": { - "version": "3.0.0", - "from": "xtend@>=3.0.0 <3.1.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "dev": true - } - } - }, - "stream-consume": { - "version": "0.1.0", - "from": "stream-consume@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "dev": true - }, - "stream-shift": { - "version": "1.0.0", - "from": "stream-shift@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "dev": true - }, - "stream-splicer": { - "version": "1.3.2", - "from": "stream-splicer@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-1.3.2.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@>=0.0.1 <0.1.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "from": "readable-stream@>=1.1.13-1 <2.0.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "dev": true - }, - "through2": { - "version": "1.1.1", - "from": "through2@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "dev": true - } - } - }, - "stream-throttle": { - "version": "0.1.3", - "from": "stream-throttle@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "dev": true - }, - "streamfilter": { - "version": "1.0.5", - "from": "streamfilter@>=1.0.5 <2.0.0", - "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.5.tgz", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "from": "string_decoder@>=0.10.0 <0.11.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "from": "string-width@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "dev": true - }, - "string.prototype.codepointat": { - "version": "0.2.0", - "from": "string.prototype.codepointat@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz", - "dev": true - }, - "stringify-object": { - "version": "2.4.0", - "from": "stringify-object@>=2.3.0 <3.0.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-2.4.0.tgz", - "dev": true - }, - "stringmap": { - "version": "0.2.2", - "from": "stringmap@>=0.2.2 <0.3.0", - "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", - "dev": true - }, - "stringset": { - "version": "0.2.1", - "from": "stringset@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", - "dev": true - }, - "stringstream": { - "version": "0.0.5", - "from": "stringstream@>=0.0.4 <0.1.0", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "from": "strip-ansi@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "from": "strip-bom@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "dev": true - }, - "strip-bom-stream": { - "version": "2.0.0", - "from": "strip-bom-stream@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", - "dev": true, - "dependencies": { - "first-chunk-stream": { - "version": "2.0.0", - "from": "first-chunk-stream@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", - "dev": true - } - } - }, - "strip-indent": { - "version": "1.0.1", - "from": "strip-indent@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "dev": true - }, - "strip-json-comments": { - "version": "1.0.4", - "from": "strip-json-comments@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "dev": true - }, - "subarg": { - "version": "1.0.0", - "from": "subarg@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "from": "supports-color@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "dev": true - }, - "svgo": { - "version": "0.7.1", - "from": "svgo@>=0.7.0 <0.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.1.tgz", - "dev": true, - "dependencies": { - "colors": { - "version": "1.1.2", - "from": "colors@>=1.1.2 <1.2.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "dev": true - }, - "esprima": { - "version": "2.7.3", - "from": "esprima@>=2.6.0 <3.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "dev": true - }, - "js-yaml": { - "version": "3.6.1", - "from": "js-yaml@>=3.6.1 <3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "dev": true - } - } - }, - "syntax-error": { - "version": "1.1.6", - "from": "syntax-error@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.1.6.tgz", - "dev": true, - "dependencies": { - "acorn": { - "version": "2.7.0", - "from": "acorn@>=2.7.0 <3.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "dev": true - } - } - }, - "table": { - "version": "3.8.3", - "from": "table@>=3.7.8 <4.0.0", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "from": "is-fullwidth-code-point@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "dev": true - }, - "lodash": { - "version": "4.17.2", - "from": "lodash@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.2.tgz", - "dev": true - }, - "string-width": { - "version": "2.0.0", - "from": "string-width@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", - "dev": true - } - } - }, - "tar": { - "version": "2.2.1", - "from": "tar@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "dev": true - }, - "ternary-stream": { - "version": "1.2.3", - "from": "ternary-stream@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-1.2.3.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "merge-stream": { - "version": "0.1.8", - "from": "merge-stream@>=0.1.6 <0.2.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-0.1.8.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.33-1 <1.1.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - }, - "through2": { - "version": "0.6.5", - "from": "through2@>=0.6.3 <0.7.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "dev": true - } - } - }, - "text-hex": { - "version": "0.0.0", - "from": "text-hex@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-0.0.0.tgz", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "from": "text-table@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "dev": true - }, - "tfunk": { - "version": "3.1.0", - "from": "tfunk@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", - "dev": true - }, - "through": { - "version": "2.3.8", - "from": "through@>=2.3.8 <2.4.0", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "dev": true - }, - "through2": { - "version": "2.0.3", - "from": "through2@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "dev": true - }, - "through2-filter": { - "version": "2.0.0", - "from": "through2-filter@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "dev": true - }, - "tildify": { - "version": "1.2.0", - "from": "tildify@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "dev": true - }, - "time-stamp": { - "version": "1.0.1", - "from": "time-stamp@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.0.1.tgz", - "dev": true - }, - "timers-browserify": { - "version": "1.4.2", - "from": "timers-browserify@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "dev": true - }, - "timers-ext": { - "version": "0.1.0", - "from": "timers-ext@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.0.tgz", - "dev": true - }, - "to-absolute-glob": { - "version": "0.1.1", - "from": "to-absolute-glob@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "dev": true - }, - "to-array": { - "version": "0.1.4", - "from": "to-array@0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.2", - "from": "to-fast-properties@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.2.tgz", - "dev": true - }, - "tough-cookie": { - "version": "2.3.2", - "from": "tough-cookie@>=2.3.0 <2.4.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "from": "trim-newlines@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "from": "trim-right@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "dev": true - }, - "try-resolve": { - "version": "1.0.1", - "from": "try-resolve@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", - "dev": true - }, - "tryit": { - "version": "1.0.3", - "from": "tryit@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "dev": true - }, - "tryor": { - "version": "0.1.2", - "from": "tryor@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "from": "tty-browserify@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "from": "tunnel-agent@>=0.4.1 <0.5.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "dev": true - }, - "tweetnacl": { - "version": "0.14.5", - "from": "tweetnacl@>=0.14.0 <0.15.0", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "from": "type-check@>=0.3.2 <0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "from": "typedarray@>=0.0.5 <0.1.0", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.12", - "from": "ua-parser-js@0.7.12", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.12.tgz", - "dev": true - }, - "uglify-js": { - "version": "2.6.4", - "from": "uglify-js@2.6.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", - "dev": true, - "dependencies": { - "async": { - "version": "0.2.10", - "from": "async@>=0.2.6 <0.3.0", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "dev": true - }, - "window-size": { - "version": "0.1.0", - "from": "window-size@0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "from": "yargs@>=3.10.0 <3.11.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "dev": true - } - } - }, - "uglify-save-license": { - "version": "0.4.1", - "from": "uglify-save-license@>=0.4.1 <0.5.0", - "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", - "dev": true - }, - "uglify-to-browserify": { - "version": "1.0.2", - "from": "uglify-to-browserify@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "dev": true - }, - "ultron": { - "version": "1.0.2", - "from": "ultron@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "dev": true - }, - "umd": { - "version": "3.0.1", - "from": "umd@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "from": "unc-path-regex@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "dev": true - }, - "underscore": { - "version": "1.7.0", - "from": "underscore@>=1.7.0 <1.8.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "dev": true - }, - "unique-stream": { - "version": "1.0.0", - "from": "unique-stream@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "from": "unpipe@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "dev": true - }, - "urix": { - "version": "0.1.0", - "from": "urix@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "dev": true - }, - "url": { - "version": "0.10.3", - "from": "url@>=0.10.1 <0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "dev": true, - "dependencies": { - "punycode": { - "version": "1.3.2", - "from": "punycode@1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "dev": true - } - } - }, - "user-home": { - "version": "1.1.1", - "from": "user-home@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "dev": true - }, - "util": { - "version": "0.10.3", - "from": "util@>=0.10.1 <0.11.0", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "dev": true, - "dependencies": { - "inherits": { - "version": "2.0.1", - "from": "inherits@2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "dev": true - }, - "utils-merge": { - "version": "1.0.0", - "from": "utils-merge@1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "dev": true - }, - "v8flags": { - "version": "2.0.11", - "from": "v8flags@>=2.0.2 <3.0.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.0.11.tgz", - "dev": true - }, - "vali-date": { - "version": "1.0.0", - "from": "vali-date@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.1", - "from": "validate-npm-package-license@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "dev": true - }, - "verror": { - "version": "1.3.6", - "from": "verror@1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "dev": true - }, - "vinyl": { - "version": "0.5.3", - "from": "vinyl@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "dev": true - }, - "vinyl-buffer": { - "version": "1.0.0", - "from": "vinyl-buffer@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.0.tgz", - "dev": true, - "dependencies": { - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.33-1 <1.1.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - }, - "through2": { - "version": "0.6.5", - "from": "through2@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "dev": true - } - } - }, - "vinyl-file": { - "version": "2.0.0", - "from": "vinyl-file@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", - "dev": true, - "dependencies": { - "vinyl": { - "version": "1.2.0", - "from": "vinyl@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "dev": true - } - } - }, - "vinyl-fs": { - "version": "0.3.14", - "from": "vinyl-fs@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "dev": true, - "dependencies": { - "clone": { - "version": "0.2.0", - "from": "clone@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "dev": true - }, - "graceful-fs": { - "version": "3.0.11", - "from": "graceful-fs@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.33-1 <1.1.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - }, - "strip-bom": { - "version": "1.0.0", - "from": "strip-bom@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "dev": true - }, - "through2": { - "version": "0.6.5", - "from": "through2@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "from": "vinyl@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "dev": true - } - } - }, - "vinyl-source-stream": { - "version": "1.1.0", - "from": "vinyl-source-stream@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz", - "dev": true, - "dependencies": { - "clone": { - "version": "0.2.0", - "from": "clone@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "from": "readable-stream@>=1.0.33-1 <1.1.0-0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "dev": true - }, - "through2": { - "version": "0.6.5", - "from": "through2@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "from": "vinyl@>=0.4.3 <0.5.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "dev": true - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "from": "vinyl-sourcemaps-apply@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "dev": true - }, - "vlq": { - "version": "0.2.1", - "from": "vlq@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.1.tgz", - "dev": true - }, - "vm-browserify": { - "version": "0.0.4", - "from": "vm-browserify@>=0.0.1 <0.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "dev": true - }, - "weinre": { - "version": "2.0.0-pre-I0Z7U9OV", - "from": "weinre@>=2.0.0-pre-I0Z7U9OV <3.0.0", - "resolved": "https://registry.npmjs.org/weinre/-/weinre-2.0.0-pre-I0Z7U9OV.tgz", - "dev": true - }, - "whet.extend": { - "version": "0.9.9", - "from": "whet.extend@>=0.9.9 <0.10.0", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "dev": true - }, - "which": { - "version": "1.2.12", - "from": "which@>=1.2.12 <2.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", - "dev": true - }, - "which-module": { - "version": "1.0.0", - "from": "which-module@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "dev": true - }, - "wide-align": { - "version": "1.1.0", - "from": "wide-align@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz", - "dev": true - }, - "window-size": { - "version": "0.1.4", - "from": "window-size@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "from": "wordwrap@0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "from": "wrap-ansi@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "dev": true - }, - "write": { - "version": "0.2.1", - "from": "write@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "dev": true - }, - "ws": { - "version": "1.1.1", - "from": "ws@1.1.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.1.tgz", - "dev": true - }, - "wtf-8": { - "version": "1.0.0", - "from": "wtf-8@1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.3", - "from": "xmlhttprequest-ssl@1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "from": "xtend@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "from": "y18n@>=3.2.0 <4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "dev": true - }, - "yallist": { - "version": "2.0.0", - "from": "yallist@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz", - "dev": true - }, - "yargs": { - "version": "4.8.1", - "from": "yargs@>=4.7.1 <5.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "dev": true, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "from": "camelcase@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "from": "cliui@>=3.2.0 <4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "dev": true - }, - "window-size": { - "version": "0.2.0", - "from": "window-size@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "dev": true - }, - "yargs-parser": { - "version": "2.4.1", - "from": "yargs-parser@>=2.4.1 <3.0.0", - "resolved": "https://registry.npmjs.com/yargs-parser/-/yargs-parser-2.4.1.tgz", - "dev": true - } - } - }, - "yargs-parser": { - "version": "4.2.0", - "from": "yargs-parser@>=4.1.0 <5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.0.tgz", - "dev": true, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "from": "camelcase@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "dev": true - } - } - }, - "yeast": { - "version": "0.1.2", - "from": "yeast@0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "dev": true - } - } -} diff --git a/styleguide/package.json b/styleguide/package.json index 8205c770cc..1d591f0890 100644 --- a/styleguide/package.json +++ b/styleguide/package.json @@ -1,46 +1,57 @@ { - "name": "MayflowerPatternLibrary", - "author": "Jonathan Dallas / Mike Lambert", - "version": "3.2.2", + "name": "@massds/mayflower", + "description": "Open source UI components and visual style guide for Massachusetts government websites", + "version": "5.29.0", + "author": "Massachusetts Digital Services (MDS)", + "repository": { + "type": "git", + "url": "git+https://github.com/massgov/mayflower.git" + }, + "contributors": [ + "Jes Constantine ", + "Isaac Chansky ", + "Jonathan Dallas ", + "Sarena Douglass ", + "Greg LeRoux " + ], + "license": "SEE LICENSE IN LICENSE.md", + "bugs": { + "url": "https://github.com/massgov/mayflower/issues" + }, + "homepage": "https://github.com/massgov/mayflower#readme", "devDependencies": { - "babelify": "^6.3.0", - "browser-sync": "^2.7.3", - "browserify": "^10.1.1", - "cheerio": "^0.19.0", - "cli-color": "^1.0.0", - "eslint": "^2.8.0", - "eslint-plugin-react": "^5.0.1", - "gulp": "^3.9.1", - "gulp-autoprefixer": "^3.1.0", - "gulp-cached": "^1.1.0", - "gulp-concat": "^2.5.2", - "gulp-debug": "^2.1.2", - "gulp-environments": "^0.1.1", - "gulp-filter": "^3.0.1", - "gulp-header": "^1.2.2", - "gulp-notify": "^2.2.0", + "babelify": "^6.4.0", + "browser-sync": "^2.18.13", + "browserify": "^16.1.1", + "child-process-promise": "^2.2.1", + "eslint": "^2.13.1", + "eslint-plugin-react": "^5.2.2", + "gulp": "^4.0.0", + "gulp-autoprefixer": "^5.0.0", + "gulp-concat": "^2.6.1", + "gulp-debug": "^3.2.0", + "gulp-environments": "^0.1.2", + "gulp-filter": "^5.1.0", + "gulp-header": "^2.0.5", + "gulp-if": "^2.0.2", "gulp-pixrem": "^1.0.0", - "gulp-plumber": "^1.0.0", + "gulp-plumber": "^1.1.0", "gulp-rename": "^1.2.2", - "gulp-run": "^1.7.1", + "gulp-s3-upload": "^1.7.0", "gulp-sass": "^3.1.0", - "gulp-sourcemaps": "^1.5.2", - "gulp-svgmin": "^1.1.2", + "gulp-sourcemaps": "^2.6.4", + "gulp-svgmin": "^1.2.4", "gulp-svgstore": "^5.0.5", - "gulp-uglify": "^1.2.0", - "gulp-watch": "^4.3.4", - "json-align": "^0.1.0", - "main-bower-files": "^2.7.0", - "merge-stream": "^1.0.0", + "gulp-uglify": "^3.0.0", + "lazypipe": "^1.0.1", + "main-bower-files": "^2.13.1", + "merge-stream": "^1.0.1", "node-bourbon": "^4.2.8", "node-neat": "^1.7.2", - "node-normalize-scss": "^1.3.2", - "run-sequence": "^1.1.0", - "shrinkwrap": "^0.4.0", - "through2": "^2.0.0", - "vinyl-buffer": "^1.0.0", - "vinyl-source-stream": "^1.1.0", - "yargs": "^4.7.1" + "node-normalize-scss": "^3.0.0", + "optimist": "^0.6.1", + "through2": "^2.0.3", + "undertaker-registry": "^1.0.1" }, "dependencies": {}, "scripts": { diff --git a/styleguide/patches/PsuedoPatternRule.patch b/styleguide/patches/PsuedoPatternRule.patch new file mode 100644 index 0000000000..5d72330f61 --- /dev/null +++ b/styleguide/patches/PsuedoPatternRule.patch @@ -0,0 +1,33 @@ +diff --git a/src/PatternLab/PatternData/Rules/PseudoPatternRule.php b/src/PatternLab/PatternData/Rules/PseudoPatternRule.php +index 8575790c..8136c3c1 100755 +--- a/src/PatternLab/PatternData/Rules/PseudoPatternRule.php ++++ b/src/PatternLab/PatternData/Rules/PseudoPatternRule.php +@@ -167,8 +167,19 @@ class PseudoPatternRule extends \PatternLab\PatternData\Rule { + + } + ++ /** Revert array_replace_recursive function to the original array_merge behavior (added to PL Core in July of 2016 ++ * https://github.com/pattern-lab/patternlab-php-core/commit/613c7b6db41610ee858b0a6b80c9e0ffc7aab08f ) ++ * NOTE: this should be treated as a temporary workaround to address the differences in behavior ++ * brought up in https://github.com/drupal-pattern-lab/patternlab-php-core/issues/12 until the ability ++ * to officially swap out or change core PL rule behavior is added ++ * ++ * 1. Changed occurrences of `array_replace_recursive` back to original `array_merge` ++ * ++ **/ ++ ++ + // make sure the pattern data is an array before merging the data +- $patternStoreData["data"] = is_array($patternData) ? array_replace_recursive($patternDataBase, $patternData) : $patternDataBase; ++ $patternStoreData["data"] = is_array($patternData) ? array_merge($patternDataBase, $patternData) : $patternDataBase; /* [1] */ + + // if the pattern data store already exists make sure it is merged and overwrites this data + if (PatternData::checkOption($patternStoreKey)) { +@@ -177,7 +188,7 @@ class PseudoPatternRule extends \PatternLab\PatternData\Rule { + // don't overwrite nameClean + unset($patternStoreData['nameClean']); + } +- $patternStoreData = array_replace_recursive($existingData, $patternStoreData); ++ $patternStoreData = array_merge($existingData, $patternStoreData); /* [1] */ + } + PatternData::setOption($patternStoreKey, $patternStoreData); diff --git a/styleguide/public/index.html b/styleguide/public/index.html index 94d469ebe0..c24187511c 100644 --- a/styleguide/public/index.html +++ b/styleguide/public/index.html @@ -16,9 +16,9 @@ - - - + + + @@ -255,22 +255,22 @@

Annotations

- - + + - - - - - - - - + + + + + + + + - + diff --git a/styleguide/public/styleguide/bower_components/EventEmitter.min.js b/styleguide/public/styleguide/bower_components/EventEmitter.min.js index e57125ec14..04dabbb667 100644 --- a/styleguide/public/styleguide/bower_components/EventEmitter.min.js +++ b/styleguide/public/styleguide/bower_components/EventEmitter.min.js @@ -1 +1 @@ -(function(){"use strict";function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var r=e.prototype,i=this,s=i.EventEmitter;r.getListeners=function(e){var t,n,r=this._getEvents();if(e instanceof RegExp){t={};for(n in r)r.hasOwnProperty(n)&&e.test(n)&&(t[n]=r[n])}else t=r[e]||(r[e]=[]);return t},r.flattenListeners=function(e){var t,n=[];for(t=0;tn;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return o.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],i=0,s=n.length;s>i;i++)this.push(n[i]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],f=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",-1!==c(this,t)},u.add=function(){var t,e=arguments,n=0,i=e.length,s=!1;do t=e[n]+"",-1===c(this,t)&&(this.push(t),s=!0);while(++n=0;c--)if(a=e[c],s=n(t,a,u),void 0!==s){o=!0;break}return o?(r||"function"!=typeof s||(s=this.mv(s,e,i)),s):r?!1:""},ls:function(t,n,e,r,s){var a=this.options.delimiters;return this.options.delimiters=s,this.b(this.ct(i(t.call(n,r)),n,e)),this.options.delimiters=a,!1},ct:function(t,n,e){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(t,this.options).render(n,e)},b:function(t){this.buf+=t},fl:function(){var t=this.buf;return this.buf="",t},ms:function(t,n,e,i,r,s,a){var o,u=n[n.length-1],c=t.call(u);return"function"==typeof c?i?!0:(o=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,u,e,o.substring(r,s),a)):c},mv:function(t,n,e){var r=n[n.length-1],s=t.call(r);return"function"==typeof s?this.ct(i(s.call(r)),r,e):s},sub:function(t,n,e,i){var r=this.subs[t];r&&(this.activeSub=t,r(n,e,this,i),this.activeSub=!1)}};var s=/&/g,a=//g,u=/\'/g,c=/\"/g,l=/[&<>\"\']/,f=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}}("undefined"!=typeof exports?exports:Hogan),function(t){function n(t){"}"===t.n.substr(t.n.length-1)&&(t.n=t.n.substring(0,t.n.length-1))}function e(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")}function i(t,n,e){if(n.charAt(e)!=t.charAt(0))return!1;for(var i=1,r=t.length;r>i;i++)if(n.charAt(e+i)!=t.charAt(i))return!1;return!0}function r(n,e,i,o){var u=[],c=null,l=null,f=null;for(l=i[i.length-1];n.length>0;){if(f=n.shift(),l&&"<"==l.tag&&!(f.tag in k))throw new Error("Illegal content in < super tag.");if(t.tags[f.tag]<=t.tags.$||s(f,o))i.push(f),f.nodes=r(n,f.tag,i,o);else{if("/"==f.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+f.n);if(c=i.pop(),f.n!=c.n&&!a(f.n,c.n,o))throw new Error("Nesting error: "+c.n+" vs. "+f.n);return c.end=f.i,u}"\n"==f.tag&&(f.last=0==n.length||"\n"==n[0].tag)}u.push(f)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return u}function s(t,n){for(var e=0,i=n.length;i>e;e++)if(n[e].o==t.n)return t.tag="#",!0}function a(t,n,e){for(var i=0,r=e.length;r>i;i++)if(e[i].c==t&&e[i].o==n)return!0}function o(t){var n=[];for(var e in t)n.push('"'+c(e)+'": function(c,p,t,i) {'+t[e]+"}");return"{ "+n.join(",")+" }"}function u(t){var n=[];for(var e in t.partials)n.push('"'+c(e)+'":{name:"'+c(t.partials[e].name)+'", '+u(t.partials[e])+"}");return"partials: {"+n.join(",")+"}, subs: "+o(t.subs)}function c(t){return t.replace(m,"\\\\").replace(v,'\\"').replace(b,"\\n").replace(d,"\\r").replace(x,"\\u2028").replace(w,"\\u2029")}function l(t){return~t.indexOf(".")?"d":"f"}function f(t,n){var e="<"+(n.prefix||""),i=e+t.n+y++;return n.partials[i]={name:t.n,partials:{}},n.code+='t.b(t.rp("'+c(i)+'",c,p,"'+(t.indent||"")+'"));',i}function h(t,n){n.code+="t.b(t.t(t."+l(t.n)+'("'+c(t.n)+'",c,p,0)));'}function p(t){return"t.b("+t+");"}var g=/\S/,v=/\"/g,b=/\n/g,d=/\r/g,m=/\\/g,x=/\u2028/,w=/\u2029/;t.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},t.scan=function(r,s){function a(){m.length>0&&(x.push({tag:"_t",text:new String(m)}),m="")}function o(){for(var n=!0,e=y;e"==e.tag&&(e.indent=x[i].text.toString()),x.splice(i,1));else n||x.push({tag:"\n"});w=!1,y=x.length}function c(t,n){var i="="+S,r=t.indexOf(i,n),s=e(t.substring(t.indexOf("=",n)+1,r)).split(" ");return T=s[0],S=s[s.length-1],r+i.length-1}var l=r.length,f=0,h=1,p=2,v=f,b=null,d=null,m="",x=[],w=!1,k=0,y=0,T="{{",S="}}";for(s&&(s=s.split(" "),T=s[0],S=s[1]),k=0;l>k;k++)v==f?i(T,r,k)?(--k,a(),v=h):"\n"==r.charAt(k)?u(w):m+=r.charAt(k):v==h?(k+=T.length-1,d=t.tags[r.charAt(k+1)],b=d?r.charAt(k+1):"_v","="==b?(k=c(r,k),v=f):(d&&k++,v=p),w=k):i(S,r,k)?(x.push({tag:b,n:e(m),otag:T,ctag:S,i:"/"==b?w-T.length:k+S.length}),m="",k+=S.length-1,v=f,"{"==b&&("}}"==S?k++:n(x[x.length-1]))):m+=r.charAt(k);return u(w,!0),x};var k={_t:!0,"\n":!0,$:!0,"/":!0};t.stringify=function(n){return"{code: function (c,p,i) { "+t.wrapMain(n.code)+" },"+u(n)+"}"};var y=0;t.generate=function(n,e,i){y=0;var r={code:"",subs:{},partials:{}};return t.walk(n,r),i.asString?this.stringify(r,e,i):this.makeTemplate(r,e,i)},t.wrapMain=function(t){return'var t=this;t.b(i=i||"");'+t+"return t.fl();"},t.template=t.Template,t.makeTemplate=function(t,n,e){var i=this.makePartials(t);return i.code=new Function("c","p","i",this.wrapMain(t.code)),new this.template(i,n,this,e)},t.makePartials=function(t){var n,e={subs:{},partials:t.partials,name:t.name};for(n in e.partials)e.partials[n]=this.makePartials(e.partials[n]);for(n in t.subs)e.subs[n]=new Function("c","p","t","i",t.subs[n]);return e},t.codegen={"#":function(n,e){e.code+="if(t.s(t."+l(n.n)+'("'+c(n.n)+'",c,p,1),c,p,0,'+n.i+","+n.end+',"'+n.otag+" "+n.ctag+'")){t.rs(c,p,function(c,p,t){',t.walk(n.nodes,e),e.code+="});c.pop();}"},"^":function(n,e){e.code+="if(!t.s(t."+l(n.n)+'("'+c(n.n)+'",c,p,1),c,p,1,0,0,"")){',t.walk(n.nodes,e),e.code+="};"},">":f,"<":function(n,e){var i={partials:{},code:"",subs:{},inPartial:!0};t.walk(n.nodes,i);var r=e.partials[f(n,e)];r.subs=i.subs,r.partials=i.partials},$:function(n,e){var i={subs:{},code:"",partials:e.partials,prefix:n.n};t.walk(n.nodes,i),e.subs[n.n]=i.code,e.inPartial||(e.code+='t.sub("'+c(n.n)+'",c,p,i);')},"\n":function(t,n){n.code+=p('"\\n"'+(t.last?"":" + i"))},_v:function(t,n){n.code+="t.b(t.v(t."+l(t.n)+'("'+c(t.n)+'",c,p,0)));'},_t:function(t,n){n.code+=p('"'+c(t.text)+'"')},"{":h,"&":h},t.walk=function(n,e){for(var i,r=0,s=n.length;s>r;r++)i=t.codegen[n[r].tag],i&&i(n[r],e);return e},t.parse=function(t,n,e){return e=e||{},r(t,"",[],e.sectionTags||[])},t.cache={},t.cacheKey=function(t,n){return[t,!!n.asString,!!n.disableLambda,n.delimiters,!!n.modelGet].join("||")},t.compile=function(n,e){e=e||{};var i=t.cacheKey(n,e),r=this.cache[i];if(r){var s=r.partials;for(var a in s)delete s[a].instance;return r}return r=this.generate(this.parse(this.scan(n,e.delimiters),n,e),n,e),this.cache[i]=r}}("undefined"!=typeof exports?exports:Hogan); \ No newline at end of file +var Hogan={};!function(t){function n(t,n,e){var i;return n&&"object"==typeof n&&(void 0!==n[t]?i=n[t]:e&&n.get&&"function"==typeof n.get&&(i=n.get(t))),i}function e(t,n,e,i,r,s){function a(){}function o(){}a.prototype=t,o.prototype=t.subs;var u,c=new a;c.subs=new o,c.subsText={},c.buf="",i=i||{},c.stackSubs=i,c.subsText=s;for(u in n)i[u]||(i[u]=n[u]);for(u in i)c.subs[u]=i[u];r=r||{},c.stackPartials=r;for(u in e)r[u]||(r[u]=e[u]);for(u in r)c.partials[u]=r[u];return c}function i(t){return String(null===t||void 0===t?"":t)}function r(t){return t=i(t),l.test(t)?t.replace(s,"&").replace(a,"<").replace(o,">").replace(u,"'").replace(c,"""):t}t.Template=function(t,n,e,i){t=t||{},this.r=t.code||this.r,this.c=e,this.options=i||{},this.text=n||"",this.partials=t.partials||{},this.subs=t.subs||{},this.buf=""},t.Template.prototype={r:function(t,n,e){return""},v:r,t:i,render:function(t,n,e){return this.ri([t],n||{},e)},ri:function(t,n,e){return this.r(t,n,e)},ep:function(t,n){var i=this.partials[t],r=n[i.name];if(i.instance&&i.base==r)return i.instance;if("string"==typeof r){if(!this.c)throw new Error("No compiler available.");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[t].base=r,i.subs){n.stackText||(n.stackText={});for(key in i.subs)n.stackText[key]||(n.stackText[key]=void 0!==this.activeSub&&n.stackText[this.activeSub]?n.stackText[this.activeSub]:this.text);r=e(r,i.subs,i.partials,this.stackSubs,this.stackPartials,n.stackText)}return this.partials[t].instance=r,r},rp:function(t,n,e,i){var r=this.ep(t,e);return r?r.ri(n,e,i):""},rs:function(t,n,e){var i=t[t.length-1];if(!f(i))return void e(t,n,this);for(var r=0;r=0;c--)if(a=e[c],s=n(t,a,u),void 0!==s){o=!0;break}return o?(r||"function"!=typeof s||(s=this.mv(s,e,i)),s):!r&&""},ls:function(t,n,e,r,s){var a=this.options.delimiters;return this.options.delimiters=s,this.b(this.ct(i(t.call(n,r)),n,e)),this.options.delimiters=a,!1},ct:function(t,n,e){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(t,this.options).render(n,e)},b:function(t){this.buf+=t},fl:function(){var t=this.buf;return this.buf="",t},ms:function(t,n,e,i,r,s,a){var o,u=n[n.length-1],c=t.call(u);return"function"==typeof c?!!i||(o=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,u,e,o.substring(r,s),a)):c},mv:function(t,n,e){var r=n[n.length-1],s=t.call(r);return"function"==typeof s?this.ct(i(s.call(r)),r,e):s},sub:function(t,n,e,i){var r=this.subs[t];r&&(this.activeSub=t,r(n,e,this,i),this.activeSub=!1)}};var s=/&/g,a=//g,u=/\'/g,c=/\"/g,l=/[&<>\"\']/,f=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}}("undefined"!=typeof exports?exports:Hogan),function(t){function n(t){"}"===t.n.substr(t.n.length-1)&&(t.n=t.n.substring(0,t.n.length-1))}function e(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")}function i(t,n,e){if(n.charAt(e)!=t.charAt(0))return!1;for(var i=1,r=t.length;i0;){if(f=n.shift(),l&&"<"==l.tag&&!(f.tag in k))throw new Error("Illegal content in < super tag.");if(t.tags[f.tag]<=t.tags.$||s(f,o))i.push(f),f.nodes=r(n,f.tag,i,o);else{if("/"==f.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+f.n);if(c=i.pop(),f.n!=c.n&&!a(f.n,c.n,o))throw new Error("Nesting error: "+c.n+" vs. "+f.n);return c.end=f.i,u}"\n"==f.tag&&(f.last=0==n.length||"\n"==n[0].tag)}u.push(f)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return u}function s(t,n){for(var e=0,i=n.length;e":7,"=":8,_v:9,"{":10,"&":11,_t:12},t.scan=function(r,s){function a(){m.length>0&&(x.push({tag:"_t",text:new String(m)}),m="")}function o(){for(var n=!0,e=y;e"==e.tag&&(e.indent=x[i].text.toString()),x.splice(i,1));else n||x.push({tag:"\n"});w=!1,y=x.length}function c(t,n){var i="="+S,r=t.indexOf(i,n),s=e(t.substring(t.indexOf("=",n)+1,r)).split(" ");return T=s[0],S=s[s.length-1],r+i.length-1}var l=r.length,f=0,h=1,p=2,v=f,b=null,d=null,m="",x=[],w=!1,k=0,y=0,T="{{",S="}}";for(s&&(s=s.split(" "),T=s[0],S=s[1]),k=0;k":f,"<":function(n,e){var i={partials:{},code:"",subs:{},inPartial:!0};t.walk(n.nodes,i);var r=e.partials[f(n,e)];r.subs=i.subs,r.partials=i.partials},$:function(n,e){var i={subs:{},code:"",partials:e.partials,prefix:n.n};t.walk(n.nodes,i),e.subs[n.n]=i.code,e.inPartial||(e.code+='t.sub("'+c(n.n)+'",c,p,i);')},"\n":function(t,n){n.code+=p('"\\n"'+(t.last?"":" + i"))},_v:function(t,n){n.code+="t.b(t.v(t."+l(t.n)+'("'+c(t.n)+'",c,p,0)));'},_t:function(t,n){n.code+=p('"'+c(t.text)+'"')},"{":h,"&":h},t.walk=function(n,e){for(var i,r=0,s=n.length;r0&&t-1 in e}function r(e,t,n){if(Z.isFunction(t))return Z.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return Z.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(at.test(t))return Z.filter(t,e,n);t=Z.filter(t,e)}return Z.grep(e,function(e){return U.call(t,e)>=0!==n})}function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function o(e){var t=ht[e]={};return Z.each(e.match(dt)||[],function(e,n){t[n]=!0}),t}function s(){J.removeEventListener("DOMContentLoaded",s,!1),e.removeEventListener("load",s,!1),Z.ready()}function a(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=Z.expando+a.uid++}function u(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(bt,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:xt.test(n)?Z.parseJSON(n):n}catch(i){}yt.set(e,t,n)}else n=void 0;return n}function l(){return!0}function c(){return!1}function f(){try{return J.activeElement}catch(e){}}function p(e,t){return Z.nodeName(e,"table")&&Z.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function d(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function h(e){var t=Pt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function g(e,t){for(var n=0,r=e.length;r>n;n++)vt.set(e[n],"globalEval",!t||vt.get(t[n],"globalEval"))}function m(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(vt.hasData(e)&&(o=vt.access(e),s=vt.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)Z.event.add(t,i,l[i][n])}yt.hasData(e)&&(a=yt.access(e),u=Z.extend({},a),yt.set(t,u))}}function v(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&Z.nodeName(e,t)?Z.merge([e],n):n}function y(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Nt.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}function x(t,n){var r,i=Z(n.createElement(t)).appendTo(n.body),o=e.getDefaultComputedStyle&&(r=e.getDefaultComputedStyle(i[0]))?r.display:Z.css(i[0],"display");return i.detach(),o}function b(e){var t=J,n=$t[e];return n||(n=x(e,t),"none"!==n&&n||(Wt=(Wt||Z(" + {% if iframe.link %} + + {% endif %} + + + {% if iframe.caption %} +
+ {{ iframe.caption }} +
+ {% endif %} + diff --git a/styleguide/source/_patterns/01-atoms/09-media/iframe~no-height-provided.json b/styleguide/source/_patterns/01-atoms/09-media/iframe~no-height-provided.json new file mode 100644 index 0000000000..20a3cba8c8 --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/09-media/iframe~no-height-provided.json @@ -0,0 +1,7 @@ +{ + "iframe": { + "src": "https://massgov.github.io", + "title": "Embed page title for accessibility", + "position": "full" + } +} diff --git a/styleguide/source/_patterns/01-atoms/09-media/image.json b/styleguide/source/_patterns/01-atoms/09-media/image.json index c0ce2c2be8..ae8794d211 100644 --- a/styleguide/source/_patterns/01-atoms/09-media/image.json +++ b/styleguide/source/_patterns/01-atoms/09-media/image.json @@ -1,8 +1,8 @@ { "image": { "alt": "alt text", - "src": "/assets/images/placeholder/800x400.png", - "height": "", - "width": "" + "src": "../../assets/images/placeholder/800x400.png", + "height": "400", + "width": "800" } } \ No newline at end of file diff --git a/styleguide/source/_patterns/01-atoms/09-media/image.md b/styleguide/source/_patterns/01-atoms/09-media/image.md index 9bae765404..f853d38a05 100644 --- a/styleguide/source/_patterns/01-atoms/09-media/image.md +++ b/styleguide/source/_patterns/01-atoms/09-media/image.md @@ -1,26 +1,30 @@ ---- -title: Image ---- -Description: an atom for `` elements with alt text +### Description +Displays an image using the image HTML element -## State: ALPHA - -## Used In: -- [@organisms/by-author/sidebar-promo](/?p=organisms-sidebar-promo) - -## Notes: +### Status +* Stable as of 4.0.0 +### Variant options +* [circular image](?p=atoms-image-circular) ### Variables ~~~ image { - alt: - type: string / required - src: - type: string (url) / required - height: - type: string - width: - type: string + alt: + type: string / required + src: + type: string (url) / required + srcset: + type: string / optional + sizes: + type: string / optional + height: + type: string / optional + width: + type: string / optional + shape: + type: string / optional } +~~~ + diff --git a/styleguide/source/_patterns/01-atoms/09-media/image.twig b/styleguide/source/_patterns/01-atoms/09-media/image.twig index 55d4d586f1..f899c26035 100644 --- a/styleguide/source/_patterns/01-atoms/09-media/image.twig +++ b/styleguide/source/_patterns/01-atoms/09-media/image.twig @@ -1,6 +1,24 @@ -{{image.alt}} +{{ image.alt }} diff --git a/styleguide/source/_patterns/01-atoms/09-media/image~circular.json b/styleguide/source/_patterns/01-atoms/09-media/image~circular.json new file mode 100644 index 0000000000..4c8b081592 --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/09-media/image~circular.json @@ -0,0 +1,9 @@ +{ + "image": { + "alt": "alt text", + "src": "../../assets/images/placeholder/250x250.png", + "height": "250", + "width": "250", + "shape": "circular" + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/01-atoms/09-media/image~responsive.json b/styleguide/source/_patterns/01-atoms/09-media/image~responsive.json new file mode 100644 index 0000000000..37934a0009 --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/09-media/image~responsive.json @@ -0,0 +1,20 @@ +{ + "image": { + "alt": "alt text", + "src": "../../assets/images/placeholder/800x400.png", + "versions": [ + { + "url": "../../assets/images/placeholder/400x200.png", + "width": "620w" + }, + { + "url": "../../assets/images/placeholder/700x350.png", + "width": "780w" + }, + { + "url": "../../assets/images/placeholder/800x400.png", + "width": "910w" + } + ] + } +} diff --git a/styleguide/source/_patterns/01-atoms/09-media/site-logo.md b/styleguide/source/_patterns/01-atoms/09-media/site-logo.md index bb7b59a7ee..4d2f1451c0 100644 --- a/styleguide/source/_patterns/01-atoms/09-media/site-logo.md +++ b/styleguide/source/_patterns/01-atoms/09-media/site-logo.md @@ -1,16 +1,5 @@ ---- -title: Site logo ---- -Description: an atom for the site logo. -## State: STABLE +### Description +A site wide logo -### Used In: -- [@organisms/by-template/header](/?p=organisms-header) -- [@templates/narrow-template](/?p=organisms-narrow-template) -- [@pilot/header](/?p=pilot-header) - - -### Required Variables -~~~ -None -~~~ +### Status +* Stable as of 5.0.0 diff --git a/styleguide/source/_patterns/01-atoms/09-media/site-logo.twig b/styleguide/source/_patterns/01-atoms/09-media/site-logo.twig index 8d1c8f2c73..15fc700b03 100644 --- a/styleguide/source/_patterns/01-atoms/09-media/site-logo.twig +++ b/styleguide/source/_patterns/01-atoms/09-media/site-logo.twig @@ -1,5 +1,6 @@ diff --git a/styleguide/source/_patterns/01-atoms/09-media/video-as-floated-right.md b/styleguide/source/_patterns/01-atoms/09-media/video-as-floated-right.md new file mode 100644 index 0000000000..a13fac5249 --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/09-media/video-as-floated-right.md @@ -0,0 +1,5 @@ +Description: This is a variant of the [video](./?p=atoms-video) pattern showing an example floated to the right. + +### How to generate +* set the `position` variable to 'right' + diff --git a/styleguide/source/_patterns/01-atoms/09-media/video.json b/styleguide/source/_patterns/01-atoms/09-media/video.json index 0dad6aabf4..c280475650 100644 --- a/styleguide/source/_patterns/01-atoms/09-media/video.json +++ b/styleguide/source/_patterns/01-atoms/09-media/video.json @@ -2,9 +2,14 @@ "video": { "src": "https://www.youtube.com/embed/dEkUq-Rs-Tc", "label": "Using a gas grill safely", - "height": "853", - "width": "480", - "link": "", + "width": "853", + "height": "480", + "link": { + "href": "/patterns/05-pages-GEN-Building-Energy-Codes/05-pages-GEN-Building-Energy-Codes.html", + "text": "View transcript", + "info": "View transcript of Using a gas grill safely", + "property": "" + }, "position": "" } } diff --git a/styleguide/source/_patterns/01-atoms/09-media/video.md b/styleguide/source/_patterns/01-atoms/09-media/video.md index 17dde1f762..17e1b67254 100644 --- a/styleguide/source/_patterns/01-atoms/09-media/video.md +++ b/styleguide/source/_patterns/01-atoms/09-media/video.md @@ -1,14 +1,32 @@ ---- -title: Video ---- -Description: an atom for a video element. -## State: STABLE +### Description +Displays a video using an iframe with an optional link. -### Used In: -- [@organisms/by-author/rich-text](/?p=organisms-rich-text) -- [@organisms/by-author/rich-text-description](/?p=organisms-rich-text-description) +### Status +* Stable as of 5.0.0 -### Required Variables +### Pattern Contains +* Decorative Link + +### Variant options +* This pattern includes an optional link to a page containing a transcript of the video +* This pattern can also by floated to the right by setting the position to ['right'](./?p=atoms-video-as-floated-right) + +### Variables ~~~ -None +video { + src: + type: string (video url) / required + label: + type: string / required + width: + type: string (numbers only) / required + height: + type: string (numbers only) / required + link: + type: decorativeLink / optional + position: + type: string ('', 'right') / optional +} ~~~ + + diff --git a/styleguide/source/_patterns/01-atoms/09-media/video.twig b/styleguide/source/_patterns/01-atoms/09-media/video.twig index 74f3b127e0..5ed4de6322 100644 --- a/styleguide/source/_patterns/01-atoms/09-media/video.twig +++ b/styleguide/source/_patterns/01-atoms/09-media/video.twig @@ -1,12 +1,13 @@ -{% if video.position %} - {% set posClass = "ma__video--" ~ video.position %} -{% endif %} -
-
+{% set posClass = video.position ? "ma__video--" ~ video.position : '' %} + {# backward compatibile with v5.6 - toggle new styles with ma__video--new #} +
+
+ {% if video.link %} + + {% endif %}
- {% if video.link %} - {% set decorativeLink = video.link %} - {% include "@atoms/decorative-link.twig" %} - {% endif %}
diff --git a/styleguide/source/_patterns/01-atoms/09-media/video~as-floated-right.json b/styleguide/source/_patterns/01-atoms/09-media/video~as-floated-right.json new file mode 100644 index 0000000000..80b45ff0b0 --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/09-media/video~as-floated-right.json @@ -0,0 +1,15 @@ +{ + "video": { + "src": "https://www.youtube.com/embed/dEkUq-Rs-Tc", + "label": "Using a gas grill safely", + "width": "853", + "height": "480", + "link": { + "href": "/patterns/05-pages-GEN-Building-Energy-Codes/05-pages-GEN-Building-Energy-Codes.html", + "text": "View transcript", + "info": "View transcript of Using a gas grill safely", + "property": "" + }, + "position": "right" + } +} diff --git a/styleguide/source/_patterns/01-atoms/09-media/video~with-transcript.json b/styleguide/source/_patterns/01-atoms/09-media/video~with-transcript.json deleted file mode 100644 index 57826b99d1..0000000000 --- a/styleguide/source/_patterns/01-atoms/09-media/video~with-transcript.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "video": { - "src": "https://www.youtube.com/embed/dEkUq-Rs-Tc", - "label": "Using a gas grill safely", - "height": "853", - "width": "480", - "link": { - "href": "/patterns/05-pages-GEN-Building-Energy-Codes/05-pages-GEN-Building-Energy-Codes.html", - "text": "View transcript", - "info": "View transcript of Using a gas grill safely", - "property": "" - } - } -} diff --git a/styleguide/source/_patterns/01-atoms/10-table/table.md b/styleguide/source/_patterns/01-atoms/10-table/table.md index 1a713f0b54..2c4046f2d6 100644 --- a/styleguide/source/_patterns/01-atoms/10-table/table.md +++ b/styleguide/source/_patterns/01-atoms/10-table/table.md @@ -1,52 +1,43 @@ ---- -title: Table ---- -Description: an atom for `` elements with child ``, ``, ``, and `'; + } + } + if (opts.isDisabled) { + arr.push('is-disabled'); + } + if (opts.isToday) { + arr.push('is-today'); + } + if (opts.isSelected) { + arr.push('is-selected'); + ariaSelected = 'true'; + } + if (opts.isInRange) { + arr.push('is-inrange'); + } + if (opts.isStartRange) { + arr.push('is-startrange'); + } + if (opts.isEndRange) { + arr.push('is-endrange'); + } + return ''; + }, + + renderWeek = function (d, m, y) { + // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified. + var onejan = new Date(y, 0, 1), + weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7); + return ''; + }, + + renderRow = function(days, isRTL) + { + return '' + (isRTL ? days.reverse() : days).join('') + ''; + }, + + renderBody = function(rows) + { + return '' + rows.join('') + ''; + }, + + renderHead = function(opts) + { + var i, arr = []; + if (opts.showWeekNumber) { + arr.push(''); + } + for (i = 0; i < 7; i++) { + arr.push(''); + } + return '' + (opts.isRTL ? arr.reverse() : arr).join('') + ''; + }, + + renderTitle = function(instance, c, year, month, refYear, randId) + { + var i, j, arr, + opts = instance._o, + isMinYear = year === opts.minYear, + isMaxYear = year === opts.maxYear, + html = '
', + monthHtml, + yearHtml, + prev = true, + next = true; + + for (arr = [], i = 0; i < 12; i++) { + arr.push(''); + } + + monthHtml = '
' + opts.i18n.months[month] + '
'; + + if (isArray(opts.yearRange)) { + i = opts.yearRange[0]; + j = opts.yearRange[1] + 1; + } else { + i = year - opts.yearRange; + j = 1 + year + opts.yearRange; + } + + for (arr = []; i < j && i <= opts.maxYear; i++) { + if (i >= opts.minYear) { + arr.push(''); + } + } + yearHtml = '
' + year + opts.yearSuffix + '
'; + + if (opts.showMonthAfterYear) { + html += yearHtml + monthHtml; + } else { + html += monthHtml + yearHtml; + } + + if (isMinYear && (month === 0 || opts.minMonth >= month)) { + prev = false; + } + + if (isMaxYear && (month === 11 || opts.maxMonth <= month)) { + next = false; + } + + if (c === 0) { + html += ''; + } + if (c === (instance._o.numberOfMonths - 1) ) { + html += ''; + } + + return html += '
'; + }, + + renderTable = function(opts, data, randId) + { + return '
` elements. +### Description +This Displays a styled table that converts to a list on narrow screens -## State: ALPHA - -## Used In: -- [@organisms/by-author/rich-text](/?p=organisms-rich-text) -- [@organisms/by-author/rich-text-description](/?p=organisms-rich-text-description) - -## Notes: +### Status +* Stable as of 5.0.0 ### Variables ~~~ table { - head { - rows [ - { - rowSpanOffset: - type: boolean - cells [ - heading: - type: boolean - colspan: - type: string (number) - rowspan: - type: string (number) - text: - type: string / required - ], / required (at least 1) - }, / required (at least 1) - ] / required - } / required - bodies [ - rows [ - rowSpanOffset: - type: boolean - cells [ - heading: - type: string ("true" || "false") / required - colspan: - type: string (number) - rowspan: - type: string (number) - text: - type: string / required - ], / required (at least 1) - ] / required (at least 1) - ] / required (at least 1) + head { + rows [{ + rowSpanOffset: + type: boolean + cells [{ + heading: + type: boolean + colspan: + type: string (number) / optional + rowspan: + type: string (number) / optional + text: + type: string / required + }] + }] + } + bodies [{ + rows [{ + rowSpanOffset: + type: boolean + cells [ + heading: + type: string ("true" || "false") / required + colspan: + type: string (number) / optional + rowspan: + type: string (number) / optional + text: + type: string / required + }] + }] + }] } ~~~ diff --git a/styleguide/source/_patterns/01-atoms/10-table/table.twig b/styleguide/source/_patterns/01-atoms/10-table/table.twig index 14d483a46d..438b38731e 100644 --- a/styleguide/source/_patterns/01-atoms/10-table/table.twig +++ b/styleguide/source/_patterns/01-atoms/10-table/table.twig @@ -6,15 +6,15 @@ {% for row in table.head.rows %} - - {% for cell in row.cells %} - - {% endfor %} - - {% endfor %} + + {% for cell in row.cells %} + + {% endfor %} + + {% endfor %} {% for body in table.bodies %} diff --git a/styleguide/source/_patterns/01-atoms/10-table/table~with-more-columns.json b/styleguide/source/_patterns/01-atoms/10-table/table~with-more-columns.json deleted file mode 100644 index 62377fbe81..0000000000 --- a/styleguide/source/_patterns/01-atoms/10-table/table~with-more-columns.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "table": { - "head": { - "rows": [{ - "rowSpanOffset":false, - "cells":[{ - "heading": true, - "colspan": "", - "rowspan": "", - "text": "Type" - }, - { - "heading": true, - "colspan": "", - "rowspan": "", - "text": "Name" - }, - { - "heading": true, - "colspan": "", - "rowspan": "", - "text": "Fee" - }, - { - "heading": true, - "colspan": "", - "rowspan": "", - "text": "column4" - }, - { - "heading": true, - "colspan": "", - "rowspan": "", - "text": "column5" - }] - }] - }, - "bodies": [{ - "rows": [{ - "rowSpanOffset":false, - "cells":[{ - "heading": true, - "colspan": "", - "rowspan": "4", - "text": "Freshwater Fishing" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen or Non-Resident Fishing" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "$27.50" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen or Non-Resident Fishing" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen or Non-Resident Fishing" - }] - }, - { - "rowSpanOffset":true, - "cells":[{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen or Non-Resident Minor Fishing (Age 15-17)" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "FREE" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen or Non-Resident Minor Fishing (Age 15-17)" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen or Non-Resident Minor Fishing (Age 15-17)" - }] - }, - { - "rowSpanOffset":true, - "cells":[{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen Fishing (Age 65-69)" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "$16.25" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - }] - }, - { - "rowSpanOffset":true, - "cells":[{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen Fishing (Aged 70 or Over)" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "FREE" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit amet." - }] - }] - }, - { - "rows": [{ - "rowSpanOffset":false, - "cells":[{ - "heading": true, - "colspan": "", - "rowspan": "4", - "text": "Hunting" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen Hunting" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "$27.50" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor." - }] - }, - { - "rowSpanOffset":true, - "cells":[{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Citizen Hunting, (Age 65-69)" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "$16.25" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - }] - }, - { - "rowSpanOffset":true, - "cells":[{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident and Non-Resident Citizen Hunting" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "FREE" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - }] - }, - { - "rowSpanOffset":true, - "cells":[{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Resident Hunting" - }, - { - "heading": false, - "colspan": "", - "rowspan": "", - "text": "$27.50" - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - },{ - "heading": false, - "colspan": "", - "rowspan": "", - "text": "Lorem ipsum dolor sit." - }] - }] - }] - } -} - - - - - - - - - - - - - - - - - - - - - diff --git a/styleguide/source/_patterns/01-atoms/11-text/link-chevron.md b/styleguide/source/_patterns/01-atoms/11-text/link-chevron.md new file mode 100644 index 0000000000..6f4545f7ac --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/11-text/link-chevron.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [link](./?p=atoms-link) pattern showing an example with a chevron. + +### How to generate +* set the `chevron` variable to true diff --git a/styleguide/source/_patterns/01-atoms/11-text/link.json b/styleguide/source/_patterns/01-atoms/11-text/link.json index 9048a97653..3f68bec38b 100644 --- a/styleguide/source/_patterns/01-atoms/11-text/link.json +++ b/styleguide/source/_patterns/01-atoms/11-text/link.json @@ -2,8 +2,7 @@ "link": { "href": "#", "text":"This is a link", - "chevron": "", - "label": "", - "property": "" + "info": "", + "chevron": "" } } \ No newline at end of file diff --git a/styleguide/source/_patterns/01-atoms/11-text/link.md b/styleguide/source/_patterns/01-atoms/11-text/link.md index cf253ba2dc..eee744f4c9 100644 --- a/styleguide/source/_patterns/01-atoms/11-text/link.md +++ b/styleguide/source/_patterns/01-atoms/11-text/link.md @@ -1,29 +1,23 @@ ---- -title: Link ---- -Description: Displays an link with the "" tag and class "ma__content-link". It can also optionally display a chevron. +### Description +This Pattern shows a link with an optional chevron. -## State: ALPHA -### Used In: -- [@molecules/action-gallery](/?p=molecules-action-gallery) -- [@molecules/header-contact](/?p=molecules-header-contact) -- [@organisms/by-author/helpful-links](/?p=organisms-helpful-links) -- [@organisms/by-author/sidebar-promo](/?p=organisms-sidebar-promo) -- [@organisms/by-template/header-alert](/?p=organisms-header-alert) -- [@organisms/by-template/image-credit](/?p=organisms-image-credit) +### Status +* Stable as of 5.0.0 -### Required Variables: +### Variant options +* A [chevron](./?p=atoms-link-chevron) can be rendered after it + + +### Variables ~~~ link { - href: - type: string/required - text: - type: string/required - chevron: - type: boolean - label: - type: string/optional - property: - type: string/optional + href: + type: string / required + text: + type: string / required + info: + type: string / optional + chevron: + type: boolean } ~~~ diff --git a/styleguide/source/_patterns/01-atoms/11-text/link.twig b/styleguide/source/_patterns/01-atoms/11-text/link.twig index 75c6b6f579..c551456bb8 100644 --- a/styleguide/source/_patterns/01-atoms/11-text/link.twig +++ b/styleguide/source/_patterns/01-atoms/11-text/link.twig @@ -1,5 +1,20 @@ +{# Updated to use info instead of label after version 5.5 #} +{% if link.label %} + {% set link = link|merge({"info": link.label}) %} +{% endif %} + +{% set classChevron = link.chevron %} + +{# backward compatible with Release5.0.0 #} +{% if link.chevron and link.chevron is same as ('true') %} + {% set classChevron = true %} +{% endif %} + +{% if link.chevron is same as ('false') %} + {% set classChevron = false %} +{% endif %} + {{ link.text }} + class="ma__content-link {{ classChevron ? 'ma__content-link--chevron' : '' }}" + href="{{ link.href }}" + title="{{ link.info }}">{{ link.text }} diff --git a/styleguide/source/_patterns/01-atoms/11-text/link~chevron.json b/styleguide/source/_patterns/01-atoms/11-text/link~chevron.json index 49f79d22f7..b3a9d8f959 100644 --- a/styleguide/source/_patterns/01-atoms/11-text/link~chevron.json +++ b/styleguide/source/_patterns/01-atoms/11-text/link~chevron.json @@ -1,8 +1,8 @@ { "link": { "href": "#", - "target": "", - "text":"This is a link with a chevron", - "chevron": "true" + "text": "This is a link with a chevron", + "info": "", + "chevron": true } } \ No newline at end of file diff --git a/styleguide/source/_patterns/01-atoms/11-text/paragraph.md b/styleguide/source/_patterns/01-atoms/11-text/paragraph.md index a5626f5aee..4f2a2ee183 100644 --- a/styleguide/source/_patterns/01-atoms/11-text/paragraph.md +++ b/styleguide/source/_patterns/01-atoms/11-text/paragraph.md @@ -1,15 +1,13 @@ ---- -title: Paragraph ---- -Description: Displays the ```

``` tag. +### Description +Displays a paragraph of text. -## State: Alpha -### Used In: -[alot of elements] -### Required Variables: +### Status +* Stable as of 5.0.0 + +### Variables: ~~~ paragraph { - text: - type: string + text: + type: string } ~~~ diff --git a/styleguide/source/_patterns/01-atoms/11-text/publish-state.json b/styleguide/source/_patterns/01-atoms/11-text/publish-state.json new file mode 100644 index 0000000000..e06603271b --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/11-text/publish-state.json @@ -0,0 +1,5 @@ +{ + "publishState": { + "text": "Published State" + } +} diff --git a/styleguide/source/_patterns/01-atoms/11-text/publish-state.md b/styleguide/source/_patterns/01-atoms/11-text/publish-state.md new file mode 100644 index 0000000000..f107dd7482 --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/11-text/publish-state.md @@ -0,0 +1,14 @@ +### Description +Displays large text depicting the state of the page's content. This is usually added as part of the Page Header. + +### Status +* Stable as of 5.0.0 + + +### Variables +~~~ +publishState { + text: + type: string +} +~~~ diff --git a/styleguide/source/_patterns/01-atoms/11-text/publish-state.twig b/styleguide/source/_patterns/01-atoms/11-text/publish-state.twig new file mode 100644 index 0000000000..3aa8f4e1e7 --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/11-text/publish-state.twig @@ -0,0 +1,2 @@ +{# content and html need to be on a single line to remove whitespace #} +

{{ publishState.text }}
\ No newline at end of file diff --git a/styleguide/source/_patterns/01-atoms/11-text/raw-html.md b/styleguide/source/_patterns/01-atoms/11-text/raw-html.md index d3ab4e80ed..cd1a77ec5b 100644 --- a/styleguide/source/_patterns/01-atoms/11-text/raw-html.md +++ b/styleguide/source/_patterns/01-atoms/11-text/raw-html.md @@ -1,14 +1,10 @@ ---- -title: Raw Html ---- -Description: This is an empty container. It displays a "blob" of text that comes from a WYSIWYG editor. It can contain any valid html that the WSYIWG can output. +### Description +This is an empty container that displays a "blob" of text passed to it from a WYSIWYG editor. It can contain any valid html that the WYSIWG can output. -## State: Alpha -### Used In: -### Required Variables: +### Variables: ~~~ rawHtml { - content: - type: string + content: + type: string } ~~~ diff --git a/styleguide/source/_patterns/01-atoms/decorative-link.json b/styleguide/source/_patterns/01-atoms/decorative-link.json index dccad80b19..1250c76c99 100644 --- a/styleguide/source/_patterns/01-atoms/decorative-link.json +++ b/styleguide/source/_patterns/01-atoms/decorative-link.json @@ -2,7 +2,6 @@ "decorativeLink": { "href": "#", "text": "Lorem ipsum dolor sit amet.", - "info": "", - "property": "" + "info": "" } } diff --git a/styleguide/source/_patterns/01-atoms/decorative-link.md b/styleguide/source/_patterns/01-atoms/decorative-link.md index 10acc20afc..1aff17dfb3 100644 --- a/styleguide/source/_patterns/01-atoms/decorative-link.md +++ b/styleguide/source/_patterns/01-atoms/decorative-link.md @@ -1,34 +1,16 @@ ---- -title: Decorative link ---- -Description: an atom for a decorative link. -## State: BETA +Description: This pattern shows a stylized `a` tag with an arrow icon. -### Notes -The svg reference could possibly change. 05-icons and 06-icons-location may still be consolodated. +### Status +* Stable as of 4.0.0 -### Used in: -- [@molecules/action-downloads](/?p=molecules-action-downloads) -- [@molecules/action-event](/?p=molecules-action-event) -- [@molecules/callout-link](/?p=molecules-callout-link) -- [@molecules/illustrated-link](/?p=molecules-illustrated-link) -- [@molecules/related-action](/?p=molecules-related-action) -- [@organisms/by-author/blog-feed](/?p=organisms-blog-feed) -- [@organisms/by-author/callout-alert](/?p=organisms-callout-alert) -- [@organisms/by-author/quick-actions](/?p=organisms-quick-actions) -- [@organisms/by-author/suggested-pages](/?p=organisms-suggested-pages) -- [@organisms/by-author/test-feed](/?p=organisms-test-feed) - -### Required Variables +### Variables ~~~ decorativeLink { - href: - type: string/required - text: - type: string/required - info: (description of link for in use in aria-label) - type: string/optional - property: - type: string/optional + href: + type: string (url) / required + text: + type: string / required + info: + type: string (adds more description to the link) / optional } ~~~ diff --git a/styleguide/source/_patterns/01-atoms/decorative-link.twig b/styleguide/source/_patterns/01-atoms/decorative-link.twig index 3a95203471..a0495ce730 100644 --- a/styleguide/source/_patterns/01-atoms/decorative-link.twig +++ b/styleguide/source/_patterns/01-atoms/decorative-link.twig @@ -1,13 +1,6 @@ -{% set modifier = modifier ? " ma__decorative-link--" ~ modifier : "" %} - - + {{decorativeLink.text}} {% include "@atoms/05-icons/svg-arrow.twig" %} + title="{{ decorativeLink.info }}">{{decorativeLink.text}} {{ icon('arrow') }} diff --git a/styleguide/source/_patterns/01-atoms/divider.md b/styleguide/source/_patterns/01-atoms/divider.md new file mode 100644 index 0000000000..83564cf4e5 --- /dev/null +++ b/styleguide/source/_patterns/01-atoms/divider.md @@ -0,0 +1,10 @@ +### Description +This is a simple horizontal divider. It is typically used at the bottom of the Page Header. + +### Status +* Stable as of 5.0.0 + +### Variables +~~~ +none +~~~ diff --git a/styleguide/source/_patterns/02-molecules/action-event.md b/styleguide/source/_patterns/02-molecules/action-event.md index 9048bf0fd3..4627c03934 100644 --- a/styleguide/source/_patterns/02-molecules/action-event.md +++ b/styleguide/source/_patterns/02-molecules/action-event.md @@ -1,10 +1,10 @@ ---- -title: DEPRECATED - Action Event ---- +### Status +* Obsolete as of 5.0.0 + Description: A singular event including title, link, date and a description of the event. ## State: DEPRECATED ### Notes -- This style is deprecated as it should be generalized to display an event's information anywhere in the site. +- This style is deprecated and was replace be the event-teaser pattern. ### Contains - [@atoms/decorative-link.twig](?p=atoms-decorative-link) ### Used in: diff --git a/styleguide/source/_patterns/02-molecules/action-gallery.json b/styleguide/source/_patterns/02-molecules/action-gallery.json index b8758a1931..09935b74aa 100644 --- a/styleguide/source/_patterns/02-molecules/action-gallery.json +++ b/styleguide/source/_patterns/02-molecules/action-gallery.json @@ -7,19 +7,19 @@ "chevron": "true" }, "items": [{ - "src":"/assets/images/placeholder/80x80.png", + "src":"../../assets/images/placeholder/80x80.png", "alt":"nature is beautiful1" },{ - "src":"/assets/images/placeholder/80x80.png", + "src":"../../assets/images/placeholder/80x80.png", "alt":"nature is beautiful2" },{ - "src":"/assets/images/placeholder/80x80.png", + "src":"../../assets/images/placeholder/80x80.png", "alt":"nature is beautiful3" },{ - "src":"/assets/images/placeholder/80x80.png", + "src":"../../assets/images/placeholder/80x80.png", "alt":"nature is beautiful3" },{ - "src":"/assets/images/placeholder/80x80.png", + "src":"../../assets/images/placeholder/80x80.png", "alt":"nature is beautiful4" }] } diff --git a/styleguide/source/_patterns/02-molecules/action-gallery.md b/styleguide/source/_patterns/02-molecules/action-gallery.md index 5c8641f49a..f31db0e3a3 100644 --- a/styleguide/source/_patterns/02-molecules/action-gallery.md +++ b/styleguide/source/_patterns/02-molecules/action-gallery.md @@ -1,6 +1,6 @@ ---- -title: DEPRECATED - Action Gallery ---- +### Status +* Archived as of 6.0.0 + Description: A teaser for a gallery of images with a link to view the full gallery. ## State: DEPRECATED diff --git a/styleguide/source/_patterns/02-molecules/action-image.md b/styleguide/source/_patterns/02-molecules/action-image.md index 97cfda4832..196a87aa66 100644 --- a/styleguide/source/_patterns/02-molecules/action-image.md +++ b/styleguide/source/_patterns/02-molecules/action-image.md @@ -1,6 +1,6 @@ ---- -title: DEPRECATED - Action Image ---- +### Status +* Obsolete as of 5.0.0 + Description: An image with an optional title and caption. ## State: DEPRECATED ### Notes diff --git a/styleguide/source/_patterns/02-molecules/action-section-activities.md b/styleguide/source/_patterns/02-molecules/action-section-activities.md deleted file mode 100644 index 18a5d67d81..0000000000 --- a/styleguide/source/_patterns/02-molecules/action-section-activities.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: DEPRECATED - Action Section - Activities ---- -Description: A section on an action page that includes a title and activity list. - -### Notes: -- Use [@molecules/action-activities](/?p=molecules-action-activities) for the required variables for what to add to ```actionSection.data``` - -### Base -- [@molecules/action-section](/?p=molecules-action-section) diff --git a/styleguide/source/_patterns/02-molecules/action-section.json b/styleguide/source/_patterns/02-molecules/action-section.json index cdd29b0b9b..7ac050c4b8 100644 --- a/styleguide/source/_patterns/02-molecules/action-section.json +++ b/styleguide/source/_patterns/02-molecules/action-section.json @@ -1,6 +1,7 @@ { "actionSection": { "title":"Overview", + "titleContext": "", "id":"overview:", "path":"organisms-rich-text", "data": { @@ -17,4 +18,4 @@ } } } -} \ No newline at end of file +} diff --git a/styleguide/source/_patterns/02-molecules/action-section.md b/styleguide/source/_patterns/02-molecules/action-section.md index bb67ba0612..6a98ed0792 100644 --- a/styleguide/source/_patterns/02-molecules/action-section.md +++ b/styleguide/source/_patterns/02-molecules/action-section.md @@ -1,6 +1,6 @@ ---- -title: DEPRECATED - Action Section ---- +### Status +* Obsolete as of 5.0.0 + Description: A section of content on an action page that includes a title and multiple types of content. ## State: DEPRECATED ### Notes @@ -15,6 +15,8 @@ Description: A section of content on an action page that includes a title and mu actionSection: { title: type: string + titleContext + type: string / optional id: type: string path: diff --git a/styleguide/source/_patterns/02-molecules/action-section.twig b/styleguide/source/_patterns/02-molecules/action-section.twig index e565445384..561f3b1cc9 100644 --- a/styleguide/source/_patterns/02-molecules/action-section.twig +++ b/styleguide/source/_patterns/02-molecules/action-section.twig @@ -1,6 +1,7 @@ {% if actionSection.title %} {% set compHeading = { "title": actionSection.title, + "titleContext": actionSection.titleContext, "sub": true, "color": "", "id": actionSection.id diff --git a/styleguide/source/_patterns/02-molecules/action-step-as-accordion.md b/styleguide/source/_patterns/02-molecules/action-step-as-accordion.md new file mode 100644 index 0000000000..3b92e6aff4 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/action-step-as-accordion.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Action Step](./?p=molecules-action-step) pattern showing an example show it using an accordion. + +### How to generate +* set the `accordion` variable to true diff --git a/styleguide/source/_patterns/02-molecules/action-step.json b/styleguide/source/_patterns/02-molecules/action-step.json index 33609c403a..1d5bef41da 100644 --- a/styleguide/source/_patterns/02-molecules/action-step.json +++ b/styleguide/source/_patterns/02-molecules/action-step.json @@ -1,10 +1,11 @@ { "actionStep": { - "accordion": true, - "isExpanded": true, + "accordion": false, + "isExpanded": false, "accordionLabel": "Expand Generic steps on completing something", - "icon": "@atoms/05-icons/svg-circle-chevron.twig", + "icon": "circle-chevron", "title": "Generic", + "level": "", "richText": { "rteElements": [{ "path": "@atoms/11-text/paragraph.twig", @@ -18,7 +19,7 @@ "downloadLinks": [{ "downloadLink": { "iconSize": "small", - "icon": "@atoms/05-icons/svg-doc-pdf.twig", + "icon": "doc-pdf", "decorativeLink": { "text": "PDF download item", "href": "#", @@ -31,7 +32,7 @@ },{ "downloadLink": { "iconSize": "small", - "icon": "@atoms/05-icons/svg-doc-docx.twig", + "icon": "doc-docx", "decorativeLink": { "text": "Word download item", "href": "#", @@ -44,7 +45,7 @@ },{ "downloadLink": { "iconSize": "small", - "icon": "@atoms/05-icons/svg-laptop.twig", + "icon": "laptop", "decorativeLink": { "text": "Online Form: Out-of-Country Driver's License Conversion", "href": "#", diff --git a/styleguide/source/_patterns/02-molecules/action-step.md b/styleguide/source/_patterns/02-molecules/action-step.md index b673927ba8..21182ea12f 100644 --- a/styleguide/source/_patterns/02-molecules/action-step.md +++ b/styleguide/source/_patterns/02-molecules/action-step.md @@ -1,19 +1,20 @@ ---- -title: Action Step ---- -Description: Displays details about how to complete a step. +### Description +Displays details about how to complete a step. -## Status: alpha +### Status +* Stable as of 5.0.0 -### Notes: +### Pattern Contains +* Rich Text +* Form Downloads +* Decorative Link -### Contains -- [@organisms/by-author/rich-text](/?p=organisms-rich-text) -- [@molecules/download-link](/?p=molecules-download-link) -- [@atoms/decorative-link](/?p=atoms-decorative-link) +### Variant options +* Displayed as an [accordion](./?p=molecules-action-step-as-accordion) -### Used in: -- [@organisms/by-author/steps-unordered](/?p=organisms-steps-unordered) + +### JavaScript Used +* accordions (js/modules/accordions.js) ### Variables ~~~ @@ -23,18 +24,20 @@ actionStep: { isExpanded type: boolean accordionLabel: - type: string/required if accordion is true + type: string / required if accordion is set to true icon: - type: string/path/optional + type: string (path to icon) / optional title: - type: string/required + type: string / required + level: + type: number / optional richText: - type: object/required @organisms/by-author/rich-text.twig - downloadLinks: - type: array/optional + type: richText /required + downloadLinks: (optional) [{ downloadLink: - type: object/required @molecules/download-link.twig + type: downloadLink / required + }] decorativeLink: - type: object/optional @atoms/decorative-link.twig + type: decorativeLink / optional } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/action-step.twig b/styleguide/source/_patterns/02-molecules/action-step.twig index 4810ad21a5..b2a6562a48 100644 --- a/styleguide/source/_patterns/02-molecules/action-step.twig +++ b/styleguide/source/_patterns/02-molecules/action-step.twig @@ -1,9 +1,9 @@ {% set accordion = actionStep.accordion %} -
{% if accordion %} - {% else %} @@ -24,15 +25,13 @@ {% set richText = actionStep.richText %} {% include "@organisms/by-author/rich-text.twig" %} {% if actionStep.downloadLinks %} -
- {% for item in actionStep.downloadLinks %} - {% set downloadLink = item.downloadLink %} - {% include "@molecules/download-link.twig" %} - {% endfor %} -
+ {% set formDownloads = { "downloadLinks": actionStep.downloadLinks } %} + {% include "@organisms/by-author/form-downloads.twig" %} {% endif %} {% if actionStep.decorativeLink %} - {% set decorativeLink = actionStep.decorativeLink %} - {% include "@atoms/decorative-link.twig" %} +
+ {% set decorativeLink = actionStep.decorativeLink %} + {% include "@atoms/decorative-link.twig" %} +
{% endif %}
diff --git a/styleguide/source/_patterns/02-molecules/action-step~as-accordion.json b/styleguide/source/_patterns/02-molecules/action-step~as-accordion.json new file mode 100644 index 0000000000..94dfb9fadb --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/action-step~as-accordion.json @@ -0,0 +1,65 @@ +{ + "actionStep": { + "accordion": true, + "isExpanded": false, + "accordionLabel": "Expand Generic steps on completing something", + "icon": "circle-chevron", + "title": "Generic", + "richText": { + "rteElements": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus deleniti nisi at adipisci sequi consequuntur qui, corporis pariatur eos laborum nostrum itaque, facere. Doloremque qui temporibus repellendus incidunt in nam provident, aliquam." + } + } + }] + }, + "downloadLinks": [{ + "downloadLink": { + "iconSize": "small", + "icon": "doc-pdf", + "decorativeLink": { + "text": "PDF download item", + "href": "#", + "info": "", + "property": "" + }, + "size": "30kb", + "format": "PDF" + } + },{ + "downloadLink": { + "iconSize": "small", + "icon": "doc-docx", + "decorativeLink": { + "text": "Word download item", + "href": "#", + "info": "", + "property": "" + }, + "size": "40kb", + "format": "DOCX" + } + },{ + "downloadLink": { + "iconSize": "small", + "icon": "laptop", + "decorativeLink": { + "text": "Online Form: Out-of-Country Driver's License Conversion", + "href": "#", + "info": "", + "property": "" + }, + "size": "", + "format": "form" + } + }], + "decorativeLink": { + "href": "#", + "text": "Learn more", + "info": "Learn more about this generic step", + "property": "" + } + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/action-step~without-accordion.json b/styleguide/source/_patterns/02-molecules/action-step~without-accordion.json deleted file mode 100644 index bf42899909..0000000000 --- a/styleguide/source/_patterns/02-molecules/action-step~without-accordion.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "actionStep": { - "accordion": false, - "isExpanded": false, - "accordionLabel": "Expand Generic steps on completing something", - "icon": "@atoms/05-icons/svg-circle-chevron.twig", - "title": "Generic", - "richText": { - "rteElements": [{ - "path": "@atoms/11-text/paragraph.twig", - "data": { - "paragraph": { - "text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus deleniti nisi at adipisci sequi consequuntur qui, corporis pariatur eos laborum nostrum itaque, facere. Doloremque qui temporibus repellendus incidunt in nam provident, aliquam." - } - } - }] - }, - "downloadLinks": [{ - "downloadLink": { - "iconSize": "small", - "icon": "@atoms/05-icons/svg-doc-pdf.twig", - "decorativeLink": { - "text": "PDF download item", - "href": "#", - "info": "", - "property": "" - }, - "size": "30kb", - "format": "PDF" - } - },{ - "downloadLink": { - "iconSize": "small", - "icon": "@atoms/05-icons/svg-doc-docx.twig", - "decorativeLink": { - "text": "Word download item", - "href": "#", - "info": "", - "property": "" - }, - "size": "40kb", - "format": "DOCX" - } - },{ - "downloadLink": { - "iconSize": "small", - "icon": "@atoms/05-icons/svg-laptop.twig", - "decorativeLink": { - "text": "Online Form: Out-of-Country Driver's License Conversion", - "href": "#", - "info": "", - "property": "" - }, - "size": "", - "format": "form" - } - }], - "decorativeLink": { - "href": "#", - "text": "Learn more", - "info": "Learn more about this generic step", - "property": "" - } - } -} \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/arrow-nav-as-next-page.md b/styleguide/source/_patterns/02-molecules/arrow-nav-as-next-page.md new file mode 100644 index 0000000000..93356f8644 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/arrow-nav-as-next-page.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Arrow Nav](./?p=molecules-arrow-nav) pattern showing an example showing the next page option. + +### How to generate +* set the `arrowButton.direction` variable to "right" diff --git a/styleguide/source/_patterns/02-molecules/arrow-nav.md b/styleguide/source/_patterns/02-molecules/arrow-nav.md index 4c10093d5c..101e9152f8 100644 --- a/styleguide/source/_patterns/02-molecules/arrow-nav.md +++ b/styleguide/source/_patterns/02-molecules/arrow-nav.md @@ -1,33 +1,26 @@ ---- -title: Arrow Nav ---- -Description: displays a link to the previous or next page +### Description +This pattern displays a link to the previous or next page. -## Status: alpha +### Status +* Stable as of 5.0.0 -### Notes: - -### Contains -- [@atoms/01-buttons/arrow-button](/?p=atoms-arrow-button) - -### Used in: +### Pattern Contains +* Arrow Button +* Link +### Variant options +* This can also be view as a [next](./?p=molecules-arrow-nav-as-next-page) page navigation ### Variables ~~~ -"arrowNav": { - "arrowButton": { - type: object/required - see arrow-button.twig +arrowNav: { + arrowButton: { + type: arrowButton / required }, - "title": - type: string/required - "link": { - "href": - type: string/url/required - "text": - type: string/required - "info": - type: string/optional - used for screen readers + title: + type: string / required + link: { + type: link / required } } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/arrow-nav.twig b/styleguide/source/_patterns/02-molecules/arrow-nav.twig index 2d18cbfceb..2e98a672a4 100644 --- a/styleguide/source/_patterns/02-molecules/arrow-nav.twig +++ b/styleguide/source/_patterns/02-molecules/arrow-nav.twig @@ -1,8 +1,10 @@ {% set arrowButton = arrowNav.arrowButton %} +
{% include "@atoms/01-buttons/arrow-button.twig" %}

{{ arrowNav.title }}

- {{ arrowNav.link.text }} +
diff --git a/styleguide/source/_patterns/02-molecules/back-button.json b/styleguide/source/_patterns/02-molecules/back-button.json index 1465f0273d..5b8bd18f9e 100644 --- a/styleguide/source/_patterns/02-molecules/back-button.json +++ b/styleguide/source/_patterns/02-molecules/back-button.json @@ -1,9 +1,13 @@ { "backButton": { - "link": { + "button": { "href": "#", + "info": "Back to page about Blah", "text": "Back to previous page", - "info": "Back to page about Blah" + "type": "link", + "size": "small", + "theme": "", + "outline": true } } } diff --git a/styleguide/source/_patterns/02-molecules/back-button.md b/styleguide/source/_patterns/02-molecules/back-button.md index 53c12e891d..d51f16ea97 100644 --- a/styleguide/source/_patterns/02-molecules/back-button.md +++ b/styleguide/source/_patterns/02-molecules/back-button.md @@ -1,23 +1,17 @@ ---- -title: Back Button ---- +### Description +This Pattern is a button that is designed to take the user Back to the Previous page. -Description: Takes the user Back to the Previous page +### Status +* Stable as of 5.0.0 -## Status: alpha - -### Notes: +### Pattern Contains +* Button ### Variables ~~~ -"backButton": { - "link": { - "href": - type: string/required - "text": - type: string/required - "info": - type: string/optional (for screen readers if text isn't descriptive) +backButton: { + button: { + type: button / required } } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/back-button.twig b/styleguide/source/_patterns/02-molecules/back-button.twig index 181e320c6a..8b73fd9932 100644 --- a/styleguide/source/_patterns/02-molecules/back-button.twig +++ b/styleguide/source/_patterns/02-molecules/back-button.twig @@ -1,3 +1,18 @@
- {{ backButton.link.text }} + {% set button = backButton.button %} + + {# backward compatible with v5.6 - swapped custom link with a button #} + {% if backButton.link %} + {% set button = + { "href": backButton.link.href, + "info": backButton.link.info, + "text": backButton.link.text, + "type": "link", + "size": "small", + "theme": "", + "outline": true + } %} + {% endif %} + + {% include "@atoms/01-buttons/button.twig" %}
diff --git a/styleguide/source/_patterns/02-molecules/banner-credit.json b/styleguide/source/_patterns/02-molecules/banner-credit.json new file mode 100644 index 0000000000..ed752610d0 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/banner-credit.json @@ -0,0 +1,7 @@ +{ + "bannerCredit": { + "imageName": "Name of image", + "imageAuthor": "Taken by Somebody", + "icon": "" + } +} diff --git a/styleguide/source/_patterns/02-molecules/banner-credit.md b/styleguide/source/_patterns/02-molecules/banner-credit.md new file mode 100644 index 0000000000..dbbd5e9e4e --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/banner-credit.md @@ -0,0 +1,17 @@ +### Description +This pattern is used to provide credit for a banner image. + +### Status +* Stable as of 5.7.0 + +### Variables +~~~ +bannerCredit: { + imageName: + type: string / required, + imageAuthor: + type: string / required, + icon: + type: string (path to icon) / optional +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/banner-credit.twig b/styleguide/source/_patterns/02-molecules/banner-credit.twig new file mode 100644 index 0000000000..0f8e448bbf --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/banner-credit.twig @@ -0,0 +1,10 @@ +
+
+
+ {% set iconPath = bannerCredit.icon ? : "marker-outline" %} + {{ icon(iconPath) }} +
+
{{ bannerCredit.imageName }}
+
{{ bannerCredit.imageAuthor }}
+
+
diff --git a/styleguide/source/_patterns/02-molecules/button-alert.json b/styleguide/source/_patterns/02-molecules/button-alert.json index 2718be3d6d..716bcef9b5 100644 --- a/styleguide/source/_patterns/02-molecules/button-alert.json +++ b/styleguide/source/_patterns/02-molecules/button-alert.json @@ -2,6 +2,7 @@ "buttonAlert": { "hideText": "Hide", "showText": "Show", + "class": "", "text": "Updates" } } diff --git a/styleguide/source/_patterns/02-molecules/button-alert.md b/styleguide/source/_patterns/02-molecules/button-alert.md index f955d98085..d304c99446 100644 --- a/styleguide/source/_patterns/02-molecules/button-alert.md +++ b/styleguide/source/_patterns/02-molecules/button-alert.md @@ -1,27 +1,22 @@ ---- -title: DEPRECATED - Alert Button ---- -Description: Black styled button used to control and accordion. +### Description +This is a black button designed to show and hide content (text toggles as well) -## State: Deprecated +### Status +* Stable as of 5.0.0 -### Notes -- Will be moved into the same directory as the other atom buttons. -- Button text toggles between "hide" and "show" states - -### Used in: -[@organisms/by-template/emergency-alerts.twig](/?p=organisms-emergency-alerts) - -### Contains +### JavaScript Used +* Emergency Alerts (js/modules/emergencyAlerts.js) ### Variables ~~~ buttonAlert: { hideText: - type: string/required, + type: string / required, showText: - type: string/required, + type: string / required, + class: + type: string / optional, text: - type: string/optional + type: string / optional } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/button-alert.twig b/styleguide/source/_patterns/02-molecules/button-alert.twig index e435be4cce..615646242e 100644 --- a/styleguide/source/_patterns/02-molecules/button-alert.twig +++ b/styleguide/source/_patterns/02-molecules/button-alert.twig @@ -1,4 +1,4 @@ - diff --git a/styleguide/source/_patterns/02-molecules/callout-link-as-description.md b/styleguide/source/_patterns/02-molecules/callout-link-as-description.md new file mode 100644 index 0000000000..58a8ff7f23 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/callout-link-as-description.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Callout Link](./?p=molecules-callout-link) pattern showing an example styled with description text. + +### How to generate +* assign text content to the `description` variable. diff --git a/styleguide/source/_patterns/02-molecules/callout-link-as-white.md b/styleguide/source/_patterns/02-molecules/callout-link-as-white.md new file mode 100644 index 0000000000..1cff988e5b --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/callout-link-as-white.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Callout Link](./?p=molecules-callout-link) pattern showing the callout link styled with a white background. + +### How to generate +* set the `theme` equal to "white". diff --git a/styleguide/source/_patterns/02-molecules/callout-link-external.md b/styleguide/source/_patterns/02-molecules/callout-link-external.md deleted file mode 100644 index 2fe9a4ad98..0000000000 --- a/styleguide/source/_patterns/02-molecules/callout-link-external.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Callout link - external ---- -Description: External Variant of Callout link. - -### Notes: -- _type variable is set to 'external'_ - -### Base -- [@molecules/callout-link](/?p=molecules-callout-link) diff --git a/styleguide/source/_patterns/02-molecules/callout-link-with-details.md b/styleguide/source/_patterns/02-molecules/callout-link-with-details.md new file mode 100644 index 0000000000..8cca0c98c8 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/callout-link-with-details.md @@ -0,0 +1,6 @@ +### Description +This is a variant of the [Callout Link](./?p=molecules-callout-link) pattern showing an example styled with details. + +### How to generate +* assign text content to the `time`, `emphasized`, and `eyebrow` variables. +* set the `theme` equal to "white". diff --git a/styleguide/source/_patterns/02-molecules/callout-link.json b/styleguide/source/_patterns/02-molecules/callout-link.json index 358b1f1b78..1b8b82c7f6 100644 --- a/styleguide/source/_patterns/02-molecules/callout-link.json +++ b/styleguide/source/_patterns/02-molecules/callout-link.json @@ -1,8 +1,7 @@ { "calloutLink": { - "text": "Order a MassParks Pass online through Reserve America", - "type": "", + "text": "Link to another page", "href": "#", - "info": "" + "info": "Find out more about this thing on our blah page" } -} \ No newline at end of file +} diff --git a/styleguide/source/_patterns/02-molecules/callout-link.md b/styleguide/source/_patterns/02-molecules/callout-link.md index dd7c0be278..8e4266f0a3 100644 --- a/styleguide/source/_patterns/02-molecules/callout-link.md +++ b/styleguide/source/_patterns/02-molecules/callout-link.md @@ -1,25 +1,34 @@ ---- -title: Callout link ---- -Description: An decorative link `` element which wraps a styled container. +Description: This pattern shows a link styled as a card -## Status: BETA +### Status +* Stable as of 6.0.0 -### Used in: -- [@organisms/by-author/action-finder](/?p=organisms-action-finder) -- [@organisms/by-author/key-actions](/?p=organisms-key-actions) -- [@organisms/by-author/top-actions](/?p=organisms-top-actions) +### Pattern Contains +* SVG Arrow atom -### Required Variables +### Variant options +* With [description](./?p=molecules-callout-link-as-description) text. +* With theme set to [white](./?p=molecules-callout-link-as-white) +* With [details](./?p=molecules-callout-link-with-details) with the `theme` set to "white", and a string supplied to the eyebrow, details, and emphasized properties. + +### Variables ~~~ calloutLink: { href: - type: string/required + type: string / required text: - type: string/required - type: - type: string/optional ("external") + type: string / required info: - type: string/optional + type: string (adds more description about the link) / optional + description: + type: string (adds a short description under the title text) / optional + theme: + type: string (" " or "white") / optional + eyebrow: + type: string / optional + emphasized: + type: string / optional + time: + type: string / optional } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/callout-link.twig b/styleguide/source/_patterns/02-molecules/callout-link.twig index f2dc08ce04..9e99f6d041 100644 --- a/styleguide/source/_patterns/02-molecules/callout-link.twig +++ b/styleguide/source/_patterns/02-molecules/callout-link.twig @@ -1,7 +1,25 @@ - - - - {{ calloutLink.text }}{% if calloutLink.info %}{{ calloutLink.info }}{% endif %} {% include "@atoms/05-icons/svg-arrow.twig" %} - - - +{% set calloutLinkTheme = calloutLink.theme ? "ma__callout-link--" ~ calloutLink.theme : "" %} + + diff --git a/styleguide/source/_patterns/02-molecules/callout-link~as-description.json b/styleguide/source/_patterns/02-molecules/callout-link~as-description.json new file mode 100644 index 0000000000..14988437da --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/callout-link~as-description.json @@ -0,0 +1,8 @@ +{ + "calloutLink": { + "text": "Link to another page", + "href": "#", + "info": "Find out more about this thing on our blah page", + "description": "This is some more important information about the text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque rutrum mauris quam, et imperdiet purus pellentesque vel." + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/callout-link~as-white.json b/styleguide/source/_patterns/02-molecules/callout-link~as-white.json new file mode 100644 index 0000000000..a75ea07ff4 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/callout-link~as-white.json @@ -0,0 +1,8 @@ +{ + "calloutLink": { + "text": "Link to another page", + "href": "#", + "info": "Find out more about this thing on our blah page", + "theme": "white" + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/callout-link~external.json b/styleguide/source/_patterns/02-molecules/callout-link~external.json deleted file mode 100644 index b0f4815d63..0000000000 --- a/styleguide/source/_patterns/02-molecules/callout-link~external.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "calloutLink": { - "text": "Order a MassParks Pass online through Reserve America", - "type": "external" - } -} \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/callout-link~with-details.json b/styleguide/source/_patterns/02-molecules/callout-link~with-details.json new file mode 100644 index 0000000000..5ae4037b2e --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/callout-link~with-details.json @@ -0,0 +1,11 @@ +{ + "calloutLink": { + "text": "Attorney General Announces a New Health Care Program", + "href": "#", + "info": "Find out more about this thing on our blah page", + "eyebrow": "Press Release", + "emphasized": "Office of the Attorney General", + "time": "30 Mins Ago", + "theme": "white" + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/callout-stats-left.md b/styleguide/source/_patterns/02-molecules/callout-stats-left.md index 6b548ddd92..81c730c9cb 100644 --- a/styleguide/source/_patterns/02-molecules/callout-stats-left.md +++ b/styleguide/source/_patterns/02-molecules/callout-stats-left.md @@ -1,10 +1,5 @@ ---- -title: Callout stats - Left ---- -Description: Left Variant of Callout stats. +### Description +This is a variant of the [Callout Stats](./?p=molecules-callout-stats) pattern showing an example floated to the left. -### Notes: -- _pull variable is set to 'left'_ - -### Base -- [@molecules/callout-stats](/?p=molecules-callout-stats) +### How to generate +* set the `pull` variable to 'left' diff --git a/styleguide/source/_patterns/02-molecules/callout-stats-right.md b/styleguide/source/_patterns/02-molecules/callout-stats-right.md index 5173737e2f..8eb54ec23e 100644 --- a/styleguide/source/_patterns/02-molecules/callout-stats-right.md +++ b/styleguide/source/_patterns/02-molecules/callout-stats-right.md @@ -1,10 +1,5 @@ ---- -title: Callout stats - Right ---- -Description: Right Variant of Callout stats. +### Description +This is a variant of the [Callout Stats](./?p=molecules-callout-stats) pattern showing an example floated to the right. -### Notes: -- _pull variable is set to 'right'_ - -### Base -- [@molecules/callout-stats](/?p=molecules-callout-stats) +### How to generate +* set the `pull` variable to 'right' diff --git a/styleguide/source/_patterns/02-molecules/callout-stats.md b/styleguide/source/_patterns/02-molecules/callout-stats.md index 563b198d05..bd3c5a23a5 100644 --- a/styleguide/source/_patterns/02-molecules/callout-stats.md +++ b/styleguide/source/_patterns/02-molecules/callout-stats.md @@ -1,23 +1,22 @@ ---- -title: Callout stats ---- -Description: A stat displayed within a paragraph of content floated either left or right. +### Description +This is Pattern is used to highlight important stats. -## Status: ALPHA +### Status +* Stable as of 5.0.0 -### Used in: -- [@organisms/by-author/action-detai;s](/?p=organisms-action-details) -- [@organisms/by-author/rich-text-description](/?p=organisms-rich-text-description) -- [@organisms/by-author/rich-text](/?p=organisms-rich-text) -### Required Variables +### Variant options +* This pattern can be floated [left](./?p=molecules-callout-stats-left) or [right](./?p=molecules-callout-stats-right) + + +### Variables ~~~ statsCallout: { pull: - NULL or 'left' or 'right' + type: string ('', 'left', 'right') stat: - string/required + type: string / required content: - string/required + type: string / required } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/callout-stats.twig b/styleguide/source/_patterns/02-molecules/callout-stats.twig index b945dce156..763b778f19 100644 --- a/styleguide/source/_patterns/02-molecules/callout-stats.twig +++ b/styleguide/source/_patterns/02-molecules/callout-stats.twig @@ -2,10 +2,8 @@ modifier classes include ma__callout-stats--left and ma__callout-stats--right #} -{% if statsCallout.pull %} - {% set modifierClass = "ma__callout-stats--" ~ statsCallout.pull %} -{% endif %} +{% set modifierClass = statsCallout.pull ? "ma__callout-stats--" ~ statsCallout.pull : "" %}
-
{{statsCallout.stat}}
-
{{statsCallout.content}}
+ {{statsCallout.stat}} + {{statsCallout.content}}
\ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/collapsible-header.json b/styleguide/source/_patterns/02-molecules/collapsible-header.json new file mode 100644 index 0000000000..219712b581 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/collapsible-header.json @@ -0,0 +1,7 @@ +{ + "collapsibleHeader": { + "info": "Click here to read more about this thing", + "title": "Collapsible Header", + "icon": "circle-chevron" + } +} diff --git a/styleguide/source/_patterns/02-molecules/collapsible-header.md b/styleguide/source/_patterns/02-molecules/collapsible-header.md new file mode 100644 index 0000000000..7bdff4e957 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/collapsible-header.md @@ -0,0 +1,17 @@ +### Description +This is pattern shows an accordion button with an optional icon. + +### Status +* Stable as of 5.0.0 + +### Variables +~~~ +collapsibleHeader: { + info: + type: string / optional, + title: + type: string / required + icon: + type: string (path to icon) / optional +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/collapsible-header.twig b/styleguide/source/_patterns/02-molecules/collapsible-header.twig new file mode 100644 index 0000000000..e8fbd0f6dc --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/collapsible-header.twig @@ -0,0 +1,12 @@ +
+ +
diff --git a/styleguide/source/_patterns/02-molecules/contact-group-as-address.md b/styleguide/source/_patterns/02-molecules/contact-group-as-address.md new file mode 100644 index 0000000000..d4579235f7 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-group-as-address.md @@ -0,0 +1,8 @@ +### Description +This is a variant of the [Contact Group](./?p=molecules-contact-group) pattern showing an example with as a Address contact. + +### How to generate +* set the `icon` variable to "marker" +* set the `name` variable to "Address" +* set the `items.type` variable to "address" +* populate the `address` and 'link' (directions) variable diff --git a/styleguide/source/_patterns/02-molecules/contact-group-as-fax.md b/styleguide/source/_patterns/02-molecules/contact-group-as-fax.md new file mode 100644 index 0000000000..95a955acbc --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-group-as-fax.md @@ -0,0 +1,11 @@ +### Description +This is a variant of the [Contact Group](./?p=molecules-contact-group) pattern showing an example with as a Fax contact. + +### How to generate +* set the `icon` variable to "fax-icon" +* populate the `name` variable to "Fax" +* populate the `level` variable +* populate the `contactName` variable +* set the `items.type` variable to "phone" +* populate the `link` variable + diff --git a/styleguide/source/_patterns/02-molecules/contact-group-as-online.md b/styleguide/source/_patterns/02-molecules/contact-group-as-online.md new file mode 100644 index 0000000000..20d766e864 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-group-as-online.md @@ -0,0 +1,11 @@ +### Description +This is a variant of the [Contact Group](./?p=molecules-contact-group) pattern showing an example with as a Online contact. + +### How to generate +* set the `icon` variable to "laptop" +* set the `name` variable to "Online" +* populate the `level` variable +* populate the `contactName` variable +* set the `items.type` variable to "email" or "online" +* populate the `link` variable + diff --git a/styleguide/source/_patterns/02-molecules/contact-group.json b/styleguide/source/_patterns/02-molecules/contact-group.json index d0c723e764..5132c1992b 100644 --- a/styleguide/source/_patterns/02-molecules/contact-group.json +++ b/styleguide/source/_patterns/02-molecules/contact-group.json @@ -1,29 +1,27 @@ { "contactGroup": { - "icon": "@atoms/05-icons/svg-phone.twig", + "icon": "phone", "name": "Phone", + "level": "", + "contactName": "", "items": [{ "type": "phone", - "property": "telephone", "label": "Main:", "address": "", "link": { "href": "+14134994262", "text": "(413) 499-4262", - "info": "", - "property": "" + "info": "" }, "details": "This line is open from 9:00 a.m. - 5:00 p.m., M-F" },{ "type": "phone", - "property": "", "label": "Toll Free:", "address": "", "link":{ "href": "+18004324321", "text": "(800) 432-4321", - "info": "", - "property": "" + "info": "" }, "details": "This line is open from 9:00 a.m. - 5:00 p.m., M-F" }] diff --git a/styleguide/source/_patterns/02-molecules/contact-group.md b/styleguide/source/_patterns/02-molecules/contact-group.md index 2870d96196..b8eb74ebbb 100644 --- a/styleguide/source/_patterns/02-molecules/contact-group.md +++ b/styleguide/source/_patterns/02-molecules/contact-group.md @@ -1,50 +1,43 @@ ---- -title: Contact Group ---- -Description: A list of a specific type of contact information for an entity wrapped in a container, described by a title and optional icon. +### Description +This pattern shows a group of related contact information (phone, fax, online, or address). -## State: ALPHA -### Notes: -* Multiple contact groups are often aggregated into an array, used by Contact Us molecule. -* Most fields for the item are optional and will render differently based on the item.type used. -### Used In: -- [@molecules/contact-us](/?p=molecules-contact-us) +### Status +* Stable as of 5.0.0 -### Contains +### Pattern Contains +* Contact Item +* Decorative Link +### Variant options +* Phone is currently shown +* [Online](./?p=molecules-contact-group-as-online) +* [Fax](./?p=molecules-contact-group-as-fax) +* [Address](./?p=molecules-contact-group-as-address) -### Variables: + +### Variables ~~~ -group: { // aggregated in array contactUs.contactGroups +group: { icon: - type: string (include path to icon twig template) / optional + type: string (path to icon) / optional name: - type: string ("Phone" || "Online" || "Address" || "Fax") / optional - items: [ - ..., - { - type: - type: string ("phone" || "online" || "address" || "fax" ) / required, - property: - type: string / optional - label: - type: string / optional - address: - type: string (html allowed) / optional - link: { - href: - type: string (url) / optional, - text: - type: string / required if href exists, - info: - type: string / optional, - property": - type: string / optional - } - details: - type: string / optional - }, - ... - ] / required + type: string ("Phone", "Online", "Fax", or "Address") / optional + level: + type: number / optional + contactName: + type: string / optional + items: [{ + type: + type: string ("phone", "online", "email", "address" ) / required, + label: + type: string / optional + address: + type: string (html allowed) / optional + link: { + type: decorativeLink (href is optional for type "address") / required + } + details: + type: string / optional + }] } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/contact-group.twig b/styleguide/source/_patterns/02-molecules/contact-group.twig index 78c1a3c7ba..7be240854a 100644 --- a/styleguide/source/_patterns/02-molecules/contact-group.twig +++ b/styleguide/source/_patterns/02-molecules/contact-group.twig @@ -1,91 +1,15 @@
{% if contactGroup.name and contactGroup.icon %} -
- {% include contactGroup.icon %} + {% set headingLevel = contactGroup.level ? : 2 %} + + {{ icon(contactGroup.icon) }} {{contactGroup.name}} -
+ {% endif %} - {% for item in contactGroup.items %} - {# if using the older 3.4.1 data model #} - {% if item.link and item.link is not iterable %} - {# update the older code's data to match the new version #} - {% set link = { - "href": item.link, - "text": item.type == "address" ? "directions" : item.value, - "info": "", - "property": item.type == "address" ? "url" : item.property - } %} - {% else %} - {% set link = item.link %} - {% endif %} - - {# if using the older 3.4.1 data model #} - {% if item.value %} - {# update the older code's data to match the new version #} - {% set address = item.value %} - {% else %} - {% set address = item.address %} - {% endif %} - -
- {% if item.label %} - {{item.label}} - {% endif %} - - {# Online wrap value in a link #} - {% if item.type == "online" %} - {% set decorativeLink = link %} - {% include "@atoms/decorative-link.twig" %} - {# Phone - add tel: to href #} - {% elseif item.type == "phone" %} - {{ link.text }} - - {# Email - add mailto: to href #} - {% elseif item.type == "email" %} - {{ link.text }} - - {# Address - RTE version of value and look for directions link #} - {% elseif item.type == "address" %} -
- {{ address|nl2br|raw }} -
- {% if link.href %} -
- {% set decorativeLink = link %} - {% include "@atoms/decorative-link.twig" %} -
- {% endif %} - - {# Default - just spit out the value #} - {% else %} - {{ link.text }} - {% if link.property %} - - {% endif %} - {% endif %} -
- {% if item.details %} -

{{ item.details }}

- {% endif %} - {% endfor %} + {% block groupItems %} + {% endblock %} + {% for item in contactGroup.items %} + {% set item = item|merge({"contactName": contactGroup.contactName }) %} + {% include "@molecules/contact-item.twig" %} + {% endfor %}
diff --git a/styleguide/source/_patterns/02-molecules/contact-group~as-address.json b/styleguide/source/_patterns/02-molecules/contact-group~as-address.json new file mode 100644 index 0000000000..167d65ec73 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-group~as-address.json @@ -0,0 +1,17 @@ +{ + "contactGroup": { + "icon": "marker", + "name": "Address", + "items": [{ + "type": "address", + "label": "", + "address": "555 Park Drive\nBoston, MA 02231", + "link": { + "href": "https://www.google.com/maps/place/555+Park+Dr,+Boston,+MA+02215", + "text": "directions", + "info": "" + }, + "details": "" + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/contact-group~as-fax.json b/styleguide/source/_patterns/02-molecules/contact-group~as-fax.json new file mode 100644 index 0000000000..e8f2e31f34 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-group~as-fax.json @@ -0,0 +1,29 @@ +{ + "contactGroup": { + "icon": "fax-icon", + "name": "Fax", + "level": "", + "contactName": "", + "items": [{ + "type": "phone", + "label": "Main:", + "address": "", + "link": { + "href": "+14134994262", + "text": "(413) 499-4262", + "info": "" + }, + "details": "This line is open from 9:00 a.m. - 5:00 p.m., M-F" + },{ + "type": "phone", + "label": "Toll Free:", + "address": "", + "link":{ + "href": "+18004324321", + "text": "(800) 432-4321", + "info": "" + }, + "details": "" + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/contact-group~as-online.json b/styleguide/source/_patterns/02-molecules/contact-group~as-online.json new file mode 100644 index 0000000000..5919b809ce --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-group~as-online.json @@ -0,0 +1,29 @@ +{ + "contactGroup": { + "icon": "laptop", + "name": "Online", + "level": "", + "contactName": "", + "items": [{ + "type": "email", + "label":"Email:", + "address": "", + "link": { + "href":"email@email.com", + "text": "email@email.com", + "info": "" + }, + "details":"" + },{ + "type": "online", + "label":"Web:", + "address": "", + "link": { + "href":"#", + "text": "Contact Form", + "info": "" + }, + "details":"" + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/contact-item.json b/styleguide/source/_patterns/02-molecules/contact-item.json new file mode 100644 index 0000000000..1eda735b33 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-item.json @@ -0,0 +1,14 @@ +{ + "item": { + "contactName": "Department of Conservation and Recreation", + "type": "phone", + "label": "Main:", + "address": "", + "link": { + "href": "+14134994262", + "text": "(413) 499-4262", + "info": "" + }, + "details": "This line is open from 9:00 a.m. - 5:00 p.m., M-F" + } +} diff --git a/styleguide/source/_patterns/02-molecules/contact-item.md b/styleguide/source/_patterns/02-molecules/contact-item.md new file mode 100644 index 0000000000..56ac19f632 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-item.md @@ -0,0 +1,38 @@ +### Description +This pattern shows an item of related contact information (phone, fax, online, or address). + +### To do +This pattern currently depends on a wrapper to display properly. In the future, it should be updated to exist correctly on its own. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Decorative Link + +### Variant options +* Phone is currently shown. The variants are shown for the group wrapper. +* [Online](./?p=molecules-contact-group-as-online) +* [Fax](./?p=molecules-contact-group-as-fax) +* [Address](./?p=molecules-contact-group-as-address) + + +### Variables +~~~ + item: { + contactName: + type: string / required, + type: + type: string ("phone", "online", "email", "address" ) / required, + label: + type: string / optional + address: + type: string (html allowed) / optional + link: { + type: decorativeLink (href is optional for type "address") / required + } + details: + type: string / optional + } +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/contact-item.twig b/styleguide/source/_patterns/02-molecules/contact-item.twig new file mode 100644 index 0000000000..b40c18aa72 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-item.twig @@ -0,0 +1,60 @@ +{# if using the older 3.4.1 data model #} +{% if item.link and item.link is not iterable %} + {# update the older code's data to match the new version #} + {% set link = { + "href": item.link, + "text": item.type == "address" ? "directions" : item.value, + "info": item.info + } %} +{% else %} + {% set link = item.link %} +{% endif %} + +{# if using the older 3.4.1 data model #} +{% if item.value %} + {# update the older code's data to match the new version #} + {% set address = item.value %} +{% else %} + {% set address = item.address %} +{% endif %} + +
+ {% if item.label %} + {{item.label}} + {% endif %} + + {# Online wrap value in a link #} + {% if item.type == "online" %} + {% set decorativeLink = link %} + {% include "@atoms/decorative-link.twig" %} + {# Phone - add tel: to href #} + {% elseif item.type == "phone" %} + + {% if item.contactName %}Call {{ item.contactName }}{% if item.label %}, {{item.label}} {% endif %}at {% endif %}{{ link.text }} + + {# Email - add mailto: to href #} + {% elseif item.type == "email" %} + {% if item.contactName %}Email {{ item.contactName }} at {% endif %}{{ link.text }} + + {# Address - RTE version of value and look for directions link #} + {% elseif item.type == "address" %} +
+ {{ address|nl2br|raw }} +
+ {% if link.href %} +
+ {% set decorativeLink = link %} + {% include "@atoms/decorative-link.twig" %} +
+ {% endif %} + {% else %} + {{ link.text }} + {% endif %} +
+{% if item.details %} +

{{ item.details }}

+{% endif %} diff --git a/styleguide/source/_patterns/02-molecules/contact-us-as-accordion.md b/styleguide/source/_patterns/02-molecules/contact-us-as-accordion.md new file mode 100644 index 0000000000..bb50293283 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-us-as-accordion.md @@ -0,0 +1,6 @@ +### Description +This is a variant of the [Contact Us](./?p=molecules-contact-us) pattern showing an example with accordions enabled. + +### How to generate +* Set the `accordion` variable to true +* Optionally, set the `expanded` variable to true to show it expanded on page load \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/contact-us-with-linked-title.md b/styleguide/source/_patterns/02-molecules/contact-us-with-linked-title.md new file mode 100644 index 0000000000..78d368e40b --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-us-with-linked-title.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Contact Us](./?p=molecules-contact-us) pattern showing an example with accordions enabled. + +### How to generate +* populate the `subTitle.href` variable diff --git a/styleguide/source/_patterns/02-molecules/contact-us.json b/styleguide/source/_patterns/02-molecules/contact-us.json index 94c60b3953..340dc87a87 100644 --- a/styleguide/source/_patterns/02-molecules/contact-us.json +++ b/styleguide/source/_patterns/02-molecules/contact-us.json @@ -4,111 +4,103 @@ "isExpanded": false, "subTitle": { "href":"", - "text": "Department of Conservation and Recreation" + "text": "Department of Conservation and Recreation", + "level": "" }, "groups": [{ - "icon": "@atoms/05-icons/svg-phone.twig", + "icon": "phone", "name": "Phone", + "level": "", + "contactName": "Department of Conservation and Recreation", "items": [{ "type": "phone", - "property": "", "label":"Main:", "link": { "href": "+14134994262", "text": "(413) 499-4262", - "info": "", - "property": "" + "info": "" }, "details":"This line is open from 9:00 a.m. - 5:00 p.m., M-F" },{ "type": "phone", - "property": "", "label":"Toll Free:", "link":{ "href": "+18004324321", "text": "(800) 432-4321", - "info": "", - "property": "" + "info": "" }, "details":"This line is open from 9:00 a.m. - 5:00 p.m., M-F" },{ "type": "phone", - "property": "", "label":"TTY:", "link": { "href":"+16175557777", "text": "(617) 555-7777", - "info": "", - "property": "" + "info": "" }, "details":"For those who need accessible services" },{ "type": "phone", - "property": "", "label":"Voice Relay:", "link":{ "href":"16175555255", "text": "(617) 555-5255", - "info": "", - "property": "" + "info": "" }, "details":"" }] },{ - "icon": "@atoms/05-icons/svg-laptop.twig", + "icon": "laptop", "name": "Online", - "hidden": "", + "level": "", + "contactName": "Department of Conservation and Recreation", "items": [{ "type": "email", - "property": "", "label":"Email:", "link": { "href":"email@email.com", "text": "email@email.com", - "info": "", - "property": "" + "info": "" }, "details":"" },{ "type": "online", - "property": "", "label":"Web:", "link": { "href":"#", "text": "Contact Form", - "info": "", - "property": "" + "info": "" }, "details":"" }] },{ - "icon": "@atoms/05-icons/svg-fax-icon.twig", + "icon": "fax-icon", "name": "Fax", + "level": "", + "contactName": "Department of Conservation and Recreation", "items": [{ "type": "fax", - "property": "", "label":"Main:", "link": { "href":"+14134994262", "text": "(413) 499-4262", - "info": "", - "property": "" + "info": "" }, "details":"Please allow 24 hours for a response" }] },{ - "icon": "@atoms/05-icons/svg-marker.twig", + "icon": "marker", "name": "Address", + "level": "", + "contactName": "Department of Conservation and Recreation", "items": [{ "type": "address", - "property": "", "label": "", "address": "555 Park Drive\nBoston, MA 02231", "link": { "href": "https://www.google.com/maps/place/555+Park+Dr,+Boston,+MA+02215", "text": "directions", - "info": "", - "property": "" + "info": "" }, "details": "" }] diff --git a/styleguide/source/_patterns/02-molecules/contact-us.md b/styleguide/source/_patterns/02-molecules/contact-us.md index c83e6c9064..7c7137aef2 100644 --- a/styleguide/source/_patterns/02-molecules/contact-us.md +++ b/styleguide/source/_patterns/02-molecules/contact-us.md @@ -1,36 +1,48 @@ ---- -title: Contact Us ---- -Description: Displays Contact information to the user. +### Description +This pattern displays a collection of Contact Groups -## State: Alpha +### Status +* Stable as of 5.0.0 -### Notes: -- This component can be viewed as an accordion or in list view -- in List view, the first two contact groups should be visible and the remainder are collapsed. +### Pattern Contains +* Column Heading +* Contact Group -### Used In: -[@organism/by-template/action-header](?p=organism-action-header) +### Variant options +* With a [linked title](./?p=molecules-contact-us-with-linked-title) +* As an [accordion](./?p=molecules-contact-us-as-accordion) -### Contains -[@molecules/contact-group](?p=molecules-contact-group) -[@atoms/04-headings/comp-heading](?p=atoms-comp-heading) -[@atoms/04-headings/column-heading](?p=atoms-column-heading) -### Variables: -~~~ -contactUs: { - accordion: - type: boolean - isExpanded: - type: boolean +### Usage Guidelines +* This component can be viewed as an accordion or in list view +* When in the Accordion view, all or no contact groups (depending on accordion state) +* When in the List view, the first two contact groups or shown by default with the remainder collapsed. - subTitle: { - type: object/optional - see @atoms/04-headings/column-heading.md - } +### JavaScript Used +* This pattern uses JavaScript for the accordions (js/modules/accordions.js) - groups: [{ - type: array of objects/required see @molecules/contact-group.md - }] +### Variables +~~~ +contactUs: { + accordion: + type: boolean + isExpanded: + type: boolean + subTitle: { + type: columnHeading / optional + } + showMore: { + type: boolean / optional + } + hideSecondary: { + type: boolean / optional + } + level: + type: number / optional + contactName: + type: string / required + groups: [{ + type: array of contactGroup / required + }] } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/contact-us.twig b/styleguide/source/_patterns/02-molecules/contact-us.twig index 10fcc7cdfe..10e399ad49 100644 --- a/styleguide/source/_patterns/02-molecules/contact-us.twig +++ b/styleguide/source/_patterns/02-molecules/contact-us.twig @@ -1,50 +1,80 @@ -{% set outerAccordion = contactUs.accordion %} - -{% if outerAccordion %} - {% set accordionClass = "ma__contact-us--accordion js-accordion" %} -{% else %} - {% if contactUs.groups|length > 2 %} - {% set accordionClass = "js-accordion" %} - {% set inlineAccordion = true %} - {% endif %} -{% endif %} - -
- - {% if contactUs.subTitle %} - {% if outerAccordion %} - - {% endif %} - {% endif %} - - {% if inlineAccordion %} - {# Show first 2 contact groups outside of accordion #} - {% for contactGroup in contactUs.groups[:2] %} - {% include "@molecules/contact-group.twig" %} - {% endfor %} - - {# Show 3rd+ contact groups inside of accordion (if they exist) #} -
- {% for contactGroup in contactUs.groups[2:last] %} - {% include "@molecules/contact-group.twig" %} - {% endfor %} -
-
- -
- {% else %} -
- {% for contactGroup in contactUs.groups %} - {% include "@molecules/contact-group.twig" %} - {% endfor %} -
- {% endif %} -
+{% set outerAccordion = contactUs.accordion %} + +{% if outerAccordion %} + {% set accordionClass = "ma__contact-us--accordion js-accordion" %} +{% else %} + {% if contactUs.groups|length > 2 or contactUs.showMore %} + {% set accordionClass = "js-accordion" %} + {% set inlineAccordion = true %} + {% endif %} +{% endif %} + +{% set groupHeading = contactUs.level ? : 2 %} + +
+ + {% if contactUs.subTitle %} + {% if outerAccordion %} + + {% endif %} + {% set groupHeading = groupHeading + 1 %} + {% set contactName = contactUs.subTitle.text %} + {% endif %} + + {% block contactGroups %} + {% if inlineAccordion %} + {% block primaryContactGroups %} + {# Show first 2 contact groups outside of accordion #} + {% for group in contactUs.groups[:2] %} + {% set contactGroup = group|merge({ + "level": groupHeading, + "contactName": contactName }) %} + {% include "@molecules/contact-group.twig" %} + {% endfor %} + {% endblock %} + + {% if not contactUs.hideSecondary %} + {# Show 3rd+ contact groups inside of accordion (if they exist) #} +
+ {% block secondaryContactGroups %} + {% for group in contactUs.groups[2:last] %} + {% set contactGroup = group|merge({ + "level": groupHeading, + "contactName": contactName }) %} + {% include "@molecules/contact-group.twig" %} + {% endfor %} + {% endblock %} +
+
+ +
+ {% endif %} + {% else %} +
+
+ {% for group in contactUs.groups %} + {% set contactGroup = group|merge({ + "level": groupHeading, + "contactName": contactName }) %} + {% include "@molecules/contact-group.twig" %} + {% endfor %} + {% if contactUs.decorativeLink %} +
+ {% set decorativeLink = contactUs.decorativeLink %} + {% include "@atoms/decorative-link.twig" %} +
+ {% endif %} +
+
+ {% endif %} + {% endblock %} +
diff --git a/styleguide/source/_patterns/02-molecules/contact-us~collapsed-with-more-link.json b/styleguide/source/_patterns/02-molecules/contact-us~collapsed-with-more-link.json new file mode 100644 index 0000000000..4e15c45d3f --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-us~collapsed-with-more-link.json @@ -0,0 +1,121 @@ +{ + "contactUs": { + "accordion": true, + "isExpanded": true, + "subTitle": { + "text": "Department of Conservation and Recreation" + }, + "groups": [{ + "icon": "phone", + "name": "Phone", + "items": [{ + "type": "phone", + "property": "", + "label":"Main:", + "link": { + "href": "+14134994262", + "text": "(413) 499-4262", + "info": "", + "property": "" + }, + "details":"This line is open from 9:00 a.m. - 5:00 p.m., M-F" + },{ + "type": "phone", + "property": "", + "label":"Toll Free:", + "link":{ + "href": "+18004324321", + "text": "(800) 432-4321", + "info": "", + "property": "" + }, + "details":"This line is open from 9:00 a.m. - 5:00 p.m., M-F" + },{ + "type": "phone", + "property": "", + "label":"TTY:", + "link": { + "href":"+16175557777", + "text": "(617) 555-7777", + "info": "", + "property": "" + }, + "details":"For those who need accessible services" + },{ + "type": "phone", + "property": "", + "label":"Voice Relay:", + "link":{ + "href":"16175555255", + "text": "(617) 555-5255", + "info": "", + "property": "" + }, + "details":"" + }] + },{ + "icon": "laptop", + "name": "Online", + "hidden": "", + "items": [{ + "type": "email", + "property": "", + "label":"Email:", + "link": { + "href":"email@email.com", + "text": "email@email.com", + "info": "", + "property": "" + }, + "details":"" + },{ + "type": "online", + "property": "", + "label":"Web:", + "link": { + "href":"#", + "text": "Contact Form", + "info": "", + "property": "" + }, + "details":"" + }] + },{ + "icon": "fax-icon", + "name": "Fax", + "items": [{ + "type": "fax", + "property": "", + "label":"Main:", + "link": { + "href":"+14134994262", + "text": "(413) 499-4262", + "info": "", + "property": "" + }, + "details":"Please allow 24 hours for a response" + }] + },{ + "icon": "marker", + "name": "Address", + "items": [{ + "type": "address", + "property": "", + "label": "", + "address": "555 Park Drive\nBoston, MA 02231", + "link": { + "href": "https://www.google.com/maps/place/555+Park+Dr,+Boston,+MA+02215", + "text": "directions", + "info": "", + "property": "" + }, + "details": "" + }] + }], + "decorativeLink": { + "href": "#", + "text": "Learn more about this organization", + "info": "Learn more about this generic" + } + } +} diff --git a/styleguide/source/_patterns/02-molecules/contact-us~collapsed.json b/styleguide/source/_patterns/02-molecules/contact-us~collapsed.json deleted file mode 100644 index 4474a1f2b8..0000000000 --- a/styleguide/source/_patterns/02-molecules/contact-us~collapsed.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "contactUs": { - "accordion": true, - "isExpanded": true, - "subTitle": { - "href":"", - "text": "Department of Conservation and Recreation" - }, - "groups": [{ - "icon": "@atoms/05-icons/svg-phone.twig", - "name": "Phone", - "items": [{ - "type": "phone", - "property": "", - "label":"Main:", - "link": { - "href": "+14134994262", - "text": "(413) 499-4262", - "info": "", - "property": "" - }, - "details":"This line is open from 9:00 a.m. - 5:00 p.m., M-F" - },{ - "type": "phone", - "property": "", - "label":"Toll Free:", - "link":{ - "href": "+18004324321", - "text": "(800) 432-4321", - "info": "", - "property": "" - }, - "details":"This line is open from 9:00 a.m. - 5:00 p.m., M-F" - },{ - "type": "phone", - "property": "", - "label":"TTY:", - "link": { - "href":"+16175557777", - "text": "(617) 555-7777", - "info": "", - "property": "" - }, - "details":"For those who need accessible services" - },{ - "type": "phone", - "property": "", - "label":"Voice Relay:", - "link":{ - "href":"16175555255", - "text": "(617) 555-5255", - "info": "", - "property": "" - }, - "details":"" - }] - },{ - "icon": "@atoms/05-icons/svg-laptop.twig", - "name": "Online", - "hidden": "", - "items": [{ - "type": "email", - "property": "", - "label":"Email:", - "link": { - "href":"email@email.com", - "text": "email@email.com", - "info": "", - "property": "" - }, - "details":"" - },{ - "type": "online", - "property": "", - "label":"Web:", - "link": { - "href":"#", - "text": "Contact Form", - "info": "", - "property": "" - }, - "details":"" - }] - },{ - "icon": "@atoms/05-icons/svg-fax-icon.twig", - "name": "Fax", - "items": [{ - "type": "fax", - "property": "", - "label":"Main:", - "link": { - "href":"+14134994262", - "text": "(413) 499-4262", - "info": "", - "property": "" - }, - "details":"Please allow 24 hours for a response" - }] - },{ - "icon": "@atoms/05-icons/svg-marker.twig", - "name": "Address", - "items": [{ - "type": "address", - "property": "", - "label": "", - "address": "555 Park Drive\nBoston, MA 02231", - "link": { - "href": "https://www.google.com/maps/place/555+Park+Dr,+Boston,+MA+02215", - "text": "directions", - "info": "", - "property": "" - }, - "details": "" - }] - }] - } -} diff --git a/styleguide/source/_patterns/02-molecules/contact-us~linked-title.json b/styleguide/source/_patterns/02-molecules/contact-us~linked-title.json deleted file mode 100644 index 97ebb46df2..0000000000 --- a/styleguide/source/_patterns/02-molecules/contact-us~linked-title.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "contactUs": { - "accordion": false, - "isExpanded": false, - "subTitle": { - "href":"#", - "text": "Department of Conservation and Recreation", - "chevron":"" - }, - "groups": [{ - "icon": "@atoms/05-icons/svg-phone.twig", - "name": "Phone", - "hidden": "", - "items": [{ - "type": "phone", - "label": "Main:", - "value": "(413) 499-4262", - "link": "14134994262", - "details": "This line is open from 9:00 a.m. - 5:00 p.m., M-F" - },{ - "type": "phone", - "label": "Toll Free:", - "value": "(800) 432-4321", - "link": "18004324321", - "details": "This line is open from 9:00 a.m. - 5:00 p.m., M-F" - },{ - "type": "phone", - "label": "TTY:", - "value": "(617) 555-7777", - "link": "16175557777", - "details": "For those who need accessible services" - },{ - "type": "phone", - "label": "Voice Relay:", - "value": "(617) 555-5255", - "link": "16175555255", - "details": "" - }] - },{ - "icon": "@atoms/05-icons/svg-laptop.twig", - "name": "Online", - "hidden": "", - "items": [{ - "type": "email", - "label": "Email:", - "value": "email@email.com", - "link": "email@email.com", - "details": "" - },{ - "type": "online", - "label": "Web:", - "value": "Contact Form", - "link": "#", - "details": "" - }] - },{ - "icon": "@atoms/05-icons/svg-fax-icon.twig", - "name": "Fax", - "hidden": "true", - "items": [{ - "type": "fax", - "label":"", - "value": "(413) 499-4262", - "link": "14134994262", - "details": "Please allow 24 hours for a response" - }] - },{ - "icon": "@atoms/05-icons/svg-marker.twig", - "name": "Address", - "items": [{ - "type": "address", - "label": "", - "value": "555 Park Drive\nBoston, MA 02231", - "link": "https://www.google.com/maps/place/555+Park+Dr,+Boston,+MA+02215", - "details": "" - }] - }] - } -} diff --git a/styleguide/source/_patterns/02-molecules/contact-us~with-linked-title.json b/styleguide/source/_patterns/02-molecules/contact-us~with-linked-title.json new file mode 100644 index 0000000000..7e73f66574 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/contact-us~with-linked-title.json @@ -0,0 +1,75 @@ +{ + "contactUs": { + "accordion": false, + "isExpanded": false, + "subTitle": { + "href":"#", + "text": "Department of Conservation and Recreation" + }, + "groups": [{ + "icon": "phone", + "name": "Phone", + "items": [{ + "type": "phone", + "label": "Main:", + "value": "(413) 499-4262", + "link": "14134994262", + "details": "This line is open from 9:00 a.m. - 5:00 p.m., M-F" + },{ + "type": "phone", + "label": "Toll Free:", + "value": "(800) 432-4321", + "link": "18004324321", + "details": "This line is open from 9:00 a.m. - 5:00 p.m., M-F" + },{ + "type": "phone", + "label": "TTY:", + "value": "(617) 555-7777", + "link": "16175557777", + "details": "For those who need accessible services" + },{ + "type": "phone", + "label": "Voice Relay:", + "value": "(617) 555-5255", + "link": "16175555255", + "details": "" + }] + },{ + "icon": "laptop", + "name": "Online", + "items": [{ + "type": "email", + "label": "Email:", + "value": "email@email.com", + "link": "email@email.com", + "details": "" + },{ + "type": "online", + "label": "Web:", + "value": "Contact Form", + "link": "#", + "details": "" + }] + },{ + "icon": "fax-icon", + "name": "Fax", + "items": [{ + "type": "fax", + "label":"", + "value": "(413) 499-4262", + "link": "14134994262", + "details": "Please allow 24 hours for a response" + }] + },{ + "icon": "marker", + "name": "Address", + "items": [{ + "type": "address", + "label": "", + "value": "555 Park Drive\nBoston, MA 02231", + "link": "https://www.google.com/maps/place/555+Park+Dr,+Boston,+MA+02215", + "details": "" + }] + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/date-range.json b/styleguide/source/_patterns/02-molecules/date-range.json new file mode 100644 index 0000000000..f10f3af19d --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/date-range.json @@ -0,0 +1,21 @@ +{ + "dateRange": { + "label": "Filter by date", + "startDate": { + "labelText": "Select a start date", + "required": false, + "id": "start-date", + "name": "start-date", + "placeholder": "today", + "restrict": "min" + }, + "endDate": { + "labelText": "Select an end date", + "required": false, + "id": "end-date", + "name": "end-date", + "placeholder": "mm/dd/yy", + "restrict": "min" + } + } +} diff --git a/styleguide/source/_patterns/02-molecules/date-range.md b/styleguide/source/_patterns/02-molecules/date-range.md new file mode 100644 index 0000000000..e01a8c43f3 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/date-range.md @@ -0,0 +1,22 @@ +### Description +This pattern shows two date inputs with a label + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Input Date + +### Variables +~~~ +dateRange: { + label: + type: string / required, + startDate: { + type: inputDate / required + }, + endDate: { + type: inputDate / required + } +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/date-range.twig b/styleguide/source/_patterns/02-molecules/date-range.twig new file mode 100644 index 0000000000..eeb2cde5a4 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/date-range.twig @@ -0,0 +1,16 @@ +
+
+ + {{ dateRange.label }} + +
+ {% set inputDate = dateRange.startDate %} + {% include "@atoms/03-forms/input-date.twig" %} +
+
to
+
+ {% set inputDate = dateRange.endDate %} + {% include "@atoms/03-forms/input-date.twig" %} +
+
+
diff --git a/styleguide/source/_patterns/02-molecules/download-link-as-form.md b/styleguide/source/_patterns/02-molecules/download-link-as-form.md new file mode 100644 index 0000000000..b7d3de0c6a --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/download-link-as-form.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Download Link](./?p=molecules-download-link) pattern showing an example with a link to a form page. + +### How to generate +* set the `format` variable to "form" diff --git a/styleguide/source/_patterns/02-molecules/download-link-as-generic.md b/styleguide/source/_patterns/02-molecules/download-link-as-generic.md new file mode 100644 index 0000000000..7e42eb7433 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/download-link-as-generic.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Download Link](./?p=molecules-download-link) pattern showing an example link with a generic icon. + +### How to generate +* set the `icon` variable to "doc-generic" diff --git a/styleguide/source/_patterns/02-molecules/download-link-with-description.md b/styleguide/source/_patterns/02-molecules/download-link-with-description.md new file mode 100644 index 0000000000..f046c73f82 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/download-link-with-description.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Download Link](./?p=molecules-download-link) pattern showing an example link with description text. + +### How to generate +* populate the `description` variable with the data structure for `richText` diff --git a/styleguide/source/_patterns/02-molecules/download-link-with-small-icon.md b/styleguide/source/_patterns/02-molecules/download-link-with-small-icon.md new file mode 100644 index 0000000000..98a6f867c8 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/download-link-with-small-icon.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Download Link](./?p=molecules-download-link) pattern showing an example link with small icon. + +### How to generate +* set the `iconSize` variable to "small" diff --git a/styleguide/source/_patterns/02-molecules/download-link.json b/styleguide/source/_patterns/02-molecules/download-link.json index 253c8d5e00..9e93281354 100644 --- a/styleguide/source/_patterns/02-molecules/download-link.json +++ b/styleguide/source/_patterns/02-molecules/download-link.json @@ -1,12 +1,11 @@ { "downloadLink": { "iconSize": "", - "icon": "@atoms/05-icons/svg-doc-docx.twig", + "icon": "doc-docx", "decorativeLink": { - "text": "Online Form: Out-of-Country Driver's License Conversion", + "text": "Link to a file for download", "href": "#", - "info": "", - "property": "" + "info": "" }, "size": "40kb", "format": "DOCX" diff --git a/styleguide/source/_patterns/02-molecules/download-link.md b/styleguide/source/_patterns/02-molecules/download-link.md new file mode 100644 index 0000000000..c03b0d7187 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/download-link.md @@ -0,0 +1,34 @@ +### Description +This pattern is a link to a file or online form. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Decorative Link +* Rich Text + +### Variant options +* You can use [small](./?p=molecules-download-link-with-small-icon) icons +* You can link to an [online form](./?p=molecules-download-link-as-form) icons +* There are icons in Mayflower for 'docx', 'pdf', and 'xlsx' file formats along with a [generic](./?p=molecules-download-link-as-generic) icon for other formats + + +### Variables +~~~ +downloadLink: { + iconSize: + type: string ('' or 'small') / optional + icon: + type: string (icon path) / optional + decorativeLink: { + type: decorativeLink / required + } + size: + type: string (filesize) / optional + format: + type: string (fileformat or 'form') / optional + description: + type: rich text / optional +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/download-link.twig b/styleguide/source/_patterns/02-molecules/download-link.twig index 8eac0ff4f4..f6d3b0a97d 100644 --- a/styleguide/source/_patterns/02-molecules/download-link.twig +++ b/styleguide/source/_patterns/02-molecules/download-link.twig @@ -1,18 +1,20 @@ -{% if downloadLink.iconSize %} - {% set sizeClass = "ma__download-link--" ~ downloadLink.iconSize %} -{% endif %} +{% set sizeClass = downloadLink.iconSize ? "ma__download-link--" ~ downloadLink.iconSize : "" %} + diff --git a/styleguide/source/_patterns/02-molecules/download-link~as-form.json b/styleguide/source/_patterns/02-molecules/download-link~as-form.json index f7faae2564..93f2081885 100644 --- a/styleguide/source/_patterns/02-molecules/download-link~as-form.json +++ b/styleguide/source/_patterns/02-molecules/download-link~as-form.json @@ -1,12 +1,11 @@ { "downloadLink": { "iconSize": "", - "icon": "@atoms/05-icons/svg-laptop.twig", + "icon": "laptop", "decorativeLink": { - "text": "Online Form: Out-of-Country Driver's License Conversion", + "text": "Online form: Link to an online form", "href": "#", - "info": "", - "property": "" + "info": "" }, "size": "", "format": "form" diff --git a/styleguide/source/_patterns/02-molecules/download-link~as-generic.json b/styleguide/source/_patterns/02-molecules/download-link~as-generic.json new file mode 100644 index 0000000000..ff94f3d513 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/download-link~as-generic.json @@ -0,0 +1,13 @@ +{ + "downloadLink": { + "iconSize": "", + "icon": "doc-generic", + "decorativeLink": { + "text": "Link with a generic icon", + "href": "#", + "info": "" + }, + "size": "40kb", + "format": "JSON" + } +} diff --git a/styleguide/source/_patterns/02-molecules/download-link~with-description.json b/styleguide/source/_patterns/02-molecules/download-link~with-description.json new file mode 100644 index 0000000000..c27cdd8a73 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/download-link~with-description.json @@ -0,0 +1,23 @@ +{ + "downloadLink": { + "iconSize": "", + "icon": "doc-docx", + "decorativeLink": { + "text": "Link to a file for download", + "href": "#", + "info": "" + }, + "size": "40kb", + "format": "DOCX", + "description": { + "rteElements": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "I am a description. I am limited to 155 characters. I am a description. I am limited to 155 characters. I am a description. I am limited to 155 characters." + } + } + }] + } + } +} diff --git a/styleguide/source/_patterns/02-molecules/download-link~with-small-icon.json b/styleguide/source/_patterns/02-molecules/download-link~with-small-icon.json index dd87d78e8f..43c57e9c6a 100644 --- a/styleguide/source/_patterns/02-molecules/download-link~with-small-icon.json +++ b/styleguide/source/_patterns/02-molecules/download-link~with-small-icon.json @@ -1,12 +1,11 @@ { "downloadLink": { "iconSize": "small", - "icon": "@atoms/05-icons/svg-doc-docx.twig", + "icon": "doc-docx", "decorativeLink": { - "text": "Online Form: Out-of-Country Driver's License Conversion", + "text": "link using a small icon", "href": "#", - "info": "", - "property": "" + "info": "" }, "size": "40kb", "format": "DOCX" diff --git a/styleguide/source/_patterns/02-molecules/emergency-alert.md b/styleguide/source/_patterns/02-molecules/emergency-alert.md index 6b75d377cb..96fe42a833 100644 --- a/styleguide/source/_patterns/02-molecules/emergency-alert.md +++ b/styleguide/source/_patterns/02-molecules/emergency-alert.md @@ -1,35 +1,26 @@ ---- -title: Emergency Alert ---- -Description: Emergency Alert message describing the event with a timestamp reflecting when this message was created. An optional link is provided to take the user to page with more information +### Description +Emergency Alert message describing the event with a timestamp reflecting when this message was created. An optional link is provided to take the user to page with more information -## State: ALPHA +### Status +* Stable as of 5.0.0 -### Notes -Link is optional. -messages are sorted with the newest one first +### Pattern Contains +* Link -### Used in: -[@organisms/by-template/emergency-alerts.twig](/?p=organisms-emergency-alerts) - -### Contains -[@atoms/11-text/link.twig](/?p=atoms-link) +### Usage Guidelines +* The Link is optional. ### Variables ~~~ emergencyAlert: { message: - type: string/required, + type: string / required, timeStamp: - type: date/required + type: date / required format: mm.dd.yy, h:mm am/pm link: { - href: - type: string/url, - text: - type: string, - chevron: - type: string => always "true" + type: link (with chevron) / optional, } } ~~~ + diff --git a/styleguide/source/_patterns/02-molecules/emergency-header.json b/styleguide/source/_patterns/02-molecules/emergency-header.json index 11e76fef1e..9b98c7e5d8 100644 --- a/styleguide/source/_patterns/02-molecules/emergency-header.json +++ b/styleguide/source/_patterns/02-molecules/emergency-header.json @@ -1,5 +1,6 @@ { "emergencyHeader": { - "title": "The State is experiencing severe weather due to the winter storm Paula." + "title": "The State is experiencing severe weather due to the winter storm Paula.", + "prefix": "" } -} \ No newline at end of file +} diff --git a/styleguide/source/_patterns/02-molecules/emergency-header.md b/styleguide/source/_patterns/02-molecules/emergency-header.md index 9a6b0e4604..8ede2080ea 100644 --- a/styleguide/source/_patterns/02-molecules/emergency-header.md +++ b/styleguide/source/_patterns/02-molecules/emergency-header.md @@ -1,20 +1,15 @@ ---- -title: Emergency Header ---- -Description: Content describing the overall emergency. -## State: ALPHA -### Notes +### Description +Content describing the overall emergency. -### Used in: -[@organisms/by-template/emergency-alerts.twig](/?p=organisms-emergency-alerts) - -### Contains -[@atoms/05-icons/svg-alert.twig](/?p=atoms-svg-alert) +### Status +* Stable as of 5.0.0 ### Variables ~~~ emergencyHeader: { title: - type: "string/required" + type: string / required, + prefix: + type: string / optional (default "Emergency Alerts") } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/emergency-header.twig b/styleguide/source/_patterns/02-molecules/emergency-header.twig index 054606b260..881ea2db40 100644 --- a/styleguide/source/_patterns/02-molecules/emergency-header.twig +++ b/styleguide/source/_patterns/02-molecules/emergency-header.twig @@ -1,7 +1,8 @@ +{% set alertPrefix = emergencyHeader.prefix ?: 'Emergency Alerts' %}

-
- {% include "@atoms/05-icons/svg-alert.twig" %} - Emergency Alerts -
-
{{ emergencyHeader.title }}
+ + {{ icon('alert') }} + {{ alertPrefix }} + + {{ emergencyHeader.title }}

diff --git a/styleguide/source/_patterns/02-molecules/error-list.json b/styleguide/source/_patterns/02-molecules/error-list.json new file mode 100644 index 0000000000..e09b4099f9 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/error-list.json @@ -0,0 +1,14 @@ +{ + "errorList": { + "title": "Sorry, please correct the indicated errors", + "labels": [{ + "inputId": "issue1", + "text": "Lorem ipsum dolor sit amet.", + "info": "" + },{ + "inputId": "issue2", + "text": "Lorem ipsum dolor sit amet.", + "info": "" + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/error-list.md b/styleguide/source/_patterns/02-molecules/error-list.md new file mode 100644 index 0000000000..43cf4d3164 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/error-list.md @@ -0,0 +1,24 @@ +### Description +Displays a list of error messages that link to the inputs on a form page. + +### Status +* Stable as of 5.0.0 + +### JavaScript Used +* When used in a form (js/modules/formValidation.js) + +### Variables +~~~ +errorList: { + title: + type: string / required + labels: [{ + inputId: + type: string (unique per page) / required + text: + type: string / required + info: + type: string / optional + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/error-list.twig b/styleguide/source/_patterns/02-molecules/error-list.twig new file mode 100644 index 0000000000..999ab77367 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/error-list.twig @@ -0,0 +1,19 @@ +
+
+
+ + {{ icon('input-error') }} + + + {{ errorList.title }} + +
+
    + {% for label in errorList.labels %} +
  • + +
  • + {% endfor %} +
+
+
diff --git a/styleguide/source/_patterns/02-molecules/event-filters.json b/styleguide/source/_patterns/02-molecules/event-filters.json new file mode 100644 index 0000000000..65acf68a93 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/event-filters.json @@ -0,0 +1,54 @@ +{ + "eventFilters": { + "zipcode": { + "inputText": { + "labelText": "Show closest", + "required": false, + "id": "find-nearby", + "name": "find-nearby", + "type": "text", + "placeholder": "City, town, or ZIP code" + }, + "placeAutocomplete": { + "bounds": { + "sw": { + "lat": 40.727093, + "lng": -73.97864 + }, + "ne": { + "lat": 43.004778, + "lng": -69.845299 + } + } + } + }, + + "dateRange": { + "label": "Filter by date", + "startDate": { + "labelText": "Select a start date", + "required": false, + "id": "start-date", + "name": "start-date", + "placeholder": "today", + "restrict": "min" + }, + "endDate": { + "labelText": "Select an end date", + "required": false, + "id": "end-date", + "name": "end-date", + "placeholder": "mm/dd/yy", + "restrict": "min" + } + }, + + "buttons": [{ + "text": "Submit", + "type": "submit", + "size": "small", + "theme": "", + "outline": false + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/event-filters.md b/styleguide/source/_patterns/02-molecules/event-filters.md new file mode 100644 index 0000000000..78e8fdebda --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/event-filters.md @@ -0,0 +1,52 @@ +### Description +This pattern shows a Form with inputs to filter location and date range. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Input Text +* Date Range + +### JavaScript Used +* Location Filters (js/modules/locationFilters.js) + +### Usage Guidelines +* `zipcode.placeAutocomplete.bounds` sets default bounds for google maps api place autocomplete (see: [google maps api docs: LatLngBounds](https://developers.google.com/maps/documentation/javascript/reference#LatLngBounds)) which will be used in `/assets/js/modules/eventFilters`. + +### Required Variables +~~~ +{ + eventFilters: { + zipcode: { + inputText: { + type: inputText / required + }, + + placeAutoComplet: { + bounds: { + sw: { + lat: + type: int, latitude + lng: + type: int, longitude + }, + ne: { + lat: + type: int, latitude + lng: + type: int, longitude + } + } + } + }, + + dateRange: { + type: dateRange / optional + }, + + buttons: [{ + type: array of Button / required + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/event-filters.twig b/styleguide/source/_patterns/02-molecules/event-filters.twig new file mode 100644 index 0000000000..256bfd62fb --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/event-filters.twig @@ -0,0 +1,33 @@ +{# Set default google maps api place autocomplete result bounds, defaults to Mass. #} +{% set swLat = eventFilters.zipcode.placeAutocomplete.bounds.sw.lat ? eventFilters.zipcode.placeAutocomplete.bounds.sw.lat : 40.727093 %} +{% set swLng = eventFilters.zipcode.placeAutocomplete.bounds.sw.lng ? eventFilters.zipcode.placeAutocomplete.bounds.sw.lng : -73.9786 %} +{% set neLat = eventFilters.zipcode.placeAutocomplete.bounds.ne.lat ? eventFilters.zipcode.placeAutocomplete.bounds.ne.lat : 43.004778 %} +{% set neLng = eventFilters.zipcode.placeAutocomplete.bounds.ne.lng ? eventFilters.zipcode.placeAutocomplete.bounds.ne.lng : -69.845299 %} + +
+
+ {% if eventFilters.zipcode %} +
+ {% set inputText = eventFilters.zipcode.inputText %} + {% include "@atoms/03-forms/input-text.twig" %} +
+ {% endif %} + {% if eventFilters.dateRange %} +
+ {% set dateRange = eventFilters.dateRange %} + {% include "@molecules/date-range.twig" %} +
+ {% endif %} +
+ {% for button in eventFilters.buttons %} + {% include "@atoms/01-buttons/button.twig" %} + {% endfor %} + {# backward compatible with v5.6 that uses submitButton #} + {% if eventFilters.submitButton %} + + {% endif %} +
+ +
diff --git a/styleguide/source/_patterns/02-molecules/event-teaser-with-graphic.md b/styleguide/source/_patterns/02-molecules/event-teaser-with-graphic.md new file mode 100644 index 0000000000..222755671c --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/event-teaser-with-graphic.md @@ -0,0 +1,6 @@ +### Description +This is a variant of the [Event Teaser](./?p=molecules-event-teaser) pattern showing an example with a Graphic. + +### How to generate +* populate the `startMonth`, `startDay`, `endMonth`, and `endDay` variables. +* Make sure to also populate the `date.summary` variable for screen readers so they know the date of the event diff --git a/styleguide/source/_patterns/02-molecules/event-teaser.json b/styleguide/source/_patterns/02-molecules/event-teaser.json new file mode 100644 index 0000000000..71f0d50de6 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/event-teaser.json @@ -0,0 +1,22 @@ +{ + "eventTeaser": { + "title": { + "href": "#", + "text": "Winter Birding Event", + "info": "" + }, + "level": "", + "location": "Lanesborough, MA", + "date": { + "summary": "March 30, 2017", + "startMonth": "", + "startDay": "", + "startTimestamp": "", + "endMonth": "", + "endDay": "", + "endTimestamp": "" + }, + "time": "12 p.m. - 2 p.m.", + "description": "Event description. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Magnam tempora itaque fuga quasi vero sint, sapiente soluta sit molestias architecto deleniti sunt eum incidunt laboriosam quos repudiandae nesciunt eligendi? Aliquid." + } +} diff --git a/styleguide/source/_patterns/02-molecules/event-teaser.md b/styleguide/source/_patterns/02-molecules/event-teaser.md new file mode 100644 index 0000000000..be34bf3c69 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/event-teaser.md @@ -0,0 +1,48 @@ +### Description +A Pattern that displays the Name, Location, Time, Date and a brief description of an event + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Decorative Link + +### Variant options +* Can be shown with the Date as a [graphic](./?p=molecules-event-teaser-with-graphic) + +### Usage Guidelines +* The start and end month variables should always be a three letter month abbreviation. +* The `time` variable (and any times written in `date.summary`) should be formatted as '12 p.m.' (not 12:00 p.m.) +* The `startTimestamp` and `endTimestamp` variables are used to sort and filter events by date in the Event Listing Interactive pattern. + +### Variables +~~~ +eventTeaser: { + title: + type: decorativeLink / optional + level: + type: number / optional + location: + type: string (address) / optional + date: { + summary: + type: string (human readable date) / required + startMonth: + type: string (format: Mar) / optional + startDay: + type: string (number) / optional + startTimestamp: + type: string (format: MM/D/YYYY - HH:MM) / required only for event listing interactive + endMonth: + type: string (format: Apr) / optional + endDay: + type: string (number) / optional + endTimestamp: + type: string (format: MM/D/YYYY - HH:MM) / required only for event listing interactive + } + time: + type: string / optional + description: + type: string / optional +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/event-teaser.twig b/styleguide/source/_patterns/02-molecules/event-teaser.twig new file mode 100644 index 0000000000..0bca6fa8b1 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/event-teaser.twig @@ -0,0 +1,47 @@ +
+ {% if eventTeaser.date.startMonth and eventTeaser.date.startDay %} + + {% endif %} +
+ {% if eventTeaser.title %} + {% set headingLevel = eventTeaser.level ? : 2 %} + + {% set decorativeLink = eventTeaser.title %} + {% include "@atoms/decorative-link.twig" %} + + {% endif %} + {% if eventTeaser.location %} +
+ {{ eventTeaser.location|nl2br }} +
+ {% endif %} + {% if eventTeaser.date.summary %} + {# summary should always be included if start or end dates are provided to help screen readers #} +
+ {{ eventTeaser.date.summary|raw|nl2br }} +
+ {% endif %} + {% if eventTeaser.time %} +
+ {{ eventTeaser.time }} +
+ {% endif %} + {% if eventTeaser.description %} +
+ {{ eventTeaser.description }} +
+ {% endif %} +
+
diff --git a/styleguide/source/_patterns/02-molecules/event-teaser~with-graphic.json b/styleguide/source/_patterns/02-molecules/event-teaser~with-graphic.json new file mode 100644 index 0000000000..0ff1f8ff3b --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/event-teaser~with-graphic.json @@ -0,0 +1,19 @@ +{ + "eventTeaser": { + "title": { + "href": "#", + "text": "Winter Birding Event", + "info": "" + }, + "location": "Lanesborough, MA", + "date": { + "summary": "April 10, 2017 - April 12, 2017", + "startMonth": "Apr", + "startDay": "10", + "endMonth": "Apr", + "endDay": "12" + }, + "time": "12 p.m. - 2 p.m.", + "description": "Event description. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Magnam tempora itaque fuga quasi vero sint, sapiente soluta sit molestias architecto deleniti sunt eum incidunt laboriosam quos repudiandae nesciunt eligendi? Aliquid." + } +} diff --git a/styleguide/source/_patterns/02-molecules/expandable-section.json b/styleguide/source/_patterns/02-molecules/expandable-section.json new file mode 100644 index 0000000000..87dc1bea53 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/expandable-section.json @@ -0,0 +1,15 @@ +{ + "expandableSection" : { + "text": "1. Scope of Rules", + "linkItems": [ + { + "text": "Thing One", + "href": "#" + }, + { + "text": "Thing Two", + "href": "#" + } + ] + } +} diff --git a/styleguide/source/_patterns/02-molecules/expandable-section.md b/styleguide/source/_patterns/02-molecules/expandable-section.md new file mode 100644 index 0000000000..7fe0978451 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/expandable-section.md @@ -0,0 +1,23 @@ +### Description +This Pattern shows an expandable sections with a section title and link. + +### Status +* Stable as of 5.11.0 + +### Pattern Contains +* Decorated Link +* Download Link +* Expandable Section + +### Usage Guidelines +* This is meant to be used to contain a section titles with child links/download links within accordions. + +### Variables +~~~ +expandableSection: { + text: string / required, + linkItems: [{ + type: decorativeLink or downloadLink + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/expandable-section.twig b/styleguide/source/_patterns/02-molecules/expandable-section.twig new file mode 100644 index 0000000000..fbb8e18dee --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/expandable-section.twig @@ -0,0 +1,20 @@ +
  • + +
      + {% block expandableSectionLinks %} + {% for link in expandableSection.linkItems %} +
    • + {% if link.icon %} + {% set downloadLink = link %} + {% include "@molecules/download-link.twig" %} + {% else %} + {% set decorativeLink = link %} + {% include "@atoms/decorative-link.twig" %} + {% endif %} +
    • + {% endfor %} + {% endblock %} +
    +
  • diff --git a/styleguide/source/_patterns/02-molecules/featured-item.json b/styleguide/source/_patterns/02-molecules/featured-item.json new file mode 100644 index 0000000000..5db359aca9 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/featured-item.json @@ -0,0 +1,12 @@ +{ + "featuredItem": { + "href": "#", + "text": "This is an action", + "image": { + "alt": "alt text", + "src": "../../assets/images/placeholder/400x300.png", + "height": "", + "width": "" + } + } +} diff --git a/styleguide/source/_patterns/02-molecules/featured-item.md b/styleguide/source/_patterns/02-molecules/featured-item.md new file mode 100644 index 0000000000..79781d23e4 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/featured-item.md @@ -0,0 +1,39 @@ +### Description +A Pattern that displays a photo and a call to action + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Image + +### Variant options +* Tall - the tall variation requires 2 images. 1 for mobile which is the same as the standard image sizing, and one for larger viewports when the featured item spans 'two rows'. + +### Usage Guidelines +* Text must be less than 60 characters. Truncate with an ellipsis after the last word that makes the string less than 60 characters. +* Image dimentions are: + * image (standard): 4x3 + * featuredImage (tall): 3x5 + +### Variables +~~~ +featuredItem: { + href: + type: string (url) / required + text: + type: string / required + image: { + alt: + type: string / required + src: + type: string (url) / required + }, + featuredImage: (Only required for 'tall' variant) { + alt: + type: string / required + src: + type: string (url) / required + } +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/featured-item.twig b/styleguide/source/_patterns/02-molecules/featured-item.twig new file mode 100644 index 0000000000..44f3a7bd37 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/featured-item.twig @@ -0,0 +1,23 @@ +{% set itemClass = "ma__featured-item" %} + +{% if featuredItem.variation %} + {% set itemClass = itemClass ~ " ma__featured-item--" ~ featuredItem.variation %} +{% endif %} + + + + {% if featuredItem.featuredImage %} + + {% endif %} + + diff --git a/styleguide/source/_patterns/02-molecules/featured-item~tall.json b/styleguide/source/_patterns/02-molecules/featured-item~tall.json new file mode 100644 index 0000000000..28c2126831 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/featured-item~tall.json @@ -0,0 +1,19 @@ +{ + "featuredItem": { + "variation": "tall", + "href": "#", + "text": "This is an action", + "image": { + "alt": "alt text", + "src": "../../assets/images/placeholder/500x500.png", + "height": "", + "width": "" + }, + "featuredImage": { + "alt": "alt text", + "src": "../../assets/images/placeholder/800x800.png", + "height": "", + "width": "" + } + } +} diff --git a/styleguide/source/_patterns/02-molecules/field-submit.json b/styleguide/source/_patterns/02-molecules/field-submit.json index a29679ab12..c356a48c2b 100644 --- a/styleguide/source/_patterns/02-molecules/field-submit.json +++ b/styleguide/source/_patterns/02-molecules/field-submit.json @@ -5,6 +5,7 @@ "required": false, "id": "filter-by-location", "name": "filter-by-location", + "type": "text", "placeholder": "" }, "buttonSearch": { diff --git a/styleguide/source/_patterns/02-molecules/field-submit.md b/styleguide/source/_patterns/02-molecules/field-submit.md index 8f3b914128..edf2637293 100644 --- a/styleguide/source/_patterns/02-molecules/field-submit.md +++ b/styleguide/source/_patterns/02-molecules/field-submit.md @@ -1,6 +1,5 @@ ---- -title: Field Submit ---- +### Status +* Obsolete as of 5.0.0 Description: Labelled input with inline submit button diff --git a/styleguide/source/_patterns/02-molecules/floating-action.json b/styleguide/source/_patterns/02-molecules/floating-action.json new file mode 100644 index 0000000000..e975fcde32 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/floating-action.json @@ -0,0 +1,14 @@ +{ + "floatingAction": { + "alignment": "right", + "button": { + "href": "#", + "text": "Tell us what you think", + "info": "", + "type": "", + "theme": "secondary", + "outline": true, + "size": "small" + } + } +} diff --git a/styleguide/source/_patterns/02-molecules/floating-action.md b/styleguide/source/_patterns/02-molecules/floating-action.md new file mode 100644 index 0000000000..bc6c2ef76f --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/floating-action.md @@ -0,0 +1,18 @@ +### Description +A floating action link/button. + +### Status +* in Progress as of 5.0.0 + +### Pattern Contains +* Button + +### Variables +~~~ +floatingAction: { + alignment: + type: string (null, 'right') / optional + button: + type: button / required +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/floating-action.twig b/styleguide/source/_patterns/02-molecules/floating-action.twig new file mode 100644 index 0000000000..b1c7eead69 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/floating-action.twig @@ -0,0 +1,6 @@ +{% set buttonClassAlignment = floatingAction.alignment ? "ma__floating-action--" ~ floatingAction.alignment : "" %} + +
    + {% set button = floatingAction.button %} + {% include "@atoms/01-buttons/button.twig" %} +
    diff --git a/styleguide/source/_patterns/02-molecules/footer-links.md b/styleguide/source/_patterns/02-molecules/footer-links.md index e7cc82b153..31faeb4ad9 100644 --- a/styleguide/source/_patterns/02-molecules/footer-links.md +++ b/styleguide/source/_patterns/02-molecules/footer-links.md @@ -1,13 +1,23 @@ ---- -title: Footer links ---- +### Description +Displays a multi-column list of links used in the footer -Description: Displays the links in the footer. +### Status +* Stable as of 5.0.0 -## State: Alpha - -### Notes: -- The links are currently hard coded and do not link to an actual URL. - -### Used in: -- [@molecules/footer](/?p=molecules-footer) +### Variables +~~~ +footerLinks: { + items: [{ + heading: + type: string / required + id: + type: string (unique ID) / required + links: [{ + href: + type: string (url) / required + text: + type: string / required + }] + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/footnote.json b/styleguide/source/_patterns/02-molecules/footnote.json new file mode 100644 index 0000000000..fab27dc46b --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/footnote.json @@ -0,0 +1,25 @@ +{ + "footnote": { + "number": 1, + "target": "#GUID89789w7", + "id": "footnotemsg1", + "richText": { + "property": "", + "rteElements": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Optional Description of this policy" + } + } + },{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Explicabo itaque possimus dignissimos? Repudiandae tempore, fugit illum? Iure error omnis eveniet eius iste molestias. Veritatis provident hic voluptate voluptatibus ullam accusantium, obcaecati tempora soluta praesentium accusamus sed dicta sapiente." + } + } + }] + } + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/footnote.md b/styleguide/source/_patterns/02-molecules/footnote.md new file mode 100644 index 0000000000..7ce1be772d --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/footnote.md @@ -0,0 +1,25 @@ +### Description +This pattern shows a Footnote that contains a two way link with a Rich Text footnote link else where on the page. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Rich Text + +### JavaScript Used +* Links (js/modules/footnote.js) + +### Variables +~~~ +footnote: { + number: + type: number / required + target: + type: string (id of rich text footnote) / required + id: + type: string (unique per page) / required + richText: + type: richText / required +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/footnote.twig b/styleguide/source/_patterns/02-molecules/footnote.twig new file mode 100644 index 0000000000..36a297aaee --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/footnote.twig @@ -0,0 +1,12 @@ +{# Option to remove js functionality and hide the footnote link (this is an implementation workaround). #} +{% set footnoteJs = footnote.number ? 'js-footnote' : '' %} + +
    + {% if footnote.number %} + {{ footnote.number }} + {% endif %} +
    + {% set richText = footnote.richText %} + {% include "@organisms/by-author/rich-text.twig" %} +
    +
    diff --git a/styleguide/source/_patterns/02-molecules/forms/divided-inputs.json b/styleguide/source/_patterns/02-molecules/forms/divided-inputs.json new file mode 100644 index 0000000000..28947a6137 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/forms/divided-inputs.json @@ -0,0 +1,38 @@ +{ + "dividedInputs": { + "title": "optional legend for these inputs", + "required": false, + "divider": "/", + "inputs": [{ + "path": "@atoms/03-forms/input-text.twig", + "data": { + "inputText": { + "hiddenLabel": true, + "labelText": "Month", + "required": true, + "id": "exp-month", + "name": "exp-month", + "type": "text", + "width": "85", + "placeholder": "", + "errorMsg": "missing month" + } + } + },{ + "path": "@atoms/03-forms/input-text.twig", + "data": { + "inputText": { + "hiddenLabel": true, + "labelText": "Year", + "required": true, + "id": "exp-year", + "name": "exp-year", + "type": "text", + "width": "85", + "placeholder": "", + "errorMsg": "missing year" + } + } + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/forms/divided-inputs.md b/styleguide/source/_patterns/02-molecules/forms/divided-inputs.md new file mode 100644 index 0000000000..e0c186f225 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/forms/divided-inputs.md @@ -0,0 +1,28 @@ +### Description +This pattern shows a collection of inputs separated by a custom divider. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Any input type pattern can be rendered in this pattern by setting the `path` variable to the location of the pattern and setting the `data` variable to container of the data object of that pattern. + * {% include input.path with input.data %} + +### Variables +~~~ +dividedInputs: { + title: + type: string / optional + required: + type: boolean, + divider: + type: string / optional, + inputs: [{ + path: + type: string / required + data: { + type: object / required (matches the pattern in the path) + } + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/forms/divided-inputs.twig b/styleguide/source/_patterns/02-molecules/forms/divided-inputs.twig new file mode 100644 index 0000000000..c93827e497 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/forms/divided-inputs.twig @@ -0,0 +1,15 @@ +
    + {% if dividedInputs.title %} + {{ dividedInputs.title }} + {% endif %} + {% for input in dividedInputs.inputs %} +
    + {% include input.path with input.data %} +
    + {% if dividedInputs.divider and not loop.last %} +
    + {{ dividedInputs.divider }} +
    + {% endif %} + {% endfor %} +
    diff --git a/styleguide/source/_patterns/02-molecules/general-teaser-emphasizedText.json b/styleguide/source/_patterns/02-molecules/general-teaser-emphasizedText.json new file mode 100644 index 0000000000..1ee8379ba0 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser-emphasizedText.json @@ -0,0 +1,7 @@ +{ + "emphasizedText": [ + "An emphasized text field", + "Another emphasized text field" + ] +} + diff --git a/styleguide/source/_patterns/02-molecules/general-teaser-emphasizedText.md b/styleguide/source/_patterns/02-molecules/general-teaser-emphasizedText.md new file mode 100644 index 0000000000..cd134fc6eb --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser-emphasizedText.md @@ -0,0 +1,13 @@ +### Description +Emphasized Text field in block wrapper for the [General Teaser](/?p=molecules-general-teaser) + +### Status +* Stable as of TBA + +### Variables +~~~ +generalTeaser : { + eyebrow: + type: string / optional +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/general-teaser-emphasizedText.twig b/styleguide/source/_patterns/02-molecules/general-teaser-emphasizedText.twig new file mode 100644 index 0000000000..51813ffe4b --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser-emphasizedText.twig @@ -0,0 +1,7 @@ +
    + {% for item in emphasizedText %} + + {{ item }} + + {% endfor %} +
    diff --git a/styleguide/source/_patterns/02-molecules/general-teaser-eyebrow.json b/styleguide/source/_patterns/02-molecules/general-teaser-eyebrow.json new file mode 100644 index 0000000000..48b541e568 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser-eyebrow.json @@ -0,0 +1,3 @@ +{ + "eyebrow": "Eyebrow" +} diff --git a/styleguide/source/_patterns/02-molecules/general-teaser-eyebrow.md b/styleguide/source/_patterns/02-molecules/general-teaser-eyebrow.md new file mode 100644 index 0000000000..13be6f0e1c --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser-eyebrow.md @@ -0,0 +1,14 @@ +### Description +Eyebrow field in block wrapper for the [General Teaser](/?p=molecules-general-teaser) + +### Status +* Stable as of TBA + +### Variables +~~~ +generalTeaser : { + emphasizedText: [ + type: array of string / optional, + ], +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/general-teaser-eyebrow.twig b/styleguide/source/_patterns/02-molecules/general-teaser-eyebrow.twig new file mode 100644 index 0000000000..99effec7c1 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser-eyebrow.twig @@ -0,0 +1,3 @@ +
    + {{ eyebrow }} +
    diff --git a/styleguide/source/_patterns/02-molecules/general-teaser-title.json b/styleguide/source/_patterns/02-molecules/general-teaser-title.json new file mode 100644 index 0000000000..73083ef2c9 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser-title.json @@ -0,0 +1,9 @@ +{ + "level": "", + "title" : { + "href": "#", + "text": "Link field for a title or name", + "info": "", + "property": "" + } +} diff --git a/styleguide/source/_patterns/02-molecules/general-teaser-title.md b/styleguide/source/_patterns/02-molecules/general-teaser-title.md new file mode 100644 index 0000000000..e849fe9e38 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser-title.md @@ -0,0 +1,20 @@ +### Description +Title field in block wrapper for the [General Teaser](/?p=molecules-general-teaser) + +### Status +* Stable as of TBA + +### Pattern Contains +* Decorative Link + + +### Variables +~~~ +generalTeaser : { + title : { + type: decorativeLink / required + }, + level: + type: number / optional +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/general-teaser-title.twig b/styleguide/source/_patterns/02-molecules/general-teaser-title.twig new file mode 100644 index 0000000000..0448936ba9 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser-title.twig @@ -0,0 +1,9 @@ +{% set headingLevel = level ? : 2 %} + + {% if title.href %} + {% set decorativeLink = title %} + {% include "@atoms/decorative-link.twig" %} + {% else %} + {{ title.text }} + {% endif %} + diff --git a/styleguide/source/_patterns/02-molecules/general-teaser.json b/styleguide/source/_patterns/02-molecules/general-teaser.json new file mode 100644 index 0000000000..4c6caa0451 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser.json @@ -0,0 +1,30 @@ +{ + "generalTeaser" : { + "image": { + "src": "../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Eyebrow", + "title" : { + "href": "#", + "text": "Link field for a title or name", + "info": "", + "property": "" + }, + "level": "", + "emphasizedText": [ + "An emphasized text field", + "Another emphasized text field" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/general-teaser.md b/styleguide/source/_patterns/02-molecules/general-teaser.md new file mode 100644 index 0000000000..f0a6b480ac --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser.md @@ -0,0 +1,46 @@ +### Description +Short multi-use teaser with an optional image. This pattern can display the photo and details with one of three layouts: +stacked (with the contents in a single column), side-by-side (with the text content alongside the image) or +contents-stacked (contents under the image, eyebrow/title/emphasized text displayed next to the image). If the provided +image is too large, the content will wrap and appear in a single column, regardless of the specified layout. + +If a teaser image is provided, it will link to the title's href, if set. + +### Status +* Stable as of TBA + +### Pattern Contains +* Decorative Link +* Image +* Rich Text +* [General Teaser Title](/?p=molecules-general-teaser-title) +* [General Teaser Eyebrow](/?p=molecules-general-teaser-eyebrow) +* [General Teaser Emphasized Text ](/?p=molecules-general-teaser-emphasizedText) + + +### Variables +~~~ +generalTeaser : { + layout: + type: string / optional + image: + type: image / optional + eyebrow: + type: string / optional + title : { + type: decorativeLink / required + }, + level: + type: number / optional + emphasizedText: [ + type: array of string / optional, + ], + contents: (optional) [{ + path: + type: string (path to pattern) / required + data: { + type: object / contains data object of pattern to include + } + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/general-teaser.twig b/styleguide/source/_patterns/02-molecules/general-teaser.twig new file mode 100644 index 0000000000..2287b7f11a --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser.twig @@ -0,0 +1,80 @@ +{% set imageClass = generalTeaser.image ? 'ma__general-teaser--image' : '' %} +{% set layout = generalTeaser.layout ?: 'side-by-side' %} + +
    + {% block teaserImage %} + {% if generalTeaser.image.src %} + + {% if generalTeaser.title.href %} + + {% else %} + + {% endif %} + + {% set image = generalTeaser.image %} + {% include "@atoms/09-media/image.twig" %} + + {% if generalTeaser.title.href %} + + {% else %} + + {% endif %} + + {% endif %} + {% endblock %} + + {% if layout == 'inline-image' %} +
    + {% else %} +
    + {% endif %} + + {% block eyebrow %} + {% if generalTeaser.eyebrow %} + {% set eyebrow = generalTeaser.eyebrow %} + {% include "@molecules/general-teaser-eyebrow.twig" %} + {% endif %} + {% endblock %} + + {% block title %} + {% if generalTeaser.title.text %} + {% set title = generalTeaser.title %} + {% set headingLevel = generalTeaser.level ? : 2 %} + {% include "@molecules/general-teaser-title.twig" %} + {% endif %} + {% endblock %} + + {% block emphasizedText %} + {% if generalTeaser.emphasizedText %} + {% set emphasizedText = generalTeaser.emphasizedText %} + {% include "@molecules/general-teaser-emphasizedText.twig" %} + {% endif %} + {% endblock %} + + {% if layout == 'inline-image' %} +
    +
    + {% endif %} + + {% if generalTeaser.contents and layout != 'contents-stacked' %} +
    + {% for content in generalTeaser.contents %} + {% include content.path with content.data %} + {% endfor %} +
    + {% endif %} + +
    + + {% if generalTeaser.contents and layout == 'contents-stacked' %} +
    + {% for content in generalTeaser.contents %} + {% include content.path with content.data %} + {% endfor %} +
    + {% endif %} + +
    diff --git a/styleguide/source/_patterns/02-molecules/general-teaser~inline-image.json b/styleguide/source/_patterns/02-molecules/general-teaser~inline-image.json new file mode 100644 index 0000000000..88f3d3ab5b --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser~inline-image.json @@ -0,0 +1,28 @@ +{ + "generalTeaser" : { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Eyebrow", + "title" : { + "text": "A title or name" + }, + "level": "", + "emphasizedText": [ + "An emphasized text field", + "Another emphasized text field" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/general-teaser~stacked.json b/styleguide/source/_patterns/02-molecules/general-teaser~stacked.json new file mode 100644 index 0000000000..c1df2d7d34 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/general-teaser~stacked.json @@ -0,0 +1,31 @@ +{ + "generalTeaser" : { + "layout": "stacked", + "image": { + "src": "../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Eyebrow", + "title" : { + "href": "#", + "text": "Link field for a title or name", + "info": "", + "property": "" + }, + "level": "", + "emphasizedText": [ + "An emphasized text field", + "Another emphasized text field" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/google-map.json b/styleguide/source/_patterns/02-molecules/google-map.json index 86fbe63713..822c3018c8 100644 --- a/styleguide/source/_patterns/02-molecules/google-map.json +++ b/styleguide/source/_patterns/02-molecules/google-map.json @@ -10,7 +10,7 @@ "markers": [{ "position": { "lat": 42.366565, - "lng": -71.058940 + "lng": -71.058940 }, "label": "A", "infoWindow": { @@ -18,12 +18,13 @@ "phone": "16176261250", "fax": "16176261351", "email": "mass.parks@state.ma.us", - "address": "251 Causeway Street, Suite 900\nBoston, MA 02114-2104" + "address": "251 Causeway Street, Suite 900\nBoston, MA 02114-2104", + "directions": "https://www.google.com/maps/place/251+Causeway+St+Boston+MA+02114" } },{ "position": { "lat": 42.358795, - "lng": -71.063858 + "lng": -71.063858 }, "label": "B", "infoWindow": { @@ -35,4 +36,4 @@ } }] } -} \ No newline at end of file +} diff --git a/styleguide/source/_patterns/02-molecules/google-map.md b/styleguide/source/_patterns/02-molecules/google-map.md index 8feda4ff08..02e787b365 100644 --- a/styleguide/source/_patterns/02-molecules/google-map.md +++ b/styleguide/source/_patterns/02-molecules/google-map.md @@ -1,47 +1,49 @@ ---- -title: Google Map ---- -Description: A google map with multiple markers +### Description +A google map with multiple markers and info windows -## State: Alpha +### Status +* Stable as of 5.0.0 -### Used in: -- [@organisms/by-author/location-banner](?p=organisms-location-banner) -- [@organisms/by-author/mapped-locations](?p=organisms-mapped-locations) -### Required Variables +### JavaScript Used +* Google's API (//maps.googleapis.com/maps/api/js) +* The rendering of the map (js/modules/googleMap.js) + +### Variables ~~~ googleMap: { map: { center: { lat: - type: integer/required + type: float / required lng: - type: integer/required + type: float / required }, zoom: - type: integer/required + type: integer / required }, markers: [{ position: { lat: - type: integer/required + type: float / required lng: - type: integer/required + type: float / required }, label: - type: string/required + type: string / required infoWindow: { name: - type: string(html)/required + type: string / required phone: - type: string/optional + type: string (number with no spaces) / optional fax: - type: string/optional + type: string / optional email: - type: string/optional + type: string / optional address: - type: string(html)/required + type: string / required + directions: + type: string (url to goole maps) / optional } }] } diff --git a/styleguide/source/_patterns/02-molecules/google-map.twig b/styleguide/source/_patterns/02-molecules/google-map.twig index 683585351d..7da4ec3d51 100644 --- a/styleguide/source/_patterns/02-molecules/google-map.twig +++ b/styleguide/source/_patterns/02-molecules/google-map.twig @@ -1,13 +1,16 @@ - diff --git a/styleguide/source/_patterns/02-molecules/press-status-with-overflow.json b/styleguide/source/_patterns/02-molecules/press-status-with-overflow.json new file mode 100644 index 0000000000..6110fdb1df --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/press-status-with-overflow.json @@ -0,0 +1,11 @@ +{ + "pressStatus": { + "title": "For immediate release:", + "date": "1/21/2016", + "names": [{ + "text": "Charlie Baker, Governor" + },{ + "text": "Karyn Polito, Lieutenant Governor" + }] + } +} diff --git a/styleguide/source/_patterns/02-molecules/press-status-with-overflow.md b/styleguide/source/_patterns/02-molecules/press-status-with-overflow.md new file mode 100644 index 0000000000..86fdcf2407 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/press-status-with-overflow.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Press Status](./?p=molecules-press-status) pattern showing how it looks on a two column template + +### How to generate +* Place the pattern in the Page Content column of a Two Column template. diff --git a/styleguide/source/_patterns/02-molecules/press-status-with-overflow.twig b/styleguide/source/_patterns/02-molecules/press-status-with-overflow.twig new file mode 100644 index 0000000000..467771f6af --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/press-status-with-overflow.twig @@ -0,0 +1,17 @@ +{% extends '@templates/two-column.twig' %} + +{% block header %}{% endblock %} + +{% block preContent %}{% endblock %} + +{% block pageContent %} + {% include "@molecules/press-status.twig" %} +{% endblock %} +{% block sidebar %} + {% include "@base/placeholder.twig" with {'placeholder':{'text':'Right Rail'}} %} +{% endblock %} +{% block postContent %} + +{% endblock %} + +{% block footer %}{% endblock %} diff --git a/styleguide/source/_patterns/02-molecules/press-status.md b/styleguide/source/_patterns/02-molecules/press-status.md new file mode 100644 index 0000000000..58550588f0 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/press-status.md @@ -0,0 +1,22 @@ +### Description +This Pattern is used on Press pages to show the status of the release. + +### Status +* Stable as of 5.0.0 + +### Variant options +* When [placed](./?p=molecules-press-status-with-overflow) in the page content area of a two column template the background will extend to the left. + + +### Variables +~~~ +"pressStatus": { + title: + type: string / required + date: + type: date (mm/dd/yyyy) / required + names: [{ + type: string / required + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/press-teaser.json b/styleguide/source/_patterns/02-molecules/press-teaser.json new file mode 100644 index 0000000000..3d869998b9 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/press-teaser.json @@ -0,0 +1,28 @@ +{ + "pressTeaser" : { + "image": { + "src":"/assets/images/placeholder/320x180.png", + "alt": "placeholder image" + }, + "eyebrow": "Press Release", + "title" : { + "href":"#", + "text":"MassParks", + "info": "", + "property": "" + }, + "level": "", + "date": "4/3/2017", + "org": "Org Name", + "description": { + "rteElements": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Optional description" + } + } + }] + } + } +} diff --git a/styleguide/source/_patterns/02-molecules/press-teaser.md b/styleguide/source/_patterns/02-molecules/press-teaser.md new file mode 100644 index 0000000000..38206c0f74 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/press-teaser.md @@ -0,0 +1,36 @@ +### Description +Short teaser for a related press event with an optional image + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Decorative Link +* Rich Text + + +### Variables +~~~ +pressTeaser : { + image: (optional) { + src: + type: string (image path) / required + alt: + type: string (imgage description) / required + } + eyebrow: + type: string / optional + title : { + type: decorativeLink / required + }, + level: + type: number / optional + date: + type: string / optional, + org: + type: string / optional, + description: { + type: richText / optional + } +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/press-teaser.twig b/styleguide/source/_patterns/02-molecules/press-teaser.twig new file mode 100644 index 0000000000..e3c56ce3ed --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/press-teaser.twig @@ -0,0 +1,49 @@ +{% set imageClass = pressTeaser.image ? 'ma__press-teaser--image' : '' %} + +
    + {% if pressTeaser.image %} + + {% set image = pressTeaser.image %} + + + + {% endif %} +
    + {% if pressTeaser.eyebrow %} +
    + {{ pressTeaser.eyebrow }} +
    + {% endif %} + {% set headingLevel = pressTeaser.level ? : 2 %} + + {% set decorativeLink = pressTeaser.title %} + {% include "@atoms/decorative-link.twig" %} + + {% if pressTeaser.date or pressTeaser.org %} +
    + {% if pressTeaser.date %} + + {{ pressTeaser.date }} + + {% endif %} + {% if pressTeaser.org %} + + {{ pressTeaser.org }} + + {% endif %} +
    + {% endif %} + {% if pressTeaser.description %} +
    + {% set richText = pressTeaser.description %} + {% include "@organisms/by-author/rich-text.twig" %} +
    + {% endif %} +
    +
    diff --git a/styleguide/source/_patterns/02-molecules/related-action.md b/styleguide/source/_patterns/02-molecules/related-action.md index 05506968cd..567e127be9 100644 --- a/styleguide/source/_patterns/02-molecules/related-action.md +++ b/styleguide/source/_patterns/02-molecules/related-action.md @@ -1,6 +1,6 @@ ---- -title: Related action link ---- +### Status +* Obsolete as of 5.0.0 + Description: a molecule for an related action. ## Status: Alpha ### Notes: diff --git a/styleguide/source/_patterns/02-molecules/relationship-indicators.json b/styleguide/source/_patterns/02-molecules/relationship-indicators.json new file mode 100644 index 0000000000..d018698c08 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/relationship-indicators.json @@ -0,0 +1,30 @@ +{ + "relationshipIndicators": { + "offered_by": [{ + "href": "#", + "text": "Department of Conservation and Recreation" + },{ + "href": "#", + "text": "Other agency or organization" + }], + "relatedTo": [{ + "href": "#", + "text": "Snowmobile in the Parks" + },{ + "href": "#", + "text": "Cross-Country Skiing" + },{ + "href": "#", + "text": "Accessible Hiking" + },{ + "href": "#", + "text": "Scenic Viewing Areas" + },{ + "href": "#", + "text": "Hunting" + },{ + "href": "#", + "text": "Biking" + }] + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/relationship-indicators.md b/styleguide/source/_patterns/02-molecules/relationship-indicators.md new file mode 100644 index 0000000000..698f72a876 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/relationship-indicators.md @@ -0,0 +1,29 @@ +### Description +This is a set of related links for Organization pages to inculded the Organization links and optional related links. + +### Status +* Stable as of 5.0.0 + +### Notes +Offered By: at least one tag required +Related To: optional + +### Variables +~~~ +headerTags: { + + offeredBy: [{ + href: + type: string / required + text: + type: string / required + }], + relatedTo: [{ + href: + type: string / optional + text: + type: string / optional + }] +} +~~~ + diff --git a/styleguide/source/_patterns/02-molecules/relationship-indicators.twig b/styleguide/source/_patterns/02-molecules/relationship-indicators.twig new file mode 100644 index 0000000000..161a4ce476 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/relationship-indicators.twig @@ -0,0 +1,35 @@ +
    +
    + + Offered By: + +
    + {% for item in relationshipIndicators.offered_by %} + + {% endfor %} +
    +
    + + {% if relationshipIndicators.relatedTo is not empty %} + + {% endif %} +
    \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/results-heading.json b/styleguide/source/_patterns/02-molecules/results-heading.json index fc02a2a532..6db4cfdbe3 100644 --- a/styleguide/source/_patterns/02-molecules/results-heading.json +++ b/styleguide/source/_patterns/02-molecules/results-heading.json @@ -1,13 +1,38 @@ { "resultsHeading": { + "level": "", + "subject": "subject", "numResults": "1-12", "totalResults": "108", + "sortResults": { + "label": "Sort by:", + "sortButtons": [{ + "text": "Date", + "direction": "dsc" + },{ + "text": "Price", + "direction": "" + },{ + "text": "Color", + "direction": "" + }] + }, "tags": [{ - "text": "Item" + "type": "zipcode", + "text": "02341", + "value": "02341" },{ - "text": "Item" + "type": "activity", + "text": "Hiking", + "value": "hiking" },{ - "text": "Item" + "type": "keyword", + "text": "Beginner", + "value": "beginner" + },{ + "type": "tag", + "text": "Wheelchair Accessible", + "value": "wheelchair-accessible" }] } } diff --git a/styleguide/source/_patterns/02-molecules/results-heading.md b/styleguide/source/_patterns/02-molecules/results-heading.md new file mode 100644 index 0000000000..d6713c19c5 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/results-heading.md @@ -0,0 +1,41 @@ +### Description +This Pattern contains a string of text with a range and total value followed by selected filters and controls for sorting. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Sort Results + +### Usage Guidelines +For the tags: + +* 'type' -> the "type" of filter (i.e. input label) +* 'text' -> the text displayed on the filter tag +* 'value' -> machine friendly version of filter text + + +### Variables +~~~ +resultsHeading: { + level: + type: number / optional + subject: + type: string / optional + numResults: + type: string (number range '1-12') / optional + totalResults: + type: string (numeric) / optional + sortResults: { + type: sortResults / optional + }, + tags (optional): [{ + type: + type: string / optional + text: + type: string / required + value: + type: string / optional + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/results-heading.twig b/styleguide/source/_patterns/02-molecules/results-heading.twig index 40c0954b34..6ca304c293 100644 --- a/styleguide/source/_patterns/02-molecules/results-heading.twig +++ b/styleguide/source/_patterns/02-molecules/results-heading.twig @@ -1,11 +1,20 @@ -
    -

    Showing {{ resultsHeading.numResults }} {% if resultsHeading.totalResults %} of {{ resultsHeading.totalResults }}{% endif %} results {% if resultsHeading.tags %}for:{% endif %}

    -
    - {% for tag in resultsHeading.tags %} - - {% endfor %} +
    +
    + {% set headingLevel = resultsHeading.level ? resultsHeading.level : 2 %} + Showing {{ resultsHeading.numResults }} {% if resultsHeading.totalResults %} of {{ resultsHeading.totalResults }}{% endif %} results {% if resultsHeading.tags %}for:{% endif %}{% if resultsHeading.subject %}for {{ resultsHeading.subject }}{% endif %} {% if resultsHeading.tags %} - +
    + {% for tag in resultsHeading.tags %} + + {% endfor %} + +
    + {% endif %} + {% if resultsHeading.sortResults %} +
    + {% set sortResults = resultsHeading.sortResults %} + {% include "@molecules/sort-results.twig" %} +
    {% endif %}
    diff --git a/styleguide/source/_patterns/02-molecules/search-banner-form.json b/styleguide/source/_patterns/02-molecules/search-banner-form.json index 35f1ff6da0..4f38851aae 100644 --- a/styleguide/source/_patterns/02-molecules/search-banner-form.json +++ b/styleguide/source/_patterns/02-molecules/search-banner-form.json @@ -1,15 +1,14 @@ { - "form": { - "content": { - "action": "", - "buttonText": "Search", - "inputText": { - "labelText": "Search", - "required": false, - "id": "GUID138490237", - "name": "search", - "placeholder": "Search..." - } + "searchBannerForm": { + "action": "", + "buttonText": "Search", + "inputText": { + "labelText": "Search terms", + "required": false, + "id": "GUID138490237", + "name": "search", + "type": "text", + "placeholder": "Search..." } } -} \ No newline at end of file +} diff --git a/styleguide/source/_patterns/02-molecules/search-banner-form.md b/styleguide/source/_patterns/02-molecules/search-banner-form.md index 2661a0a4e6..cd4905e8b8 100644 --- a/styleguide/source/_patterns/02-molecules/search-banner-form.md +++ b/styleguide/source/_patterns/02-molecules/search-banner-form.md @@ -1,39 +1,21 @@ ---- -title: Search Banner Form ---- -Description: A form that displays over a banner background image. +### Description +This Pattern is a form with an large search input and button. -## State: ALPHA +### Status +* Stable as of 5.0.0 -### Notes +### Pattern Contains +* Input Text -### Used in: -[@organisms/by-author/search-banner.twig](/?p=organisms-search-banner) - -### Contains -[@atoms/03-forms/input-text.twig](/?p=atoms-input-text) -[@atoms/05-icons/svg-search.twig](/?p=atoms-svg-search) - -### Variables -~~~ -form: { - content: { - action: - type: string / required - buttonText: - type: string / required - inputText: { - labelText: - type: string / required - required: - type: boolean - id: - type: string / required - name: - type: string / required - placeholder: - type: string / required - } +### Variables +~~~ +searchBannerForm: { + action: + type: string / required + buttonText: + type: string / required + inputText: { + type: inputText / required } } -~~~ \ No newline at end of file +~~~ diff --git a/styleguide/source/_patterns/02-molecules/search-banner-form.twig b/styleguide/source/_patterns/02-molecules/search-banner-form.twig index aef126329c..ed876edc3c 100644 --- a/styleguide/source/_patterns/02-molecules/search-banner-form.twig +++ b/styleguide/source/_patterns/02-molecules/search-banner-form.twig @@ -1,11 +1,13 @@ -{% set form = form.content %} -
    +{# backward compatible with v5.6 - data object used to start with the form namespace #} +{% set form = searchBannerForm ? : form.content %} + +
    {% set inputText = form.inputText %} {% include "@atoms/03-forms/input-text.twig" %}
    - \ No newline at end of file + diff --git a/styleguide/source/_patterns/02-molecules/section-links-with-callout-links.md b/styleguide/source/_patterns/02-molecules/section-links-with-callout-links.md index 895503b4c1..9addd1fe75 100644 --- a/styleguide/source/_patterns/02-molecules/section-links-with-callout-links.md +++ b/styleguide/source/_patterns/02-molecules/section-links-with-callout-links.md @@ -1,41 +1,5 @@ ---- -title: Section links with Callout Links ---- -Description: displays a set of callout links in a card layout. +### Description +This is a variant of the [Section Links](./?p=molecules-section-links) pattern showing an example with Callout Links. -### Base: -- [Section Links](?p=molecules-section-links) - -### Variables -~~~ -sectionLinks: { - catIcon: { - icon: - type: string/path to icon - small: - type: boolean/true - }, - title: { - href: - type: url/required - text: - type: string/required - }, - description: - type: string - type: - type: string/required ("callout") - links: [{ - href: - type: url/required - text: - type: string/required - }] - seeAll: { - href: - type: url - text: - type: string - } / optional -} -~~~ +### How to generate +* set the `sectionLinks.type` variable to "callout" diff --git a/styleguide/source/_patterns/02-molecules/section-links-with-see-all.md b/styleguide/source/_patterns/02-molecules/section-links-with-see-all.md deleted file mode 100644 index f7724cfda7..0000000000 --- a/styleguide/source/_patterns/02-molecules/section-links-with-see-all.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Section links with See All Link ---- -Description: displays a set of links in a card layout with a "more" link at the bottom. - -### Base: -- [Section Links](?p=molecules-section-links) - -### Variables -~~~ -sectionLinks: { - catIcon: { - icon: - type: string/path to icon - small: - type: boolean/true - }, - title: { - href: - type: url/required - text: - type: string/required - }, - description: - type: string - type: - type: string/optional ("callout" || defaults to "decorative") - links: [{ - href: - type: url/required - text: - type: string/required - }] - seeAll: { - href: - type: url - text: - type: string - } / optional -} -~~~ diff --git a/styleguide/source/_patterns/02-molecules/section-links.json b/styleguide/source/_patterns/02-molecules/section-links.json index fbd910ceff..1c63df46d5 100644 --- a/styleguide/source/_patterns/02-molecules/section-links.json +++ b/styleguide/source/_patterns/02-molecules/section-links.json @@ -2,25 +2,35 @@ "sectionLinks": { "id": "GUIDasjdhf1", "catIcon": { - "icon":"@atoms/05-icons/svg-lg-fishing.twig", - "small":"true" + "icon":"lg-fishing", + "small": true }, - "title" : { - "href" : "#", - "text" : "Recreational Licenses & Permits" + "title": { + "href": "#", + "text": "Recreational Licenses & Permits", + "info": "" }, + "level": "", "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque rutrum mauris quam, et imperdiet purus pellentesque vel.", "links" : [{ - "href" : "#", - "text" : "Boating" + "href": "#", + "text": "Boating", + "info": "" }, { - "href" : "#", - "text" : "Fishing" + "href": "#", + "text": "Fishing", + "info": "" }, { - "href" : "#", - "text" : "Hunting" - }] + "href": "#", + "text": "Hunting", + "info": "" + }], + "seeAll": { + "href": "#", + "text": "more", + "info": "" + } } } \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/section-links.md b/styleguide/source/_patterns/02-molecules/section-links.md index 23ee4285b9..ab2a6212fd 100644 --- a/styleguide/source/_patterns/02-molecules/section-links.md +++ b/styleguide/source/_patterns/02-molecules/section-links.md @@ -1,54 +1,40 @@ ---- -title: Section links ---- -Description: displays a set of links in a card layout. -## Status: Alpha -### Notes: -- The way the icons are rendered is deprecated and will need to be updated here once refactored. +### Description +Displays a set of links in a card layout. -### Contains: -- [@atoms/05-icons/cat-icon](?p=atoms-cat-icon) -- Either: - - [@atoms/decorative-link](?p=atoms-decorative-link) - - [@molecules/callout-link](?p=molecules-callout-link) - -### Variations: -- [Section Links with Callout Links](?p=molecules-section-links-with-callout-links) -- [Section Links with See All](?p=molecules-section-links-with-see-all) +### Status +* Stable as of 5.0.0 -### Used in: -- [@organisms/by-author/sections-three-up](?p=organisms-sections-three-up) +### Pattern Contains +* Decorative Link +* Callout Link +* Cat Icon + +### Variant options +* Can be used with [Callout Links](./?p=molecules-section-links-with-callout-links) + +### JavaScript Used +* This pattern uses JavaScript for the accordions shown on narrow screens (js/modules/accordions.js) ### Variables ~~~ sectionLinks: { - catIcon: { - icon: - type: string/path to icon - small: - type: boolean/true + catIcon: { + type: catIcon / optional }, title: { - href: - type: url/required - text: - type: string/required + type: decorativeLink / required }, + level: + type: number / optional description: - type: string + type: string / optional type: - type: string/optional ("callout" || defaults to "decorative") + type: string ("", "callout") / optional links: [{ - href: - type: url/required - text: - type: string/required + type: decorativeLink and calloutLink / required }] seeAll: { - href: - type: url - text: - type: string - } / optional + type: decorativeLink / optional + } } ~~~ diff --git a/styleguide/source/_patterns/02-molecules/section-links.twig b/styleguide/source/_patterns/02-molecules/section-links.twig index f49fa45327..b2e2bd7308 100644 --- a/styleguide/source/_patterns/02-molecules/section-links.twig +++ b/styleguide/source/_patterns/02-molecules/section-links.twig @@ -1,59 +1,59 @@ -{% set decorativeLink = { - "type": "", - "href": sectionLinks.title.href, - "text": sectionLinks.title.text, - "info": "" } -%} -{% set titleClass = "ma__section-links__title js-accordion-link" %} -{% set titleId = "section_titles_" ~ sectionLinks.id %} - - +{% set titleId = "section_titles_" ~ sectionLinks.id %} + + diff --git a/styleguide/source/_patterns/02-molecules/section-links~with-callout-links.json b/styleguide/source/_patterns/02-molecules/section-links~with-callout-links.json index e41f180c0c..4718b14d08 100644 --- a/styleguide/source/_patterns/02-molecules/section-links~with-callout-links.json +++ b/styleguide/source/_patterns/02-molecules/section-links~with-callout-links.json @@ -2,13 +2,14 @@ "sectionLinks": { "id": "GUIDasjdhf1", "catIcon": { - "icon":"@atoms/05-icons/svg-lg-fishing.twig", - "small":"true" + "icon":"lg-fishing", + "small": true }, "title" : { "href" : "#", "text" : "Recreational Licenses & Permits" }, + "level": "", "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque rutrum mauris quam, et imperdiet purus pellentesque vel.", "type": "callout", "links" : [{ diff --git a/styleguide/source/_patterns/02-molecules/section-links~with-see-all.json b/styleguide/source/_patterns/02-molecules/section-links~with-see-all.json deleted file mode 100644 index 6b3a050b8b..0000000000 --- a/styleguide/source/_patterns/02-molecules/section-links~with-see-all.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "sectionLinks": { - "id": "GUIDasjdhf1", - "catIcon": { - "icon":"@atoms/05-icons/svg-lg-fishing.twig", - "small":"true" - }, - "title" : { - "href" : "#", - "text" : "Recreational Licenses & Permits" - }, - "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque rutrum mauris quam, et imperdiet purus pellentesque vel.", - "type": "decorative", - "links" : [{ - "href" : "#", - "text" : "Boating" - }, - { - "href" : "#", - "text" : "Fishing" - }, - { - "href" : "#", - "text" : "Hunting" - }], - "seeAll" : { - "href" : "#", - "text" : "more" - } - } -} \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/social-links.json b/styleguide/source/_patterns/02-molecules/social-links.json index cc55eee7e3..753501601d 100644 --- a/styleguide/source/_patterns/02-molecules/social-links.json +++ b/styleguide/source/_patterns/02-molecules/social-links.json @@ -4,22 +4,22 @@ "items": [{ "altText": "Follow us on Facebook", "href": "#", - "icon": "@atoms/05-icons/svg-facebook.twig", + "icon": "facebook", "linkType": "facebook" },{ "altText": "Follow us on Twitter", "href": "#", - "icon": "@atoms/05-icons/svg-twitter.twig", + "icon": "twitter", "linkType": "twitter" },{ "altText": "Follow us on LinkedIn", "href": "#", - "icon": "@atoms/05-icons/svg-linkedin.twig", + "icon": "linkedin", "linkType": "linkedin" },{ "altText": "Follow us on Youtube", "href": "#", - "icon": "@atoms/05-icons/svg-youtube.twig", + "icon": "youtube", "linkType": "youtube" }] } diff --git a/styleguide/source/_patterns/02-molecules/social-links.md b/styleguide/source/_patterns/02-molecules/social-links.md index 81785e5549..4d1059315e 100644 --- a/styleguide/source/_patterns/02-molecules/social-links.md +++ b/styleguide/source/_patterns/02-molecules/social-links.md @@ -1,29 +1,22 @@ ---- -title: Social links ---- -Description: displays a list of sitewide social links -## Status: Alpha -### Notes: -- The links are currently hardcoded and do not have real urls. -- Since the only visual content for the link is an icon, the pattern provides visually hidden contextual (action oriented ) link text for assistive technology +### Description +Displays a list of social links for sharing a page with an optional label +### Status +* Stable as of 5.0.0 -### Used in: -- [@organisms/by-template/footer](?p=organisms-footer) -### Required Variables: +### Variables +~~~ +socialLinks: { + label: + type: string / optional + items: [{ + href: + type: string(url) / required, + icon: + type: string(path to icon) / required + altText: + type: string / required for accessibilty + } +}] ~~~ - socialLinks: { - label: - type: string/optional - items: [{ - href: - type: string(url)/required, - icon: - type: string(path to icon)/required - altText: - type: string/required - } - }] - -~~~ \ No newline at end of file diff --git a/styleguide/source/_patterns/02-molecules/social-links.twig b/styleguide/source/_patterns/02-molecules/social-links.twig index 03e46139ea..a0746f2cb5 100644 --- a/styleguide/source/_patterns/02-molecules/social-links.twig +++ b/styleguide/source/_patterns/02-molecules/social-links.twig @@ -7,11 +7,8 @@ {% for item in socialLinks.items %} {% endfor %} diff --git a/styleguide/source/_patterns/02-molecules/sort-results.json b/styleguide/source/_patterns/02-molecules/sort-results.json new file mode 100644 index 0000000000..5a4fb0e92b --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/sort-results.json @@ -0,0 +1,16 @@ +{ + "sortResults": { + "label": "Sort by:", + "sortButtons": [{ + "text": "Date", + "direction": "dsc" + },{ + "text": "Price", + "direction": "" + },{ + "text": "Color", + "direction": "" + }] + } +} + diff --git a/styleguide/source/_patterns/02-molecules/sort-results.md b/styleguide/source/_patterns/02-molecules/sort-results.md new file mode 100644 index 0000000000..c20ce8d916 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/sort-results.md @@ -0,0 +1,19 @@ +### Description +This pattern is a set of sort buttons with an optional label. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Button Sort + +### Variables +~~~ +sortResults: { + label: + type: string / optional + sortButtons: [{ + type: array of buttonSort / required + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/sort-results.twig b/styleguide/source/_patterns/02-molecules/sort-results.twig new file mode 100644 index 0000000000..7b4580e2f8 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/sort-results.twig @@ -0,0 +1,8 @@ +
    + {% if sortResults.label %} + {{ sortResults.label }} + {% endif %} + {% for buttonSort in sortResults.sortButtons %} + {% include "@atoms/01-buttons/button-sort.twig" %} + {% endfor %} +
    diff --git a/styleguide/source/_patterns/02-molecules/state-util.md b/styleguide/source/_patterns/02-molecules/state-util.md new file mode 100644 index 0000000000..ef78732e40 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/state-util.md @@ -0,0 +1,3 @@ +### Status +* Obsolete as of 5.0.0 + diff --git a/styleguide/source/_patterns/02-molecules/sticky-nav.json b/styleguide/source/_patterns/02-molecules/sticky-nav.json index df687744a1..cb38a68f46 100644 --- a/styleguide/source/_patterns/02-molecules/sticky-nav.json +++ b/styleguide/source/_patterns/02-molecules/sticky-nav.json @@ -1,5 +1,6 @@ { "stickyNav": { + "titleContext": "", "anchorLinks":[{ "href": "what-you-need", "text": "What you need", @@ -30,4 +31,4 @@ "info": "" }] } -} \ No newline at end of file +} diff --git a/styleguide/source/_patterns/02-molecules/sticky-nav.md b/styleguide/source/_patterns/02-molecules/sticky-nav.md new file mode 100644 index 0000000000..6504ce8331 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/sticky-nav.md @@ -0,0 +1,26 @@ +### Description +This is a sticky navigation list with links to content within the page. + +### Status +* Stable as of 5.0.0 + + +### JavaScript Used +* Stick Nav (js/modules/scrollAnchors.js) +* Accordion (js/modules/accordions.js) + +### Variables +~~~ +stickyNav: { + titleContext: + type: string / optional + anchorLinks:[{ + href: + type: string (id of target) / required, + text: + type: string / required + info: + type: string / required for screen readers + }] +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/sticky-nav.twig b/styleguide/source/_patterns/02-molecules/sticky-nav.twig index 9f30e4679f..06e8af313f 100644 --- a/styleguide/source/_patterns/02-molecules/sticky-nav.twig +++ b/styleguide/source/_patterns/02-molecules/sticky-nav.twig @@ -1,16 +1,14 @@ - diff --git a/styleguide/source/_patterns/02-molecules/tooltip.json b/styleguide/source/_patterns/02-molecules/tooltip.json new file mode 100644 index 0000000000..df268ab5f1 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/tooltip.json @@ -0,0 +1,13 @@ +{ + "tooltip": { + "controlId": "GUID1272384732", + "location": "", + "info": "show more information about this thing", + "openText": "Show Tooltip", + "openIcon": "question-mark", + "closeText": "Close", + "title": "What does this term mean?", + "level": "", + "message": "This term is defined as Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est fugiat voluptatibus, magnam, facilis error corporis beatae non minus eius unde." + } +} diff --git a/styleguide/source/_patterns/02-molecules/tooltip.md b/styleguide/source/_patterns/02-molecules/tooltip.md new file mode 100644 index 0000000000..977b4f921e --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/tooltip.md @@ -0,0 +1,29 @@ +### Description +This pattern show a modal with helpful information. + +### Status +* Stable as of 5.0.0 + +### Variables +~~~ +tooltip: { + controlId: + type: string (unique per page) / required, + location: + type: string / optional ('' or above') + info: + type: string / required (description on link for screen readers) + openText: + type: string / required + openIcon: + type: string / path / optional + closeText: + type: string / required, + title: + type: string / optional, + level + type: number / optional + message: + type rich text / required. +} +~~~ diff --git a/styleguide/source/_patterns/02-molecules/tooltip.twig b/styleguide/source/_patterns/02-molecules/tooltip.twig new file mode 100644 index 0000000000..c911cb8231 --- /dev/null +++ b/styleguide/source/_patterns/02-molecules/tooltip.twig @@ -0,0 +1,37 @@ +
    +
    + + +
    +
    + + {% if tooltip.title %} + {% set headingLevel = tooltip.level ? : 2 %} + {{ tooltip.title }} + {% endif %} +
    + {{ tooltip.message|raw }} +
    +
    +
    +
    +
    diff --git a/styleguide/source/_patterns/02-molecules/wait-time.md b/styleguide/source/_patterns/02-molecules/wait-time.md index c7b4be4097..318351a21e 100644 --- a/styleguide/source/_patterns/02-molecules/wait-time.md +++ b/styleguide/source/_patterns/02-molecules/wait-time.md @@ -1,6 +1,6 @@ ---- -title: Wait time ---- +### Status +* Obsolete as of 5.0.0 + Description: Widget to display a wait time at a given location. ## Status: Alpha ### Notes: diff --git a/styleguide/source/_patterns/02-molecules/wait-time.twig b/styleguide/source/_patterns/02-molecules/wait-time.twig index 27fee173c6..c312e86039 100644 --- a/styleguide/source/_patterns/02-molecules/wait-time.twig +++ b/styleguide/source/_patterns/02-molecules/wait-time.twig @@ -1,6 +1,6 @@

    - {% include "@atoms/05-icons/svg-wait-time.twig" %} + {{ icon('wait-time') }} Wait Time

      diff --git a/styleguide/source/_patterns/03-organisms/by-author/about-section.json b/styleguide/source/_patterns/03-organisms/by-author/about-section.json new file mode 100644 index 0000000000..aead65e072 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/about-section.json @@ -0,0 +1,78 @@ +{ + "about": { + "title": { + "title": "About the Treasury", + "level": "2" + }, + "content": { + "rteElements": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Our mission at the office of the State Treasurer is to prudently manage and safeguard the Commonwealth's public deposits and investments through sound business practices for the exclusive benefits of our citizens, and preform these duties with integrity, excellence, and leadership." + } + } + }] + }, + "link": { + "href": "#", + "text":"Read more and the Treasury", + "info": "", + "chevron": "" + }, + "person": { + "image": { + "alt": "alt text", + "src": "../../assets/images/placeholder/250x250.png", + "height": "250", + "width": "250", + "shape": "circular" + }, + "name": { + "title": "Deborah B. Goldberg", + "level": "2", + "color": "transparent", + "centered": true + }, + "title" : { + "text": "Treasurer & Receiver General", + "level": "3" + }, + "bio": { + "href": "#", + "text":"Learn more about Treasurer Goldberg" + } + }, + "social": { + "compHeading": { + "title": "Social:", + "sub": "", + "color": "green", + "id": "", + "centered": "" + }, + "items": [{ + "icon": "facebook", + "link": { + "href": "#", + "text": "Facebook", + "chevron": "" + } + },{ + "icon": "twitter", + "link": { + "href": "#", + "text": "Twitter", + "chevron": "" + } + },{ + "icon": "instagram", + "link": { + "href": "#", + "text": "Instagram", + "chevron": "" + } + }] + } + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/03-organisms/by-author/about-section.md b/styleguide/source/_patterns/03-organisms/by-author/about-section.md new file mode 100644 index 0000000000..bcdd4c74a5 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/about-section.md @@ -0,0 +1,35 @@ +### Description +An about section for the Elected Officials + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* comp heading +* link +* icon link +* rich text +* person card (1 required, 2 optional) + + + +### Variables +~~~ +about: { + title: + type: string /required + + content: + type: richtext / required + + socialLinks: [{ + type: icon links + }] + + person: + type: person card /required + + secondary_person: + type: person card +} +~~~ diff --git a/styleguide/source/_patterns/03-organisms/by-author/about-section.twig b/styleguide/source/_patterns/03-organisms/by-author/about-section.twig new file mode 100644 index 0000000000..415ef03ef6 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/about-section.twig @@ -0,0 +1,47 @@ +
      +
      + {% set compHeading = about.title %} + {% include "@atoms/04-headings/comp-heading.twig" %} +
      +
      +
      +
      + {% set richText = about.content %} + {% include "@organisms/by-author/rich-text.twig" %} + + {% set link = about.link %} + {% include "@atoms/11-text/link.twig" %} +
      + + {% if about.secondary_person is empty %} +
      + {% block primaryPersonCard %} + {% set person = about.person %} + {% include "@organisms/by-author/person-card.twig" %} + {% endblock %} +
      + {% endif %} +
      +
      + + + {% if about.secondary_person %} +
      +
      + {{ block('primaryPersonCard') }} +
      +
      + {% block secondaryPersonCard %} + {% set person = about.secondary_person %} + {% include "@organisms/by-author/person-card.twig" %} + {% endblock %} +
      +
      + {% endif %} +
      +
      diff --git a/styleguide/source/_patterns/03-organisms/by-author/about-section~two-officials.json b/styleguide/source/_patterns/03-organisms/by-author/about-section~two-officials.json new file mode 100644 index 0000000000..82366d3ec0 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/about-section~two-officials.json @@ -0,0 +1,101 @@ +{ + "about": { + "title": { + "title": "About the Treasury", + "level": "2" + }, + "content": { + "rteElements": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Our mission at the office of the State Treasurer is to prudently manage and safeguard the Commonwealth's public deposits and investments through sound business practices for the exclusive benefits of our citizens, and preform these duties with integrity, excellence, and leadership." + } + } + }] + }, + "link": { + "href": "#", + "text":"Read more and the Treasury", + "info": "", + "chevron": "" + }, + "person": { + "image": { + "alt": "alt text", + "src": "../../assets/images/placeholder/250x250.png", + "height": "250", + "width": "250", + "shape": "circular" + }, + "name": { + "title": "First Person", + "level": "2", + "color": "transparent", + "centered": true + }, + "title" : { + "text": "Treasurer & Receiver General", + "level": "3" + }, + "bio": { + "href": "#", + "text":"Learn more about Treasurer Goldberg" + } + }, + "secondary_person": { + "image": { + "alt": "alt text", + "src": "../../assets/images/placeholder/250x250.png", + "height": "250", + "width": "250", + "shape": "circular" + }, + "name": { + "title": "Secondary Person", + "level": "2", + "color": "transparent", + "centered": true + }, + "title" : { + "text": "Treasurer & Receiver General", + "level": "3" + }, + "bio": { + "href": "#", + "text":"Learn more about Treasurer Goldberg" + } + }, + "social": { + "compHeading": { + "title": "Social:", + "sub": "", + "color": "green", + "id": "", + "centered": "" + }, + "items": [{ + "icon": "facebook", + "link": { + "href": "#", + "text": "Facebook", + "chevron": "" + } + },{ + "icon": "twitter", + "link": { + "href": "#", + "text": "Twitter", + "chevron": "" + } + },{ + "icon": "instagram", + "link": { + "href": "#", + "text": "Instagram", + "chevron": "" + } + }] + } + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/03-organisms/by-author/action-card.json b/styleguide/source/_patterns/03-organisms/by-author/action-card.json index 74b6e1aaeb..410a1acec3 100644 --- a/styleguide/source/_patterns/03-organisms/by-author/action-card.json +++ b/styleguide/source/_patterns/03-organisms/by-author/action-card.json @@ -4,70 +4,70 @@ "description": "Get a feel for where we're headed", "actions":[ { - "icon":"@atoms/05-icons/svg-lg-picnic-table.twig", + "icon":"lg-picnic-table", "category":"State Parks & Recreation", "linkText":"Get a DCR ParksPass", "linkHref":"#", "theme":"green" }, { - "icon":"@atoms/05-icons/svg-lg-fishing.twig", + "icon":"lg-fishing", "category":"Recreational Licenses & Permits", "linkText":"Buy a freshwater fishing license", "linkHref":"#", "theme":"blue" }, { - "icon":"@atoms/05-icons/svg-lg-license.twig", + "icon":"lg-license", "category":"Professional Licensing & Certification", "linkText":"Apply for a nursing license (new graduates)", "linkHref":"#", "theme":"" }, { - "icon":"@atoms/05-icons/svg-lg-license.twig", + "icon":"lg-license", "category":"Professional Licensing & Certification", "linkText":"Convert an out-of-state nursing license (reciprocity)", "linkHref":"#", "theme":"dark-gray" }, { - "icon":"@atoms/05-icons/svg-lg-binders.twig", + "icon":"lg-binders", "category":"Business Services & Resources", "linkText":"Register your business", "linkHref":"#", "theme":"blue" }, { - "icon":"@atoms/05-icons/svg-lg-apple.twig", + "icon":"lg-apple", "category":"Health & Social Services", "linkText":"Apply for MassHealth (individuals & families)", "linkHref":"#", "theme":"green" }, { - "icon":"@atoms/05-icons/svg-lg-clipboard.twig", + "icon":"lg-clipboard", "category":"Unemployment", "linkText":"File for unemployment", "linkHref":"#", "theme":"dark-gray" }, { - "icon":"@atoms/05-icons/svg-lg-apple.twig", + "icon":"lg-apple", "category":"Health & Social Services", "linkText":"Apply for SNAP benefits (food stamps)", "linkHref":"#", "theme":"" }, { - "icon":"@atoms/05-icons/svg-lg-family.twig", + "icon":"lg-family", "category":"Family & Children", "linkText":"Get a child support order", "linkHref":"#", "theme":"green" }, { - "icon":"@atoms/05-icons/svg-lg-scales.twig", + "icon":"lg-scales", "category":"Legal & Justice", "linkText":"Respond to a jury duty summons", "linkHref":"#", diff --git a/styleguide/source/_patterns/03-organisms/by-author/action-card.md b/styleguide/source/_patterns/03-organisms/by-author/action-card.md new file mode 100644 index 0000000000..f62f990246 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/action-card.md @@ -0,0 +1,2 @@ +### Status +* Archived as of 6.0.0 diff --git a/styleguide/source/_patterns/03-organisms/by-author/action-card.twig b/styleguide/source/_patterns/03-organisms/by-author/action-card.twig index 1c4d8cacbc..bfe088da86 100644 --- a/styleguide/source/_patterns/03-organisms/by-author/action-card.twig +++ b/styleguide/source/_patterns/03-organisms/by-author/action-card.twig @@ -9,15 +9,15 @@ {% for action in actionCard.actions %}
      - {% include action.icon %} + {{ icon(action.icon) }}
      -
      +
    {% endfor %}
    - \ No newline at end of file + diff --git a/styleguide/source/_patterns/03-organisms/by-author/action-details.json b/styleguide/source/_patterns/03-organisms/by-author/action-details.json index f0fc9874ed..42537b647e 100644 --- a/styleguide/source/_patterns/03-organisms/by-author/action-details.json +++ b/styleguide/source/_patterns/03-organisms/by-author/action-details.json @@ -1,7 +1,9 @@ { + "titleContext": "", "actionDetails" : { "sections": [{ "title":"Overview", + "titleContext": "", "intro": "", "id":"overview", "path": "organisms-rich-text", @@ -42,10 +44,11 @@ } }] } - } + } }, { "title":"Fees", + "titleContext": "", "intro": "", "id":"fees", "path": "organisms-rich-text", @@ -72,6 +75,7 @@ }, { "title":"Eligibility", + "titleContext": "", "intro": "", "id":"fees", "path": "organisms-rich-text", @@ -91,13 +95,14 @@ }, { "title":"Get it Done", + "titleContext": "", "intro": "", "id":"get-it-done", "path": "@organisms/by-author/steps-unordered.twig", "data": { "stepsUnordered": { "steps": [{ - "icon":"atoms-svg-profile", + "icon":"profile", "title":"In Person at State Parks", "richText": { "rteElements": [{ @@ -111,7 +116,7 @@ } }, { - "icon":"atoms-svg-laptop", + "icon":"laptop", "title":"Online", "richText":{ "rteElements": [{ @@ -135,7 +140,7 @@ } }, { - "icon":"atoms-svg-phone", + "icon":"phone", "title":"By Phone", "richText":{ "rteElements": [{ @@ -149,7 +154,7 @@ } }, { - "icon":"atoms-svg-mail", + "icon":"mail", "title":"By Mail", "richText": { "rteElements": [{ @@ -167,6 +172,7 @@ }, { "title":"Forms", + "titleContext": "", "intro": "Here are some helpful downloads to get you started.", "id":"downloads", "path": "@organisms/by-author/form-downloads.twig", @@ -175,7 +181,7 @@ "downloadLinks": [{ "downloadLink": { "iconSize": "", - "icon": "@atoms/05-icons/svg-doc-pdf.twig", + "icon": "doc-pdf", "decorativeLink": { "text": "Park Pass Application", "href": "#", @@ -188,7 +194,7 @@ },{ "downloadLink": { "iconSize": "", - "icon": "@atoms/05-icons/svg-doc-docx.twig", + "icon": "doc-docx", "decorativeLink": { "text": "Park Pass Application", "href": "#", @@ -201,7 +207,7 @@ },{ "downloadLink": { "iconSize": "", - "icon": "@atoms/05-icons/svg-doc-xlsx.twig", + "icon": "doc-xlsx", "decorativeLink": { "text": "Calculate your personal return on investment with a seasonal pass.", "href": "#", @@ -217,6 +223,7 @@ }, { "title":"Additonal Information", + "titleContext": "", "intro": "", "id":"additional-info", "path": "organisms-rich-text", @@ -234,5 +241,5 @@ } } }] - } -} \ No newline at end of file + } +} diff --git a/styleguide/source/_patterns/03-organisms/by-author/action-details.md b/styleguide/source/_patterns/03-organisms/by-author/action-details.md new file mode 100644 index 0000000000..a089c7e280 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/action-details.md @@ -0,0 +1,3 @@ +### Status +* Obsolete as of 6.0.0 + diff --git a/styleguide/source/_patterns/03-organisms/by-author/action-details.twig b/styleguide/source/_patterns/03-organisms/by-author/action-details.twig index fe102fa569..5ccb1a631e 100644 --- a/styleguide/source/_patterns/03-organisms/by-author/action-details.twig +++ b/styleguide/source/_patterns/03-organisms/by-author/action-details.twig @@ -1,9 +1,9 @@
    -

    The Details

    +

    The Details{% if actionDetails.titleContext %} of {{actionDetails.titleContext}}{% endif %}

    \ No newline at end of file + diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group.json b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group.json new file mode 100644 index 0000000000..ac96647b9a --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group.json @@ -0,0 +1,375 @@ +{ + "teaserListingGroup": { + "totalShown": 8, + "moreItemsLabel": "Show all members", + "lessItemsLabel": "Show fewer members", + "teaserListings": [ + { + "stacked": false, + "contained": true, + "gridTwoColumns": true, + "featuredItems": [ + { + "layout": "stacked", + "image": { + "src": "../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Featured Board Member", + "title": { + "text": "Featured Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Featured Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "stacked", + "image": { + "src": "../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Featured Board Member", + "title": { + "href": "#", + "text": "Featured Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Featured Board Member's title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + } + ], + "items": [ + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board member", + "title": { + "href": "#", + "text": "Sally Testperson", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Awesome board member" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Member's title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + } + ] + }, + { + "stacked": false, + "contained": true, + "gridTwoColumns": true, + "compHeading": { + "title": "Subsection of boards", + "sub": "", + "color": "", + "id": "", + "level": 3, + "centered": "" + }, + "description": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + }, + "items": [ + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board member", + "title": { + "href": "#", + "text": "Sally Testperson", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Awesome board member" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Member's title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + } + ] + } + ] + } +} diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group.md b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group.md new file mode 100644 index 0000000000..ae88c9e828 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group.md @@ -0,0 +1,32 @@ +### Description +This Pattern shows a group of multiple General Teaser List patterns. + +### Status +* Stable as of TBD + +### Pattern Contains +* General Teaser + +### JavaScript Used +* Accordion (js/modules/accordions.js) + +### Usage Guidelines + + +### Variables +~~~ +teaserListingGroup: { + totalShown: + type: number / required + moreItemsLabel: + type: string / required + lessItemsLabel: + type: string / required + teaserListings: [ + type: teaserListing / required + ], + more: { + type: link / optional + } +} +~~~ diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group.twig b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group.twig new file mode 100644 index 0000000000..49352f3003 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group.twig @@ -0,0 +1,14 @@ +
    + {% block teaserListingGroupItems %} + {% for teaserListing in teaserListingGroup.teaserListings %} + {% include "@organisms/by-author/teaser-listing.twig" %} + {% endfor %} + {% endblock %} + + +
    diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group~showing-few-items.json b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group~showing-few-items.json new file mode 100644 index 0000000000..63def9f9e3 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing-group~showing-few-items.json @@ -0,0 +1,375 @@ +{ + "teaserListingGroup": { + "totalShown": 4, + "moreItemsLabel": "Show all members", + "lessItemsLabel": "Show fewer members", + "teaserListings": [ + { + "stacked": false, + "contained": true, + "gridTwoColumns": true, + "featuredItems": [ + { + "layout": "stacked", + "image": { + "src": "../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Featured Board Member", + "title": { + "text": "Featured Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Featured Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "stacked", + "image": { + "src": "../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Featured Board Member", + "title": { + "href": "#", + "text": "Featured Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Featured Board Member's title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + } + ], + "items": [ + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board member", + "title": { + "href": "#", + "text": "Sally Testperson", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Awesome board member" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Member's title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + } + ] + }, + { + "stacked": false, + "contained": true, + "gridTwoColumns": true, + "compHeading": { + "title": "Subsection of boards", + "sub": "", + "color": "", + "id": "", + "level": 3, + "centered": "" + }, + "description": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + }, + "items": [ + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board member", + "title": { + "href": "#", + "text": "Sally Testperson", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Awesome board member" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Member's title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + }, + { + "layout": "inline-image", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + } + ] + } + ] + } + ] + } +} diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-listing.json b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing.json new file mode 100644 index 0000000000..35197c9acf --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing.json @@ -0,0 +1,244 @@ +{ + "teaserListing": { + "stacked": true, + "compHeading": { + "title": "Teaser Listing", + "sub": "", + "color": "", + "id": "", + "centered": "" + }, + "description" : { + "text": "This is an optional descriptive paragraph field, explaining the listings below. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar tempor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus sapien nunc eget." + }, + "featuredItems": [{ + "image": { + "src":"../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Eyebrow", + "title" : { + "href":"#", + "text":"Massachusetts Health Officials Release Quarterly Report on Opioid OD Deaths", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Health & Human Services, Public Safety", + "4/4/2017" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + },{ + "image": { + "src":"../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Eyebrow", + "title" : { + "text":"MassParks", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Org Name", + "4/3/2017" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }], + "items": [ + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board member", + "title": { + "href": "#", + "text": "Sally Testperson", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Awesome board member" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + },{ + "path": "@atoms/decorative-link.twig", + "data": { + "decorativeLink": { + "href": "#", + "text": "More", + "chevron": true, + "label": "" + } + } + } + ] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Member's title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + } + ], + "more":{ + "href": "#", + "text": "See all news and announcements", + "chevron": true, + "label": "See all news and announcements for the blah blah location" + } + } +} diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-listing.md b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing.md new file mode 100644 index 0000000000..6d1bc1399c --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing.md @@ -0,0 +1,41 @@ +### Description +This Pattern shows a list of General Teaser patterns. + +### Status +* Stable as of TBD + +### Pattern Contains +* Comp heading +* Sidebar heading +* Paragraph +* General Teaser +* Link + +### Variables +~~~ +teaserListing: { + compHeading: { + type: compHeading / optional + }, + sidebarHeading: { + type: sidebarHeading / optional + }, + stacked: + type: boolean / optional, + expandable: + type: boolean / optional, + accordionLabel: + type: string / required if expandable is true + itemsLabel: + type: string / required if expandable is true + featuredItems: [{ + type: generalTeaser / optional + }], + items: [{ + type: generalTeaser / optional + }], + more: { + type: link / optional + } +} +~~~ diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-listing.twig b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing.twig new file mode 100644 index 0000000000..386d0f3765 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing.twig @@ -0,0 +1,78 @@ +{% set teaserHeading = 2 %} +{% set stacked = teaserListing.stacked ? 'stacked': 'side-by-side' %} +{% set columnCount = teaserListing.contained and teaserListing.gridTwoColumns ? 2 : 3 %} +{% set columnClass = 2 ? 'ma__teaser-listing__2-col-grid' : 'ma__teaser-listing__3-col-grid' %} +{% set shownNumber = teaserListing.shownNumber ? teaserListing.shownNumber : columnCount %} + + +
    +
    + {% if teaserListing.compHeading %} + {% set compHeading = teaserListing.compHeading %} + {% include "@atoms/04-headings/comp-heading.twig" %} + {% set teaserHeading = (compHeading.level ? : teaserHeading) + 1 %} + {% endif %} + {% if teaserListing.sidebarHeading %} + {% set sidebarHeading = teaserListing.sidebarHeading %} + {% include "@atoms/04-headings/sidebar-heading.twig" %} + {% set teaserHeading = (sidebarHeading.level ? : teaserHeading) + 1 %} + {% endif %} + {% if teaserListing.description %} +
    + {% set paragraph = teaserListing.description %} + {% include "@atoms/11-text/paragraph.twig" %} +
    + {% endif %} + {% if teaserListing.featuredItems %} + + {% endif %} + {% block teaserListingItems %} + {% if teaserListing.items %} + {% if teaserListing.expandable %} +
      + {% for generalTeaser in teaserListing.items[:shownNumber] %} + {% block teaserListItem %} +
    • + {% set generalTeaser = generalTeaser|merge({"level":teaserHeading}) %} + {% include "@molecules/general-teaser.twig" %} +
    • + {% endblock %} + {% endfor %} +
    + {% if teaserListing.items|length > shownNumber %} +
    +
      + {% for generalTeaser in teaserListing.items[shownNumber:last] %} + {{ block('teaserListItem') }} + {% endfor %} +
    +
    + + {% endif %} + {% else %} +
      + {% for generalTeaser in teaserListing.items %} + {{ block('teaserListItem') }} + {% endfor %} +
    + {% endif %} + {% endif %} + {% endblock %} + {% if teaserListing.more %} +
    + {% set link = teaserListing.more %} + {% include "@atoms/11-text/link.twig" %} +
    + {% endif %} +
    +
    \ No newline at end of file diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-listing~as-expandable.json b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing~as-expandable.json new file mode 100644 index 0000000000..366a4f3301 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing~as-expandable.json @@ -0,0 +1,249 @@ +{ + "teaserListing": { + "stacked": true, + "expandable": true, + "shownNumber": 4, + "gridTwoColumns": true, + "moreItemsLabel": "Show all board members", + "lessItemsLabel": "Show fewer board members", + "compHeading": { + "title": "Teaser Listing", + "sub": "", + "color": "", + "id": "", + "centered": "" + }, + "description" : { + "text": "This is an optional descriptive paragraph field, explaining the listings below. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar tempor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus sapien nunc eget." + }, + "featuredItems": [{ + "image": { + "src":"../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Eyebrow", + "title" : { + "href":"#", + "text":"Massachusetts Health Officials Release Quarterly Report on Opioid OD Deaths", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Health & Human Services, Public Safety", + "4/4/2017" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + },{ + "image": { + "src":"../../assets/images/placeholder/172x228.png", + "alt": "placeholder image", + "width": "172", + "height": "228" + }, + "eyebrow": "Eyebrow", + "title" : { + "text":"MassParks", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Org Name", + "4/3/2017" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph" : { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }], + "items": [ + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board member", + "title": { + "href": "#", + "text": "Sally Testperson", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Awesome board member" + ], + "contents": [ + { + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + },{ + "path": "@atoms/decorative-link.twig", + "data": { + "decorativeLink": { + "href": "#", + "text": "More", + "chevron": true, + "label": "" + } + } + } + ] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Member's title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + }, + { + "layout": "contents-stacked", + "image": { + "src": "../../assets/images/placeholder/72x96.png", + "alt": "placeholder image", + "width": "72", + "height": "96" + }, + "eyebrow": "Board Member", + "title": { + "text": "Board Member's Name", + "info": "", + "property": "" + }, + "emphasizedText": [ + "Board Member's Title" + ], + "contents": [{ + "path": "@atoms/11-text/paragraph.twig", + "data": { + "paragraph": { + "text": "Optional descriptive text. Vel impetus tamquam equidem cu, ei possit possim constituam eos, mea ut rebum iudico. Soluta bonorum partiendo est ne, nominati postulant argumentum ius no, quo ne quaeque sanctus." + } + } + }] + } + ], + "more":{ + "href": "#", + "text": "See all news and announcements", + "chevron": true, + "label": "See all news and announcements for the blah blah location" + } + } +} diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-listing~as-grid.md b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing~as-grid.md new file mode 100644 index 0000000000..b8b6938926 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-listing~as-grid.md @@ -0,0 +1,8 @@ + +### Description +This is a variant of the [Teaser Listing](./?p=organisms-teaser-listing) pattern showing a list of General Teasers followed by a secondary grid of General Teasers. + +### How to generate +* Set the `stacked` variable to false for displaying primary items side-by-side. Default is stacked. +* Set the `contained` variable to true for a grid display of secondary items. Defaults to a three column grid. +* Set the `gridTwoColumns` variable to true for an alternative two column layout for large screens. (Both display the same at smaller screen widths) diff --git a/styleguide/source/_patterns/03-organisms/by-author/teaser-text.md b/styleguide/source/_patterns/03-organisms/by-author/teaser-text.md new file mode 100644 index 0000000000..a089c7e280 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/teaser-text.md @@ -0,0 +1,3 @@ +### Status +* Obsolete as of 6.0.0 + diff --git a/styleguide/source/_patterns/03-organisms/by-author/test-feed.md b/styleguide/source/_patterns/03-organisms/by-author/test-feed.md new file mode 100644 index 0000000000..2c417c7c63 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/test-feed.md @@ -0,0 +1,3 @@ +### Status +* Archived as of 6.0.0 + diff --git a/styleguide/source/_patterns/03-organisms/by-author/top-actions.md b/styleguide/source/_patterns/03-organisms/by-author/top-actions.md new file mode 100644 index 0000000000..2c417c7c63 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-author/top-actions.md @@ -0,0 +1,3 @@ +### Status +* Archived as of 6.0.0 + diff --git a/styleguide/source/_patterns/03-organisms/by-template/DP-9017.txt b/styleguide/source/_patterns/03-organisms/by-template/DP-9017.txt new file mode 100644 index 0000000000..26d95fff06 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/DP-9017.txt @@ -0,0 +1,4 @@ +___DESCRIPTION___ +Added +Minor +- DP-9017: Image placement on Guide pages using focal point diff --git a/styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.json b/styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.json new file mode 100644 index 0000000000..827c1fedf1 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.json @@ -0,0 +1,6 @@ +{ + "ajaxPattern": { + "endpoint":"../../assets/data/emergency-alerts.json", + "renderPattern":"@organisms/by-template/emergency-alerts.twig" + } +} diff --git a/styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.md b/styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.md new file mode 100644 index 0000000000..3716d36405 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.md @@ -0,0 +1,76 @@ +### Description +This pattern is designed to facilitate client side rendering of another Mayflower pattern whose data is requested from an api endpoint. + + +### Status +* Alpha + + +### Pattern Contains +This pattern can include whichever pattern is passed in via the `ajaxPattern.renderPattern` variable. + +This example implementation (see the data `ajaxPattern.json` file) includes Emergency Alerts. + +### Usage Guidelines + * The intended pattern will render as is, if: + - the endpoint is valid + - data matching the structure for `ajaxPattenr.renderPattern` is received + * If the endpoint will not provide data matching the structure, a custom selector can be passed into the component which will provide a hook for a custom transform function to create the necessary data structure. In this case, the implementation should include JavaScript that uses the `MassAjaxPattern jQuery plugin`, passing in a function that transforms the data from the endpoint into the structure needed to render `ajaxPattern.renderPattern`. If there is no data and the pattern should not be rendered, then the transform function should return an empty javascript object `{}`. + * See usage guidelines for the child pattern (i.e. the value of `ajaxPattern.renderPattern`) + +### JavaScript Used +* Requires `ma.themePath` (path to assets directory in your implementation) and `ma.patternsPath` (path to the directory which contains twig templates in your implementation) to be set in your js implementation (see `/source/_meta/_00-foot.twig`) +* Ajax Pattern (`js/modules/ajaxPattern.js`) +* jQuery Extend for Ajax Pattern (`js/helpers/jQueryExtend_ajaxPattern.js`) + +Note: If the `ajaxPattern.renderPattern` pattern implements javascript (consult the `.md` documentation file for that pattern to find out), you will likely need to update that javascript to initialize the component once your new instance of that pattern has rendered (see the `MA:AjaxPattern:Render` event triggered by `js/helpers/jQueryExtend_ajaxPattern.js`). + +Currently, most of our pattern javascript is written in a way that initializes patterns which exist on the DOM on page load. + +See `js/modules/emergencyAlerts.js` for an example of pattern js which has already been updated to listen for and initialize on the `MA:AjaxPattern:Render` event. + +### Variables +~~~ +ajaxAlerts: { + endpoint: + type: string (url) / required + renderPattern: + type: string (namespaced path to pattern being rendered) / required + customSelector: + type: string / optional +} +~~~ + +### Sample use of MassAjaxPattern +See live example in `js/modules/ajaxPatternOverride.js` which is used on [@pages/guide](/?pages-guide) +```javascript +$('.js-ajax-pattern-override').each(function(){ + // Get the endpoint which is passed in as ajaxAlerts.endpoint to organism data attribute. + let endpoint = $(this).data('ma-ajax-endpoint'); + if (!endpoint) { + console.error("MA::AjaxPattern::This pattern requires an endpoint to be passed in as an argument."); + return false; + } + + let renderPattern = $(this).data('ma-ajax-render-pattern'); + if (!renderPattern) { + console.error("MA::AjaxPattern::This pattern requires a child pattern to be passed as an argument."); + return false; + } + try { + $(this).MassAjaxPattern({ + "endpoint": endpoint, + "renderPattern": renderPattern, + "transform": function(ajaxData) { + // Example of some custom data transformation being done to the data according to implementation needs. This will often include restructuring of data. + data = ajaxData; + data.emergencyAlerts.emergencyHeader.title = "This alert title was overridden by a custom transform function."; + return data; + } + }); + } + catch (e) { + console.error(e); + } + }); +``` diff --git a/styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.twig b/styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.twig new file mode 100644 index 0000000000..8d8b9fa509 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/ajax-pattern.twig @@ -0,0 +1,4 @@ +{% set endpoint = ajaxPattern.endpoint ?: '' %} +{% set selector = ajaxPattern.customSelector ?: 'js-ajax-pattern' %} +
    +
    diff --git a/styleguide/source/_patterns/03-organisms/by-template/breadcrumbs.md b/styleguide/source/_patterns/03-organisms/by-template/breadcrumbs.md new file mode 100644 index 0000000000..2c417c7c63 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/breadcrumbs.md @@ -0,0 +1,3 @@ +### Status +* Archived as of 6.0.0 + diff --git a/styleguide/source/_patterns/03-organisms/by-template/collage-header.md b/styleguide/source/_patterns/03-organisms/by-template/collage-header.md new file mode 100644 index 0000000000..2c417c7c63 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/collage-header.md @@ -0,0 +1,3 @@ +### Status +* Archived as of 6.0.0 + diff --git a/styleguide/source/_patterns/03-organisms/by-template/collage-header.twig b/styleguide/source/_patterns/03-organisms/by-template/collage-header.twig index d32155a714..2b8832646a 100644 --- a/styleguide/source/_patterns/03-organisms/by-template/collage-header.twig +++ b/styleguide/source/_patterns/03-organisms/by-template/collage-header.twig @@ -2,26 +2,26 @@
    diff --git a/styleguide/source/_patterns/03-organisms/by-template/content-eyebrow.json b/styleguide/source/_patterns/03-organisms/by-template/content-eyebrow.json new file mode 100644 index 0000000000..1faf563501 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/content-eyebrow.json @@ -0,0 +1,40 @@ +{ + "contentEyebrow": { + "hideBorder": false, + "headerTags": { + "label": "More about:", + "taxonomyTerms": [{ + "href": "#", + "text": "Term 1" + },{ + "href": "#", + "text": "Term 2" + },{ + "href": "#", + "text": "Term 3" + },{ + "href": "#", + "text": "Term 4" + }] + }, + "socialLinks": { + "label": "Share:", + "items": [{ + "altText": "Follow us on Facebook", + "href": "#", + "icon": "facebook", + "linkType": "facebook" + },{ + "altText": "Follow us on Twitter", + "href": "#", + "icon": "twitter", + "linkType": "twitter" + },{ + "altText": "Follow us on LinkedIn", + "href": "#", + "icon": "linkedin", + "linkType": "linkedin" + }] + } + } +} \ No newline at end of file diff --git a/styleguide/source/_patterns/03-organisms/by-template/content-eyebrow.twig b/styleguide/source/_patterns/03-organisms/by-template/content-eyebrow.twig new file mode 100644 index 0000000000..fe41a5253e --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/content-eyebrow.twig @@ -0,0 +1,14 @@ +{% if contentEyebrow.headerTags.taxonomyTerms or contentEyebrow.socialLinks.items %} +
    +
    + {% if contentEyebrow.headerTags.taxonomyTerms %} + {% set headerTags = contentEyebrow.headerTags %} + {% include "@molecules/header-tags.twig" %} + {% endif %} + {% if contentEyebrow.socialLinks.items %} + {% set socialLinks = contentEyebrow.socialLinks %} + {% include "@molecules/social-links.twig" %} + {% endif %} +
    +
    +{% endif %} diff --git a/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts-as-notice.md b/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts-as-notice.md new file mode 100644 index 0000000000..210dfc62fb --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts-as-notice.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Emergency Alerts](./?p=organisms-emergency-alerts) pattern showing how it appears when the type is not an emergency alert. + +### How to generate +* populate the `emergencyHeader.prefix` variable (i.e. "Informational Alerts") which defaults to "Emergency Alerts" in the twig template. diff --git a/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts.md b/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts.md index d374bbb3d6..c4b3f55d94 100644 --- a/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts.md +++ b/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts.md @@ -1,58 +1,40 @@ ---- -title: Emergency Alert ---- -Description: an organism to show any current emergency alerts +### Description +This pattern is designed to be used site wide to show important alert messages -## State: ALPHA -### Notes - 1. This Organism should only render if the alerts array is populated - 2. Accordion only stays closed per session if the browser supports JS determined by a JS class on the html tag - 3. The Id value should be consistent across the site, but can be changed when new alerts are created to reopen the accordion +### Status +* Stable as of 5.0.0 -### Used in: -* [@templates/multi-row-template.twig](/?p=templates-multi-row-template) -* [@templates/single-column.twig](/?p=templates-single-column) -* [@templates/two-column.twig](/?p=templates-two-column) -### Contains: -* [@molecules/emergency-header.twig](/?p=molecules-emergency-header) -* [@molecules/emergency-alert.twig](/?p=molecules-emergency-alert) -* [@molecules/button-alert.twig](/?p=molecules-button-alert) +### Pattern Contains +* Emergency Header +* Button Alert +* Emergency Alert -### Variables -~~~ +### Usage Guidelines + * This will only render if the alerts array is populated + * After hiding the alerts, they will stay collapsed during the users session if the browser supports JS + * The Id value should be consistent across the site + * When new alerts are created, the id should be changed to reopen the accordion + * Messages should be sorted with the newest one first + +### JavaScript Used +* Accordions (js/modules/accordions.js) +* Emergency Alerts (js/modules/emergencyAlerts.js) + +### Variables +~~~ emergencyAlerts: { id: - type: string/guid/required + type: string (unique per page and consistent across the site) / required buttonAlert: { - hideText: - type: string/required, - showText: - type: string/required, - text: - type: string/required + type: buttonAlert / required }, - emergencyHeader: { - title: - type: string/required + type: emergencyHeader / required }, - - alerts: [{ - message: - type: string/required - timeStamp: - type: date/required - format: mm.dd.yy, h:mm am/pm - link: { - href: - type: string/url/required, - text: - type: string/required - chevron: - type: boolean/required - } + alerts (optional): [{ + type: array of emergencyAlert / required }] } ~~~ diff --git a/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts.twig b/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts.twig index d72f902c41..e13d8ae7d2 100644 --- a/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts.twig +++ b/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts.twig @@ -1,25 +1,32 @@ -{% if emergencyAlerts.alerts %} -
    +{% set alertsExist = emergencyAlerts.alerts ? true : false %} +{% set accordionClass = alertsExist ? 'js-accordion js-emergency-alerts' : '' %} + +{% if emergencyAlerts.alerts or emergencyAlerts.emergencyHeader %} +
    {% set emergencyHeader = emergencyAlerts.emergencyHeader %} {% include "@molecules/emergency-header.twig" %} - + {% if alertsExist %} + + {% endif %}
    -
    -
    - {% for emergencyAlert in emergencyAlerts.alerts %} - {% include "@molecules/emergency-alert.twig" %} - {% endfor %} + {% if alertsExist %} +
    +
    + {% for emergencyAlert in emergencyAlerts.alerts %} + {% include "@molecules/emergency-alert.twig" %} + {% endfor %} +
    -
    - + + {% endif %}
    {% endif %} diff --git a/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts~as-notice.json b/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts~as-notice.json new file mode 100644 index 0000000000..202875a10e --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/emergency-alerts~as-notice.json @@ -0,0 +1,23 @@ +{ + "emergencyAlerts": { + "id":"GUID18378923w38789", + "buttonAlert": { + "hideText": "Hide", + "showText": "Show", + "text": "Updates" + }, + "emergencyHeader": { + "prefix": "Informational Alert", + "title": "All RMV branches are open for business." + }, + "alerts": [{ + "message": "MassPort is operating with limited flights due to road closures.", + "timeStamp": "02.15.16, 5:00 p.m.", + "link": { + "href": "#", + "text":"Read full alert", + "chevron": "true" + } + }] + } +} diff --git a/styleguide/source/_patterns/03-organisms/by-template/error-page.md b/styleguide/source/_patterns/03-organisms/by-template/error-page.md new file mode 100644 index 0000000000..48e6f7457a --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/error-page.md @@ -0,0 +1,19 @@ +### Description +This Pattern shows information about why the page didn't load. + +### Status +* Stable as of 5.0.0 + +### Variables +~~~ +errorPage: { + type: + type: string / required + label: + type: string / required + title: + type: string / required + message: + type: string / required +} +~~~ diff --git a/styleguide/source/_patterns/03-organisms/by-template/footer.md b/styleguide/source/_patterns/03-organisms/by-template/footer.md new file mode 100644 index 0000000000..6ec2261e51 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/footer.md @@ -0,0 +1,30 @@ +### Description +This is a site wide footer. + +### Status +* In Progress as of 5.0.0 + +### Pattern Contains +* Floating Action +* Footer Links +* Social Links +* Privacy Policy + +### Variables +~~~ +floatingAction: { + type: floatingAction / optional +} + +footerLinks: { + type: footerLinks / required +} + +socialLinks { + type: socialLinks / required +} + +privacyPolicy { + type: privacyPolicy / required +} +~~~ diff --git a/styleguide/source/_patterns/03-organisms/by-template/footer.twig b/styleguide/source/_patterns/03-organisms/by-template/footer.twig index 1fa8ba770a..f70fab8831 100644 --- a/styleguide/source/_patterns/03-organisms/by-template/footer.twig +++ b/styleguide/source/_patterns/03-organisms/by-template/footer.twig @@ -1,43 +1,36 @@ -
    - - -
    - -{% if googleLanguages %} - -{% endif %} +
    + + {% if backToTopButton %} + + {% endif %} +
    +{% if floatingAction %} + {% include "@molecules/floating-action.twig" %} +{% endif %} diff --git a/styleguide/source/_patterns/03-organisms/by-template/header-alert-as-notice.md b/styleguide/source/_patterns/03-organisms/by-template/header-alert-as-notice.md new file mode 100644 index 0000000000..e4f3802548 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/header-alert-as-notice.md @@ -0,0 +1,5 @@ +### Description +This is a variant of the [Header Alert](./?p=organisms-header-alert) pattern showing how it appears when the type is not an alert. + +### How to generate +* populate the `headerAlert.prefix` variable (i.e. "Notice") which defaults to "Alert!" in the twig template. diff --git a/styleguide/source/_patterns/03-organisms/by-template/header-alert.json b/styleguide/source/_patterns/03-organisms/by-template/header-alert.json index 58f1c5ebc2..db902bf88a 100644 --- a/styleguide/source/_patterns/03-organisms/by-template/header-alert.json +++ b/styleguide/source/_patterns/03-organisms/by-template/header-alert.json @@ -1,7 +1,9 @@ { "headerAlert": { - "guid": "GUID09058070135", - "text": "Lots of Bears.", - "href": "#" + "id": "GUID09058070135", + "prefix": "", + "text": "Vivamus suscipit tortor eget felis porttitor volutpat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus suscipit tortor eget felis porttitor volutpat.", + "href": "#", + "info": "" } -} \ No newline at end of file +} diff --git a/styleguide/source/_patterns/03-organisms/by-template/header-alert.md b/styleguide/source/_patterns/03-organisms/by-template/header-alert.md new file mode 100644 index 0000000000..088c52e987 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/header-alert.md @@ -0,0 +1,27 @@ +### Description +This is a page level alert message that can be dismissed. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Decorative Link + +### JavaScript Used +* Cookies are used to hide the alert (js/modules/hideAlert.js) + +### Variables +~~~ +headerAlert: { + id: + type: string (unique per page) / required + prefix: + type: string / optional (default "alert!") + text: + type: string / required + href: + type: string (url) / optional + info: + type: string / required with href +} +~~~ diff --git a/styleguide/source/_patterns/03-organisms/by-template/header-alert.twig b/styleguide/source/_patterns/03-organisms/by-template/header-alert.twig index faf41524a5..c3a1efb193 100644 --- a/styleguide/source/_patterns/03-organisms/by-template/header-alert.twig +++ b/styleguide/source/_patterns/03-organisms/by-template/header-alert.twig @@ -1,19 +1,27 @@ - \ No newline at end of file +
    diff --git a/styleguide/source/_patterns/03-organisms/by-template/header-alerts.json b/styleguide/source/_patterns/03-organisms/by-template/header-alerts.json new file mode 100644 index 0000000000..f7d3c33779 --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/header-alerts.json @@ -0,0 +1,14 @@ +{ + "headerAlerts": [{ + "id": "GUID09058070135", + "text": "Lots of Bears.", + "href": "#", + "info": "" + },{ + "id": "GUID045770870132", + "prefix": "Notice", + "text": "Lots of Bunnies, too.", + "href": "#", + "info": "" + }] +} diff --git a/styleguide/source/_patterns/03-organisms/by-template/header-alerts.md b/styleguide/source/_patterns/03-organisms/by-template/header-alerts.md new file mode 100644 index 0000000000..b74befd8eb --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/header-alerts.md @@ -0,0 +1,18 @@ +### Description +This is a group of page level alert messages. + +### Status +* Stable as of 5.0.0 + +### Pattern Contains +* Header Alert + +### JavaScript Used +* See Header Alert documentation + +### Variables +~~~ +headerAlerts: [{ + type: array of headerAlert / required +}] +~~~ diff --git a/styleguide/source/_patterns/03-organisms/by-template/header-alerts.twig b/styleguide/source/_patterns/03-organisms/by-template/header-alerts.twig new file mode 100644 index 0000000000..b6f573708b --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/header-alerts.twig @@ -0,0 +1,5 @@ +
    + {% for headerAlert in headerAlerts %} + {% include "@organisms/by-template/header-alert.twig" %} + {% endfor %} +
    diff --git a/styleguide/source/_patterns/03-organisms/by-template/header-alert~as-notice.json b/styleguide/source/_patterns/03-organisms/by-template/header-alert~as-notice.json new file mode 100644 index 0000000000..dfa1adde3e --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/header-alert~as-notice.json @@ -0,0 +1,9 @@ +{ + "headerAlert": { + "id": "GUID09058070135", + "prefix": "Notice", + "text": "Lots of Bears.", + "href": "#", + "info": "" + } +} diff --git a/styleguide/source/_patterns/03-organisms/by-template/header.md b/styleguide/source/_patterns/03-organisms/by-template/header.md new file mode 100644 index 0000000000..e7b7a09d3e --- /dev/null +++ b/styleguide/source/_patterns/03-organisms/by-template/header.md @@ -0,0 +1,31 @@ +### Description +This is a pattern for the site header. + +### Status +* in Progress as of 5.0.0 + +### Pattern Contains +* Utility Nav +* Site Logo +* Header Search +* Main Nav + +### JavaScript Used +* Header Search (js/modules/mobileNav.js) +* Scrolling Nav (js/modules/scrollAnchors.js) +* Utility Nav (js/modules/utilNav.js) +* Main Nav (js/modules/mainNav.js) +* Google Translate (code is in the footer.twig) + +### Variables +~~~ +utilityNav: { + type: utilityNav / required +} +headerSearch : { + type: headerSearch / required +} +mainNav: [{ + type: mainNav / required +}] +~~~ diff --git a/styleguide/source/_patterns/03-organisms/by-template/header.twig b/styleguide/source/_patterns/03-organisms/by-template/header.twig index cdffe5ce1c..6e812f53ca 100644 --- a/styleguide/source/_patterns/03-organisms/by-template/header.twig +++ b/styleguide/source/_patterns/03-organisms/by-template/header.twig @@ -1,8 +1,13 @@
    {{ cell.text }}
    {{ cell.text }}
    ","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;d0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K); -if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + +``` + +If you're using **jQuery** make sure to pass only the first element: + +```javascript +var picker = new Pikaday({ field: $('#datepicker')[0] }); +``` + +If the Pikaday instance is not bound to a field you can append the element anywhere: + +```javascript +var field = document.getElementById('datepicker'); +var picker = new Pikaday({ + onSelect: function(date) { + field.value = picker.toString(); + } +}); +field.parentNode.insertBefore(picker.el, field.nextSibling); +``` + +For advanced formatting load [Moment.js][moment] prior to Pikaday: +See the [moment.js example][] for a full version. + +```html + + + + + +``` + +### Configuration + +As the examples demonstrate above +Pikaday has many useful options: + +* `field` bind the datepicker to a form field +* `trigger` use a different element to trigger opening the datepicker, see [trigger example][] (default to `field`) +* `bound` automatically show/hide the datepicker on `field` focus (default `true` if `field` is set) +* `position` preferred position of the datepicker relative to the form field, e.g.: `top right`, `bottom right` **Note:** automatic adjustment may occur to avoid datepicker from being displayed outside the viewport, see [positions example][] (default to 'bottom left') +* `reposition` can be set to false to not reposition datepicker within the viewport, forcing it to take the configured `position` (default: true) +* `container` DOM node to render calendar into, see [container example][] (default: undefined) +* `format` the default output format for `.toString()` and `field` value (requires [Moment.js][moment] for custom formatting) +* `formatStrict` the default flag for moment's strict date parsing (requires [Moment.js][moment] for custom formatting) +* `defaultDate` the initial date to view when first opened +* `setDefaultDate` make the `defaultDate` the initial selected value +* `firstDay` first day of the week (0: Sunday, 1: Monday, etc) +* `minDate` the minimum/earliest date that can be selected (this should be a native Date object - e.g. `new Date()` or `moment().toDate()`) +* `maxDate` the maximum/latest date that can be selected (this should be a native Date object - e.g. `new Date()` or `moment().toDate()`) +* `disableWeekends` disallow selection of Saturdays or Sundays +* `disableDayFn` callback function that gets passed a Date object for each day in view. Should return true to disable selection of that day. +* `yearRange` number of years either side (e.g. `10`) or array of upper/lower range (e.g. `[1900,2015]`) +* `showWeekNumber` show the ISO week number at the head of the row (default `false`) +* `isRTL` reverse the calendar for right-to-left languages +* `i18n` language defaults for month and weekday names (see internationalization below) +* `yearSuffix` additional text to append to the year in the title +* `showMonthAfterYear` render the month after year in the title (default `false`) +* `showDaysInNextAndPreviousMonths` render days of the calendar grid that fall in the next or previous months to the current month instead of rendering an empty table cell (default: false) +* `numberOfMonths` number of visible calendars +* `mainCalendar` when `numberOfMonths` is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`). Only used for the first display or when a selected date is not already visible +* `theme` define a classname that can be used as a hook for styling different themes, see [theme example][] (default `null`) +* `onSelect` callback function for when a date is selected +* `onOpen` callback function for when the picker becomes visible +* `onClose` callback function for when the picker is hidden +* `onDraw` callback function for when the picker draws a new month + +## jQuery Plugin + +The normal version of Pikaday does not require jQuery, however there is a jQuery plugin if that floats your boat (see `plugins/pikaday.jquery.js` in the repository). This version requires jQuery, naturally, and can be used like other plugins: +See the [jQuery example][] for a full version. + +```html + + + + +``` + +## AMD support + +If you use a modular script loader than Pikaday is not bound to the global object and will fit nicely in your build process. You can require Pikaday just like any other module. +See the [AMD example][] for a full version. + +```javascript +require(['pikaday'], function(Pikaday) { + var picker = new Pikaday({ field: document.getElementById('datepicker') }); +}); +``` +The same applies for the jQuery plugin mentioned above. +See the [jQuery AMD example][] for a full version. + +```javascript +require(['jquery', 'pikaday.jquery'], function($) { + $('#datepicker').pikaday(); +}); +``` + +## CommonJS module support + +If you use a CommonJS compatible environment you can use the require function to import Pikaday. + + +```javascript +var pikaday = require('pikaday'); +``` + +When you bundle all your required modules with [Browserify][browserify] and you don't use [Moment.js][moment] specify the ignore option: + +`browserify main.js -o bundle.js -i moment` + +## Ruby on Rails + +If you're using **Ruby on Rails**, make sure to check out the [Pikaday gem][gem]. + +## Methods + +You can control the date picker after creation: + +```javascript +var picker = new Pikaday({ field: document.getElementById('datepicker') }); +``` + +### Get and set date + +`picker.toString('YYYY-MM-DD')` + +Returns the selected date in a string format. If [Moment.js][moment] exists (recommended) then Pikaday can return any format that Moment understands, otherwise you're stuck with JavaScript's default. + +`picker.getDate()` + +Returns a basic JavaScript `Date` object of the selected day, or `null` if no selection. + +`picker.setDate('2015-01-01')` + +Set the current selection. This will be restricted within the bounds of `minDate` and `maxDate` options if they're specified. You can optionally pass a boolean as the second parameter to prevent triggering of the onSelect callback (true), allowing the date to be set silently. + +`picker.getMoment()` + +Returns a [Moment.js][moment] object for the selected date (Moment must be loaded before Pikaday). + +`picker.setMoment(moment('14th February 2014', 'DDo MMMM YYYY'))` + +Set the current selection with a [Moment.js][moment] object (see `setDate` for details). + +### Change current view + +`picker.gotoDate(new Date(2014, 1))` + +Change the current view to see a specific date. This example will jump to February 2014 ([month is a zero-based index][mdn_date]). + +`picker.gotoToday()` + +Shortcut for `picker.gotoDate(new Date())` + +`picker.gotoMonth(2)` + +Change the current view by month (0: January, 1: Februrary, etc). + +`picker.nextMonth()` +`picker.prevMonth()` + +Go to the next or previous month (this will change year if necessary). + +`picker.gotoYear()` + +Change the year being viewed. + +`picker.setMinDate()` + +Update the minimum/earliest date that can be selected. + +`picker.setMaxDate()` + +Update the maximum/latest date that can be selected. + +`picker.setStartRange()` + +Update the range start date. For using two Pikaday instances to select a date range. + +`picker.setEndRange()` + +Update the range end date. For using two Pikaday instances to select a date range. + +### Show and hide datepicker + +`picker.isVisible()` + +Returns `true` or `false`. + +`picker.show()` + +Make the picker visible. + +`picker.adjustPosition()` + +Recalculate and change the position of the picker. + +`picker.hide()` + +Hide the picker making it invisible. + +`picker.destroy()` + +Hide the picker and remove all event listeners — no going back! + +### Internationalization + +The default `i18n` configuration format looks like this: + +```javascript +i18n: { + previousMonth : 'Previous Month', + nextMonth : 'Next Month', + months : ['January','February','March','April','May','June','July','August','September','October','November','December'], + weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], + weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] +} +``` + +You must provide 12 months and 7 weekdays (with abbreviations). Always specify weekdays in this order with Sunday first. You can change the `firstDay` option to reorder if necessary (0: Sunday, 1: Monday, etc). You can also set `isRTL` to `true` for languages that are read right-to-left. + + +## Extensions + +### Timepicker + +Pikaday is a pure datepicker. It will not support picking a time of day. However, there have been efforts to add time support to Pikaday. +See [#1][issue1] and [#18][issue18]. These reside in their own fork. + +You can use the work [@owenmead][owenmead] did most recently at [owenmead/Pikaday][owen Pika] +A more simple time selection approach done by [@xeeali][xeeali] at [xeeali/Pikaday][xeeali Pika] is based on version 1.2.0. +Also [@stas][stas] has a fork [stas/Pikaday][stas Pika], but is now quite old + + +## Browser Compatibility + +* IE 7+ +* Chrome 8+ +* Firefox 3.5+ +* Safari 3+ +* Opera 10.6+ + +[![browser compatibility](https://ci.testling.com/rikkert/pikaday.png) +](https://ci.testling.com/rikkert/pikaday) + + +* * * + +## Authors + +* David Bushell [http://dbushell.com][Bushell] [@dbushell][Bushell Twitter] +* Ramiro Rikkert [GitHub][Rikkert] [@RamRik][Rikkert Twitter] + +Thanks to [@shoogledesigns][shoogledesigns] for the name. + +Copyright © 2014 David Bushell | BSD & MIT license + + [Pikaday]: http://dbushell.github.com/Pikaday/ "Pikaday" + [moment]: http://momentjs.com/ "moment.js" + [browserify]: http://browserify.org/ "browserify" + [screenshot]: https://raw.github.com/dbushell/Pikaday/gh-pages/screenshot.png "Screenshot" + [issues]: https://github.com/dbushell/Pikaday/issues "Issue tracker" + [gem]: https://rubygems.org/gems/pikaday-gem "RoR gem" + [mdn_date]: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date "Date" + [Bushell]: http://dbushell.com/ "dbushell.com" + [Bushell Twitter]: https://twitter.com/dbushell "@dbushell" + [Rikkert]: https://github.com/rikkert "Rikkert GitHub" + [Rikkert Twitter]: https://twitter.com/ramrik "@ramrik" + [shoogledesigns]: https://twitter.com/shoogledesigns/status/255209384261586944 "@shoogledesigns" + [issue1]: https://github.com/dbushell/Pikaday/issues/1 "Issue 1" + [issue18]: https://github.com/dbushell/Pikaday/issues/18 "Issue 18" + [stas]: https://github.com/stas "@stas" + [stas Pika]: https://github.com/stas/Pikaday "Pikaday" + [owenmead]: https://github.com/owenmead "@owenmead" + [owen Pika]: https://github.com/owenmead/Pikaday "Pikaday" + [xeeali]: https://github.com/xeeali "@xeeali" + [xeeali Pika]: https://github.com/xeeali/Pikaday "Pikaday" + [moment.js example]: http://dbushell.github.com/Pikaday/examples/moment.html "Pikaday w/ moment.js" + [jQuery example]: http://dbushell.github.com/Pikaday/examples/jquery.html "Pikaday w/ jQuery" + [AMD example]: http://dbushell.github.com/Pikaday/examples/amd.html "Pikaday w/ AMD" + [jQuery AMD example]: http://dbushell.github.com/Pikaday/examples/jquery-amd.html "Pikaday w/ jQuery + AMD" + [trigger example]: http://dbushell.github.com/Pikaday/examples/trigger.html "Pikaday using custom trigger" + [positions example]: http://dbushell.github.com/Pikaday/examples/positions.html "Pikaday using different position options" + [container example]: http://dbushell.github.com/Pikaday/examples/container.html "Pikaday using custom calendar container" + [theme example]: http://dbushell.github.com/Pikaday/examples/theme.html "Pikaday using multiple themes" diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/bower.json b/styleguide/source/assets/js/vendor/bower_components/pikaday/bower.json new file mode 100644 index 0000000000..8c0f158ab3 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/bower.json @@ -0,0 +1,28 @@ +{ + "name": "pikaday", + "description": "A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS", + "keywords": [ + "datepicker", + "calendar", + "date" + ], + "main": [ + "./pikaday.js", + "./css/pikaday.css" + ], + "dependencies": {}, + "ignore": [ + "**/.*", + "node_modules", + "components" + ], + "license" : [ + "BSD", + "MIT" + ], + "homepage": "http://dbushell.github.io/Pikaday/", + "repository": { + "type": "git", + "url": "https://github.com/dbushell/Pikaday.git" + } +} diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/component.json b/styleguide/source/assets/js/vendor/bower_components/pikaday/component.json new file mode 100644 index 0000000000..69803ccd49 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/component.json @@ -0,0 +1,17 @@ +{ + "name": "pikaday", + "repo": "dbushell/Pikaday", + "description": "A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS", + "version": "1.5.1", + "keywords": [ + "datepicker", + "calendar", + "date" + ], + "main": "pikaday.js", + "scripts": ["pikaday.js"], + "styles": ["css/pikaday.css"], + "dependencies": {}, + "demo": "http://dbushell.github.io/Pikaday/", + "license": "MIT" +} diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/css/pikaday.css b/styleguide/source/assets/js/vendor/bower_components/pikaday/css/pikaday.css new file mode 100644 index 0000000000..7368a1828f --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/css/pikaday.css @@ -0,0 +1,222 @@ +@charset "UTF-8"; + +/*! + * Pikaday + * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ + */ + +.pika-single { + z-index: 9999; + display: block; + position: relative; + color: #333; + background: #fff; + border: 1px solid #ccc; + border-bottom-color: #bbb; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +/* +clear child float (pika-lendar), using the famous micro clearfix hack +http://nicolasgallagher.com/micro-clearfix-hack/ +*/ +.pika-single:before, +.pika-single:after { + content: " "; + display: table; +} +.pika-single:after { clear: both } +.pika-single { *zoom: 1 } + +.pika-single.is-hidden { + display: none; +} + +.pika-single.is-bound { + position: absolute; + box-shadow: 0 5px 15px -5px rgba(0,0,0,.5); +} + +.pika-lendar { + float: left; + width: 240px; + margin: 8px; +} + +.pika-title { + position: relative; + text-align: center; +} + +.pika-label { + display: inline-block; + *display: inline; + position: relative; + z-index: 9999; + overflow: hidden; + margin: 0; + padding: 5px 3px; + font-size: 14px; + line-height: 20px; + font-weight: bold; + background-color: #fff; +} +.pika-title select { + cursor: pointer; + position: absolute; + z-index: 9998; + margin: 0; + left: 0; + top: 5px; + filter: alpha(opacity=0); + opacity: 0; +} + +.pika-prev, +.pika-next { + display: block; + cursor: pointer; + position: relative; + outline: none; + border: 0; + padding: 0; + width: 20px; + height: 30px; + /* hide text using text-indent trick, using width value (it's enough) */ + text-indent: 20px; + white-space: nowrap; + overflow: hidden; + background-color: transparent; + background-position: center center; + background-repeat: no-repeat; + background-size: 75% 75%; + opacity: .5; + *position: absolute; + *top: 0; +} + +.pika-prev:hover, +.pika-next:hover { + opacity: 1; +} + +.pika-prev, +.is-rtl .pika-next { + float: left; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg=='); + *left: 0; +} + +.pika-next, +.is-rtl .pika-prev { + float: right; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII='); + *right: 0; +} + +.pika-prev.is-disabled, +.pika-next.is-disabled { + cursor: default; + opacity: .2; +} + +.pika-select { + display: inline-block; + *display: inline; +} + +.pika-table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + border: 0; +} + +.pika-table th, +.pika-table td { + width: 14.285714285714286%; + padding: 0; +} + +.pika-table th { + color: #999; + font-size: 12px; + line-height: 25px; + font-weight: bold; + text-align: center; +} + +.pika-button { + cursor: pointer; + display: block; + box-sizing: border-box; + -moz-box-sizing: border-box; + outline: none; + border: 0; + margin: 0; + width: 100%; + padding: 5px; + color: #666; + font-size: 12px; + line-height: 15px; + text-align: right; + background: #f5f5f5; +} + +.pika-week { + font-size: 11px; + color: #999; +} + +.is-today .pika-button { + color: #33aaff; + font-weight: bold; +} + +.is-selected .pika-button { + color: #fff; + font-weight: bold; + background: #33aaff; + box-shadow: inset 0 1px 3px #178fe5; + border-radius: 3px; +} + +.is-inrange .pika-button { + background: #D5E9F7; +} + +.is-startrange .pika-button { + color: #fff; + background: #6CB31D; + box-shadow: none; + border-radius: 3px; +} + +.is-endrange .pika-button { + color: #fff; + background: #33aaff; + box-shadow: none; + border-radius: 3px; +} + +.is-disabled .pika-button, +.is-outside-current-month .pika-button { + pointer-events: none; + cursor: default; + color: #999; + opacity: .3; +} + +.pika-button:hover { + color: #fff; + background: #ff8000; + box-shadow: none; + border-radius: 3px; +} + +/* styling for abbr */ +.pika-table abbr { + border-bottom: none; + cursor: help; +} + diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/css/site.css b/styleguide/source/assets/js/vendor/bower_components/pikaday/css/site.css new file mode 100644 index 0000000000..ced5631974 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/css/site.css @@ -0,0 +1,42 @@ +html { margin: 0; padding: 0; } +body { font-size: 100%; margin: 0; padding: 1.75em; font-family: 'Helvetica Neue', Arial, sans-serif; } + +h1 { font-size: 1.75em; margin: 0 0 0.6em 0; } +h2 { font-size: 1.25em; margin: 0 0 0.6em 0; } + +a { color: #2996cc; } +a:hover { text-decoration: none; } + +p { line-height: 1.5em; } +.small { color: #666; font-size: 0.875em; } +.large { font-size: 1.25em; } + + +label { + font-weight: bold; +} + +input[type="text"] { + margin: 0.5em 0 3em 0; + padding: 0.5em; +} + +button#datepicker-button { + margin-bottom: 3em; +} + +.flow-element { + display: inline-block; + margin-right: 3em; + vertical-align: top; +} +.flow-element:last-child { + margin-right: 0; +} +.flow-element input { + margin-top: 0; +} + +#container { + min-height: 15em; +} \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/css/theme.css b/styleguide/source/assets/js/vendor/bower_components/pikaday/css/theme.css new file mode 100644 index 0000000000..c384cb8152 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/css/theme.css @@ -0,0 +1,56 @@ +/** + * This theme is an example to show how you can create your own. + */ +.pika-single.dark-theme { + color: #fff; + background: #333; + border: 1px solid #666; + border-bottom-color: #999; +} + +.dark-theme .pika-label { + background-color: #333; +} + +.dark-theme .pika-prev, +.dark-theme .is-rtl .pika-next { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAQAAACGG/bgAAAAQ0lEQVR4Ae3KIQ4AIBTD0N0/IeHGI3UIRA3ut/Zl+ltXc5++htVAmIAwAWECwgSEKbgthEoIlRAqIVRCqINQB9nDgQd7ktwFo6UpWQAAAABJRU5ErkJggg=='); +} + +.dark-theme .pika-next, +.dark-theme .is-rtl .pika-prev { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAQAAACGG/bgAAAAP0lEQVQ4y+3TMQoAMAgEwfwfAvvjTZ1uGzuvHhBPPGczEG+FRqqRaqQaqUaqkX6QBmmjacvQ6qEVTjsh+xizebvlaWptGXZAAAAAAElFTkSuQmCC'); +} + +.dark-theme .pika-table th { + color: #999; +} + +.dark-theme .pika-button { + color: #fff; + background: #222; +} + +.dark-theme .pika-week { + color: #999; +} + +.dark-theme .is-today .pika-button { + color: #33aaff; +} + +.dark-theme .is-selected .pika-button { + color: #fff; + background: #33aaff; + box-shadow: inset 0 1px 3px #178fe5; +} + +.dark-theme .is-disabled .pika-button { + color: #999; + opacity: .3; +} + +.dark-theme .pika-button:hover { + color: #fff !important; + background: #ff8000 !important; +} diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/css/triangle.css b/styleguide/source/assets/js/vendor/bower_components/pikaday/css/triangle.css new file mode 100644 index 0000000000..b2b7681551 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/css/triangle.css @@ -0,0 +1,6 @@ +/** + * This theme is an example to show how you can add triangles to the dropdowns. + */ +.triangle-theme .pika-label:after { + content:" \25be"; +} diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/amd.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/amd.html new file mode 100644 index 0000000000..89b56d1567 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/amd.html @@ -0,0 +1,50 @@ + + + + + + Pikaday - AMD example + + + + + + Fork me on GitHub + +

    Pikaday - AMD example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + +
    + + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/bound-container.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/bound-container.html new file mode 100644 index 0000000000..b418e4a25b --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/bound-container.html @@ -0,0 +1,52 @@ + + + + + + Pikaday - Container example + + + + + + Fork me on GitHub + +

    Pikaday - Container example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + +
    +
    + + +
    +
    +
    +
    +
    + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/calendars.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/calendars.html new file mode 100644 index 0000000000..9840ed2bb0 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/calendars.html @@ -0,0 +1,57 @@ + + + + + + Pikaday - ranges example + + + + + + Fork me on GitHub + +

    Pikaday

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + +
    + 2 months +
    + 3 months, main aligned to right + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2013 David Bushell | BSD & MIT license | Example by MoOx

    + + + + + + diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/container.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/container.html new file mode 100644 index 0000000000..9ac1893a06 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/container.html @@ -0,0 +1,52 @@ + + + + + + Pikaday - Container example + + + + + + Fork me on GitHub + +

    Pikaday - Container example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + +
    +
    + + +
    +
    +
    +
    +
    + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/date-range.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/date-range.html new file mode 100644 index 0000000000..7967b4ab61 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/date-range.html @@ -0,0 +1,83 @@ + + + + + + Pikaday - Date Range example + + + + + +

    Pikaday - Date Range example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + +

    Pikaday source on GitHub

    + +
    + +
    + +
    + +
    + +
    + +
    + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license

    + + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/daysInNextMonth.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/daysInNextMonth.html new file mode 100644 index 0000000000..d05da7461b --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/daysInNextMonth.html @@ -0,0 +1,43 @@ + + + + + + Pikaday - showDaysInNextAndPreviousMonths example + + + + + + Fork me on GitHub + +

    Pikaday - show days in next and previous month example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + +
    + + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/diableDayFn.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/diableDayFn.html new file mode 100644 index 0000000000..7702ab2b5f --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/diableDayFn.html @@ -0,0 +1,45 @@ + + + + + + Pikaday - disableDayFn example + + + + + + Fork me on GitHub + +

    Pikaday - disableDayFn example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + +
    + + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/jquery-amd.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/jquery-amd.html new file mode 100644 index 0000000000..ee7e7d5723 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/jquery-amd.html @@ -0,0 +1,54 @@ + + + + + + Pikaday - jQuery + AMD example + + + + + + Fork me on GitHub + +

    Pikaday - jQuery + AMD example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + +
    + + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/jquery.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/jquery.html new file mode 100644 index 0000000000..53bdc83105 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/jquery.html @@ -0,0 +1,46 @@ + + + + + + Pikaday - jQuery example + + + + + + Fork me on GitHub + +

    Pikaday - jQuery example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + +
    + + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/moment.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/moment.html new file mode 100644 index 0000000000..937ae8c131 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/moment.html @@ -0,0 +1,53 @@ + + + + + + Pikaday - moment.js example + + + + + + Fork me on GitHub + +

    Pikaday + moment.js

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + +
    + +
    +
    + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/positions.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/positions.html new file mode 100644 index 0000000000..1fc13e63e6 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/positions.html @@ -0,0 +1,106 @@ + + + + + + Pikaday alignment example + + + + + + Fork me on GitHub + +

    Pikaday alignement example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + + +
    + +
    + not really (too close from top) +
    + for real this time (same code as above) +
    + not really (too close from right) +
    + Here is the top right position with content before (no automatic adjustment used, same code as above) +
    + +
    + +
    + Here is the bottom right position with content before (no automatic adjustment used, , same code as above) + +

    Also, take a look to the bottom right of this page to see an example with position automatically adjusted.

    + + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by MoOx

    + + + + + + diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/theme.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/theme.html new file mode 100644 index 0000000000..c9811f6add --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/theme.html @@ -0,0 +1,57 @@ + + + + + + Pikaday - Theme example + + + + + + + + Fork me on GitHub + +

    Pikaday - Theme example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + +
    + No theme +
    + Custom theme +
    + Dropdowns w/ triangles + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/trigger.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/trigger.html new file mode 100644 index 0000000000..565975effb --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/trigger.html @@ -0,0 +1,46 @@ + + + + + + Pikaday - custom trigger element example + + + + + + Fork me on GitHub + +

    Pikaday - custom trigger example

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + +
    + +
    + + + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + + \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/weeknumbers.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/weeknumbers.html new file mode 100644 index 0000000000..3820920e41 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/examples/weeknumbers.html @@ -0,0 +1,41 @@ + + + + + + Pikaday - weeknumbers example + + + + + + Fork me on GitHub + +

    Pikaday - showing weeknumbers

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + + + + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license | Example by Ramiro Rikkert

    + + + + + diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/index.html b/styleguide/source/assets/js/vendor/bower_components/pikaday/index.html new file mode 100644 index 0000000000..afe051e758 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/index.html @@ -0,0 +1,43 @@ + + + + + + Pikaday + + + + + +

    Pikaday

    + +

    A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS.

    + +

    Pikaday source on GitHub

    + + +
    + + +

    What is this?

    + +

    Since version 1.0 Pikaday is a stable and battle tested date-picker. Feel free to use it however you like but please report any bugs or feature requests to the GitHub issue tracker, thanks!

    + +

    Copyright © 2014 David Bushell | BSD & MIT license

    + + + + + + diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/package.json b/styleguide/source/assets/js/vendor/bower_components/pikaday/package.json new file mode 100644 index 0000000000..bc3dd31f11 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/package.json @@ -0,0 +1,45 @@ +{ + "name": "pikaday", + "version": "1.5.1", + "description": "A refreshing JavaScript Datepicker — lightweight, no dependencies, modular CSS", + "keywords": [ + "datepicker", + "calendar", + "date" + ], + "homepage": "http://dbushell.github.io/Pikaday/", + "bugs": "https://github.com/dbushell/Pikaday/issues", + "licenses": [ + { + "type": "BSD", + "url": "http://opensource.org/licenses/BSD-3-Clause" + }, + { + "type": "MIT", + "url": "http://opensource.org/licenses/MIT" + } + ], + "main": "pikaday.js", + "repository": { + "type": "git", + "url": "https://github.com/dbushell/Pikaday.git" + }, + "optionalDependencies": { + "moment": "2.x" + }, + "devDependencies": { + "mocha": "~1.18.2", + "expect.js": "^0.3.1" + }, + "testling": { + "harness": "mocha", + "files": "tests/*.js", + "browsers": [ + "ie/7..latest", + "chrome/latest", + "firefox/3.6", "firefox/latest", + "safari/latest", + "opera/latest" + ] + } +} diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/pikaday.js b/styleguide/source/assets/js/vendor/bower_components/pikaday/pikaday.js new file mode 100644 index 0000000000..53726761db --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/pikaday.js @@ -0,0 +1,1193 @@ +/*! + * Pikaday + * + * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday + */ + +(function (root, factory) +{ + 'use strict'; + + var moment; + if (typeof exports === 'object') { + // CommonJS module + // Load moment.js as an optional dependency + try { moment = require('moment'); } catch (e) {} + module.exports = factory(moment); + } else if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(function (req) + { + // Load moment.js as an optional dependency + var id = 'moment'; + try { moment = req(id); } catch (e) {} + return factory(moment); + }); + } else { + root.Pikaday = factory(root.moment); + } +}(this, function (moment) +{ + 'use strict'; + + /** + * feature detection and helper functions + */ + var hasMoment = typeof moment === 'function', + + hasEventListeners = !!window.addEventListener, + + document = window.document, + + sto = window.setTimeout, + + addEvent = function(el, e, callback, capture) + { + if (hasEventListeners) { + el.addEventListener(e, callback, !!capture); + } else { + el.attachEvent('on' + e, callback); + } + }, + + removeEvent = function(el, e, callback, capture) + { + if (hasEventListeners) { + el.removeEventListener(e, callback, !!capture); + } else { + el.detachEvent('on' + e, callback); + } + }, + + fireEvent = function(el, eventName, data) + { + var ev; + + if (document.createEvent) { + ev = document.createEvent('HTMLEvents'); + ev.initEvent(eventName, true, false); + ev = extend(ev, data); + el.dispatchEvent(ev); + } else if (document.createEventObject) { + ev = document.createEventObject(); + ev = extend(ev, data); + el.fireEvent('on' + eventName, ev); + } + }, + + trim = function(str) + { + return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g,''); + }, + + hasClass = function(el, cn) + { + return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1; + }, + + addClass = function(el, cn) + { + if (!hasClass(el, cn)) { + el.className = (el.className === '') ? cn : el.className + ' ' + cn; + } + }, + + removeClass = function(el, cn) + { + el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' ')); + }, + + isArray = function(obj) + { + return (/Array/).test(Object.prototype.toString.call(obj)); + }, + + isDate = function(obj) + { + return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime()); + }, + + isWeekend = function(date) + { + var day = date.getDay(); + return day === 0 || day === 6; + }, + + isLeapYear = function(year) + { + // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951 + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; + }, + + getDaysInMonth = function(year, month) + { + return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; + }, + + setToStartOfDay = function(date) + { + if (isDate(date)) date.setHours(0,0,0,0); + }, + + compareDates = function(a,b) + { + // weak date comparison (use setToStartOfDay(date) to ensure correct result) + return a.getTime() === b.getTime(); + }, + + extend = function(to, from, overwrite) + { + var prop, hasProp; + for (prop in from) { + hasProp = to[prop] !== undefined; + if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) { + if (isDate(from[prop])) { + if (overwrite) { + to[prop] = new Date(from[prop].getTime()); + } + } + else if (isArray(from[prop])) { + if (overwrite) { + to[prop] = from[prop].slice(0); + } + } else { + to[prop] = extend({}, from[prop], overwrite); + } + } else if (overwrite || !hasProp) { + to[prop] = from[prop]; + } + } + return to; + }, + + adjustCalendar = function(calendar) { + if (calendar.month < 0) { + calendar.year -= Math.ceil(Math.abs(calendar.month)/12); + calendar.month += 12; + } + if (calendar.month > 11) { + calendar.year += Math.floor(Math.abs(calendar.month)/12); + calendar.month -= 12; + } + return calendar; + }, + + /** + * defaults and localisation + */ + defaults = { + + // bind the picker to a form field + field: null, + + // automatically show/hide the picker on `field` focus (default `true` if `field` is set) + bound: undefined, + + // position of the datepicker, relative to the field (default to bottom & left) + // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position) + position: 'bottom left', + + // automatically fit in the viewport even if it means repositioning from the position option + reposition: true, + + // the default output format for `.toString()` and `field` value + format: 'YYYY-MM-DD', + + // the initial date to view when first opened + defaultDate: null, + + // make the `defaultDate` the initial selected value + setDefaultDate: false, + + // first day of week (0: Sunday, 1: Monday etc) + firstDay: 0, + + // the default flag for moment's strict date parsing + formatStrict: false, + + // the minimum/earliest date that can be selected + minDate: null, + // the maximum/latest date that can be selected + maxDate: null, + + // number of years either side, or array of upper/lower range + yearRange: 10, + + // show week numbers at head of row + showWeekNumber: false, + + // used internally (don't config outside) + minYear: 0, + maxYear: 9999, + minMonth: undefined, + maxMonth: undefined, + + startRange: null, + endRange: null, + + isRTL: false, + + // Additional text to append to the year in the calendar title + yearSuffix: '', + + // Render the month after year in the calendar title + showMonthAfterYear: false, + + // Render days of the calendar grid that fall in the next or previous month + showDaysInNextAndPreviousMonths: false, + + // how many months are visible + numberOfMonths: 1, + + // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`) + // only used for the first display or when a selected date is not visible + mainCalendar: 'left', + + // Specify a DOM element to render the calendar in + container: undefined, + + // internationalization + i18n: { + previousMonth : 'Previous Month', + nextMonth : 'Next Month', + months : ['January','February','March','April','May','June','July','August','September','October','November','December'], + weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], + weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] + }, + + // Theme Classname + theme: null, + + // callback function + onSelect: null, + onOpen: null, + onClose: null, + onDraw: null + }, + + + /** + * templating functions to abstract HTML rendering + */ + renderDayName = function(opts, day, abbr) + { + day += opts.firstDay; + while (day >= 7) { + day -= 7; + } + return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day]; + }, + + renderDay = function(opts) + { + var arr = []; + var ariaSelected = 'false'; + if (opts.isEmpty) { + if (opts.showDaysInNextAndPreviousMonths) { + arr.push('is-outside-current-month'); + } else { + return '
    ' + + '' + + '' + weekNum + '
    ' + renderDayName(opts, i, true) + '
    ' + renderHead(opts) + renderBody(data) + '
    '; + }, + + + /** + * Pikaday constructor + */ + Pikaday = function(options) + { + var self = this, + opts = self.config(options); + + self._onMouseDown = function(e) + { + if (!self._v) { + return; + } + e = e || window.event; + var target = e.target || e.srcElement; + if (!target) { + return; + } + + if (!hasClass(target, 'is-disabled')) { + if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) { + self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day'))); + if (opts.bound) { + sto(function() { + self.hide(); + if (opts.field) { + opts.field.blur(); + } + }, 100); + } + } + else if (hasClass(target, 'pika-prev')) { + self.prevMonth(); + } + else if (hasClass(target, 'pika-next')) { + self.nextMonth(); + } + } + if (!hasClass(target, 'pika-select')) { + // if this is touch event prevent mouse events emulation + if (e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + return false; + } + } else { + self._c = true; + } + }; + + self._onChange = function(e) + { + e = e || window.event; + var target = e.target || e.srcElement; + if (!target) { + return; + } + if (hasClass(target, 'pika-select-month')) { + self.gotoMonth(target.value); + } + else if (hasClass(target, 'pika-select-year')) { + self.gotoYear(target.value); + } + }; + + self._onKeyChange = function(e) + { + e = e || window.event; + + if (self.isVisible()) { + + switch(e.keyCode){ + case 13: + case 27: + opts.field.blur(); + break; + case 37: + e.preventDefault(); + self.adjustDate('subtract', 1); + break; + case 38: + self.adjustDate('subtract', 7); + break; + case 39: + self.adjustDate('add', 1); + break; + case 40: + self.adjustDate('add', 7); + break; + } + } + }; + + self._onInputChange = function(e) + { + var date; + + if (e.firedBy === self) { + return; + } + if (hasMoment) { + date = moment(opts.field.value, opts.format, opts.formatStrict); + date = (date && date.isValid()) ? date.toDate() : null; + } + else { + date = new Date(Date.parse(opts.field.value)); + } + if (isDate(date)) { + self.setDate(date); + } + if (!self._v) { + self.show(); + } + }; + + self._onInputFocus = function() + { + self.show(); + }; + + self._onInputClick = function() + { + self.show(); + }; + + self._onInputBlur = function() + { + // IE allows pika div to gain focus; catch blur the input field + var pEl = document.activeElement; + do { + if (hasClass(pEl, 'pika-single')) { + return; + } + } + while ((pEl = pEl.parentNode)); + + if (!self._c) { + self._b = sto(function() { + self.hide(); + }, 50); + } + self._c = false; + }; + + self._onClick = function(e) + { + e = e || window.event; + var target = e.target || e.srcElement, + pEl = target; + if (!target) { + return; + } + if (!hasEventListeners && hasClass(target, 'pika-select')) { + if (!target.onchange) { + target.setAttribute('onchange', 'return;'); + addEvent(target, 'change', self._onChange); + } + } + do { + if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) { + return; + } + } + while ((pEl = pEl.parentNode)); + if (self._v && target !== opts.trigger && pEl !== opts.trigger) { + self.hide(); + } + }; + + self.el = document.createElement('div'); + self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : ''); + + addEvent(self.el, 'mousedown', self._onMouseDown, true); + addEvent(self.el, 'touchend', self._onMouseDown, true); + addEvent(self.el, 'change', self._onChange); + addEvent(document, 'keydown', self._onKeyChange); + + if (opts.field) { + if (opts.container) { + opts.container.appendChild(self.el); + } else if (opts.bound) { + document.body.appendChild(self.el); + } else { + opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling); + } + addEvent(opts.field, 'change', self._onInputChange); + + if (!opts.defaultDate) { + if (hasMoment && opts.field.value) { + opts.defaultDate = moment(opts.field.value, opts.format).toDate(); + } else { + opts.defaultDate = new Date(Date.parse(opts.field.value)); + } + opts.setDefaultDate = true; + } + } + + var defDate = opts.defaultDate; + + if (isDate(defDate)) { + if (opts.setDefaultDate) { + self.setDate(defDate, true); + } else { + self.gotoDate(defDate); + } + } else { + self.gotoDate(new Date()); + } + + if (opts.bound) { + this.hide(); + self.el.className += ' is-bound'; + addEvent(opts.trigger, 'click', self._onInputClick); + addEvent(opts.trigger, 'focus', self._onInputFocus); + addEvent(opts.trigger, 'blur', self._onInputBlur); + } else { + this.show(); + } + }; + + + /** + * public Pikaday API + */ + Pikaday.prototype = { + + + /** + * configure functionality + */ + config: function(options) + { + if (!this._o) { + this._o = extend({}, defaults, true); + } + + var opts = extend(this._o, options, true); + + opts.isRTL = !!opts.isRTL; + + opts.field = (opts.field && opts.field.nodeName) ? opts.field : null; + + opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null; + + opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field); + + opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field; + + opts.disableWeekends = !!opts.disableWeekends; + + opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null; + + var nom = parseInt(opts.numberOfMonths, 10) || 1; + opts.numberOfMonths = nom > 4 ? 4 : nom; + + if (!isDate(opts.minDate)) { + opts.minDate = false; + } + if (!isDate(opts.maxDate)) { + opts.maxDate = false; + } + if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) { + opts.maxDate = opts.minDate = false; + } + if (opts.minDate) { + this.setMinDate(opts.minDate); + } + if (opts.maxDate) { + this.setMaxDate(opts.maxDate); + } + + if (isArray(opts.yearRange)) { + var fallback = new Date().getFullYear() - 10; + opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback; + opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback; + } else { + opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange; + if (opts.yearRange > 100) { + opts.yearRange = 100; + } + } + + return opts; + }, + + /** + * return a formatted string of the current selection (using Moment.js if available) + */ + toString: function(format) + { + return !isDate(this._d) ? '' : hasMoment ? moment(this._d).format(format || this._o.format) : this._d.toDateString(); + }, + + /** + * return a Moment.js object of the current selection (if available) + */ + getMoment: function() + { + return hasMoment ? moment(this._d) : null; + }, + + /** + * set the current selection from a Moment.js object (if available) + */ + setMoment: function(date, preventOnSelect) + { + if (hasMoment && moment.isMoment(date)) { + this.setDate(date.toDate(), preventOnSelect); + } + }, + + /** + * return a Date object of the current selection with fallback for the current date + */ + getDate: function() + { + return isDate(this._d) ? new Date(this._d.getTime()) : new Date(); + }, + + /** + * set the current selection + */ + setDate: function(date, preventOnSelect) + { + if (!date) { + this._d = null; + + if (this._o.field) { + this._o.field.value = ''; + fireEvent(this._o.field, 'change', { firedBy: this }); + } + + return this.draw(); + } + if (typeof date === 'string') { + date = new Date(Date.parse(date)); + } + if (!isDate(date)) { + return; + } + + var min = this._o.minDate, + max = this._o.maxDate; + + if (isDate(min) && date < min) { + date = min; + } else if (isDate(max) && date > max) { + date = max; + } + + this._d = new Date(date.getTime()); + setToStartOfDay(this._d); + this.gotoDate(this._d); + + if (this._o.field) { + this._o.field.value = this.toString(); + fireEvent(this._o.field, 'change', { firedBy: this }); + } + if (!preventOnSelect && typeof this._o.onSelect === 'function') { + this._o.onSelect.call(this, this.getDate()); + } + }, + + /** + * change view to a specific date + */ + gotoDate: function(date) + { + var newCalendar = true; + + if (!isDate(date)) { + return; + } + + if (this.calendars) { + var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1), + lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1), + visibleDate = date.getTime(); + // get the end of the month + lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1); + lastVisibleDate.setDate(lastVisibleDate.getDate()-1); + newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate); + } + + if (newCalendar) { + this.calendars = [{ + month: date.getMonth(), + year: date.getFullYear() + }]; + if (this._o.mainCalendar === 'right') { + this.calendars[0].month += 1 - this._o.numberOfMonths; + } + } + + this.adjustCalendars(); + }, + + adjustDate: function(sign, days) { + + var day = this.getDate(); + var difference = parseInt(days)*24*60*60*1000; + + var newDay; + + if (sign === 'add') { + newDay = new Date(day.valueOf() + difference); + } else if (sign === 'subtract') { + newDay = new Date(day.valueOf() - difference); + } + + if (hasMoment) { + if (sign === 'add') { + newDay = moment(day).add(days, "days").toDate(); + } else if (sign === 'subtract') { + newDay = moment(day).subtract(days, "days").toDate(); + } + } + + this.setDate(newDay); + }, + + adjustCalendars: function() { + this.calendars[0] = adjustCalendar(this.calendars[0]); + for (var c = 1; c < this._o.numberOfMonths; c++) { + this.calendars[c] = adjustCalendar({ + month: this.calendars[0].month + c, + year: this.calendars[0].year + }); + } + this.draw(); + }, + + gotoToday: function() + { + this.gotoDate(new Date()); + }, + + /** + * change view to a specific month (zero-index, e.g. 0: January) + */ + gotoMonth: function(month) + { + if (!isNaN(month)) { + this.calendars[0].month = parseInt(month, 10); + this.adjustCalendars(); + } + }, + + nextMonth: function() + { + this.calendars[0].month++; + this.adjustCalendars(); + }, + + prevMonth: function() + { + this.calendars[0].month--; + this.adjustCalendars(); + }, + + /** + * change view to a specific full year (e.g. "2012") + */ + gotoYear: function(year) + { + if (!isNaN(year)) { + this.calendars[0].year = parseInt(year, 10); + this.adjustCalendars(); + } + }, + + /** + * change the minDate + */ + setMinDate: function(value) + { + if(value instanceof Date) { + setToStartOfDay(value); + this._o.minDate = value; + this._o.minYear = value.getFullYear(); + this._o.minMonth = value.getMonth(); + } else { + this._o.minDate = defaults.minDate; + this._o.minYear = defaults.minYear; + this._o.minMonth = defaults.minMonth; + this._o.startRange = defaults.startRange; + } + + this.draw(); + }, + + /** + * change the maxDate + */ + setMaxDate: function(value) + { + if(value instanceof Date) { + setToStartOfDay(value); + this._o.maxDate = value; + this._o.maxYear = value.getFullYear(); + this._o.maxMonth = value.getMonth(); + } else { + this._o.maxDate = defaults.maxDate; + this._o.maxYear = defaults.maxYear; + this._o.maxMonth = defaults.maxMonth; + this._o.endRange = defaults.endRange; + } + + this.draw(); + }, + + setStartRange: function(value) + { + this._o.startRange = value; + }, + + setEndRange: function(value) + { + this._o.endRange = value; + }, + + /** + * refresh the HTML + */ + draw: function(force) + { + if (!this._v && !force) { + return; + } + var opts = this._o, + minYear = opts.minYear, + maxYear = opts.maxYear, + minMonth = opts.minMonth, + maxMonth = opts.maxMonth, + html = '', + randId; + + if (this._y <= minYear) { + this._y = minYear; + if (!isNaN(minMonth) && this._m < minMonth) { + this._m = minMonth; + } + } + if (this._y >= maxYear) { + this._y = maxYear; + if (!isNaN(maxMonth) && this._m > maxMonth) { + this._m = maxMonth; + } + } + + randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2); + + for (var c = 0; c < opts.numberOfMonths; c++) { + html += '
    ' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '
    '; + } + + this.el.innerHTML = html; + + if (opts.bound) { + if(opts.field.type !== 'hidden') { + sto(function() { + opts.trigger.focus(); + }, 1); + } + } + + if (typeof this._o.onDraw === 'function') { + this._o.onDraw(this); + } + + if (opts.bound) { + // let the screen reader user know to use arrow keys + opts.field.setAttribute('aria-label', 'Use the arrow keys to pick a date'); + } + }, + + adjustPosition: function() + { + var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect; + + if (this._o.container) return; + + this.el.style.position = 'absolute'; + + field = this._o.trigger; + pEl = field; + width = this.el.offsetWidth; + height = this.el.offsetHeight; + viewportWidth = window.innerWidth || document.documentElement.clientWidth; + viewportHeight = window.innerHeight || document.documentElement.clientHeight; + scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop; + + if (typeof field.getBoundingClientRect === 'function') { + clientRect = field.getBoundingClientRect(); + left = clientRect.left + window.pageXOffset; + top = clientRect.bottom + window.pageYOffset; + } else { + left = pEl.offsetLeft; + top = pEl.offsetTop + pEl.offsetHeight; + while((pEl = pEl.offsetParent)) { + left += pEl.offsetLeft; + top += pEl.offsetTop; + } + } + + // default position is bottom & left + if ((this._o.reposition && left + width > viewportWidth) || + ( + this._o.position.indexOf('right') > -1 && + left - width + field.offsetWidth > 0 + ) + ) { + left = left - width + field.offsetWidth; + } + if ((this._o.reposition && top + height > viewportHeight + scrollTop) || + ( + this._o.position.indexOf('top') > -1 && + top - height - field.offsetHeight > 0 + ) + ) { + top = top - height - field.offsetHeight; + } + + this.el.style.left = left + 'px'; + this.el.style.top = top + 'px'; + }, + + /** + * render HTML for a particular month + */ + render: function(year, month, randId) + { + var opts = this._o, + now = new Date(), + days = getDaysInMonth(year, month), + before = new Date(year, month, 1).getDay(), + data = [], + row = []; + setToStartOfDay(now); + if (opts.firstDay > 0) { + before -= opts.firstDay; + if (before < 0) { + before += 7; + } + } + var previousMonth = month === 0 ? 11 : month - 1, + nextMonth = month === 11 ? 0 : month + 1, + yearOfPreviousMonth = month === 0 ? year - 1 : year, + yearOfNextMonth = month === 11 ? year + 1 : year, + daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth); + var cells = days + before, + after = cells; + while(after > 7) { + after -= 7; + } + cells += 7 - after; + for (var i = 0, r = 0; i < cells; i++) + { + var day = new Date(year, month, 1 + (i - before)), + isSelected = isDate(this._d) ? compareDates(day, this._d) : false, + isToday = compareDates(day, now), + isEmpty = i < before || i >= (days + before), + dayNumber = 1 + (i - before), + monthNumber = month, + yearNumber = year, + isStartRange = opts.startRange && compareDates(opts.startRange, day), + isEndRange = opts.endRange && compareDates(opts.endRange, day), + isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange, + isDisabled = (opts.minDate && day < opts.minDate) || + (opts.maxDate && day > opts.maxDate) || + (opts.disableWeekends && isWeekend(day)) || + (opts.disableDayFn && opts.disableDayFn(day)); + + if (isEmpty) { + if (i < before) { + dayNumber = daysInPreviousMonth + dayNumber; + monthNumber = previousMonth; + yearNumber = yearOfPreviousMonth; + } else { + dayNumber = dayNumber - days; + monthNumber = nextMonth; + yearNumber = yearOfNextMonth; + } + } + + var dayConfig = { + day: dayNumber, + month: monthNumber, + year: yearNumber, + isSelected: isSelected, + isToday: isToday, + isDisabled: isDisabled, + isEmpty: isEmpty, + isStartRange: isStartRange, + isEndRange: isEndRange, + isInRange: isInRange, + showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths + }; + + row.push(renderDay(dayConfig)); + + if (++r === 7) { + if (opts.showWeekNumber) { + row.unshift(renderWeek(i - before, month, year)); + } + data.push(renderRow(row, opts.isRTL)); + row = []; + r = 0; + } + } + return renderTable(opts, data, randId); + }, + + isVisible: function() + { + return this._v; + }, + + show: function() + { + if (!this.isVisible()) { + removeClass(this.el, 'is-hidden'); + this._v = true; + this.draw(); + if (this._o.bound) { + addEvent(document, 'click', this._onClick); + this.adjustPosition(); + } + if (typeof this._o.onOpen === 'function') { + this._o.onOpen.call(this); + } + } + }, + + hide: function() + { + var v = this._v; + if (v !== false) { + if (this._o.bound) { + removeEvent(document, 'click', this._onClick); + } + this.el.style.position = 'static'; // reset + this.el.style.left = 'auto'; + this.el.style.top = 'auto'; + addClass(this.el, 'is-hidden'); + this._v = false; + if (v !== undefined && typeof this._o.onClose === 'function') { + this._o.onClose.call(this); + } + } + }, + + /** + * GAME OVER + */ + destroy: function() + { + this.hide(); + removeEvent(this.el, 'mousedown', this._onMouseDown, true); + removeEvent(this.el, 'touchend', this._onMouseDown, true); + removeEvent(this.el, 'change', this._onChange); + if (this._o.field) { + removeEvent(this._o.field, 'change', this._onInputChange); + if (this._o.bound) { + removeEvent(this._o.trigger, 'click', this._onInputClick); + removeEvent(this._o.trigger, 'focus', this._onInputFocus); + removeEvent(this._o.trigger, 'blur', this._onInputBlur); + } + } + if (this.el.parentNode) { + this.el.parentNode.removeChild(this.el); + } + } + + }; + + return Pikaday; + +})); diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/plugins/pikaday.jquery.js b/styleguide/source/assets/js/vendor/bower_components/pikaday/plugins/pikaday.jquery.js new file mode 100644 index 0000000000..3f0e52a6ec --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/plugins/pikaday.jquery.js @@ -0,0 +1,56 @@ +/*! + * Pikaday jQuery plugin. + * + * Copyright © 2013 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday + */ + +(function (root, factory) +{ + 'use strict'; + + if (typeof exports === 'object') { + // CommonJS module + factory(require('jquery'), require('../pikaday')); + } else if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery', 'pikaday'], factory); + } else { + // Browser globals + factory(root.jQuery, root.Pikaday); + } +}(this, function ($, Pikaday) +{ + 'use strict'; + + $.fn.pikaday = function() + { + var args = arguments; + + if (!args || !args.length) { + args = [{ }]; + } + + return this.each(function() + { + var self = $(this), + plugin = self.data('pikaday'); + + if (!(plugin instanceof Pikaday)) { + if (typeof args[0] === 'object') { + var options = $.extend({}, args[0]); + options.field = self[0]; + self.data('pikaday', new Pikaday(options)); + } + } else { + if (typeof args[0] === 'string' && typeof plugin[args[0]] === 'function') { + plugin[args[0]].apply(plugin, Array.prototype.slice.call(args,1)); + + if (args[0] === 'destroy') { + self.removeData('pikaday'); + } + } + } + }); + }; + +})); diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/scss/pikaday.scss b/styleguide/source/assets/js/vendor/bower_components/pikaday/scss/pikaday.scss new file mode 100644 index 0000000000..e1487c8974 --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/scss/pikaday.scss @@ -0,0 +1,247 @@ +/*! + * Pikaday + * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ + */ + +// Variables +// Declare any of these variables before importing this SCSS file to easily override defaults +// Variables are namespaced with the pd (pikaday) prefix + +// Colours +$pd-text-color: #333 !default; +$pd-title-color: #333 !default; +$pd-title-bg: #fff !default; +$pd-picker-bg: #fff !default; +$pd-picker-border: #ccc !default; +$pd-picker-border-bottom: #bbb !default; +$pd-picker-shadow: rgba(0,0,0,.5) !default; +$pd-th-color: #999 !default; +$pd-day-color: #666 !default; +$pd-day-bg: #f5f5f5 !default; +$pd-day-hover-color: #fff !default; +$pd-day-hover-bg: #ff8000 !default; +$pd-day-today-color: #33aaff !default; +$pd-day-selected-color: #fff !default; +$pd-day-selected-bg: #33aaff !default; +$pd-day-selected-shadow: #178fe5 !default; +$pd-day-disabled-color: #999 !default; +$pd-week-color: #999 !default; + +// Font +$pd-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !default; + + +.pika-single { + z-index: 9999; + display: block; + position: relative; + color: $pd-text-color; + background: $pd-picker-bg; + border: 1px solid $pd-picker-border; + border-bottom-color: $pd-picker-border-bottom; + font-family: $pd-font-family; + + &.is-hidden { + display: none; + } + + &.is-bound { + position: absolute; + box-shadow: 0 5px 15px -5px $pd-picker-shadow; + } +} + +// clear child float (pika-lendar), using the famous micro clearfix hack +// http://nicolasgallagher.com/micro-clearfix-hack/ +.pika-single { + *zoom: 1; + + &:before, + &:after { + content: " "; + display: table; + } + + &:after { clear: both } +} + +.pika-lendar { + float: left; + width: 240px; + margin: 8px; +} + +.pika-title { + position: relative; + text-align: center; + + select { + cursor: pointer; + position: absolute; + z-index: 9998; + margin: 0; + left: 0; + top: 5px; + filter: alpha(opacity=0); + opacity: 0; + } +} + +.pika-label { + display: inline-block; + *display: inline; + position: relative; + z-index: 9999; + overflow: hidden; + margin: 0; + padding: 5px 3px; + font-size: 14px; + line-height: 20px; + font-weight: bold; + color: $pd-title-color; + background-color: $pd-title-bg; +} + +.pika-prev, +.pika-next { + display: block; + cursor: pointer; + position: relative; + outline: none; + border: 0; + padding: 0; + width: 20px; + height: 30px; + text-indent: 20px; // hide text using text-indent trick, using width value (it's enough) + white-space: nowrap; + overflow: hidden; + background-color: transparent; + background-position: center center; + background-repeat: no-repeat; + background-size: 75% 75%; + opacity: .5; + *position: absolute; + *top: 0; + + &:hover { + opacity: 1; + } + + &.is-disabled { + cursor: default; + opacity: .2; + } +} + +.pika-prev, +.is-rtl .pika-next { + float: left; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg=='); + *left: 0; +} + +.pika-next, +.is-rtl .pika-prev { + float: right; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII='); + *right: 0; +} + +.pika-select { + display: inline-block; + *display: inline; +} + +.pika-table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + border: 0; + + th, + td { + width: 14.285714285714286%; + padding: 0; + } + + th { + color: $pd-th-color; + font-size: 12px; + line-height: 25px; + font-weight: bold; + text-align: center; + } + + abbr { + border-bottom: none; + cursor: help; + } +} + +.pika-button { + cursor: pointer; + display: block; + -moz-box-sizing: border-box; + box-sizing: border-box; + outline: none; + border: 0; + margin: 0; + width: 100%; + padding: 5px; + color: $pd-day-color; + font-size: 12px; + line-height: 15px; + text-align: right; + background: $pd-day-bg; + + .is-today & { + color: $pd-day-today-color; + font-weight: bold; + } + + .is-selected & { + color: $pd-day-selected-color; + font-weight: bold; + background: $pd-day-selected-bg; + box-shadow: inset 0 1px 3px $pd-day-selected-shadow; + border-radius: 3px; + } + + .is-disabled &, + .is-outside-current-month & { + pointer-events: none; + cursor: default; + color: $pd-day-disabled-color; + opacity: .3; + } + + &:hover { + color: $pd-day-hover-color; + background: $pd-day-hover-bg; + box-shadow: none; + border-radius: 3px; + } +} + +.pika-week { + font-size: 11px; + color: $pd-week-color; +} + +.is-inrange .pika-button { + background: #D5E9F7; +} + +.is-startrange .pika-button { + color: #fff; + background: #6CB31D; + box-shadow: none; + border-radius: 3px; +} + +.is-endrange .pika-button { + color: #fff; + background: #33aaff; + box-shadow: none; + border-radius: 3px; +} diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/tests/methods.js b/styleguide/source/assets/js/vendor/bower_components/pikaday/tests/methods.js new file mode 100644 index 0000000000..a81d898b4c --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/tests/methods.js @@ -0,0 +1,47 @@ +var Pikaday = require('../'), + expect = require('expect.js'); + +describe('Pikaday public method', function () +{ + 'use strict'; + + describe('#toString()', function () + { + it('should return empty string when date not set', function () + { + var pikaday = new Pikaday(); + expect(pikaday.toString()).to.be.empty; + }); + + it('should return date string, formatted by moment, when date is set', function() { + var date = new Date(2014, 3, 25), + pikaday = new Pikaday({ + format: 'DD-MM-YY' + }); + + pikaday.setDate(date); + expect(pikaday.toString()).to.eql('25-04-14'); + }); + }); + + describe('When specifying minDate option in Constructor', function () { + it('Should remove the time portion (flattening to midnight)', function () { + var date = new Date(2015, 1, 17, 22, 10, 5), + expected = new Date(2015, 1, 17, 0, 0, 0), + pikaday = new Pikaday({ minDate: date }); + + expect(pikaday._o.minDate).to.eql(expected); + }); + }); + + describe('#setMinDate()', function () { + it('should flatten date to midnight ignoring time portion (consistent with minDate option in ctor)', function () { + var date = new Date(2015, 1, 17, 22, 10, 5), + expected = new Date(2015, 1, 17, 0, 0, 0), + pikaday = new Pikaday(); + + pikaday.setMinDate(date); + expect(pikaday._o.minDate).to.eql(expected); + }); + }); +}); diff --git a/styleguide/source/assets/js/vendor/bower_components/pikaday/tests/module.js b/styleguide/source/assets/js/vendor/bower_components/pikaday/tests/module.js new file mode 100644 index 0000000000..657b77548f --- /dev/null +++ b/styleguide/source/assets/js/vendor/bower_components/pikaday/tests/module.js @@ -0,0 +1,24 @@ +var Pikaday = require('../'), + expect = require('expect.js'); + +describe('Pikaday', function () +{ + 'use strict'; + + it('should expose as a CommonJS module', function () + { + expect(Pikaday).to.be.a('function'); + }); + + it('should NOT leak to the global object', function () + { + expect(window).to.not.have.property('Pikaday'); + }); + + it('should be possible to create a new instance', function () + { + expect(function () { + new Pikaday(); + }).to.not.throwException(); + }); +}); \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/polyfill-init/index.js b/styleguide/source/assets/js/vendor/bower_components/polyfill-init/index.js index 70b1f97a33..e544738848 100644 --- a/styleguide/source/assets/js/vendor/bower_components/polyfill-init/index.js +++ b/styleguide/source/assets/js/vendor/bower_components/polyfill-init/index.js @@ -1,3 +1,9 @@ // https://github.com/jonathantneal/svg4everybody -svg4everybody(); +svg4everybody({ + validate: function(src) { + // Don't touch internal SVG references. Those work fine in + // the browsers we support. + return src.indexOf('#') !== 0; + } +}); \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/.bower.json b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/.bower.json deleted file mode 100644 index 84c84035dd..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/.bower.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "slick-carousel", - "main": [ - "slick/slick.js", - "slick/slick.css", - "slick/slick.less", - "slick/slick.scss" - ], - "version": "1.6.0", - "homepage": "https://github.com/kenwheeler/slick", - "authors": [ - "Ken Wheeler " - ], - "description": "the last carousel you'll ever need", - "keywords": [ - "responsive", - "carousel", - "jquery" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests", - "package.json", - "index.html" - ], - "dependencies": { - "jquery": ">=1.7" - }, - "_release": "1.6.0", - "_resolution": { - "type": "version", - "tag": "1.6.0", - "commit": "0aee9fe00e440cc9d72c2dc11768ad9277880603" - }, - "_source": "https://github.com/kenwheeler/slick.git", - "_target": "^1.6.0", - "_originalSource": "slick-carousel", - "_direct": true -} \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/CONTRIBUTING.markdown b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/CONTRIBUTING.markdown deleted file mode 100644 index 33b73ca159..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/CONTRIBUTING.markdown +++ /dev/null @@ -1,35 +0,0 @@ -## Submitting issues - -### Test case required - -**All bug reports and problem issues require a jsFiddle**. -[Please fork this JSFiddle as a baseline](http://jsfiddle.net/simeydotme/fmo50w7n/). - -+ A test case clearly demonstrates the bug or issue. -+ It contains the bare minimum HTML, CSS, and JavaScript required to demonstrate the bug. -+ Assets are not minified (we cannot debug .min.js files). -+ A link to your production site is **not** a reduced test case. - -Providing a test case is the best way to get your issue addressed. Without a test case; your issue may be closed. -You must provide a clear and simple way to reproduce the issue with the provided fiddle. - -## Support - -Although Slick is designed to be super easy to use, there's always things that can go wrong, especially when interacting with other plugins and complicated websites. If you are **having problems getting Slick to work**, or can't figure something out, **this repository**'s issues section **is not the place to ask about it**. - -I have set up a subreddit for Slick discussion at [reddit.com/r/slickcarousel](http://www.reddit.com/r/slickcarousel/). -And a gitter chatroom here: [gitter.im/kenwheeler/slick](https://gitter.im/kenwheeler/slick). -And finally you can ask the world for help, and find out if anyone else has your problem at [stackoverflow](http://stackoverflow.com/search?q=slick+carousel). - -Please use these forums as an area to discuss Slick and any issues you may have. - -## Feature Requests - -If you would like to request or propose a feature, please do so in the the Slick subreddit or gitter chat: -[reddit.com/r/slickcarousel](http://www.reddit.com/r/slickcarousel/) / [gitter.im/kenwheeler/slick](https://gitter.im/kenwheeler/slick). - -## Pull requests - -**Contributions are welcome**! That said, please *be prepared to edit* your pull request at request, and provide a jsFiddle of your fork working interoperably with every "mode" that Slick supports, and with varying numbers of slides, slidesToShow & slidesToScroll. Failure to do so will result in your pull request being closed. - -*Please note that while Slick is open source, this is still my baby, and by submitting a pull request you are authorizing me to edit or modify it in any way shape or form. You will be listed in Github as a contributor, but I have and will continue to steer the direction of this project.* diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/ISSUE_TEMPLATE.md b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/ISSUE_TEMPLATE.md deleted file mode 100644 index 7400336301..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,50 +0,0 @@ - -> short description of the bug / issue, provide more detail below. - -==================================================================== - - -###### `[ paste your jsfiddle link here ]` - -use this jsfiddle to reproduce your bug: -http://jsfiddle.net/simeydotme/fmo50w7n/ -we will likely close your issue without it. - - -==================================================================== - - -#### Steps to reproduce the problem - -1. ... -2. ... - - -==================================================================== - - -#### What is the expected behaviour? - -... - - -==================================================================== - - -#### What is observed behaviour? - -... - - -==================================================================== - - -#### More Details - -- Which browsers/versions does it happen on? -- Which jQuery/Slick version are you using? -- Did this work before? - - - - diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/LICENSE b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/LICENSE deleted file mode 100644 index 3ffd452272..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2016 - -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. diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/Makefile b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/Makefile deleted file mode 100644 index eea6b9529e..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/Makefile +++ /dev/null @@ -1,8 +0,0 @@ - -build: components slick.js slick.css - @component build --dev - -components: component.json - @component install --dev - -.PHONY: clean diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/README.markdown b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/README.markdown deleted file mode 100644 index 6dc5ca0481..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/README.markdown +++ /dev/null @@ -1,287 +0,0 @@ -slick -------- - -[1]: - -_the last carousel you'll ever need_ - -#### Demo - -[http://kenwheeler.github.io/slick](http://kenwheeler.github.io/slick/) - -#### CDN - -To start working with Slick right away, there's a couple of CDN choices availabile -to serve the files as close, and fast as possible to your users: - -- https://cdnjs.com/libraries/slick-carousel -- https://www.jsdelivr.com/projects/jquery.slick - -#####Example using jsDelivr - -Just add a link to the css file in your ``: -```html - - - -``` - -Then, before your closing `````` tag add: - -```html - -``` - -#### Package Managers - -```sh -# Bower -bower install --save slick-carousel - -# NPM -npm install slick-carousel -``` - -#### Contributing - -PLEASE review CONTRIBUTING.markdown prior to requesting a feature, filing a pull request or filing an issue. - -### Data Attribute Settings - -In slick 1.5 you can now add settings using the data-slick attribute. You still need to call $(element).slick() to initialize slick on the element. - -Example: - -```html -
    -

    1

    -

    2

    -

    3

    -

    4

    -

    5

    -

    6

    -
    -``` - -### Settings - -Option | Type | Default | Description ------- | ---- | ------- | ----------- -accessibility | boolean | true | Enables tabbing and arrow key navigation -adaptiveHeight | boolean | false | Adapts slider height to the current slide -autoplay | boolean | false | Enables auto play of slides -autoplaySpeed | int | 3000 | Auto play change interval -centerMode | boolean | false | Enables centered view with partial prev/next slides. Use with odd numbered slidesToShow counts. -centerPadding | string | '50px' | Side padding when in center mode. (px or %) -cssEase | string | 'ease' | CSS3 easing -customPaging | function | n/a | Custom paging templates. See source for use example. -dots | boolean | false | Current slide indicator dots -dotsClass | string | 'slick-dots' | Class for slide indicator dots container -draggable | boolean | true | Enables desktop dragging -easing | string | 'linear' | animate() fallback easing -edgeFriction | integer | 0.15 | Resistance when swiping edges of non-infinite carousels -fade | boolean | false | Enables fade -arrows | boolean | true | Enable Next/Prev arrows -appendArrows | string | $(element) | Change where the navigation arrows are attached (Selector, htmlString, Array, Element, jQuery object) -appendDots | string | $(element) | Change where the navigation dots are attached (Selector, htmlString, Array, Element, jQuery object) -mobileFirst | boolean | false | Responsive settings use mobile first calculation -prevArrow | string (html \| jQuery selector) \| object (DOM node \| jQuery object) | `` | Allows you to select a node or customize the HTML for the "Previous" arrow. -nextArrow | string (html \| jQuery selector) \| object (DOM node \| jQuery object) | `` | Allows you to select a node or customize the HTML for the "Next" arrow. -infinite | boolean | true | Infinite looping -initialSlide | integer | 0 | Slide to start on -lazyLoad | string | 'ondemand' | Accepts 'ondemand' or 'progressive' for lazy load technique. 'ondemand' will load the image as soon as you slide to it, 'progressive' loads one image after the other when the page loads. -pauseOnFocus | boolean | true | Pauses autoplay when slider is focussed -pauseOnHover | boolean | true | Pauses autoplay on hover -pauseOnDotsHover | boolean | false | Pauses autoplay when a dot is hovered -respondTo | string | 'window' | Width that responsive object responds to. Can be 'window', 'slider' or 'min' (the smaller of the two). -responsive | array | null | Array of objects [containing breakpoints and settings objects (see example)](#responsive-option-example). Enables settings at given `breakpoint`. Set `settings` to "unslick" instead of an object to disable slick at a given breakpoint. -rows | int | 1 | Setting this to more than 1 initializes grid mode. Use slidesPerRow to set how many slides should be in each row. -slide | string | '' | Slide element query -slidesPerRow | int | 1 | With grid mode initialized via the rows option, this sets how many slides are in each grid row. -slidesToShow | int | 1 | # of slides to show at a time -slidesToScroll | int | 1 | # of slides to scroll at a time -speed | int | 300 | Transition speed -swipe | boolean | true | Enables touch swipe -swipeToSlide | boolean | false | Swipe to slide irrespective of slidesToScroll -touchMove | boolean | true | Enables slide moving with touch -touchThreshold | int | 5 | To advance slides, the user must swipe a length of (1/touchThreshold) * the width of the slider. -useCSS | boolean | true | Enable/Disable CSS Transitions -useTransform | boolean | true | Enable/Disable CSS Transforms -variableWidth | boolean | false | Disables automatic slide width calculation -vertical | boolean | false | Vertical slide direction -verticalSwiping | boolean | false | Changes swipe direction to vertical -rtl | boolean | false | Change the slider's direction to become right-to-left -waitForAnimate | boolean | true | Ignores requests to advance the slide while animating -zIndex | number | 1000 | Set the zIndex values for slides, useful for IE9 and lower - -##### Responsive Option Example -The responsive option, and value, is quite unique and powerful. -You can use it like so: - -```javascript -$(".slider").slick({ - - // normal options... - infinite: false, - - // the magic - responsive: [{ - - breakpoint: 1024, - settings: { - slidesToShow: 3, - infinite: true - } - - }, { - - breakpoint: 600, - settings: { - slidesToShow: 2, - dots: true - } - - }, { - - breakpoint: 300, - settings: "unslick" // destroys slick - - }] -}); -``` - - - - -### Events - -In slick 1.4, callback methods were deprecated and replaced with events. Use them before the initialization of slick as shown below: - -```javascript -// On swipe event -$('.your-element').on('swipe', function(event, slick, direction){ - console.log(direction); - // left -}); - -// On edge hit -$('.your-element').on('edge', function(event, slick, direction){ - console.log('edge was hit') -}); - -// On before slide change -$('.your-element').on('beforeChange', function(event, slick, currentSlide, nextSlide){ - console.log(nextSlide); -}); -``` - -Event | Params | Description ------- | -------- | ----------- -afterChange | event, slick, currentSlide | After slide change callback -beforeChange | event, slick, currentSlide, nextSlide | Before slide change callback -breakpoint | event, slick, breakpoint | Fires after a breakpoint is hit -destroy | event, slick | When slider is destroyed, or unslicked. -edge | event, slick, direction | Fires when an edge is overscrolled in non-infinite mode. -init | event, slick | When Slick initializes for the first time callback. Note that this event should be defined before initializing the slider. -reInit | event, slick | Every time Slick (re-)initializes callback -setPosition | event, slick | Every time Slick recalculates position -swipe | event, slick, direction | Fires after swipe/drag -lazyLoaded | event, slick, image, imageSource | Fires after image loads lazily -lazyLoadError | event, slick, image, imageSource | Fires after image fails to load - - -#### Methods - -Methods are called on slick instances through the slick method itself in version 1.4, see below: - -```javascript -// Add a slide -$('.your-element').slick('slickAdd',"
    "); - -// Get the current slide -var currentSlide = $('.your-element').slick('slickCurrentSlide'); -``` - -This new syntax allows you to call any internal slick method as well: - -```javascript -// Manually refresh positioning of slick -$('.your-element').slick('setPosition'); -``` - - -Method | Argument | Description ------- | -------- | ----------- -`slick` | options : object | Initializes Slick -`unslick` | | Destroys Slick -`slickNext` | | Triggers next slide -`slickPrev` | | Triggers previous slide -`slickPause` | | Pause Autoplay -`slickPlay` | | Start Autoplay (_will also set `autoplay` option to `true`_) -`slickGoTo` | index : int, dontAnimate : bool | Goes to slide by index, skipping animation if second parameter is set to true -`slickCurrentSlide` | | Returns the current slide index -`slickAdd` | element : html or DOM object, index: int, addBefore: bool | Add a slide. If an index is provided, will add at that index, or before if addBefore is set. If no index is provided, add to the end or to the beginning if addBefore is set. Accepts HTML String || Object -`slickRemove` | index: int, removeBefore: bool | Remove slide by index. If removeBefore is set true, remove slide preceding index, or the first slide if no index is specified. If removeBefore is set to false, remove the slide following index, or the last slide if no index is set. -`slickFilter` | filter : selector or function | Filters slides using jQuery .filter syntax -`slickUnfilter` | | Removes applied filter -`slickGetOption` | option : string(option name) | Gets an option value. -`slickSetOption` | change an option, `refresh` is always `boolean` and will update UI changes... - | `option, value, refresh` | change a [single `option`](https://github.com/kenwheeler/slick#settings) to given `value`; `refresh` is optional. - | `"responsive", [{ breakpoint: n, settings: {} }, ... ], refresh` | change or add [whole sets of responsive options](#responsive-option-example) - | `{ option: value, option: value, ... }, refresh` | change [multiple `option`s](https://github.com/kenwheeler/slick#settings) to corresponding `value`s. - - -#### Example - -Initialize with: - -```javascript -$(element).slick({ - dots: true, - speed: 500 -}); - ``` - -Change the speed with: - -```javascript -$(element).slick('slickSetOption', 'speed', 5000, true); -``` - -Destroy with: - -```javascript -$(element).slick('unslick'); -``` - - -#### Sass Variables - -Variable | Type | Default | Description ------- | ---- | ------- | ----------- -$slick-font-path | string | "./fonts/" | Directory path for the slick icon font -$slick-font-family | string | "slick" | Font-family for slick icon font -$slick-loader-path | string | "./" | Directory path for the loader image -$slick-arrow-color | color | white | Color of the left/right arrow icons -$slick-dot-color | color | black | Color of the navigation dots -$slick-dot-color-active | color | $slick-dot-color | Color of the active navigation dot -$slick-prev-character | string | '\2190' | Unicode character code for the previous arrow icon -$slick-next-character | string | '\2192' | Unicode character code for the next arrow icon -$slick-dot-character | string | '\2022' | Unicode character code for the navigation dot icon -$slick-dot-size | pixels | 6px | Size of the navigation dots - -#### Browser support - -Slick works on IE8+ in addition to other modern browsers such as Chrome, Firefox, and Safari. - -#### Dependencies - -jQuery 1.7 - -#### License - -Copyright (c) 2014 Ken Wheeler - -Licensed under the MIT license. - -Free as in Bacon. diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/bower.json b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/bower.json deleted file mode 100644 index ff2c379322..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/bower.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "slick-carousel", - "main": [ - "slick/slick.js", - "slick/slick.css", - "slick/slick.less", - "slick/slick.scss" - ], - "version": "1.6.0", - "homepage": "https://github.com/kenwheeler/slick", - "authors": [ - "Ken Wheeler " - ], - "description": "the last carousel you'll ever need", - "keywords": [ - "responsive", - "carousel", - "jquery" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests", - "package.json", - "index.html" - ], - "dependencies": { - "jquery": ">=1.7" - } -} diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/component.json b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/component.json deleted file mode 100644 index af23f00781..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/component.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "slick", - "repo": "kenwheeler/slick", - "description": "the last carousel you'll ever need", - "version": "1.6.0", - "keywords": ["ui", "jquery", "carousel", "responsive", "slider"], - "dependencies": { - "component/jquery": "*" - }, - "development": {}, - "scripts": { - "slick/slick.js": "slick.js" - }, - "styles": { - "slick/slick.css": "slick.css", - "slick/slick-theme.css": "slick-theme.css" - } -} \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick.jquery.json b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick.jquery.json deleted file mode 100644 index 7af760b472..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick.jquery.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "slick", - "title": "slick", - "description": "A jQuery responsive touch carousel", - "keywords": [ - "responsive", - "slider", - "carousel", - "touch", - "mobile" - ], - "version": "1.6.0", - "author": { - "name": "Ken Wheeler", - "url": "http://kenwheeler.github.io" - }, - "maintainers": [{ - "name": "Ken Wheeler", - "email": "dubmediagroup@gmail.com", - "url": "http://www.dubmediagroup.com" - }], - "licenses": [{ - "type": "MIT", - "url": "https://github.com/kenwheeler/slick/blob/master/LICENSE" - }], - "demo": "http://kenwheeler.github.io/slick/", - "bugs": "https://github.com/kenwheeler/slick/issues", - "homepage": "https://github.com/kenwheeler/slick/", - "docs": "https://github.com/kenwheeler/slick/", - "download": "https://github.com/kenwheeler/slick/archive/master.zip", - "dependencies": { - "jquery": ">=1.7" - } -} diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/ajax-loader.gif b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/ajax-loader.gif deleted file mode 100644 index e0e6e9760b..0000000000 Binary files a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/ajax-loader.gif and /dev/null differ diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/config.rb b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/config.rb deleted file mode 100644 index 81f5ae3246..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/config.rb +++ /dev/null @@ -1,10 +0,0 @@ -css_dir = "." -sass_dir = "." -images_dir = "." -fonts_dir = "fonts" -relative_assets = true - -output_style = :compact -line_comments = false - -preferred_syntax = :scss \ No newline at end of file diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.eot b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.eot deleted file mode 100644 index 2cbab9ca97..0000000000 Binary files a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.eot and /dev/null differ diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.svg b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.svg deleted file mode 100644 index b36a66a6c4..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - -Generated by Fontastic.me - - - - - - - - - - diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.ttf b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.ttf deleted file mode 100644 index 9d03461b65..0000000000 Binary files a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.ttf and /dev/null differ diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.woff b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.woff deleted file mode 100644 index 8ee99721bb..0000000000 Binary files a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/fonts/slick.woff and /dev/null differ diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick-theme.css b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick-theme.css deleted file mode 100644 index 1232fcab02..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick-theme.css +++ /dev/null @@ -1,204 +0,0 @@ -@charset 'UTF-8'; -/* Slider */ -.slick-loading .slick-list -{ - background: #fff url('./ajax-loader.gif') center center no-repeat; -} - -/* Icons */ -@font-face -{ - font-family: 'slick'; - font-weight: normal; - font-style: normal; - - src: url('./fonts/slick.eot'); - src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg'); -} -/* Arrows */ -.slick-prev, -.slick-next -{ - font-size: 0; - line-height: 0; - - position: absolute; - top: 50%; - - display: block; - - width: 20px; - height: 20px; - padding: 0; - -webkit-transform: translate(0, -50%); - -ms-transform: translate(0, -50%); - transform: translate(0, -50%); - - cursor: pointer; - - color: transparent; - border: none; - outline: none; - background: transparent; -} -.slick-prev:hover, -.slick-prev:focus, -.slick-next:hover, -.slick-next:focus -{ - color: transparent; - outline: none; - background: transparent; -} -.slick-prev:hover:before, -.slick-prev:focus:before, -.slick-next:hover:before, -.slick-next:focus:before -{ - opacity: 1; -} -.slick-prev.slick-disabled:before, -.slick-next.slick-disabled:before -{ - opacity: .25; -} - -.slick-prev:before, -.slick-next:before -{ - font-family: 'slick'; - font-size: 20px; - line-height: 1; - - opacity: .75; - color: white; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.slick-prev -{ - left: -25px; -} -[dir='rtl'] .slick-prev -{ - right: -25px; - left: auto; -} -.slick-prev:before -{ - content: '←'; -} -[dir='rtl'] .slick-prev:before -{ - content: '→'; -} - -.slick-next -{ - right: -25px; -} -[dir='rtl'] .slick-next -{ - right: auto; - left: -25px; -} -.slick-next:before -{ - content: '→'; -} -[dir='rtl'] .slick-next:before -{ - content: '←'; -} - -/* Dots */ -.slick-dotted.slick-slider -{ - margin-bottom: 30px; -} - -.slick-dots -{ - position: absolute; - bottom: -25px; - - display: block; - - width: 100%; - padding: 0; - margin: 0; - - list-style: none; - - text-align: center; -} -.slick-dots li -{ - position: relative; - - display: inline-block; - - width: 20px; - height: 20px; - margin: 0 5px; - padding: 0; - - cursor: pointer; -} -.slick-dots li button -{ - font-size: 0; - line-height: 0; - - display: block; - - width: 20px; - height: 20px; - padding: 5px; - - cursor: pointer; - - color: transparent; - border: 0; - outline: none; - background: transparent; -} -.slick-dots li button:hover, -.slick-dots li button:focus -{ - outline: none; -} -.slick-dots li button:hover:before, -.slick-dots li button:focus:before -{ - opacity: 1; -} -.slick-dots li button:before -{ - font-family: 'slick'; - font-size: 6px; - line-height: 20px; - - position: absolute; - top: 0; - left: 0; - - width: 20px; - height: 20px; - - content: '•'; - text-align: center; - - opacity: .25; - color: black; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.slick-dots li.slick-active button:before -{ - opacity: .75; - color: black; -} diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick-theme.less b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick-theme.less deleted file mode 100644 index 8f1075861f..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick-theme.less +++ /dev/null @@ -1,168 +0,0 @@ -@charset "UTF-8"; - -// Default Variables - -@slick-font-path: "./fonts/"; -@slick-font-family: "slick"; -@slick-loader-path: "./"; -@slick-arrow-color: white; -@slick-dot-color: black; -@slick-dot-color-active: @slick-dot-color; -@slick-prev-character: "←"; -@slick-next-character: "→"; -@slick-dot-character: "•"; -@slick-dot-size: 6px; -@slick-opacity-default: 0.75; -@slick-opacity-on-hover: 1; -@slick-opacity-not-active: 0.25; - -/* Slider */ -.slick-loading .slick-list{ - background: #fff url('@{slick-loader-path}ajax-loader.gif') center center no-repeat; -} - -/* Icons */ -@font-face{ - font-family: 'slick'; - font-weight: normal; - font-style: normal; - - src: url('@{slick-font-path}slick.eot'); - src: url('@{slick-font-path}slick.eot?#iefix') format('embedded-opentype'), url('@{slick-font-path}slick.woff') format('woff'), url('@{slick-font-path}slick.ttf') format('truetype'), url('@{slick-font-path}slick.svg#slick') format('svg'); -} - -/* Arrows */ - -.slick-prev, -.slick-next { - position: absolute; - display: block; - height: 20px; - width: 20px; - line-height: 0px; - font-size: 0px; - cursor: pointer; - background: transparent; - color: transparent; - top: 50%; - -webkit-transform: translate(0, -50%); - -ms-transform: translate(0, -50%); - transform: translate(0, -50%); - padding: 0; - border: none; - outline: none; - &:hover, &:focus { - outline: none; - background: transparent; - color: transparent; - &:before { - opacity: @slick-opacity-on-hover; - } - } - &.slick-disabled:before { - opacity: @slick-opacity-not-active; - } -} - -.slick-prev:before, .slick-next:before { - font-family: @slick-font-family; - font-size: 20px; - line-height: 1; - color: @slick-arrow-color; - opacity: @slick-opacity-default; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.slick-prev { - left: -25px; - &[dir="rtl"] { - left: auto; - right: -25px; - } - &:before { - content: @slick-prev-character; - &[dir="rtl"] { - content: @slick-next-character; - } - } -} - -.slick-next { - right: -25px; - &[dir="rtl"] { - left: -25px; - right: auto; - } - &:before { - content: @slick-next-character; - &[dir="rtl"] { - content: @slick-prev-character; - } - } -} - -/* Dots */ - -.slick-dotted .slick-slider { - margin-bottom: 30px; -} - -.slick-dots { - position: absolute; - bottom: -25px; - list-style: none; - display: block; - text-align: center; - padding: 0; - margin: 0; - width: 100%; - li { - position: relative; - display: inline-block; - height: 20px; - width: 20px; - margin: 0 5px; - padding: 0; - cursor: pointer; - button { - border: 0; - background: transparent; - display: block; - height: 20px; - width: 20px; - outline: none; - line-height: 0px; - font-size: 0px; - color: transparent; - padding: 5px; - cursor: pointer; - &:hover, &:focus { - outline: none; - &:before { - opacity: @slick-opacity-on-hover; - } - } - &:before { - position: absolute; - top: 0; - left: 0; - content: @slick-dot-character; - width: 20px; - height: 20px; - font-family: @slick-font-family; - font-size: @slick-dot-size; - line-height: 20px; - text-align: center; - color: @slick-dot-color; - opacity: @slick-opacity-not-active; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - } - &.slick-active button:before { - color: @slick-dot-color-active; - opacity: @slick-opacity-default; - } - } -} diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick-theme.scss b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick-theme.scss deleted file mode 100644 index 7fe63e107b..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick-theme.scss +++ /dev/null @@ -1,194 +0,0 @@ -@charset "UTF-8"; - -// Default Variables - -// Slick icon entity codes outputs the following -// "\2190" outputs ascii character "←" -// "\2192" outputs ascii character "→" -// "\2022" outputs ascii character "•" - -$slick-font-path: "./fonts/" !default; -$slick-font-family: "slick" !default; -$slick-loader-path: "./" !default; -$slick-arrow-color: white !default; -$slick-dot-color: black !default; -$slick-dot-color-active: $slick-dot-color !default; -$slick-prev-character: "\2190" !default; -$slick-next-character: "\2192" !default; -$slick-dot-character: "\2022" !default; -$slick-dot-size: 6px !default; -$slick-opacity-default: 0.75 !default; -$slick-opacity-on-hover: 1 !default; -$slick-opacity-not-active: 0.25 !default; - -@function slick-image-url($url) { - @if function-exists(image-url) { - @return image-url($url); - } - @else { - @return url($slick-loader-path + $url); - } -} - -@function slick-font-url($url) { - @if function-exists(font-url) { - @return font-url($url); - } - @else { - @return url($slick-font-path + $url); - } -} - -/* Slider */ - -.slick-list { - .slick-loading & { - background: #fff slick-image-url("ajax-loader.gif") center center no-repeat; - } -} - -/* Icons */ -@if $slick-font-family == "slick" { - @font-face { - font-family: "slick"; - src: slick-font-url("slick.eot"); - src: slick-font-url("slick.eot?#iefix") format("embedded-opentype"), slick-font-url("slick.woff") format("woff"), slick-font-url("slick.ttf") format("truetype"), slick-font-url("slick.svg#slick") format("svg"); - font-weight: normal; - font-style: normal; - } -} - -/* Arrows */ - -.slick-prev, -.slick-next { - position: absolute; - display: block; - height: 20px; - width: 20px; - line-height: 0px; - font-size: 0px; - cursor: pointer; - background: transparent; - color: transparent; - top: 50%; - -webkit-transform: translate(0, -50%); - -ms-transform: translate(0, -50%); - transform: translate(0, -50%); - padding: 0; - border: none; - outline: none; - &:hover, &:focus { - outline: none; - background: transparent; - color: transparent; - &:before { - opacity: $slick-opacity-on-hover; - } - } - &.slick-disabled:before { - opacity: $slick-opacity-not-active; - } - &:before { - font-family: $slick-font-family; - font-size: 20px; - line-height: 1; - color: $slick-arrow-color; - opacity: $slick-opacity-default; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } -} - -.slick-prev { - left: -25px; - [dir="rtl"] & { - left: auto; - right: -25px; - } - &:before { - content: $slick-prev-character; - [dir="rtl"] & { - content: $slick-next-character; - } - } -} - -.slick-next { - right: -25px; - [dir="rtl"] & { - left: -25px; - right: auto; - } - &:before { - content: $slick-next-character; - [dir="rtl"] & { - content: $slick-prev-character; - } - } -} - -/* Dots */ - -.slick-dotted.slick-slider { - margin-bottom: 30px; -} - -.slick-dots { - position: absolute; - bottom: -25px; - list-style: none; - display: block; - text-align: center; - padding: 0; - margin: 0; - width: 100%; - li { - position: relative; - display: inline-block; - height: 20px; - width: 20px; - margin: 0 5px; - padding: 0; - cursor: pointer; - button { - border: 0; - background: transparent; - display: block; - height: 20px; - width: 20px; - outline: none; - line-height: 0px; - font-size: 0px; - color: transparent; - padding: 5px; - cursor: pointer; - &:hover, &:focus { - outline: none; - &:before { - opacity: $slick-opacity-on-hover; - } - } - &:before { - position: absolute; - top: 0; - left: 0; - content: $slick-dot-character; - width: 20px; - height: 20px; - font-family: $slick-font-family; - font-size: $slick-dot-size; - line-height: 20px; - text-align: center; - color: $slick-dot-color; - opacity: $slick-opacity-not-active; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - } - &.slick-active button:before { - color: $slick-dot-color-active; - opacity: $slick-opacity-default; - } - } -} diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick.css b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick.css deleted file mode 100644 index dd973fedfd..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick.css +++ /dev/null @@ -1,117 +0,0 @@ -/* Slider */ -.slick-slider -{ - position: relative; - - display: block; - box-sizing: border-box; - - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - -webkit-touch-callout: none; - -khtml-user-select: none; - -ms-touch-action: pan-y; - touch-action: pan-y; - -webkit-tap-highlight-color: transparent; -} - -.slick-list -{ - position: relative; - - display: block; - overflow: hidden; - - margin: 0; - padding: 0; -} -.slick-list:focus -{ - outline: none; -} -.slick-list.dragging -{ - cursor: pointer; - cursor: hand; -} - -.slick-slider .slick-track, -.slick-slider .slick-list -{ - -webkit-transform: translate3d(0, 0, 0); - -moz-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); -} - -.slick-track -{ - position: relative; - top: 0; - left: 0; - - display: block; -} -.slick-track:before, -.slick-track:after -{ - display: table; - - content: ''; -} -.slick-track:after -{ - clear: both; -} -.slick-loading .slick-track -{ - visibility: hidden; -} - -.slick-slide -{ - display: none; - float: left; - - height: 100%; - min-height: 1px; -} -[dir='rtl'] .slick-slide -{ - float: right; -} -.slick-slide img -{ - display: block; -} -.slick-slide.slick-loading img -{ - display: none; -} -.slick-slide.dragging img -{ - pointer-events: none; -} -.slick-initialized .slick-slide -{ - display: block; -} -.slick-loading .slick-slide -{ - visibility: hidden; -} -.slick-vertical .slick-slide -{ - display: block; - - height: auto; - - border: 1px solid transparent; -} -.slick-arrow.slick-hidden { - display: none; -} diff --git a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick.js b/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick.js deleted file mode 100644 index 5394604896..0000000000 --- a/styleguide/source/assets/js/vendor/bower_components/slick-carousel/slick/slick.js +++ /dev/null @@ -1,2892 +0,0 @@ -/* - _ _ _ _ - ___| (_) ___| | __ (_)___ -/ __| | |/ __| |/ / | / __| -\__ \ | | (__| < _ | \__ \ -|___/_|_|\___|_|\_(_)/ |___/ - |__/ - - Version: 1.6.0 - Author: Ken Wheeler - Website: http://kenwheeler.github.io - Docs: http://kenwheeler.github.io/slick - Repo: http://github.com/kenwheeler/slick - Issues: http://github.com/kenwheeler/slick/issues - - */ -/* global window, document, define, jQuery, setInterval, clearInterval */ -(function(factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define(['jquery'], factory); - } else if (typeof exports !== 'undefined') { - module.exports = factory(require('jquery')); - } else { - factory(jQuery); - } - -}(function($) { - 'use strict'; - var Slick = window.Slick || {}; - - Slick = (function() { - - var instanceUid = 0; - - function Slick(element, settings) { - - var _ = this, dataSettings; - - _.defaults = { - accessibility: true, - adaptiveHeight: false, - appendArrows: $(element), - appendDots: $(element), - arrows: true, - asNavFor: null, - prevArrow: '', - nextArrow: '', - autoplay: false, - autoplaySpeed: 3000, - centerMode: false, - centerPadding: '50px', - cssEase: 'ease', - customPaging: function(slider, i) { - return $('',nextArrow:'',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('