Commit 91413026 by nabil el mahiri

Initial commit

parents
Pipeline #295 failed with stages
in 3 seconds
node_modules
*npm-debug
/logs/*
image: docker
services:
- docker:dind
before_script:
- docker info
- echo $CI_BUILD_REF
- echo $CI_PROJECT_DIR
- echo ${PWD}
stages:
- build
- deploy
build:
stage: build
environment: Production
tags:
- atlasvoyages-prod-runner
only:
- master
script:
- chmod +x sh/run.sh
- docker build -f docker/Dockerfile -t atlasvoyages-docker:prod .
- sh sh/clean.sh
deploy:
stage: deploy
environment: Production
tags:
- atlasvoyages-prod-runner
only:
- master
script:
- chmod +x sh/run.sh
- sh sh/run.sh
- docker run -d -p 9034:80 --name atlasvoyages-docker-prod atlasvoyages-docker:prod
- sh sh/clean.sh
\ No newline at end of file
{"app":{"name":"atlas-voyages"},"dev":{"plugin":""}}
\ No newline at end of file
"use strict";
module.exports = function(grunt) {
var pkg = require('./package.json');
var conf = {
clean: ['logs'],
prompt: {
setup: {
options: {
questions: [{
config: 'app.name',
type: 'list',
message: 'App your working on?',
choices: grunt.file.expand({
filter: 'isDirectory'
}, './apps/*').map(function(d) {
return d.replace('./apps/', '')
})
}, {
config: 'dev.plugin',
type: 'input',
message: 'Module to watch for changes ?',
validate: function(name) {
if (!name) return true;
var dir = grunt.file.expand({
filter: 'isDirectory'
}, './node_modules/' + name);
return dir.length === 1 || (name + " not found in ./node_modules (leave empty to ignore)");
}
}]
}
}
},
watch: {
/*
gruntfile: {
files: "<%= jshint.gruntfile.src %>",
//tasks: ["jshint:gruntfile"]
},
*/
css: {
files: ['node_modules/<%= app.theme %>/public/css/*.css'],
tasks: ['pine:newer:copy:css'],
debounceDelay: 1000,
},
modScripts: {
files: ['node_modules/<%= dev.plugin %>/html/scripts/*.js'],
tasks: ['pine:newer:copy:scripts']
}
},
nodemon: {
dev: {
script: 'index.js',
options: {
args: ['<%= app.name %>'],
watch: [
'node_modules/<%= app.theme %>/templates',
'apps/<%= app.name %>/public/scripts'
],
ext: 'html,js'
}
}
},
bump: {
options: {
commit: true,
commitMessage: grunt.option("message") || 'Release v%VERSION%',
commitFiles: ['-a'], // '-a' for all files
createTag: false,
push: true,
pushTo: 'origin',
}
},
copy: {
css: {
expand: true,
cwd: 'node_modules/<%= app.theme %>/public/css',
src: "*",
dest: 'apps/<%= app.name %>/public/css/'
},
img: {
expand: true,
cwd: 'node_modules/<%= app.theme %>/public/img',
src: ["*"],
dest: './apps/<%= app.name %>/public/img'
},
scripts: {
expand: true,
cwd: 'node_modules/',
src: ["{<%= app.conf.plugins %>}/html/scripts/**/*"],
rename: function(dest, src) {
return dest + src.replace(/^(.+)\/html\/scripts\/(.+)$/, '$1/$2');
},
dest: './apps/<%= app.name %>/public/scripts/'
}
},
concurrent: {
dev: {
tasks: ['pine:nodemon:dev', 'pine:watch'],
options: {
logConcurrentOutput: true
}
}
}
}
grunt.registerTask('pine', function() {
var setup;
try {
setup = grunt.file.readJSON('./.pinedev');
} catch (e) {
grunt.log.error(e);
if (e.origError && e.origError.code === 'ENOENT') {
grunt.fail.warn('You haven\'t set up your pine dev settings. Run grunt pine:setup then retry');
} else {
grunt.fail.warn('Unable to read pine dev settings (.pinedev). Run grunt pine:setup then retry');
throw e;
}
return false;
}
setup.app.dir = process.cwd() + "/apps/" + setup.app.name;
setup.app.conf = require('pine/lib/conf.js')(setup.app.dir);
if (setup.app.conf.html) {
setup.app.theme = setup.app.conf.html.theme;
} else {
delete conf.copy;
delete conf.watch.css;
delete conf.watch.modScripts;
conf.nodemon.dev.options.watch = ['index.js'];
conf.nodemon.dev.options.ext;
conf.nodemon.dev.options.ignore = ['**'];
conf.concurrent.dev.tasks.pop();
}
grunt.config('app', setup.app);
grunt.config('dev', setup.dev);
grunt.log.subhead("Application " + setup.app);
var _task = Array.prototype.slice.call(arguments, 0);
grunt.task.run(_task.join(':'));
});
grunt.registerTask('pine:setupSave', function() {
var pineSetup = {
'app': grunt.config('app'),
'dev': grunt.config('dev')
}
console.log(pineSetup);
grunt.file.write('./.pinedev', JSON.stringify(pineSetup));
});
grunt.registerTask('pine:setup', ['prompt', 'pine:setupSave']);
grunt.registerTask('serve', ['concurrent:dev'])
require('load-grunt-tasks')(grunt);
//require('./grunt/sync-versions.js')(grunt);
// Project configuration.
grunt.initConfig(conf);
};
\ No newline at end of file
# One code base multiple apps
# Install
```
cd [your-workspace]
# clone pine-server
git clone git@labs.fractalite.com:pine/pine-server.git
cd pine-server
npm install
# clone an app
cd apps
git clone git@labs.fractalite.com:webapps/atlas-incoming.git
# continue if app has html ui
# install theme
cd [your-workspace]/pine-server
npm install $theme-name
# copy browser scripts from modules to apps/atlasincoming
# copy css from theme to apps/atlasincoming/public
# copy img from theme to apps/atlasincoming/public
cd <your-workspace>/pine-server
grunt pine --app atlasincoming
```
# Create an app
```
cd [your-workspace]/pine-server/apps
mkdir yourapp
mkdir yourapp/etc
touch yourapp/etc/conf.json
touch yourapp/etc/conf.dev.json
touch yourapp/etc/conf.stage.json
touch yourapp/etc/conf.prod.json
mkdir yourapp/etc/nginx
mkdir yourapp/public
touch yourapp/robots.txt
```
## add nginx config
### 1. Copy sample conf
```
cd [your-workspace]/pine-server
cp etc/nginx.sample.conf apps/yourapp/etc/nginx/nginx.dev.conf
```
### 2. Edit
```
vim apps/yourapp/etc/nginx/nginx.dev.conf
```
change $public var to:
```
set $public _your-workspace_/pine-server/apps/yourapp/public;
```
change upstream name and port (the same as in conf.json#http.port)
when binding express to a unix socket use nginx's unix:path/to/socket syntax
```
upstream node_[yourappname] {
server 127.0.0.1:[express-port];
}
```
change the vhost port (the port nginx will listen on, must be different from upstream port)
```
server {
listen [port];
server_name localhost;
```
change the proxy_pass under ``location /`` so as it points to you upstream
```
proxy_pass http://node_[yourappname];
```
\ No newline at end of file
atlas-voyages @ 6e2cfc3b
Subproject commit 6e2cfc3b74c9fa793df8c9fe2dbf395ebfc728af
{
"name": "angular-ui-select",
"homepage": "https://github.com/angular-ui/ui-select",
"authors": [
"AngularUI"
],
"description": "AngularJS ui-select",
"main": [
"dist/select.js",
"dist/select.css"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"src",
"test",
"gulpfile.js",
"karma.conf.js",
"examples"
],
"dependencies": {
"angular": ">=1.2.18"
},
"devDependencies": {
"jquery": "~1.11",
"angular-sanitize": ">=1.2.18",
"angular-mocks": ">=1.2.18"
},
"version": "0.19.6",
"_release": "0.19.6",
"_resolution": {
"type": "version",
"tag": "v0.19.6",
"commit": "9b85d97b07da651aa5ba76ae9e50325d3587c9f6"
},
"_source": "https://github.com/angular-ui/ui-select.git",
"_target": "~0.19.6",
"_originalSource": "angular-ui-select",
"_direct": true
}
\ No newline at end of file
We are excited to have you working on the project and cordially request that you follow the Guidelines:
- [Got a question or problem?](#question)
- [You think you've found a bug?](#bug)
- [Code Style Guidelines](#rules)
- [Commit Message Guidelines](#commit)
## <a name="question"></a> Got a question or problem?
Firstly, please go over our FAQ: https://github.com/angular-ui/ui-select/wiki/FAQs
Please, do not open issues for the general support questions as we want to keep GitHub issues for bug reports and feature requests. You've got much better chances of getting your question answered on [StackOverflow](http://stackoverflow.com/questions/tagged/angular-ui-select) where maintainers are looking at questions tagged with `angular-ui-select`.
StackOverflow is a much better place to ask questions since:
* there are hundreds of people willing to help on StackOverflow
* questions and answers stay available for public viewing so your question / answer might help someone else
* SO voting system assures that the best answers are prominently visible.
To save your and our time we will be systematically closing all the issues that are requests for general support and redirecting people to StackOverflow.
## <a name="bug"></a> You think you've found a bug?
Oh, we are ashamed and want to fix it asap! But before fixing a bug we need to reproduce and confirm it. In order to reproduce bugs we will systematically ask you to provide a _minimal_ reproduce scenario using http://plnkr.co/. Having a live reproduce scenario gives us wealth of important information without going back & forth to you with additional questions like:
* version of AngularJS used
* version of this library that you are using
* 3rd-party libraries used, if any
* and most importantly - a use-case that fails
A minimal reproduce scenario using http://plnkr.co/ allows us to quickly confirm a bug (or point out coding problem) as well as confirm that we are fixing the right problem.
We will be insisting on a minimal reproduce scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience users often find coding problems themselves while preparing a minimal plunk. We understand that sometimes it might be hard to extract essentials bits of code from a larger code-base but we really need to isolate the problem before we can fix it.
The best part is that you don't need to create plunks from scratch - you can use one from our [demo page](http://plnkr.co/edit/a3KlK8dKH3wwiiksDSn2?p=preview).
Unfortunately we are not able to investigate / fix bugs without a minimal reproduce scenario using http://plnkr.co/, so if we don't hear back from you we are going to close an issue that don't have enough info to be reproduced.
## <a name="rules"></a> Coding Rules
To ensure consistency throughout the source code, keep these rules in mind as you are working:
* All features or bug fixes **must pass all tests** (run `gulp` to jshint, build and test).
* All public API methods **must be documented** with ngdoc, an extended version of jsdoc (we added
support for markdown and templating via @ngdoc tag). To see how we document our APIs, please check
out the existing ngdocs and see [this wiki page][ngDocs].
## <a name="commit"></a> Git Commit Guidelines
We have very precise rules over how our git commit messages can be formatted for maintenance of the changelog and semvar versioning. This leads to **more
readable messages** that are easy to follow when looking through the **project history**. But also,
we use the git commit messages to **generate the change log**.
## Development
### Prepare your environment
* Install [Node.js](http://nodejs.org/) and NPM (should come with)
* Install global dev dependencies: `npm install -g bower gulp`
* Install local dev dependencies: `npm install && bower install` in repository directory
### Development Commands
* `gulp` to jshint, build and test
* `gulp build` to jshint and build
* `gulp test` for one-time test with karma (also build and jshint)
* `gulp watch` to watch src files to jshint, build and test when changed
## Recommended workflow
1. Make changes
2. Run `gulp` or `gulp test` to run Karma tests and ensure they pass.
3. Reset all `dist/*` files
4. Commit changes using the commit message conventions below.
5. Push
6. Create PR
### Commit Message Format
Each commit message consists of a **header**, a **body** and a **footer**. The header has a special
format that includes a **type**, a **scope** and a **subject**:
```
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
```
The **header** is mandatory and the **scope** of the header is optional.
Any line of the commit message cannot be longer 100 characters! This allows the message to be easier
to read on GitHub as well as in various git tools.
### Revert
If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. In the body it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
### Type
Must be one of the following:
* **feat**: A new feature
* **fix**: A bug fix
* **docs**: Documentation only changes
* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing
semi-colons, etc)
* **refactor**: A code change that neither fixes a bug nor adds a feature
* **perf**: A code change that improves performance
* **test**: Adding missing tests
* **chore**: Changes to the build process or auxiliary tools and libraries such as documentation
generation
### Scope
The scope could be anything specifying place of the commit change. For example `$location`,
`$browser`, `$compile`, `$rootScope`, `ngHref`, `ngClick`, `ngView`, etc...
### Subject
The subject contains succinct description of the change:
* use the imperative, present tense: "change" not "changed" nor "changes"
* don't capitalize first letter
* no dot (.) at the end
### Body
Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
The body should include the motivation for the change and contrast this with previous behavior.
### Footer
The footer should contain any information about **Breaking Changes** and is also the place to
reference github issues that this commit **Closes**.
**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.
#### Examples
Appears under "Features" header, pencil subheader:
```
feat(pencil): add 'graphiteWidth' option
```
Appears under "Bug Fixes" header, graphite subheader, with a link to issue #GSNP-28:
```
fix(graphite): stop graphite breaking when width < 0.1
Closes #123
```
Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation:
```
perf(pencil): remove graphiteWidth option
BREAKING CHANGE: The graphiteWidth option has been removed. The default graphite width of 10mm is always used for performance reason.
```
The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header.
```
revert: feat(pencil): add 'graphiteWidth' option
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
```
A detailed explanation can be found in this [document][https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#].
The MIT License (MIT)
Copyright (c) 2013-2014 AngularUI
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.
# AngularJS ui-select [![Build Status](https://travis-ci.org/angular-ui/ui-select.svg?branch=master)](https://travis-ci.org/angular-ui/ui-select) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/angular-ui/ui-select?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
AngularJS-native version of [Select2](http://ivaynberg.github.io/select2/) and [Selectize](http://brianreavis.github.io/selectize.js/). [http://angular-ui.github.io/ui-select/](http://angular-ui.github.io/ui-select/)
[Getting Started](https://github.com/angular-ui/ui-select/wiki/Getting-Started)
- [Examples](http://angular-ui.github.io/ui-select/#examples)
- [Examples Source](./docs/examples)
- [Documentation](https://github.com/angular-ui/ui-select/wiki)
## Latest Changes
- Check [CHANGELOG.md](/CHANGELOG.md)
## Features
- Search, Select, Multi-select and Tagging
- Multiple Themes: Bootstrap, Select2 and Selectize
- Keyboard support
- No jQuery required (except for old browsers)
- Small code base: 4.57KB min/gzipped vs 20KB for select2
For the roadmap, check [issue #3](https://github.com/angular-ui/ui-select/issues/3) and the [Wiki page](https://github.com/angular-ui/ui-select/wiki/Roadmap).
## Installation Methods
### npm
```
$ npm install ui-select
```
### bower
```
$ bower install angular-ui-select
```
## Development
### Prepare your environment
* Install [Node.js](http://nodejs.org/) and NPM (should come with)
* Install global dev dependencies: `npm install -g gulp`
* Install local dev dependencies: `npm install` in repository directory
### Development Commands
* `gulp` to jshint, build and test
* `gulp build` to jshint and build
* `gulp test` for one-time test with karma (also build and jshint)
* `gulp watch` to watch src files to jshint, build and test when changed
* `gulp docs` build docs and examples
## Contributing
- Check [CONTRIBUTING.md](/CONTRIBUTING.md)
- Run the tests
- Try the [examples](./docs/examples)
When issuing a pull request, please exclude changes from the "dist" folder to avoid merge conflicts.
{
"name": "angular-ui-select",
"homepage": "https://github.com/angular-ui/ui-select",
"authors": [
"AngularUI"
],
"description": "AngularJS ui-select",
"main": [
"dist/select.js",
"dist/select.css"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"src",
"test",
"gulpfile.js",
"karma.conf.js",
"examples"
],
"dependencies": {
"angular": ">=1.2.18"
},
"devDependencies": {
"jquery": "~1.11",
"angular-sanitize": ">=1.2.18",
"angular-mocks": ">=1.2.18"
}
}
{
"name": "components/ui-select",
"description": "AngularJS UI Select",
"keywords": ["angular", "angular-ui", "select", "select2", "angularjs"],
"type": "component",
"homepage": "https://github.com/angular-ui/ui-select",
"license": "MIT",
"support": {
"issues": "https://github.com/angular-ui/ui-select/issues",
"wiki": "https://github.com/angular-ui/ui-select/wiki",
"source": "https://github.com/angular-ui/ui-select"
},
"require": {
"robloach/component-installer": "*"
},
"extra": {
"component": {
"scripts": [
"dist/select.js"
],
"files": [
"dist/select.js",
"dist/select.css",
"dist/select.min.js",
"dist/select.min.css"
]
}
}
}
\ No newline at end of file
#!/bin/bash
set -e
[[ $TRAVIS_SECURE_ENV_VARS == "true" ]] || { echo "No github key avaliable, aborting publishing"; exit 0; }
ID_REF="$(git rev-parse --short HEAD)"
git clone "https://${GH_KEY}@${GH_REF}" ./docs-out -b ${GH_PAGES_BRANCH} --single-branch --depth=1
cd docs-out
# clear out everything
git rm -rf .
git clean -fxd
# get new content
cp ../docs-built/* . -R
git add .
# inside this git repo we'll pretend to be a new user
git config user.name "Travis CI"
git config user.email "travisci@users.noreply.github.com"
# The first and only commit to this new Git repo contains all the
# files present with the commit message "Deploy to GitHub Pages".
git commit -m "docs(*): new deploy (angular-ui/ui-select@${ID_REF})"
git push origin --quiet
#> /dev/null 2>&1
/*!
* ui-select
* http://github.com/angular-ui/ui-select
* Version: 0.19.5 - 2016-10-24T23:13:59.551Z
* License: MIT
*/
/* Style when highlighting a search. */
.ui-select-highlight {
font-weight: bold;
}
.ui-select-offscreen {
clip: rect(0 0 0 0) !important;
width: 1px !important;
height: 1px !important;
border: 0 !important;
margin: 0 !important;
padding: 0 !important;
overflow: hidden !important;
position: absolute !important;
outline: 0 !important;
left: 0px !important;
top: 0px !important;
}
.ui-select-choices-row:hover {
background-color: #f5f5f5;
}
/* Select2 theme */
/* Mark invalid Select2 */
.ng-dirty.ng-invalid > a.select2-choice {
border-color: #D44950;
}
.select2-result-single {
padding-left: 0;
}
.select2-locked > .select2-search-choice-close{
display:none;
}
.select-locked > .ui-select-match-close{
display:none;
}
body > .select2-container.open {
z-index: 9999; /* The z-index Select2 applies to the select2-drop */
}
/* Handle up direction Select2 */
.ui-select-container[theme="select2"].direction-up .ui-select-match,
.ui-select-container.select2.direction-up .ui-select-match {
border-radius: 4px; /* FIXME hardcoded value :-/ */
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.ui-select-container[theme="select2"].direction-up .ui-select-dropdown,
.ui-select-container.select2.direction-up .ui-select-dropdown {
border-radius: 4px; /* FIXME hardcoded value :-/ */
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
border-top-width: 1px; /* FIXME hardcoded value :-/ */
border-top-style: solid;
box-shadow: 0 -4px 8px rgba(0, 0, 0, 0.25);
margin-top: -4px; /* FIXME hardcoded value :-/ */
}
.ui-select-container[theme="select2"].direction-up .ui-select-dropdown .select2-search,
.ui-select-container.select2.direction-up .ui-select-dropdown .select2-search {
margin-top: 4px; /* FIXME hardcoded value :-/ */
}
.ui-select-container[theme="select2"].direction-up.select2-dropdown-open .ui-select-match,
.ui-select-container.select2.direction-up.select2-dropdown-open .ui-select-match {
border-bottom-color: #5897fb;
}
.ui-select-container[theme="select2"] .ui-select-dropdown .ui-select-search-hidden,
.ui-select-container[theme="select2"] .ui-select-dropdown .ui-select-search-hidden input{
opacity: 0;
height: 0;
min-height: 0;
padding: 0;
margin: 0;
border:0;
}
/* Selectize theme */
/* Helper class to show styles when focus */
.selectize-input.selectize-focus{
border-color: #007FBB !important;
}
/* Fix input width for Selectize theme */
.selectize-control.single > .selectize-input > input {
width: 100%;
}
/* Fix line break when there's at least one item selected with the Selectize theme */
.selectize-control.multi > .selectize-input > input {
margin: 0 !important;
}
/* Fix dropdown width for Selectize theme */
.selectize-control > .selectize-dropdown {
width: 100%;
}
/* Mark invalid Selectize */
.ng-dirty.ng-invalid > div.selectize-input {
border-color: #D44950;
}
/* Handle up direction Selectize */
.ui-select-container[theme="selectize"].direction-up .ui-select-dropdown {
box-shadow: 0 -4px 8px rgba(0, 0, 0, 0.25);
margin-top: -2px; /* FIXME hardcoded value :-/ */
}
.ui-select-container[theme="selectize"] input.ui-select-search-hidden{
opacity: 0;
height: 0;
min-height: 0;
padding: 0;
margin: 0;
border:0;
width: 0;
}
/* Bootstrap theme */
/* Helper class to show styles when focus */
.btn-default-focus {
color: #333;
background-color: #EBEBEB;
border-color: #ADADAD;
text-decoration: none;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.ui-select-bootstrap .ui-select-toggle {
position: relative;
}
.ui-select-bootstrap .ui-select-toggle > .caret {
position: absolute;
height: 10px;
top: 50%;
right: 10px;
margin-top: -2px;
}
/* Fix Bootstrap dropdown position when inside a input-group */
.input-group > .ui-select-bootstrap.dropdown {
/* Instead of relative */
position: static;
}
.input-group > .ui-select-bootstrap > input.ui-select-search.form-control {
border-radius: 4px; /* FIXME hardcoded value :-/ */
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group > .ui-select-bootstrap > input.ui-select-search.form-control.direction-up {
border-radius: 4px !important; /* FIXME hardcoded value :-/ */
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
.ui-select-bootstrap .ui-select-search-hidden{
opacity: 0;
height: 0;
min-height: 0;
padding: 0;
margin: 0;
border:0;
}
.ui-select-bootstrap > .ui-select-match > .btn{
/* Instead of center because of .btn */
text-align: left !important;
}
.ui-select-bootstrap > .ui-select-match > .caret {
position: absolute;
top: 45%;
right: 15px;
}
/* See Scrollable Menu with Bootstrap 3 http://stackoverflow.com/questions/19227496 */
.ui-select-bootstrap > .ui-select-choices ,.ui-select-bootstrap > .ui-select-no-choice {
width: 100%;
height: auto;
max-height: 200px;
overflow-x: hidden;
margin-top: -1px;
}
body > .ui-select-bootstrap.open {
z-index: 1000; /* Standard Bootstrap dropdown z-index */
}
.ui-select-multiple.ui-select-bootstrap {
height: auto;
padding: 3px 3px 0 3px;
}
.ui-select-multiple.ui-select-bootstrap input.ui-select-search {
background-color: transparent !important; /* To prevent double background when disabled */
border: none;
outline: none;
height: 1.666666em;
margin-bottom: 3px;
}
.ui-select-multiple.ui-select-bootstrap .ui-select-match .close {
font-size: 1.6em;
line-height: 0.75;
}
.ui-select-multiple.ui-select-bootstrap .ui-select-match-item {
outline: 0;
margin: 0 3px 3px 0;
}
.ui-select-multiple .ui-select-match-item {
position: relative;
}
.ui-select-multiple .ui-select-match-item.dropping .ui-select-match-close {
pointer-events: none;
}
.ui-select-multiple:hover .ui-select-match-item.dropping-before:before {
content: "";
position: absolute;
top: 0;
right: 100%;
height: 100%;
margin-right: 2px;
border-left: 1px solid #428bca;
}
.ui-select-multiple:hover .ui-select-match-item.dropping-after:after {
content: "";
position: absolute;
top: 0;
left: 100%;
height: 100%;
margin-left: 2px;
border-right: 1px solid #428bca;
}
.ui-select-bootstrap .ui-select-choices-row>span {
cursor: pointer;
display: block;
padding: 3px 20px;
clear: both;
font-weight: 400;
line-height: 1.42857143;
color: #333;
white-space: nowrap;
}
.ui-select-bootstrap .ui-select-choices-row>span:hover, .ui-select-bootstrap .ui-select-choices-row>span:focus {
text-decoration: none;
color: #262626;
background-color: #f5f5f5;
}
.ui-select-bootstrap .ui-select-choices-row.active>span {
color: #fff;
text-decoration: none;
outline: 0;
background-color: #428bca;
}
.ui-select-bootstrap .ui-select-choices-row.disabled>span,
.ui-select-bootstrap .ui-select-choices-row.active.disabled>span {
color: #777;
cursor: not-allowed;
background-color: #fff;
}
/* fix hide/show angular animation */
.ui-select-match.ng-hide-add,
.ui-select-search.ng-hide-add {
display: none !important;
}
/* Mark invalid Bootstrap */
.ui-select-bootstrap.ng-dirty.ng-invalid > button.btn.ui-select-match {
border-color: #D44950;
}
/* Handle up direction Bootstrap */
.ui-select-container[theme="bootstrap"].direction-up .ui-select-dropdown {
box-shadow: 0 -4px 8px rgba(0, 0, 0, 0.25);
}
.ui-select-bootstrap .ui-select-match-text {
width: 100%;
padding-right: 1em;
}
.ui-select-bootstrap .ui-select-match-text span {
display: inline-block;
width: 100%;
overflow: hidden;
}
.ui-select-bootstrap .ui-select-toggle > a.btn {
position: absolute;
height: 10px;
right: 10px;
margin-top: -2px;
}
/* Spinner */
.ui-select-refreshing {
position: absolute;
right: 0;
padding: 8px 27px;
top: 1px;
display: inline-block;
font-family: 'Glyphicons Halflings';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing:antialiased;
}
@-webkit-keyframes ui-select-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
@keyframes ui-select-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
.ui-select-spin {
-webkit-animation: ui-select-spin 2s infinite linear;
animation: ui-select-spin 2s infinite linear;
}
.ui-select-refreshing.ng-animate {
-webkit-animation: none 0s;
}
\ No newline at end of file
/*!
* ui-select
* http://github.com/angular-ui/ui-select
* Version: 0.19.5 - 2016-10-24T23:13:59.551Z
* License: MIT
*/.ui-select-highlight{font-weight:700}.ui-select-offscreen{clip:rect(0 0 0 0)!important;width:1px!important;height:1px!important;border:0!important;margin:0!important;padding:0!important;overflow:hidden!important;position:absolute!important;outline:0!important;left:0!important;top:0!important}.selectize-control.single>.selectize-input>input,.selectize-control>.selectize-dropdown{width:100%}.ui-select-choices-row:hover{background-color:#f5f5f5}.ng-dirty.ng-invalid>a.select2-choice{border-color:#D44950}.select2-result-single{padding-left:0}.select-locked>.ui-select-match-close,.select2-locked>.select2-search-choice-close{display:none}body>.select2-container.open{z-index:9999}.ui-select-container.select2.direction-up .ui-select-match,.ui-select-container[theme=select2].direction-up .ui-select-match{border-radius:0 0 4px 4px}.ui-select-container.select2.direction-up .ui-select-dropdown,.ui-select-container[theme=select2].direction-up .ui-select-dropdown{border-radius:4px 4px 0 0;border-top-width:1px;border-top-style:solid;box-shadow:0 -4px 8px rgba(0,0,0,.25);margin-top:-4px}.ui-select-container.select2.direction-up .ui-select-dropdown .select2-search,.ui-select-container[theme=select2].direction-up .ui-select-dropdown .select2-search{margin-top:4px}.ui-select-container.select2.direction-up.select2-dropdown-open .ui-select-match,.ui-select-container[theme=select2].direction-up.select2-dropdown-open .ui-select-match{border-bottom-color:#5897fb}.ui-select-container[theme=select2] .ui-select-dropdown .ui-select-search-hidden,.ui-select-container[theme=select2] .ui-select-dropdown .ui-select-search-hidden input{opacity:0;height:0;min-height:0;padding:0;margin:0;border:0}.selectize-input.selectize-focus{border-color:#007FBB!important}.selectize-control.multi>.selectize-input>input{margin:0!important}.ng-dirty.ng-invalid>div.selectize-input{border-color:#D44950}.ui-select-container[theme=selectize].direction-up .ui-select-dropdown{box-shadow:0 -4px 8px rgba(0,0,0,.25);margin-top:-2px}.ui-select-container[theme=selectize] input.ui-select-search-hidden{opacity:0;height:0;min-height:0;padding:0;margin:0;border:0;width:0}.btn-default-focus{color:#333;background-color:#EBEBEB;border-color:#ADADAD;text-decoration:none;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.ui-select-bootstrap .ui-select-toggle{position:relative}.ui-select-bootstrap .ui-select-toggle>.caret{position:absolute;height:10px;top:50%;right:10px;margin-top:-2px}.input-group>.ui-select-bootstrap.dropdown{position:static}.input-group>.ui-select-bootstrap>input.ui-select-search.form-control{border-radius:4px 0 0 4px}.input-group>.ui-select-bootstrap>input.ui-select-search.form-control.direction-up{border-radius:4px 0 0 4px!important}.ui-select-bootstrap .ui-select-search-hidden{opacity:0;height:0;min-height:0;padding:0;margin:0;border:0}.ui-select-bootstrap>.ui-select-match>.btn{text-align:left!important}.ui-select-bootstrap>.ui-select-match>.caret{position:absolute;top:45%;right:15px}.ui-select-bootstrap>.ui-select-choices,.ui-select-bootstrap>.ui-select-no-choice{width:100%;height:auto;max-height:200px;overflow-x:hidden;margin-top:-1px}body>.ui-select-bootstrap.open{z-index:1000}.ui-select-multiple.ui-select-bootstrap{height:auto;padding:3px 3px 0}.ui-select-multiple.ui-select-bootstrap input.ui-select-search{background-color:transparent!important;border:none;outline:0;height:1.666666em;margin-bottom:3px}.ui-select-multiple.ui-select-bootstrap .ui-select-match .close{font-size:1.6em;line-height:.75}.ui-select-multiple.ui-select-bootstrap .ui-select-match-item{outline:0;margin:0 3px 3px 0}.ui-select-multiple .ui-select-match-item{position:relative}.ui-select-multiple .ui-select-match-item.dropping .ui-select-match-close{pointer-events:none}.ui-select-multiple:hover .ui-select-match-item.dropping-before:before{content:"";position:absolute;top:0;right:100%;height:100%;margin-right:2px;border-left:1px solid #428bca}.ui-select-multiple:hover .ui-select-match-item.dropping-after:after{content:"";position:absolute;top:0;left:100%;height:100%;margin-left:2px;border-right:1px solid #428bca}.ui-select-bootstrap .ui-select-choices-row>span{cursor:pointer;display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.ui-select-bootstrap .ui-select-choices-row>span:focus,.ui-select-bootstrap .ui-select-choices-row>span:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.ui-select-bootstrap .ui-select-choices-row.active>span{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.ui-select-bootstrap .ui-select-choices-row.active.disabled>span,.ui-select-bootstrap .ui-select-choices-row.disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.ui-select-match.ng-hide-add,.ui-select-search.ng-hide-add{display:none!important}.ui-select-bootstrap.ng-dirty.ng-invalid>button.btn.ui-select-match{border-color:#D44950}.ui-select-container[theme=bootstrap].direction-up .ui-select-dropdown{box-shadow:0 -4px 8px rgba(0,0,0,.25)}.ui-select-bootstrap .ui-select-match-text{width:100%;padding-right:1em}.ui-select-bootstrap .ui-select-match-text span{display:inline-block;width:100%;overflow:hidden}.ui-select-bootstrap .ui-select-toggle>a.btn{position:absolute;height:10px;right:10px;margin-top:-2px}.ui-select-refreshing{position:absolute;right:0;padding:8px 27px;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased}@-webkit-keyframes ui-select-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes ui-select-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.ui-select-spin{-webkit-animation:ui-select-spin 2s infinite linear;animation:ui-select-spin 2s infinite linear}.ui-select-refreshing.ng-animate{-webkit-animation:none 0s}
/*# sourceMappingURL=select.min.css.map */
This source diff could not be displayed because it is too large. You can view the blob instead.
var module = angular.module('ui.select.pages', ['plunkr']);
/*
Taken from angular-ui/bootstrap
See https://github.com/angular-ui/bootstrap/blob/master/misc/demo/assets/demo.css
*/
body {
opacity: 1;
-webkit-transition: opacity 1s ease;
-moz-transition: opacity 1s ease;
transition: opacity 1s;
}
.ng-cloak {
opacity: 0;
}
.ng-invalid {
border: 1px solid red !important;
}
section {
padding-top: 30px;
}
.page-header h1 > small > a {
color: #999;
}
.page-header h1 > small > a:hover {
text-decoration: none;
}
.footer {
text-align: center;
padding: 30px 0;
margin-top: 70px;
border-top: 1px solid #e5e5e5;
background-color: #f5f5f5;
}
.bs-social {
margin-top: 20px;
margin-bottom: 20px;
text-align: center;
}
@media (min-width: 768px) {
.bs-social {
text-align: left;
}
}
.nav, .pagination, .carousel, .panel-title a {
cursor: pointer;
}
.bs-social-buttons {
display: inline-block;
margin-bottom: 0;
padding-left: 0;
list-style: none;
}
.bs-social-buttons li {
display: inline-block;
padding: 5px 8px;
line-height: 1;
}
@media (max-width: 767px) {
.visible-xs.collapse.in {
display: block !important;
}
.visible-xs.collapse {
display: none !important;
}
}
.navbar .collapse {
border-top: 1px solid #e7e7e7;
margin-left: -15px;
margin-right: -15px;
padding-right: 15px;
padding-left: 15px;
}
.show-grid {
margin-bottom: 15px;
}
/*
* Container
*
* Tweak to width of container.
*/
/*@media (min-width: 1200px) {
.container{
max-width: 970px;
}
}*/
/*
* Tabs
*
* Tweaks to the Tabs.
*/
.code .nav-tabs {
border-bottom: 1px solid #ccc;
}
.code pre, .code code {
border-top: none;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.code .nav-tabs > li.active > a, .code .nav-tabs > li.active > a:hover, .code .nav-tabs > li.active > a:focus {
background-color: #f8f8f8;
border: 1px solid #ccc;
border-bottom-color: transparent;
}
/*
* Button Inverse
*
* Buttons in the masthead.
*/
.btn-outline-inverse {
color: #fff;
background-color: transparent;
border-color: #cdbfe3;
margin: 10px;
}
@media (min-width: 768px) {
.btn-outline-inverse {
width: auto;
margin: 20px 5px 20px 0;
padding: 18px 24px;
font-size: 21px;
}
}
.btn-outline-inverse:hover, .btn-outline-inverse:focus, .btn-outline-inverse:active {
color: #563d7c;
text-shadow: none;
background-color: #fff;
border-color: #fff;
}
/* Page headers */
.bs-header {
padding: 30px 15px 40px; /* side padding builds on .container 15px, so 30px */
font-size: 16px;
text-align: center;
text-shadow: 0 1px 0 rgba(0,0,0,.15);
color: #cdbfe3;
background-color: #563d7c;
}
.bs-header a {
color: #fff;
font-weight: normal;
}
.bs-header h1 {
color: #fff;
}
.bs-header p {
font-weight: 200;
line-height: 1.4;
}
.bs-header .container {
position: relative;
}
@media (min-width: 768px) {
.bs-header {
font-size: 30px;
text-align: left;
}
.bs-header h1 {
font-size: 100px;
line-height: 1;
}
}
@media (min-width: 992px) {
.bs-header p {
margin-right: 25%;
}
}
.navbar-inner {
-webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.175);
box-shadow: 0 3px 3px rgba(0,0,0,0.175);
}
/*
* Side navigation
*
* Scrollspy and affixed enhanced navigation to highlight sections and secondary
* sections of docs content.
*/
/* By default it's not affixed in mobile views, so undo that */
.bs-sidebar.affix {
position: static;
}
/* First level of nav */
.bs-sidenav {
margin-top: 30px;
margin-bottom: 30px;
padding-top: 10px;
padding-bottom: 10px;
text-shadow: 0 1px 0 #fff;
background-color: #f7f5fa;
border-radius: 5px;
}
/* All levels of nav */
.bs-sidebar .nav > li > a {
display: block;
color: #716b7a;
padding: 5px 20px;
}
.bs-sidebar .nav > li > a:hover,
.bs-sidebar .nav > li > a:focus {
text-decoration: none;
background-color: #e5e3e9;
border-right: 1px solid #dbd8e0;
}
.bs-sidebar .nav > .active > a,
.bs-sidebar .nav > .active:hover > a,
.bs-sidebar .nav > .active:focus > a {
font-weight: bold;
color: #563d7c;
background-color: transparent;
border-right: 1px solid #563d7c;
}
/* Nav: second level (shown on .active) */
.bs-sidebar .nav .nav {
display: none; /* Hide by default, but at >768px, show it */
margin-bottom: 8px;
}
.bs-sidebar .nav .nav > li > a {
padding-top: 3px;
padding-bottom: 3px;
padding-left: 30px;
font-size: 90%;
}
/* Show and affix the side nav when space allows it */
@media (min-width: 992px) {
.bs-sidebar .nav > .active > ul {
display: block;
}
/* Widen the fixed sidebar */
.bs-sidebar.affix,
.bs-sidebar.affix-bottom {
width: 213px;
}
.bs-sidebar.affix {
position: fixed; /* Undo the static from mobile first approach */
top: 80px;
}
.bs-sidebar.affix-bottom {
position: absolute; /* Undo the static from mobile first approach */
}
.bs-sidebar.affix-bottom .bs-sidenav,
.bs-sidebar.affix .bs-sidenav {
margin-top: 0;
margin-bottom: 0;
}
}
@media (min-width: 1200px) {
/* Widen the fixed sidebar again */
.bs-sidebar.affix-bottom,
.bs-sidebar.affix {
width: 263px;
}
}
/* Not enough room on mobile for markup tab, js tab, and plunk btn.
And no one cares about plunk button on a phone anyway */
@media only screen and (max-device-width: 480px) {
#plunk-btn {
display: none;
}
}
.navbar-nav .dropdown .navbar-brand {
max-width: 100%;
margin-right: inherit;
margin-left: inherit;
}
.header-placeholder {
height: 50px;
}
@media screen and (min-width: 768px) {
.dropdown.open > .navbar-brand + .dropdown-menu {
left: 10px;
}
.header-placeholder {
height: 50px;
}
.navbar-nav .dropdown .navbar-brand {
max-width: 200px;
margin-right: 5px;
margin-left: 10px;
}
}
angular.module('plunkr', [])
.factory('formPostData', ['$document', function ($document) {
return function (url, newWindow, fields) {
/**
* If the form posts to target="_blank", pop-up blockers can cause it not to work.
* If a user choses to bypass pop-up blocker one time and click the link, they will arrive at
* a new default plnkr, not a plnkr with the desired template. Given this undesired behavior,
* some may still want to open the plnk in a new window by opting-in via ctrl+click. The
* newWindow param allows for this possibility.
*/
var target = newWindow ? '_blank' : '_self';
var form = angular.element('<form style="display: none;" method="post" action="' + url + '" target="' + target + '"></form>');
angular.forEach(fields, function (value, name) {
var input = angular.element('<input type="hidden" name="' + name + '">');
input.attr('value', value);
form.append(input);
});
$document.find('body').append(form);
form[0].submit();
form.remove();
};
}])
.directive('plnkrOpener', ['$q', 'getExampleData', 'formPostData', function ($q, getExampleData, formPostData) {
return {
scope: {},
bindToController: {
'examplePath': '@'
},
controllerAs: 'plnkr',
template: '<button ng-click="plnkr.open($event)" class="btn btn-info btn-sm plunk-btn"> <i class="glyphicon glyphicon-edit">&nbsp;</i> Edit in Plunker</button> ',
controller: [function () {
var ctrl = this;
ctrl.prepareExampleData = function (examplePath) {
if (ctrl.prepared) {
return $q.when(ctrl.prepared);
} else {
return getExampleData(examplePath).then(function (data) {
ctrl.prepared = data;
});
}
};
ctrl.open = function (clickEvent) {
var newWindow = clickEvent.ctrlKey || clickEvent.metaKey;
var postData = {
'tags[0]': "angularjs",
'tags[1]': "ui-select",
'private': true
};
// Make sure the example data is available.
// If an XHR must be made, this might break some pop-up blockers when
// new window is requested
ctrl.prepareExampleData(ctrl.examplePath)
.then(function () {
angular.forEach(ctrl.prepared, function (file) {
postData['files[' + file.name + ']'] = file.content;
});
postData.description = "Angular ui-select http://github.com/angular-ui/ui-select/";
formPostData('http://plnkr.co/edit/?p=preview', newWindow, postData);
});
};
// Initialize the example data, so it's ready when clicking the open button.
// Otherwise pop-up blockers will prevent a new window from opening
ctrl.prepareExampleData(ctrl.examplePath);
}]
};
}])
.factory('getExampleData', ['$http', '$q', function ($http, $q) {
return function (exampleFile) {
// Load the manifest for the example
var defaultFiles = {
'demo.js': './assets/',
'select.css': './dist',
'select.js': './dist'
};
files = angular.copy(defaultFiles);
files[exampleFile] = './';
var filePromises = [];
angular.forEach(files, function (folder, filename) {
filePromises.push($http.get(folder + '/' + filename, { transformResponse: [], cache: true })
.then(function (response) {
var content = response.data;
// Should only be one html (the example)
if (filename.match(/.html$/)) {
filename = "index.html";
content = content.replace(/.\/assets\//g, './').replace(/.\/dist\//g, './');
}
return {
name: filename,
content: content
};
}));
});
return $q.all(filePromises);
};
}]);
<!DOCTYPE html>
<html lang="en" ng-app="ui.select.pages">
<head>
<meta charset="utf-8">
<title>AngularJS ui-select</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-sanitize.js"></script>
<script src="./assets/app.js" type="text/javascript"></script>
<script src="./assets/plunkr.js" type="text/javascript"></script>
<!-- themes -->
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.css">
<link rel="stylesheet" href="./assets/docs.css" />
</head>
<body>
<header class="navbar navbar-default navbar-fixed-top navbar-inner">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-3" ng-click="isCollapsed = !isCollapsed">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand visible-xs" href="#">UI Select</a>
</div>
<nav class="hidden-xs">
<ul class="nav navbar-nav">
<a href="#top" role="button" class="navbar-brand">
UI Select
</a>
<li><a href="#getting_started">Getting started</a></li>
<li><a href="#documenation">Documentation</a></li>
<li><a href="#examples">Examples</a></li>
<!--<li class="dropdown" uib-dropdown>
<a role="button" class="dropdown-toggle" uib-dropdown-toggle>
Previous docs <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li ng-repeat="version in oldDocs">
<a ng-href="{{version.url}}">{{version.version}}</a>
</li>
</ul>
</li>-->
</ul>
</nav>
<nav class="visible-xs" uib-collapse="!isCollapsed">
<ul class="nav navbar-nav">
<li><a href="#getting_started" ng-click="isCollapsed = !isCollapsed">Getting started</a></li>
<li><a href="#directives_small" ng-click="isCollapsed = !isCollapsed">Directives</a></li>
</ul>
</nav>
</div>
</header>
<div class="header-placeholder"></div>
<div role="main">
<header class="bs-header text-center" id="overview">
<div class="container">
<h1>UI Select</h1>
<p>
A native <a href="http://angularjs.org">AngularJS</a> implementation of Select2/Selectize by the
<a href="http://angular-ui.github.io">AngularUI Team</a>
</p>
<p>
<a class="btn btn-outline-inverse btn-lg" href="https://github.com/angular-ui/ui-select"><i class="icon-github"></i>Code on Github</a>
<!--<button type="button" class="btn btn-outline-inverse btn-lg" ng-click="showDownloadModal()">
<i class="glyphicon glyphicon-download-alt"></i> Download <small>(<%= pkg.version%>)</small>
</button>-->
</p>
</div>
<div class="bs-social container">
<ul class="bs-social-buttons">
<li>
<iframe src="//ghbtns.com/github-btn.html?user=angular-ui&repo=ui-select&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20"></iframe>
</li>
<li>
<iframe src="//ghbtns.com/github-btn.html?user=angular-ui&repo=ui-select&type=fork&count=true"
allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20"></iframe>
</li>
<li>
<a href="https://twitter.com/share" class="twitter-share-button"
data-hashtags="angularjs">Tweet</a>
<script>
!function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (!d.getElementById(id)) {
js = d.createElement(s);
js.id = id;
js.src = "//platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
}
}(document, "script", "twitter-wjs");</script>
</li>
<li>
<!-- Place this tag where you want the +1 button to render. -->
<div class="g-plusone" data-size="medium"></div>
<!-- Place this tag after the last +1 button tag. -->
<script type="text/javascript">
(function () {
var po = document.createElement('script');
po.type = 'text/javascript';
po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
})();
</script>
</li>
</ul>
</div>
</header>
<div class="container">
<div class="row">
<div class="col-md-12">
<section id="getting_started">
<div class="page-header">
<h1>Getting started</h1>
</div>
<h3>Dependencies</h3>
<p>
This repository contains a <strong>native AngularJS</strong> select directive based on
Bootstrap/Select2/Selectize's CSS. As a result no dependency on jQuery or 3rd-Party
JavaScript is required. The only <strong>required</strong> dependencies are:
</p>
<ul>
<li>
<a href="http://angularjs.org" target="_blank">AngularJS</a> (requires AngularJS 1.2.x or higher, tested with 1.5.3).
</li>
<li>
<a href="http://angularjs.org" target="_blank">Angular-Sanitize</a> (the version should match your version of angular.js).
</li>
<li>
The matching CSS for your the theme you wish to use:
<ul>
<li>Bootstrap</li>
<li>Select2</li>
<li>Selectize</li>
</ul>
</li>
</ul>
<h3>Installation</h3>
<h4>Install via npm</h4>
<pre>$ npm install ui-select</pre>
<h4>Install via bower</h4>
<pre>$ bower install angular-ui-select</pre>
<p>
As soon as you've got all the files downloaded and included in your page you just need to declare
a dependency on the <code>ui.select</code> <a href="http://docs.angularjs.org/guide/module">module</a>:<br>
<pre><code>angular.module('myModule', ['ui.select', 'ngSanitize']);</code></pre>
</p>
</section>
<section id="documenation">
<div class="page-header">
<h1>Documentation</h1>
</div>
<h3>Wiki</h3>
For up to date information please refer to the <a href="https://github.com/angular-ui/ui-select/wiki" target="_blank">Wiki</a>
<h3>FAQ</h3>
<p>Please check <a href="https://github.com/angular-ui/ui-select/wiki/FAQs" target="_blank">our FAQ section</a> for common problems / solutions.</p>
</section>
<section id="examples">
<div class="page-header">
<h1>Examples</h1>
</div>
<p>You can fork one of the plunkers from this page to see a working example of what is described here.</p>
<!-- INSERT EXAMPLES HERE -->
</section>
</div>
</div>
</div><!-- /.container -->
</div><!-- /.main -->
<footer class="footer">
<div class="container">
<p>Designed and built by all ui-select <a href="https://github.com/angular-ui/ui-select/graphs/contributors" target="_blank">contributors</a>.</p>
<p>Code licensed under <a href="https://github.com/angular-ui/ui-select/blob/master/LICENSE">MIT License</a>.</p>
<p><a href="https://github.com/angular-ui/ui-select/issues?state=open">Issues</a></p>
</div>
</footer>
</body>
</html>
<!DOCTYPE html>
<html lang="en" ng-app="demo">
<head>
<meta charset="utf-8">
<title>AngularJS ui-select</title>
<!--
IE8 support, see AngularJS Internet Explorer Compatibility http://docs.angularjs.org/guide/ie
For Firefox 3.6, you will also need to include jQuery and ECMAScript 5 shim
-->
<!--[if lt IE 9]>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/es5-shim/2.2.0/es5-shim.js"></script>
<script>
document.createElement('ui-select');
document.createElement('ui-select-match');
document.createElement('ui-select-choices');
</script>
<![endif]-->
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-sanitize.js"></script>
<!-- ui-select files -->
<script src="./dist/select.js"></script>
<link rel="stylesheet" href="./dist/select.css">
<script src="./assets/demo.js"></script>
<!-- themes -->
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.css">
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/select2/3.4.5/select2.css">
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.8.5/css/selectize.default.css">
<!-- <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.8.5/css/selectize.bootstrap2.css"> -->
<!--<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.8.5/css/selectize.bootstrap3.css">-->
<style>
body {
padding: 15px;
}
.select2 > .select2-choice.ui-select-match {
/* Because of the inclusion of Bootstrap */
height: 29px;
}
.selectize-control > .selectize-dropdown {
top: 36px;
}
/* Some additional styling to demonstrate that append-to-body helps achieve the proper z-index layering. */
.select-box {
background: #fff;
position: relative;
z-index: 1;
}
.alert-info.positioned {
margin-top: 1em;
position: relative;
z-index: 10000; /* The select2 dropdown has a z-index of 9999 */
}
</style>
</head>
<body class="ng-cloak" ng-controller="DemoCtrl as ctrl">
require('./dist/select.js');
module.exports = 'ui.select';
0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node',
1 verbose cli '/usr/local/bin/npm',
1 verbose cli 'unpublish',
1 verbose cli 'ui-select@0.19.5' ]
2 info using npm@2.14.4
3 info using node@v4.1.1
4 silly unpublish args[0] ui-select@0.19.5
5 silly unpublish thing Result {
5 silly unpublish raw: 'ui-select@0.19.5',
5 silly unpublish scope: null,
5 silly unpublish name: 'ui-select',
5 silly unpublish rawSpec: '0.19.5',
5 silly unpublish spec: '0.19.5',
5 silly unpublish type: 'version' }
6 verbose getPublishConfig null
7 silly ls normalized ui-select/0.19.5
8 silly gentlyRm /Users/arob35/.npm/ui-select/0.19.5 is being purged
9 verbose gentlyRm don't care about contents; nuking /Users/arob35/.npm/ui-select/0.19.5
10 silly vacuum-fs purging /Users/arob35/.npm/ui-select/0.19.5
11 silly vacuum-fs quitting because other entries in /Users/arob35/.npm/ui-select
12 silly mapToRegistry name ui-select
13 silly mapToRegistry using default registry
14 silly mapToRegistry registry https://registry.npmjs.org/
15 silly mapToRegistry uri https://registry.npmjs.org/ui-select
16 verbose get GET as part of write; not caching result
17 verbose request uri https://registry.npmjs.org/ui-select?write=true
18 verbose request no auth needed
19 info attempt registry request try #1 at 4:15:12 PM
20 verbose request using bearer token for auth
21 verbose request id 5ca39f33f3f44109
22 http request GET https://registry.npmjs.org/ui-select?write=true
23 http 200 https://registry.npmjs.org/ui-select?write=true
24 silly get cb [ 200,
24 silly get { server: 'CouchDB/1.6.1 (Erlang OTP/R16B03)',
24 silly get etag: '"3PFJ7OP67OCII47YIYGTYZUSW"',
24 silly get 'content-type': 'application/json',
24 silly get 'content-encoding': 'gzip',
24 silly get 'cache-control': 'max-age=0',
24 silly get 'transfer-encoding': 'chunked',
24 silly get 'accept-ranges': 'bytes',
24 silly get date: 'Mon, 24 Oct 2016 23:15:11 GMT',
24 silly get via: '1.1 varnish',
24 silly get connection: 'keep-alive',
24 silly get 'x-served-by': 'cache-den6025-DEN',
24 silly get 'x-cache': 'MISS',
24 silly get 'x-cache-hits': '0',
24 silly get 'x-timer': 'S1477350911.526110,VS0,VE239',
24 silly get vary: 'Accept-Encoding' } ]
25 verbose get saving ui-select to /Users/arob35/.npm/registry.npmjs.org/ui-select_3Fwrite_3Dtrue/.cache.json
26 verbose unpublish removing attachments { shasum: '95662d8e086ab7800553a9f11cf24523dcf8d7da',
26 verbose unpublish tarball: 'http://registry.npmjs.org/ui-select/-/ui-select-0.19.5.tgz' }
27 verbose request uri https://registry.npmjs.org/ui-select/-rev/33-46749c4a981bb9aba3d0bb0008a0117a
28 verbose request sending authorization for write operation
29 info attempt registry request try #1 at 4:15:12 PM
30 verbose request using bearer token for auth
31 http request PUT https://registry.npmjs.org/ui-select/-rev/33-46749c4a981bb9aba3d0bb0008a0117a
32 http 500 https://registry.npmjs.org/ui-select/-rev/33-46749c4a981bb9aba3d0bb0008a0117a
33 info retry will retry, error on last attempt: Error: "cannot unpublish a version that is >24 hours old" : ui-select
34 info attempt registry request try #2 at 4:15:24 PM
35 verbose request using bearer token for auth
36 http request PUT https://registry.npmjs.org/ui-select/-rev/33-46749c4a981bb9aba3d0bb0008a0117a
37 http 500 https://registry.npmjs.org/ui-select/-rev/33-46749c4a981bb9aba3d0bb0008a0117a
38 info retry will retry, error on last attempt: Error: "cannot unpublish a version that is >24 hours old" : ui-select
39 info attempt registry request try #3 at 4:16:25 PM
40 verbose request using bearer token for auth
41 http request PUT https://registry.npmjs.org/ui-select/-rev/33-46749c4a981bb9aba3d0bb0008a0117a
42 http 500 https://registry.npmjs.org/ui-select/-rev/33-46749c4a981bb9aba3d0bb0008a0117a
43 verbose headers { 'content-type': 'application/json',
43 verbose headers 'cache-control': 'max-age=0',
43 verbose headers 'content-length': '80',
43 verbose headers 'accept-ranges': 'bytes',
43 verbose headers date: 'Mon, 24 Oct 2016 23:16:25 GMT',
43 verbose headers via: '1.1 varnish',
43 verbose headers connection: 'keep-alive',
43 verbose headers 'x-served-by': 'cache-dfw1830-DFW',
43 verbose headers 'x-cache': 'MISS',
43 verbose headers 'x-cache-hits': '0',
43 verbose headers 'x-timer': 'S1477350984.944033,VS0,VE923' }
44 verbose request invalidating /Users/arob35/.npm/registry.npmjs.org/ui-select on PUT
45 error unpublish Failed to update data
46 verbose stack Error: "cannot unpublish a version that is >24 hours old" : ui-select
46 verbose stack at makeError (/usr/local/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:263:12)
46 verbose stack at CachingRegistryClient.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:251:14)
46 verbose stack at Request._callback (/usr/local/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:171:14)
46 verbose stack at Request.self.callback (/usr/local/lib/node_modules/npm/node_modules/request/request.js:198:22)
46 verbose stack at emitTwo (events.js:87:13)
46 verbose stack at Request.emit (events.js:172:7)
46 verbose stack at Request.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/request/request.js:1073:14)
46 verbose stack at emitOne (events.js:82:20)
46 verbose stack at Request.emit (events.js:169:7)
46 verbose stack at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/request/request.js:1019:12)
47 verbose statusCode 500
48 verbose pkgid ui-select
49 verbose cwd /Users/arob35/Sites/forks/ui-select
50 error Darwin 15.6.0
51 error argv "/usr/local/bin/node" "/usr/local/bin/npm" "unpublish" "ui-select@0.19.5"
52 error node v4.1.1
53 error npm v2.14.4
54 error code E500
55 error "cannot unpublish a version that is >24 hours old" : ui-select
56 error If you need help, you may report this error at:
56 error <https://github.com/npm/npm/issues>
57 verbose exit [ 1, true ]
{
"name": "ui-select",
"main": "./index.js",
"author": "http://github.com/angular-ui/ui-select/graphs/contributors",
"homepage": "http://github.com/angular-ui/ui-select",
"repository": {
"url": "git://github.com/angular-ui/ui-select.git"
},
"style": "dist/select.css",
"version": "0.19.6",
"devDependencies": {
"angular": "^1.2.18",
"angular-mocks": "^1.2.18",
"angular-sanitize": "^1.2.18",
"conventional-changelog": "^0.5.3",
"conventional-recommended-bump": "0.0.3",
"del": "~0.1.1",
"event-stream": "~3.1.0",
"gulp": "^3.9.1",
"gulp-angular-templatecache": "^1.8.0",
"gulp-bump": "^1.0.0",
"gulp-concat": "^2.6.0",
"gulp-conventional-changelog": "^0.7.0",
"gulp-filenames": "^2.0.0",
"gulp-footer": "^1.0.5",
"gulp-git": "^1.4.0",
"gulp-header": "^1.7.1",
"gulp-jshint": "^2.0.0",
"gulp-load-plugins": "^1.1.0",
"gulp-minify-css": "^1.2.4",
"gulp-minify-html": "^1.0.6",
"gulp-plumber": "^0.6.3",
"gulp-replace": "^0.5.4",
"gulp-sourcemaps": "^1.6.0",
"gulp-tag-version": "^1.3.0",
"gulp-uglify": "^1.5.3",
"gulp-util": "^2.2.19",
"jquery": "~1.11",
"jshint": "^2.9.1",
"jshint-stylish": "~0.3.0",
"karma": "^0.12.16",
"karma-chrome-launcher": "^0.1.3",
"karma-coverage": "~0.2",
"karma-firefox-launcher": "~0.1",
"karma-jasmine": "~0.2",
"karma-ng-html2js-preprocessor": "^0.1.0",
"karma-phantomjs-launcher": "~0.1.4",
"run-sequence": "^1.1.5",
"streamqueue": "^1.1.1",
"title-case": "^1.1.2"
},
"scripts": {
"test": "gulp test"
},
"spm": {
"main": "dist/select.js",
"output": [
"dist/select.css"
]
},
"license": "MIT"
}
{
"name": "angular",
"version": "1.6.3",
"license": "MIT",
"main": "./angular.js",
"ignore": [],
"dependencies": {},
"homepage": "https://github.com/angular/bower-angular",
"_release": "1.6.3",
"_resolution": {
"type": "version",
"tag": "v1.6.3",
"commit": "40d67030765b0024618d348d78be3e30f4f8f29b"
},
"_source": "https://github.com/angular/bower-angular.git",
"_target": ">=1.2.18",
"_originalSource": "angular"
}
\ No newline at end of file
The MIT License (MIT)
Copyright (c) 2016 Angular
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.
# packaged angular
This repo is for distribution on `npm` and `bower`. The source for this module is in the
[main AngularJS repo](https://github.com/angular/angular.js).
Please file issues and pull requests against that repo.
## Install
You can install this package either with `npm` or with `bower`.
### npm
```shell
npm install angular
```
Then add a `<script>` to your `index.html`:
```html
<script src="/node_modules/angular/angular.js"></script>
```
Or `require('angular')` from your code.
### bower
```shell
bower install angular
```
Then add a `<script>` to your `index.html`:
```html
<script src="/bower_components/angular/angular.js"></script>
```
## Documentation
Documentation is available on the
[AngularJS docs site](http://docs.angularjs.org/).
## License
The MIT License
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
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.
/* Include this file in your html if you are using the CSP mode. */
@charset "UTF-8";
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
.ng-cloak, .x-ng-cloak,
.ng-hide:not(.ng-hide-animate) {
display: none !important;
}
ng\:form {
display: block;
}
.ng-animate-shim {
visibility:hidden;
}
.ng-anchor {
position:absolute;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "angular",
"version": "1.6.3",
"license": "MIT",
"main": "./angular.js",
"ignore": [],
"dependencies": {
}
}
require('./angular');
module.exports = angular;
{
"name": "angular",
"version": "1.6.3",
"description": "HTML enhanced for web apps",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/angular/angular.js.git"
},
"keywords": [
"angular",
"framework",
"browser",
"client-side"
],
"author": "Angular Core Team <angular-core+npm@google.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/angular/angular.js/issues"
},
"homepage": "http://angularjs.org"
}
# Stage 0, "build-stage", based on Node.js, to build and compile Angular
FROM node:6.11.1 as build-stage
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get -y dist-upgrade
# Installing supervisord
RUN apt-get install -y supervisor
ADD ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN DEBIAN_FRONTEND=noninteractive apt-get -yq install net-tools nginx lsb-release
RUN rm -f /etc/nginx/fastcgi.conf /etc/nginx/fastcgi_params && \
rm -f /etc/nginx/snippets/fastcgi-php.conf /etc/nginx/snippets/snakeoil.conf \
rm -f /etc/nginx/sites-available/default \
rm -f /etc/nginx/sites-enabled/default
COPY /nginx/default.conf /etc/nginx/sites-available
COPY /nginx/default.conf /etc/nginx/sites-enabled
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
RUN echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
RUN apt-get update && apt-get -yq install mongodb-org && apt-get -yq install redis-server
RUN service mongod start --fork --logpath /var/log/mongod.log
# sudo ./mongodb/bin/mongodump --host localhost --port 27017 --db atlasvoyages-dev --out ./
# sudo ./mongodb/bin/mongodump --host localhost --port 27017 --db atlasvoyages-dev --gzip --archive=atlasvoyages-dev.archive
WORKDIR /atlasvoyages
COPY package*.json /atlasvoyages/
RUN npm install --unsafe-perm=true
RUN npm install --global grunt-cli
COPY ./ /atlasvoyages/
RUN mongorestore --host localhost --port 27017 --gzip --archive=atlasvoyages-dev.archive
RUN find ./node_modules -maxdepth 1 -name 'pine*' -type d \( ! -name . \) -exec bash -c "cd '{}' && npm i --unsafe-perm=true && grunt build:dist" \; \
find ./node_modules -maxdepth 1 -name 'hermes*' -type d \( ! -name . \) -exec bash -c "cd '{}' && npm i --unsafe-perm=true && grunt build:dist" \;
find ./node_modules -maxdepth 1 -name 'theme-atlasvoyages*' -type d \( ! -name . \) -exec bash -c "cd '{}' && npm i --unsafe-perm=true && grunt build:dist" \;
RUN echo '\n' | grunt pine:setup
RUN grunt pine:copy
# expose port 80 443
EXPOSE 80
EXPOSE 443
# USER postgres
ENTRYPOINT ["/usr/bin/supervisord"]
[supervisord]
nodaemon=true
[program:redis]
command=redis-server --daemonize yes
[program:mongodb]
command=service mongod start --fork --logpath /var/log/mongod.log
[program:nginx]
command=/etc/init.d/nginx start
[program:pine]
command=grunt pine:serve
{
"logdir":"./logs"
}
\ No newline at end of file
node_modules
npm-debug.log
tmp
{
"curly": true,
"eqeqeq": true,
"immed": true,
"latedef": true,
"newcap": true,
"noarg": true,
"sub": true,
"undef": true,
"boss": true,
"eqnull": true,
"node": true
}
/*
* grunt-sync-version
*
*
* Copyright (c) 2014 Reda Bendiar
* Licensed under the MIT license.
*/
'use strict';
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
jshint: {
all: [
'Gruntfile.js',
'tasks/*.js',
'<%= nodeunit.tests %>'
],
options: {
jshintrc: '.jshintrc'
}
},
// Before generating any new files, remove any previously-created files.
clean: {
tests: ['tmp']
},
// Configuration to be run (and then tested).
sync_version: {
default_options: {
options: {
},
files: {
'tmp/default_options': ['test/fixtures/testing', 'test/fixtures/123']
}
},
custom_options: {
options: {
separator: ': ',
punctuation: ' !!!'
},
files: {
'tmp/custom_options': ['test/fixtures/testing', 'test/fixtures/123']
}
}
},
// Unit tests.
nodeunit: {
tests: ['test/*_test.js']
}
});
// Actually load this plugin's task(s).
grunt.loadTasks('tasks');
// These plugins provide necessary tasks.
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-nodeunit');
// Whenever the "test" task is run, first clean the "tmp" dir, then run this
// plugin's task(s), then test the result.
grunt.registerTask('test', ['clean', 'sync_version', 'nodeunit']);
// By default, lint and run all tests.
grunt.registerTask('default', ['jshint', 'test']);
};
Copyright (c) 2014 Reda Bendiar
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.
# grunt-sync-version
> The best Grunt plugin ever.
## Getting Started
This plugin requires Grunt `~0.4.5`
If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
```shell
npm install grunt-sync-version --save-dev
```
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
```js
grunt.loadNpmTasks('grunt-sync-version');
```
## The "sync_version" task
### Overview
In your project's Gruntfile, add a section named `sync_version` to the data object passed into `grunt.initConfig()`.
```js
grunt.initConfig({
sync_version: {
options: {
// Task-specific options go here.
},
your_target: {
// Target-specific file lists and/or options go here.
},
},
});
```
### Options
#### options.separator
Type: `String`
Default value: `', '`
A string value that is used to do something with whatever.
#### options.punctuation
Type: `String`
Default value: `'.'`
A string value that is used to do something else with whatever else.
### Usage Examples
#### Default Options
In this example, the default options are used to do something with whatever. So if the `testing` file has the content `Testing` and the `123` file had the content `1 2 3`, the generated result would be `Testing, 1 2 3.`
```js
grunt.initConfig({
sync_version: {
options: {},
files: {
'dest/default_options': ['src/testing', 'src/123'],
},
},
});
```
#### Custom Options
In this example, custom options are used to do something else with whatever else. So if the `testing` file has the content `Testing` and the `123` file had the content `1 2 3`, the generated result in this case would be `Testing: 1 2 3 !!!`
```js
grunt.initConfig({
sync_version: {
options: {
separator: ': ',
punctuation: ' !!!',
},
files: {
'dest/default_options': ['src/testing', 'src/123'],
},
},
});
```
## Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/).
## Release History
_(Nothing yet)_
{
"name": "grunt-sync-version",
"description": "The best Grunt plugin ever.",
"version": "0.1.0",
"homepage": "",
"author": {
"name": "Reda Bendiar",
"email": "rb@fractalite.com"
},
"repository": {
"type": "git",
"url": "git://labs.fractalite.com/pine/pine-server.git"
},
"bugs": {
"url": ""
},
"licenses": [
{
"type": "MIT",
"url": "/blob/master/LICENSE-MIT"
}
],
"engines": {
"node": ">= 0.8.0"
},
"scripts": {
"test": "grunt test"
},
"devDependencies": {
"grunt-contrib-jshint": "^0.9.2",
"grunt-contrib-clean": "^0.5.0",
"grunt-contrib-nodeunit": "^0.3.3",
"grunt": "~0.4.5"
},
"peerDependencies": {
"grunt": "~0.4.5"
},
"keywords": [
"gruntplugin"
]
}
\ No newline at end of file
/*
* grunt-sync-version
*
*
* Copyright (c) 2014 Reda Bendiar
* Licensed under the MIT license.
*/
'use strict';
module.exports = function(grunt) {
// Please see the Grunt documentation for more information regarding task
// creation: http://gruntjs.com/creating-tasks
grunt.registerMultiTask('sync_version', 'The best Grunt plugin ever.', function() {
// Merge task-specific and/or target-specific options with these defaults.
var options = this.options({
punctuation: '.',
separator: ', '
});
// Iterate over all specified file groups.
this.files.forEach(function(f) {
// Concat specified files.
var src = f.src.filter(function(filepath) {
// Warn on and remove invalid source files (if nonull was set).
if (!grunt.file.exists(filepath)) {
grunt.log.warn('Source file "' + filepath + '" not found.');
return false;
} else {
return true;
}
}).map(function(filepath) {
// Read file source.
return grunt.file.read(filepath);
}).join(grunt.util.normalizelf(options.separator));
// Handle options.
src += options.punctuation;
// Write the destination file.
grunt.file.write(f.dest, src);
// Print a success message.
grunt.log.writeln('File "' + f.dest + '" created.');
});
});
};
Testing: 1 2 3 !!!
\ No newline at end of file
Testing, 1 2 3.
\ No newline at end of file
1 2 3
\ No newline at end of file
Testing
\ No newline at end of file
'use strict';
var grunt = require('grunt');
/*
======== A Handy Little Nodeunit Reference ========
https://github.com/caolan/nodeunit
Test methods:
test.expect(numAssertions)
test.done()
Test assertions:
test.ok(value, [message])
test.equal(actual, expected, [message])
test.notEqual(actual, expected, [message])
test.deepEqual(actual, expected, [message])
test.notDeepEqual(actual, expected, [message])
test.strictEqual(actual, expected, [message])
test.notStrictEqual(actual, expected, [message])
test.throws(block, [error], [message])
test.doesNotThrow(block, [error], [message])
test.ifError(value)
*/
exports.sync_version = {
setUp: function(done) {
// setup here if necessary
done();
},
default_options: function(test) {
test.expect(1);
var actual = grunt.file.read('tmp/default_options');
var expected = grunt.file.read('test/expected/default_options');
test.equal(actual, expected, 'should describe what the default behavior is.');
test.done();
},
custom_options: function(test) {
test.expect(1);
var actual = grunt.file.read('tmp/custom_options');
var expected = grunt.file.read('test/expected/custom_options');
test.equal(actual, expected, 'should describe what the custom option(s) behavior is.');
test.done();
},
};
module.exports = function(grunt) {
// Please see the Grunt documentation for more information regarding task
// creation: http://gruntjs.com/creating-tasks
grunt.registerTask('pinedev', 'The best Grunt plugin ever.', function() {
var main = grunt.file.readJSON('./package.json');
grunt.log.writeln('main',main.dependencies)
grunt.file.expand('node_modules/*/package.json')
.map(function(filepath) {
return grunt.file.readJSON(filepath);
})
.filter(function(pkg) {
return (pkg.keywords && pkg.keywords.indexOf('pine') >= 0)
})
.forEach(function(pkg) {
main.dependencies[pkg.name] = '~' + pkg.version
}, {});
grunt.log.writeln('main',main.dependencies)
});
}
\ No newline at end of file
var pine = require("pine");
pine.start();
\ No newline at end of file
# NGINX CONF ATLAS VOYAGES
upstream node_atlasvoyage_de {
server unix:/Users/hotelia/nodejs/atlasvoyages.com/apps/atlas-voyages/http.sock;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
set $public /Users/hotelia/nodejs/atlasvoyages.com/apps/atlas-voyages/public;
#access_log /Users/hotelia/atlasvoyages/pine-server-old/logs/atlas-voyages.access.log;
#error_log /Users/hotelia/atlasvoyages/pine-server-old/logs/atlas-voyages.error.log;
location / {
# Set this to your upstream module.
proxy_pass http://node_atlasvoyage_de;
proxy_read_timeout 40s;
proxy_send_timeout 20s;
proxy_connect_timeout 5s;
proxy_buffers 8 32k;
proxy_buffer_size 64k;
# Proxy headers.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
# these for for socket
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# proxy_cache_bypass $http_upgrade;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_redirect off;
}
# Cache busting for scripts
location ~ ^/scripts/(.+)/\d+\.([^/]+)\.js$ {
alias $public/scripts/$1/$2.js;
add_header Vary Accept-Encoding;
#expires max;
}
# CSS and Javascript
location ~ ^/(robots.txt|sitemap.xml|favicon.ico|img/|css/|scripts/|assets/) {
root $public;
expires 24h;
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "atlasvoyages.com",
"version": "0.0.1",
"description": "Atlas Voyages, leader du voyage au Maroc: plus de 300 000 hôtels au Maroc et dans le monde, billets d'avion, voyages organisés, Omra, Club Med, croisières. Paiement en Dirhams.",
"main": "index.js",
"author": "Fractalite",
"license": "UNLICENSED",
"dependencies": {
"pine": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine.git#0.3",
"pine-express": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-express.git#0.3-dev",
"pine-mongo": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-mongo.git#0.3",
"pine-blocks": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-blocks.git#0.3",
"pine-angular": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-angular.git#0.3",
"pine-access": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-access.git#0.3",
"pine-admin": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-admin.git#0.3",
"pine-urls": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-urls.git#0.3",
"pine-checkout": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-checkout.git#0.3",
"pine-analytics": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-analytics.git#0.3",
"pine-hermes": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine-hermes/pine-hermes.git#0.3",
"pine-hermes-air": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine-hermes/pine-hermes-air.git#0.3-baggage",
"pine-hermes-lodge": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine-hermes/pine-hermes-lodge.git#0.4-fix-hotel-dest",
"pine-payzone": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-payzone.git#0.3",
"pine-payments": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-payments.git#0.3",
"pine-i18n": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-i18n.git#0.3-newdev",
"pine-avi-extra": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-avi-extras.git#master",
"hermes-tour": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/tour/hermes-tour.git#v0.2",
"hermes-travel": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-travel.git#0.3-beta-v1",
"theme-atlasvoyages": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/theme-atlasvoyages.git#0.3-beta-v1",
"pine-redis": "git+http://nabilelmahiri:_uLszKm2QvRcG_GCojPj@labs.atlasvoyages.com/pine/pine-redis.git#0.3-newdev",
"async": "^0.7.0",
"connect-redis": "1.4.7",
"extend": "~1.2.1",
"grunt-contrib-copy": "~0.5.0",
"grunt-newer": "~0.7.0",
"jayschema": "~0.2.7",
"q": "^1.1.2",
"request": "^2.55.0",
"simple-lru-cache": "^0.0.1",
"winston": "^0.7.2"
},
"devDependencies": {
"grunt": "~0.4.4",
"grunt-bump": "0.0.13",
"grunt-concurrent": "~0.5.0",
"grunt-contrib-watch": "~0.6.1",
"grunt-exit": "~1.0.0",
"grunt-nodemon": "~0.3.0",
"grunt-prompt": "^1.3.0",
"grunt-shell": "~0.7.0",
"handlebars": "^2.0.0",
"load-grunt-tasks": "~0.3.0",
"nginx-conf": "~0.2.3",
"parent-require": "~1.0.0"
}
}
\ No newline at end of file
#!/bin/sh
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs --no-run-if-empty docker rm
docker image prune -f
\ No newline at end of file
#!/bin/sh
docker stop atlasvoyages-docker-prod
docker rm atlasvoyages-docker-prod
docker ps -a | awk '{ print $1,$2 }' | grep atlasvoyages:prod | awk '{print $1 }' | xargs -I {} docker rm --force {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment