# syrup
**Repository Path**: mirrors_allenai/syrup
## Basic Information
- **Project Name**: syrup
- **Description**: A collection of common UI utilities and libraries leveraged by AI2.
- **Primary Language**: Unknown
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-24
- **Last Updated**: 2026-02-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Syrup
A collection of shared UI utilities and libraries leveraged by [AI2](http://github.com/allenai) when developing interfaces.
Specifically, syrup provides:
* A series of [gulp](http://gulpjs.com) tasks for building a single-page client-side application.
* A collection of [less](http://lesscss.org) styles. To see them in action, visit the [demo](http://allenai.github.io/syrup).
## Requirements
* [nodejs](http://nodejs.org) >= 0.12.7 is required.
## Installation
Install via [npm](http://npmjs.org):
```shell
npm install syrup
```
## Gulp
Syrup includes a series of gulp tasks useful for building a single-page client-side application.
The [gulp tasks](#gulp-tasks) provided by syrup can be initialized like so in your `gulpfile.js`:
```javascript
// gulpfile.js
var gulp = require('gulp');
var syrup = require('syrup');
syrup.gulp.init(gulp);
```
A build can then be triggered from the terminal:
```
gulp build
```
Watch your project for changes dynamically and start a static HTTP server for previewing the result:
```
gulp watch-and-serve
```
Read about all of the available [gulp tasks](#gulp-tasks), the default [project structure](#project-structure) or the full API offered by the [`syrup.gulp.init()`](#gulp-init).
## LESS
To include the all of the less styles provide by syrup, simply add the following line to your less stylesheet:
```css
@import '../../node_modules/syrup/less/syrup.less';
```
## Gulp Tasks
Syrup provides the following tasks:
- `clean`
* Removes all build artifacts
* `less`
* Compiles and minifies LESS files to CSS files.
* `jslint`
* Lints JS files using [jshint](https://www.npmjs.com/package/gulp-jshint).
* `js`
* Bundles, minifies and obfuscates `js` files using [browserify](http://browserify.org) into a single, bundled script. Uses [babel](https://babeljs.io/) to provide support for ECMA6 features and [ReactJS](http://reactjs.com).
* `assets`
* Copies all assets into the build directory.
* `html`
* Copies the `index.html` file into the build directory after running the `js`, `assets`, and `less` tasks.
* `build`
* Builds the project by running the `assets`, `jslint`, `js`, `less`, and `html` tasks.
* `watch`
* Watches the project for changes and rebuilds the affected components as they occur.
* `serve`
* Runs an [express](http://expressjs.com) HTTP serving serving the application.
* `watch-and-serve`
* Runs the `watch` and `serve` tasks.
## Default Project Structure
The following project structure is expected by default, but can be changed via the `paths` parameter
of [`syrup.gulp.init()`](#gulp-init):
```javascript
{
// the location of your application's index.html file
html: 'app/index.html',
// the less files which will be watched for changes
allLess: 'app/**/*.less',
// the less entry-point
less: 'app/main.less',
// all js files to be linted using eslint
jsLint: 'app/**/*.js',
// the js entry-point
js: 'app/app.js',
// static assets (images, fonts, etc)
assets: 'app/assets/**/*',
// the location of build output
build: 'build'
}
```
## Gulp API
```javascript
/**
* Registers default gulp tasks.
*
* @param {object} gulp The gulp library.
* @param {object} [options] Optional object definining configuration
* parameters.
* @param {boolean} [options.compressJs=true] If true javascript will be minified.
* Defaults to true. This causes the build
* to become significantly slower.
* @param {boolean} [options.sourceMaps=true] Enables javascript source maps. Defaults
* to true.
* @param {boolean} [options.compressCss=true] If true styles will be compressed.
* Defaults to true.
* @param {boolean} [options.detectGlobals=true] Enables browserify global detection and
* inclusion. This is necessary for certain
* npm packages to work when bundled for
* front-end inclusion. Defaults to true.
* @param {boolean} [options.insertGlobals=false] Enables automatic insertion of node
* globals when preparing a javascript
* bundler. Faster alternative to
* detectGlobals. Causes an extra ~1000
* lines to be added to the bundled
* javascript. Defaults to false.
* @param {boolean} [options.disableJsLint=false] Disables javascript linter. Defaults to false.
* @param {boolean} [options.handleExceptions=false] If an exception is encountered while
* compiling less or bundling javascript,
* capture the associated error and output
* it cleanly. Defaults to false.
* @param {string} [options.jsOut] Overrides the default filename for the
* resulting javascript bundle. If not set
* the javascript file will be the same name
* as the entry point.
* @param {boolean} [options.disableBabel=false] Optionally disable babel, the es6 to es6
* (and react JSX) transpiler.
* See http://babeljs.io for more information.
* @param {boolean} [options.enableStringify=false] Optionally enable stringify, a browserify
* transform that allows HTML files to be
* included via require.
* @param {number} [options.port=4000] Optional port for the HTTP server started
* via the serve task. Defaults to 4000.
* @param {object} [configParameters] Optional map of configuration keys. If
* set each key is searched for in the built
* HTML and replaced with the corresponding
* value.
* @param {object} [paths] Optional object defining paths relevant
* to the project. Any specified paths are
* merged with the defaults where these paths
* take precedence.
* @param {string} paths.base The base directory of your project where
* the gulpfile lives. Defaults to the
* current processes working directory.
* @param {string} paths.html Path to the project's HTML files.
* @param {string} paths.jsLint Path to the javascript files which should
* be linted using eslint.
* @param {string} paths.js Javascript entry point.
* @param {string} paths.allLess Path matching all less files which should
* be watched for changes.
* @param {string} paths.less The less entry-point.
* @param {string} paths.assets Path to the project's static assets.
* @param {string} paths.build Output directory where the build artifacts
* should be placed.
*
* @returns {undefined}
*/
syrup.gulp.init(gulp, options, configParameters, paths)
```