├── .cfignore ├── .gitignore ├── Procfile ├── Readme.markdown ├── app.js ├── manifest.yml ├── package-lock.json ├── package.json ├── public ├── js │ └── autocomplete.js ├── libs │ └── bootstrap │ │ ├── css │ │ ├── bootstrap-responsive.css │ │ ├── bootstrap-responsive.min.css │ │ ├── bootstrap.css │ │ └── bootstrap.min.css │ │ ├── img │ │ ├── glyphicons-halflings-white.png │ │ └── glyphicons-halflings.png │ │ └── js │ │ ├── bootstrap.js │ │ └── bootstrap.min.js └── stylesheets │ └── style.css ├── sample_data.json └── views ├── about.pug ├── index.pug ├── layout.pug └── search.pug /.cfignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea 3 | *.log 4 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node app.js -------------------------------------------------------------------------------- /Readme.markdown: -------------------------------------------------------------------------------- 1 | ## Searchly Sample Node.js Application 2 | 3 | This example illustrates basic search features of Searchly. 4 | 5 | Sample application is using [Nodejs](https://github.com/elasticsearch/elasticsearch-js) Elasticsearch client to integrate with Searchly. 6 | 7 | To create initial index and sample data click Create Sample Index & Data! 8 | 9 | Type "John" or "Robert" to search box and hit enter for sample search results. 10 | 11 | ## Local Setup 12 | 13 | To run example in your local environment with a local Elasticsearch instance, change connection string with local url string inside web.js 14 | 15 | var connectionString = 'http://localhost:9200'; 16 | 17 | ## PAAS Deployment 18 | 19 | This sample can be deployed to Heroku, Pivotal, IBM Cloud with no change. 20 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | 5 | var express = require('express'), 6 | elasticsearch = require('elasticsearch'), 7 | url = require('url'), 8 | http = require('http'), 9 | app = express(), 10 | server = http.createServer(app), 11 | path = require('path'), 12 | logger = require('morgan'), 13 | methodOverride = require('method-override'), 14 | bodyParser = require('body-parser'), 15 | multer = require('multer'), 16 | errorHandler = require('errorhandler'), 17 | fs = require('fs'); 18 | 19 | var connectionString = 'localhost:9200'; 20 | 21 | if (process.env.SEARCHBOX_URL) { 22 | // Heroku 23 | connectionString = process.env.SEARCHBOX_URL; 24 | } else if (process.env.SEARCHLY_URL) { 25 | connectionString = process.env.SEARCHLY_URL; 26 | } else if (process.env.VCAP_SERVICES) { 27 | // Pivotal, IBM 28 | var vcap = JSON.parse(process.env.VCAP_SERVICES); 29 | if (vcap['searchly-n/a']) { 30 | // Pivotal 31 | connectionString = JSON.parse(process.env.VCAP_SERVICES)['searchly-n/a'][0]['credentials']['uri']; 32 | } else if (vcap['searchly-es']){ 33 | // IBM 34 | connectionString = JSON.parse(process.env.VCAP_SERVICES)['searchly-es'][0]['credentials']['uri']; 35 | } 36 | } 37 | 38 | console.info(connectionString); 39 | 40 | var client = new elasticsearch.Client({ 41 | host: connectionString, 42 | log: 'debug' 43 | }); 44 | 45 | var _index = "company"; 46 | var _type = 'employee'; 47 | 48 | // configuration 49 | app.set('port', process.env.PORT || 4000); 50 | app.set('views', path.join(__dirname, 'views')); 51 | app.set('view engine', 'pug'); 52 | app.use(logger('dev')); 53 | app.use(methodOverride()); 54 | app.use(bodyParser.json()); 55 | app.use(bodyParser.urlencoded({extended: true})); 56 | app.use(multer()); 57 | app.use(express.static(path.join(__dirname, 'public'))); 58 | 59 | // Routes 60 | app.get('/', function (req, res) { 61 | res.render('index', {"result": ""}) 62 | }); 63 | 64 | app.get('/index', function (req, res) { 65 | 66 | client.indices.delete({index: _index}); 67 | 68 | client.indices.create({ 69 | index: _index, 70 | body: { 71 | "settings": { 72 | "analysis": { 73 | "filter": { 74 | "autocomplete_filter": { 75 | "type": "edge_ngram", 76 | "min_gram": 1, 77 | "max_gram": 10 78 | } 79 | }, 80 | "analyzer": { 81 | "autocomplete": { 82 | "type": "custom", 83 | "tokenizer": "standard", 84 | "filter": [ 85 | "lowercase", 86 | "autocomplete_filter" 87 | ] 88 | } 89 | } 90 | } 91 | }, 92 | "mappings": { 93 | "employee": { 94 | "properties": { 95 | "city": { 96 | "type": "text", 97 | "fields": { 98 | "raw": {"type": "keyword"} 99 | } 100 | }, 101 | "country": { 102 | "type": "text", 103 | "fields": { 104 | "raw": {"type": "keyword"} 105 | } 106 | }, 107 | "first_name": { 108 | "type": "text", 109 | "fields": { 110 | "autocomplete": {"type": "text", "analyzer": "autocomplete"} 111 | } 112 | }, 113 | "last_name": { 114 | "type": "text" 115 | }, 116 | "gender": { 117 | "type": "keyword" 118 | }, 119 | "job_title": { 120 | "type": "text", 121 | "fields": { 122 | "raw": {"type": "keyword"} 123 | } 124 | }, 125 | "language": { 126 | "type": "text", 127 | "fields": { 128 | "raw": {"type": "keyword"} 129 | } 130 | } 131 | } 132 | } 133 | } 134 | } 135 | 136 | }, function (error, response) { 137 | 138 | if (error) throw error; 139 | 140 | fs.readFile('sample_data.json', 'utf8', function (err, data) { 141 | if (err) throw err; 142 | var sampleDataSet = JSON.parse(data); 143 | 144 | var body = []; 145 | 146 | sampleDataSet.forEach(function (item) { 147 | body.push({"index": {"_index": _index, "_type": _type}}); 148 | body.push(item); 149 | }); 150 | 151 | client.bulk({ 152 | body: body 153 | }, function (err, resp) { 154 | res.render('index', {result: 'Indexing Completed!'}); 155 | }) 156 | }); 157 | }) 158 | }) 159 | ; 160 | 161 | app.get('/autocomplete', function (req, res) { 162 | client.search({ 163 | index: _index, 164 | type: _type, 165 | body: { 166 | "query": { 167 | "multi_match": { 168 | "query": req.query.term, 169 | "fields": ["first_name.autocomplete"] 170 | } 171 | } 172 | } 173 | }).then(function (resp) { 174 | 175 | var results = resp.hits.hits.map(function(hit){ 176 | return hit._source.first_name + " " + hit._source.last_name; 177 | }); 178 | 179 | res.send(results); 180 | }, function (err) { 181 | console.trace(err.message); 182 | res.send({response: err.message}); 183 | }); 184 | }); 185 | 186 | app.get('/search', function (req, res) { 187 | 188 | var body = { 189 | "query": { 190 | "bool": { 191 | "must": { 192 | "multi_match": { 193 | "query": req.query.q, 194 | "fields": ["first_name^100", "last_name^20", "country^5", "city^3", "language^10", "job_title^50"], 195 | "fuzziness": 1 196 | } 197 | } 198 | } 199 | }, 200 | "aggs": { 201 | "country": { 202 | "terms": { 203 | "field": "country.raw" 204 | } 205 | }, 206 | "city": { 207 | "terms": { 208 | "field": "city.raw" 209 | } 210 | }, 211 | "language": { 212 | "terms": { 213 | "field": "language.raw" 214 | } 215 | }, 216 | "job_title": { 217 | "terms": { 218 | "field": "job_title.raw" 219 | } 220 | }, 221 | "gender": { 222 | "terms": { 223 | "field": "gender" 224 | } 225 | } 226 | }, 227 | "suggest": { 228 | "text": req.query.q, 229 | "simple_phrase": { 230 | "phrase": { 231 | "field": "first_name", 232 | "size": 1, 233 | "real_word_error_likelihood": 0.95, 234 | "max_errors": 0.5, 235 | "gram_size": 2, 236 | "direct_generator": [{ 237 | "field": "first_name", 238 | "suggest_mode": "always", 239 | "min_word_length": 1 240 | }], 241 | "highlight": { 242 | "pre_tag": "", 243 | "post_tag": "" 244 | } 245 | } 246 | } 247 | } 248 | } 249 | 250 | var aggValue = req.query.agg_value; 251 | var aggField = req.query.agg_field; 252 | if (aggField) { 253 | var filter = {}; 254 | filter[aggField] = aggValue; 255 | body['query']['bool']['filter'] = { "term": filter} 256 | } 257 | 258 | client.search({ 259 | index: _index, 260 | type: _type, 261 | body: body 262 | }).then(function (resp) { 263 | res.render('search', {response: resp, query: req.query.q}); 264 | }, function (err) { 265 | console.trace(err.message); 266 | res.render('search', {response: err.message}); 267 | }); 268 | }); 269 | 270 | app.get('/about', function (req, res) { 271 | res.render('about'); 272 | }); 273 | 274 | // error handling middleware should be loaded after the loading the routes 275 | if ('development' == app.get('env')) { 276 | app.use(errorHandler()); 277 | } 278 | 279 | app.listen(app.get('port'), function () { 280 | console.log('Express server listening on port ' + app.get('port')); 281 | }); 282 | -------------------------------------------------------------------------------- /manifest.yml: -------------------------------------------------------------------------------- 1 | --- 2 | applications: 3 | - name: searchly-elasticsearch-nodejs-sample 4 | host: searchly-elasticsearch-nodejs-sample 5 | memory: 64M 6 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "searchly-nodejs-sample", 3 | "version": "0.0.6", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/babel-types": { 8 | "version": "7.0.4", 9 | "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", 10 | "integrity": "sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw==" 11 | }, 12 | "@types/babylon": { 13 | "version": "6.16.3", 14 | "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.3.tgz", 15 | "integrity": "sha512-lyJ8sW1PbY3uwuvpOBZ9zMYKshMnQpXmeDHh8dj9j2nJm/xrW0FgB5gLSYOArj5X0IfaXnmhFoJnhS4KbqIMug==", 16 | "requires": { 17 | "@types/babel-types": "*" 18 | } 19 | }, 20 | "accepts": { 21 | "version": "1.3.5", 22 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 23 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 24 | "requires": { 25 | "mime-types": "~2.1.18", 26 | "negotiator": "0.6.1" 27 | } 28 | }, 29 | "acorn": { 30 | "version": "3.3.0", 31 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 32 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" 33 | }, 34 | "acorn-globals": { 35 | "version": "3.1.0", 36 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", 37 | "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", 38 | "requires": { 39 | "acorn": "^4.0.4" 40 | }, 41 | "dependencies": { 42 | "acorn": { 43 | "version": "4.0.13", 44 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 45 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" 46 | } 47 | } 48 | }, 49 | "agentkeepalive": { 50 | "version": "3.5.1", 51 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.1.tgz", 52 | "integrity": "sha512-Cte/sTY9/XcygXjJ0q58v//SnEQ7ViWExKyJpLJlLqomDbQyMLh6Is4KuWJ/wmxzhiwkGRple7Gqv1zf6Syz5w==", 53 | "requires": { 54 | "humanize-ms": "^1.2.1" 55 | } 56 | }, 57 | "align-text": { 58 | "version": "0.1.4", 59 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 60 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 61 | "requires": { 62 | "kind-of": "^3.0.2", 63 | "longest": "^1.0.1", 64 | "repeat-string": "^1.5.2" 65 | } 66 | }, 67 | "ansi-regex": { 68 | "version": "2.1.1", 69 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 70 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 71 | }, 72 | "ansi-styles": { 73 | "version": "2.2.1", 74 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 75 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 76 | }, 77 | "array-flatten": { 78 | "version": "1.1.1", 79 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 80 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 81 | }, 82 | "asap": { 83 | "version": "2.0.6", 84 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 85 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 86 | }, 87 | "babel-runtime": { 88 | "version": "6.26.0", 89 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 90 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 91 | "requires": { 92 | "core-js": "^2.4.0", 93 | "regenerator-runtime": "^0.11.0" 94 | } 95 | }, 96 | "babel-types": { 97 | "version": "6.26.0", 98 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 99 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 100 | "requires": { 101 | "babel-runtime": "^6.26.0", 102 | "esutils": "^2.0.2", 103 | "lodash": "^4.17.4", 104 | "to-fast-properties": "^1.0.3" 105 | } 106 | }, 107 | "babylon": { 108 | "version": "6.18.0", 109 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 110 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" 111 | }, 112 | "basic-auth": { 113 | "version": "2.0.0", 114 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", 115 | "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", 116 | "requires": { 117 | "safe-buffer": "5.1.1" 118 | } 119 | }, 120 | "body-parser": { 121 | "version": "1.18.3", 122 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 123 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 124 | "requires": { 125 | "bytes": "3.0.0", 126 | "content-type": "~1.0.4", 127 | "debug": "2.6.9", 128 | "depd": "~1.1.2", 129 | "http-errors": "~1.6.3", 130 | "iconv-lite": "0.4.23", 131 | "on-finished": "~2.3.0", 132 | "qs": "6.5.2", 133 | "raw-body": "2.3.3", 134 | "type-is": "~1.6.16" 135 | } 136 | }, 137 | "busboy": { 138 | "version": "0.2.14", 139 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", 140 | "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", 141 | "requires": { 142 | "dicer": "0.2.5", 143 | "readable-stream": "1.1.x" 144 | } 145 | }, 146 | "bytes": { 147 | "version": "3.0.0", 148 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 149 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 150 | }, 151 | "camelcase": { 152 | "version": "1.2.1", 153 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 154 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" 155 | }, 156 | "center-align": { 157 | "version": "0.1.3", 158 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 159 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 160 | "requires": { 161 | "align-text": "^0.1.3", 162 | "lazy-cache": "^1.0.3" 163 | } 164 | }, 165 | "chalk": { 166 | "version": "1.1.3", 167 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 168 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 169 | "requires": { 170 | "ansi-styles": "^2.2.1", 171 | "escape-string-regexp": "^1.0.2", 172 | "has-ansi": "^2.0.0", 173 | "strip-ansi": "^3.0.0", 174 | "supports-color": "^2.0.0" 175 | } 176 | }, 177 | "character-parser": { 178 | "version": "2.2.0", 179 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", 180 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", 181 | "requires": { 182 | "is-regex": "^1.0.3" 183 | } 184 | }, 185 | "clean-css": { 186 | "version": "4.2.1", 187 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", 188 | "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", 189 | "requires": { 190 | "source-map": "~0.6.0" 191 | } 192 | }, 193 | "cliui": { 194 | "version": "2.1.0", 195 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 196 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 197 | "requires": { 198 | "center-align": "^0.1.1", 199 | "right-align": "^0.1.1", 200 | "wordwrap": "0.0.2" 201 | } 202 | }, 203 | "constantinople": { 204 | "version": "3.1.2", 205 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", 206 | "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", 207 | "requires": { 208 | "@types/babel-types": "^7.0.0", 209 | "@types/babylon": "^6.16.2", 210 | "babel-types": "^6.26.0", 211 | "babylon": "^6.18.0" 212 | } 213 | }, 214 | "content-disposition": { 215 | "version": "0.5.2", 216 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 217 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 218 | }, 219 | "content-type": { 220 | "version": "1.0.4", 221 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 222 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 223 | }, 224 | "cookie": { 225 | "version": "0.3.1", 226 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 227 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 228 | }, 229 | "cookie-signature": { 230 | "version": "1.0.6", 231 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 232 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 233 | }, 234 | "core-js": { 235 | "version": "2.5.7", 236 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", 237 | "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" 238 | }, 239 | "core-util-is": { 240 | "version": "1.0.2", 241 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 242 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 243 | }, 244 | "debug": { 245 | "version": "2.6.9", 246 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 247 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 248 | "requires": { 249 | "ms": "2.0.0" 250 | } 251 | }, 252 | "decamelize": { 253 | "version": "1.2.0", 254 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 255 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 256 | }, 257 | "depd": { 258 | "version": "1.1.2", 259 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 260 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 261 | }, 262 | "destroy": { 263 | "version": "1.0.4", 264 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 265 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 266 | }, 267 | "dicer": { 268 | "version": "0.2.5", 269 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", 270 | "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", 271 | "requires": { 272 | "readable-stream": "1.1.x", 273 | "streamsearch": "0.1.2" 274 | } 275 | }, 276 | "doctypes": { 277 | "version": "1.1.0", 278 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", 279 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" 280 | }, 281 | "ee-first": { 282 | "version": "1.1.1", 283 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 284 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 285 | }, 286 | "elasticsearch": { 287 | "version": "15.1.1", 288 | "resolved": "https://registry.npmjs.org/elasticsearch/-/elasticsearch-15.1.1.tgz", 289 | "integrity": "sha512-Yr9xy10rUMjDty7qCys7X9AIW5+PX4Gtv2NksZqXIc+AZiWna/y2QwZdiSLtb5LTOKDp7PbegfuokhIjMHUpKw==", 290 | "requires": { 291 | "agentkeepalive": "^3.4.1", 292 | "chalk": "^1.0.0", 293 | "lodash": "^4.17.10" 294 | } 295 | }, 296 | "encodeurl": { 297 | "version": "1.0.2", 298 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 299 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 300 | }, 301 | "errorhandler": { 302 | "version": "1.5.0", 303 | "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.0.tgz", 304 | "integrity": "sha1-6rpkyl1UKjEayUX1gt78M2Fl2fQ=", 305 | "requires": { 306 | "accepts": "~1.3.3", 307 | "escape-html": "~1.0.3" 308 | } 309 | }, 310 | "escape-html": { 311 | "version": "1.0.3", 312 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 313 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 314 | }, 315 | "escape-string-regexp": { 316 | "version": "1.0.5", 317 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 318 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 319 | }, 320 | "esutils": { 321 | "version": "2.0.2", 322 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 323 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" 324 | }, 325 | "etag": { 326 | "version": "1.8.1", 327 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 328 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 329 | }, 330 | "express": { 331 | "version": "4.16.3", 332 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", 333 | "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", 334 | "requires": { 335 | "accepts": "~1.3.5", 336 | "array-flatten": "1.1.1", 337 | "body-parser": "1.18.2", 338 | "content-disposition": "0.5.2", 339 | "content-type": "~1.0.4", 340 | "cookie": "0.3.1", 341 | "cookie-signature": "1.0.6", 342 | "debug": "2.6.9", 343 | "depd": "~1.1.2", 344 | "encodeurl": "~1.0.2", 345 | "escape-html": "~1.0.3", 346 | "etag": "~1.8.1", 347 | "finalhandler": "1.1.1", 348 | "fresh": "0.5.2", 349 | "merge-descriptors": "1.0.1", 350 | "methods": "~1.1.2", 351 | "on-finished": "~2.3.0", 352 | "parseurl": "~1.3.2", 353 | "path-to-regexp": "0.1.7", 354 | "proxy-addr": "~2.0.3", 355 | "qs": "6.5.1", 356 | "range-parser": "~1.2.0", 357 | "safe-buffer": "5.1.1", 358 | "send": "0.16.2", 359 | "serve-static": "1.13.2", 360 | "setprototypeof": "1.1.0", 361 | "statuses": "~1.4.0", 362 | "type-is": "~1.6.16", 363 | "utils-merge": "1.0.1", 364 | "vary": "~1.1.2" 365 | }, 366 | "dependencies": { 367 | "body-parser": { 368 | "version": "1.18.2", 369 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 370 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 371 | "requires": { 372 | "bytes": "3.0.0", 373 | "content-type": "~1.0.4", 374 | "debug": "2.6.9", 375 | "depd": "~1.1.1", 376 | "http-errors": "~1.6.2", 377 | "iconv-lite": "0.4.19", 378 | "on-finished": "~2.3.0", 379 | "qs": "6.5.1", 380 | "raw-body": "2.3.2", 381 | "type-is": "~1.6.15" 382 | } 383 | }, 384 | "iconv-lite": { 385 | "version": "0.4.19", 386 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 387 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 388 | }, 389 | "qs": { 390 | "version": "6.5.1", 391 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 392 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 393 | }, 394 | "raw-body": { 395 | "version": "2.3.2", 396 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 397 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 398 | "requires": { 399 | "bytes": "3.0.0", 400 | "http-errors": "1.6.2", 401 | "iconv-lite": "0.4.19", 402 | "unpipe": "1.0.0" 403 | }, 404 | "dependencies": { 405 | "depd": { 406 | "version": "1.1.1", 407 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 408 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 409 | }, 410 | "http-errors": { 411 | "version": "1.6.2", 412 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 413 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 414 | "requires": { 415 | "depd": "1.1.1", 416 | "inherits": "2.0.3", 417 | "setprototypeof": "1.0.3", 418 | "statuses": ">= 1.3.1 < 2" 419 | } 420 | }, 421 | "setprototypeof": { 422 | "version": "1.0.3", 423 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 424 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 425 | } 426 | } 427 | }, 428 | "statuses": { 429 | "version": "1.4.0", 430 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 431 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 432 | } 433 | } 434 | }, 435 | "finalhandler": { 436 | "version": "1.1.1", 437 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 438 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 439 | "requires": { 440 | "debug": "2.6.9", 441 | "encodeurl": "~1.0.2", 442 | "escape-html": "~1.0.3", 443 | "on-finished": "~2.3.0", 444 | "parseurl": "~1.3.2", 445 | "statuses": "~1.4.0", 446 | "unpipe": "~1.0.0" 447 | }, 448 | "dependencies": { 449 | "statuses": { 450 | "version": "1.4.0", 451 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 452 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 453 | } 454 | } 455 | }, 456 | "forwarded": { 457 | "version": "0.1.2", 458 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 459 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 460 | }, 461 | "fresh": { 462 | "version": "0.5.2", 463 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 464 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 465 | }, 466 | "function-bind": { 467 | "version": "1.1.1", 468 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 469 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 470 | }, 471 | "has": { 472 | "version": "1.0.3", 473 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 474 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 475 | "requires": { 476 | "function-bind": "^1.1.1" 477 | } 478 | }, 479 | "has-ansi": { 480 | "version": "2.0.0", 481 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 482 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 483 | "requires": { 484 | "ansi-regex": "^2.0.0" 485 | } 486 | }, 487 | "http-errors": { 488 | "version": "1.6.3", 489 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 490 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 491 | "requires": { 492 | "depd": "~1.1.2", 493 | "inherits": "2.0.3", 494 | "setprototypeof": "1.1.0", 495 | "statuses": ">= 1.4.0 < 2" 496 | } 497 | }, 498 | "humanize-ms": { 499 | "version": "1.2.1", 500 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 501 | "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", 502 | "requires": { 503 | "ms": "^2.0.0" 504 | } 505 | }, 506 | "iconv-lite": { 507 | "version": "0.4.23", 508 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 509 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 510 | "requires": { 511 | "safer-buffer": ">= 2.1.2 < 3" 512 | } 513 | }, 514 | "inherits": { 515 | "version": "2.0.3", 516 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 517 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 518 | }, 519 | "ipaddr.js": { 520 | "version": "1.8.0", 521 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", 522 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" 523 | }, 524 | "is-buffer": { 525 | "version": "1.1.6", 526 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 527 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 528 | }, 529 | "is-expression": { 530 | "version": "3.0.0", 531 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", 532 | "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", 533 | "requires": { 534 | "acorn": "~4.0.2", 535 | "object-assign": "^4.0.1" 536 | }, 537 | "dependencies": { 538 | "acorn": { 539 | "version": "4.0.13", 540 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 541 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" 542 | } 543 | } 544 | }, 545 | "is-promise": { 546 | "version": "2.1.0", 547 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 548 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" 549 | }, 550 | "is-regex": { 551 | "version": "1.0.4", 552 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 553 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 554 | "requires": { 555 | "has": "^1.0.1" 556 | } 557 | }, 558 | "isarray": { 559 | "version": "0.0.1", 560 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 561 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 562 | }, 563 | "js-stringify": { 564 | "version": "1.0.2", 565 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", 566 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" 567 | }, 568 | "jstransformer": { 569 | "version": "1.0.0", 570 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", 571 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", 572 | "requires": { 573 | "is-promise": "^2.0.0", 574 | "promise": "^7.0.1" 575 | } 576 | }, 577 | "kind-of": { 578 | "version": "3.2.2", 579 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 580 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 581 | "requires": { 582 | "is-buffer": "^1.1.5" 583 | } 584 | }, 585 | "lazy-cache": { 586 | "version": "1.0.4", 587 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 588 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" 589 | }, 590 | "lodash": { 591 | "version": "4.17.10", 592 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", 593 | "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" 594 | }, 595 | "longest": { 596 | "version": "1.0.1", 597 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 598 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" 599 | }, 600 | "media-typer": { 601 | "version": "0.3.0", 602 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 603 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 604 | }, 605 | "merge-descriptors": { 606 | "version": "1.0.1", 607 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 608 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 609 | }, 610 | "method-override": { 611 | "version": "2.3.10", 612 | "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz", 613 | "integrity": "sha1-49r41d7hDdLc59SuiNYrvud0drQ=", 614 | "requires": { 615 | "debug": "2.6.9", 616 | "methods": "~1.1.2", 617 | "parseurl": "~1.3.2", 618 | "vary": "~1.1.2" 619 | } 620 | }, 621 | "methods": { 622 | "version": "1.1.2", 623 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 624 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 625 | }, 626 | "mime": { 627 | "version": "1.4.1", 628 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 629 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 630 | }, 631 | "mime-db": { 632 | "version": "1.35.0", 633 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", 634 | "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" 635 | }, 636 | "mime-types": { 637 | "version": "2.1.19", 638 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", 639 | "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", 640 | "requires": { 641 | "mime-db": "~1.35.0" 642 | } 643 | }, 644 | "mkdirp": { 645 | "version": "0.3.5", 646 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", 647 | "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" 648 | }, 649 | "morgan": { 650 | "version": "1.9.0", 651 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", 652 | "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", 653 | "requires": { 654 | "basic-auth": "~2.0.0", 655 | "debug": "2.6.9", 656 | "depd": "~1.1.1", 657 | "on-finished": "~2.3.0", 658 | "on-headers": "~1.0.1" 659 | } 660 | }, 661 | "ms": { 662 | "version": "2.0.0", 663 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 664 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 665 | }, 666 | "multer": { 667 | "version": "0.1.8", 668 | "resolved": "https://registry.npmjs.org/multer/-/multer-0.1.8.tgz", 669 | "integrity": "sha1-VRuKYBUJNwG8rMlkkWsa4GV483s=", 670 | "requires": { 671 | "busboy": "~0.2.9", 672 | "mkdirp": "~0.3.5", 673 | "qs": "~1.2.2", 674 | "type-is": "~1.5.2" 675 | }, 676 | "dependencies": { 677 | "mime-db": { 678 | "version": "1.12.0", 679 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", 680 | "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=" 681 | }, 682 | "mime-types": { 683 | "version": "2.0.14", 684 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", 685 | "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", 686 | "requires": { 687 | "mime-db": "~1.12.0" 688 | } 689 | }, 690 | "qs": { 691 | "version": "1.2.2", 692 | "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", 693 | "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=" 694 | }, 695 | "type-is": { 696 | "version": "1.5.7", 697 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.5.7.tgz", 698 | "integrity": "sha1-uTaKWTzG730GReeLL0xky+zQXpA=", 699 | "requires": { 700 | "media-typer": "0.3.0", 701 | "mime-types": "~2.0.9" 702 | } 703 | } 704 | } 705 | }, 706 | "negotiator": { 707 | "version": "0.6.1", 708 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 709 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 710 | }, 711 | "object-assign": { 712 | "version": "4.1.1", 713 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 714 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 715 | }, 716 | "on-finished": { 717 | "version": "2.3.0", 718 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 719 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 720 | "requires": { 721 | "ee-first": "1.1.1" 722 | } 723 | }, 724 | "on-headers": { 725 | "version": "1.0.1", 726 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", 727 | "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" 728 | }, 729 | "parseurl": { 730 | "version": "1.3.2", 731 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 732 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 733 | }, 734 | "path-parse": { 735 | "version": "1.0.6", 736 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 737 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 738 | }, 739 | "path-to-regexp": { 740 | "version": "0.1.7", 741 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 742 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 743 | }, 744 | "promise": { 745 | "version": "7.3.1", 746 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 747 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 748 | "requires": { 749 | "asap": "~2.0.3" 750 | } 751 | }, 752 | "proxy-addr": { 753 | "version": "2.0.4", 754 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", 755 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", 756 | "requires": { 757 | "forwarded": "~0.1.2", 758 | "ipaddr.js": "1.8.0" 759 | } 760 | }, 761 | "pug": { 762 | "version": "2.0.3", 763 | "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.3.tgz", 764 | "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", 765 | "requires": { 766 | "pug-code-gen": "^2.0.1", 767 | "pug-filters": "^3.1.0", 768 | "pug-lexer": "^4.0.0", 769 | "pug-linker": "^3.0.5", 770 | "pug-load": "^2.0.11", 771 | "pug-parser": "^5.0.0", 772 | "pug-runtime": "^2.0.4", 773 | "pug-strip-comments": "^1.0.3" 774 | } 775 | }, 776 | "pug-attrs": { 777 | "version": "2.0.3", 778 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", 779 | "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", 780 | "requires": { 781 | "constantinople": "^3.0.1", 782 | "js-stringify": "^1.0.1", 783 | "pug-runtime": "^2.0.4" 784 | } 785 | }, 786 | "pug-code-gen": { 787 | "version": "2.0.1", 788 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.1.tgz", 789 | "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", 790 | "requires": { 791 | "constantinople": "^3.0.1", 792 | "doctypes": "^1.1.0", 793 | "js-stringify": "^1.0.1", 794 | "pug-attrs": "^2.0.3", 795 | "pug-error": "^1.3.2", 796 | "pug-runtime": "^2.0.4", 797 | "void-elements": "^2.0.1", 798 | "with": "^5.0.0" 799 | } 800 | }, 801 | "pug-error": { 802 | "version": "1.3.2", 803 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", 804 | "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" 805 | }, 806 | "pug-filters": { 807 | "version": "3.1.0", 808 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.0.tgz", 809 | "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", 810 | "requires": { 811 | "clean-css": "^4.1.11", 812 | "constantinople": "^3.0.1", 813 | "jstransformer": "1.0.0", 814 | "pug-error": "^1.3.2", 815 | "pug-walk": "^1.1.7", 816 | "resolve": "^1.1.6", 817 | "uglify-js": "^2.6.1" 818 | } 819 | }, 820 | "pug-lexer": { 821 | "version": "4.0.0", 822 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.0.0.tgz", 823 | "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", 824 | "requires": { 825 | "character-parser": "^2.1.1", 826 | "is-expression": "^3.0.0", 827 | "pug-error": "^1.3.2" 828 | } 829 | }, 830 | "pug-linker": { 831 | "version": "3.0.5", 832 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.5.tgz", 833 | "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", 834 | "requires": { 835 | "pug-error": "^1.3.2", 836 | "pug-walk": "^1.1.7" 837 | } 838 | }, 839 | "pug-load": { 840 | "version": "2.0.11", 841 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", 842 | "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", 843 | "requires": { 844 | "object-assign": "^4.1.0", 845 | "pug-walk": "^1.1.7" 846 | } 847 | }, 848 | "pug-parser": { 849 | "version": "5.0.0", 850 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.0.tgz", 851 | "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", 852 | "requires": { 853 | "pug-error": "^1.3.2", 854 | "token-stream": "0.0.1" 855 | } 856 | }, 857 | "pug-runtime": { 858 | "version": "2.0.4", 859 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", 860 | "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" 861 | }, 862 | "pug-strip-comments": { 863 | "version": "1.0.3", 864 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", 865 | "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", 866 | "requires": { 867 | "pug-error": "^1.3.2" 868 | } 869 | }, 870 | "pug-walk": { 871 | "version": "1.1.7", 872 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz", 873 | "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" 874 | }, 875 | "qs": { 876 | "version": "6.5.2", 877 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 878 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 879 | }, 880 | "range-parser": { 881 | "version": "1.2.0", 882 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 883 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 884 | }, 885 | "raw-body": { 886 | "version": "2.3.3", 887 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 888 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 889 | "requires": { 890 | "bytes": "3.0.0", 891 | "http-errors": "1.6.3", 892 | "iconv-lite": "0.4.23", 893 | "unpipe": "1.0.0" 894 | } 895 | }, 896 | "readable-stream": { 897 | "version": "1.1.14", 898 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 899 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 900 | "requires": { 901 | "core-util-is": "~1.0.0", 902 | "inherits": "~2.0.1", 903 | "isarray": "0.0.1", 904 | "string_decoder": "~0.10.x" 905 | } 906 | }, 907 | "regenerator-runtime": { 908 | "version": "0.11.1", 909 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 910 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" 911 | }, 912 | "repeat-string": { 913 | "version": "1.6.1", 914 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 915 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 916 | }, 917 | "resolve": { 918 | "version": "1.8.1", 919 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", 920 | "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", 921 | "requires": { 922 | "path-parse": "^1.0.5" 923 | } 924 | }, 925 | "right-align": { 926 | "version": "0.1.3", 927 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 928 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 929 | "requires": { 930 | "align-text": "^0.1.1" 931 | } 932 | }, 933 | "safe-buffer": { 934 | "version": "5.1.1", 935 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 936 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 937 | }, 938 | "safer-buffer": { 939 | "version": "2.1.2", 940 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 941 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 942 | }, 943 | "send": { 944 | "version": "0.16.2", 945 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 946 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 947 | "requires": { 948 | "debug": "2.6.9", 949 | "depd": "~1.1.2", 950 | "destroy": "~1.0.4", 951 | "encodeurl": "~1.0.2", 952 | "escape-html": "~1.0.3", 953 | "etag": "~1.8.1", 954 | "fresh": "0.5.2", 955 | "http-errors": "~1.6.2", 956 | "mime": "1.4.1", 957 | "ms": "2.0.0", 958 | "on-finished": "~2.3.0", 959 | "range-parser": "~1.2.0", 960 | "statuses": "~1.4.0" 961 | }, 962 | "dependencies": { 963 | "statuses": { 964 | "version": "1.4.0", 965 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 966 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 967 | } 968 | } 969 | }, 970 | "serve-static": { 971 | "version": "1.13.2", 972 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 973 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 974 | "requires": { 975 | "encodeurl": "~1.0.2", 976 | "escape-html": "~1.0.3", 977 | "parseurl": "~1.3.2", 978 | "send": "0.16.2" 979 | } 980 | }, 981 | "setprototypeof": { 982 | "version": "1.1.0", 983 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 984 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 985 | }, 986 | "source-map": { 987 | "version": "0.6.1", 988 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 989 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 990 | }, 991 | "statuses": { 992 | "version": "1.5.0", 993 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 994 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 995 | }, 996 | "streamsearch": { 997 | "version": "0.1.2", 998 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 999 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" 1000 | }, 1001 | "string_decoder": { 1002 | "version": "0.10.31", 1003 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1004 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 1005 | }, 1006 | "strip-ansi": { 1007 | "version": "3.0.1", 1008 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1009 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1010 | "requires": { 1011 | "ansi-regex": "^2.0.0" 1012 | } 1013 | }, 1014 | "supports-color": { 1015 | "version": "2.0.0", 1016 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1017 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 1018 | }, 1019 | "to-fast-properties": { 1020 | "version": "1.0.3", 1021 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 1022 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" 1023 | }, 1024 | "token-stream": { 1025 | "version": "0.0.1", 1026 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", 1027 | "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" 1028 | }, 1029 | "type-is": { 1030 | "version": "1.6.16", 1031 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 1032 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 1033 | "requires": { 1034 | "media-typer": "0.3.0", 1035 | "mime-types": "~2.1.18" 1036 | } 1037 | }, 1038 | "uglify-js": { 1039 | "version": "2.8.29", 1040 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 1041 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 1042 | "requires": { 1043 | "source-map": "~0.5.1", 1044 | "uglify-to-browserify": "~1.0.0", 1045 | "yargs": "~3.10.0" 1046 | }, 1047 | "dependencies": { 1048 | "source-map": { 1049 | "version": "0.5.7", 1050 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1051 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 1052 | } 1053 | } 1054 | }, 1055 | "uglify-to-browserify": { 1056 | "version": "1.0.2", 1057 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 1058 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 1059 | "optional": true 1060 | }, 1061 | "unpipe": { 1062 | "version": "1.0.0", 1063 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1064 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1065 | }, 1066 | "utils-merge": { 1067 | "version": "1.0.1", 1068 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1069 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1070 | }, 1071 | "vary": { 1072 | "version": "1.1.2", 1073 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1074 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1075 | }, 1076 | "void-elements": { 1077 | "version": "2.0.1", 1078 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", 1079 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" 1080 | }, 1081 | "window-size": { 1082 | "version": "0.1.0", 1083 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 1084 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" 1085 | }, 1086 | "with": { 1087 | "version": "5.1.1", 1088 | "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", 1089 | "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", 1090 | "requires": { 1091 | "acorn": "^3.1.0", 1092 | "acorn-globals": "^3.0.0" 1093 | } 1094 | }, 1095 | "wordwrap": { 1096 | "version": "0.0.2", 1097 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 1098 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" 1099 | }, 1100 | "yargs": { 1101 | "version": "3.10.0", 1102 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 1103 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 1104 | "requires": { 1105 | "camelcase": "^1.0.2", 1106 | "cliui": "^2.1.0", 1107 | "decamelize": "^1.0.0", 1108 | "window-size": "0.1.0" 1109 | } 1110 | } 1111 | } 1112 | } 1113 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "searchly-nodejs-sample", 3 | "version": "0.0.6", 4 | "private": true, 5 | "scripts": { 6 | "start": "node app.js" 7 | }, 8 | "dependencies": { 9 | "body-parser": "^1.5.2", 10 | "errorhandler": "^1.1.1", 11 | "express": "^4.8.0", 12 | "pug": "^2.0.3", 13 | "method-override": "^2.1.2", 14 | "morgan": "^1.2.2", 15 | "multer": "^0.1.3", 16 | "elasticsearch": ">=15.1.1" 17 | }, 18 | "engines": { 19 | "node": ">=0.10.32" 20 | }, 21 | "main": "app.js" 22 | } 23 | -------------------------------------------------------------------------------- /public/js/autocomplete.js: -------------------------------------------------------------------------------- 1 | $(".search-query" ).autocomplete({ 2 | source: "/autocomplete", 3 | minLength: 2 4 | }); -------------------------------------------------------------------------------- /public/libs/bootstrap/css/bootstrap-responsive.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Responsive v2.0.3 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */ 10 | 11 | .clearfix { 12 | *zoom: 1; 13 | } 14 | 15 | .clearfix:before, 16 | .clearfix:after { 17 | display: table; 18 | content: ""; 19 | } 20 | 21 | .clearfix:after { 22 | clear: both; 23 | } 24 | 25 | .hide-text { 26 | font: 0/0 a; 27 | color: transparent; 28 | text-shadow: none; 29 | background-color: transparent; 30 | border: 0; 31 | } 32 | 33 | .input-block-level { 34 | display: block; 35 | width: 100%; 36 | min-height: 28px; 37 | -webkit-box-sizing: border-box; 38 | -moz-box-sizing: border-box; 39 | -ms-box-sizing: border-box; 40 | box-sizing: border-box; 41 | } 42 | 43 | .hidden { 44 | display: none; 45 | visibility: hidden; 46 | } 47 | 48 | .visible-phone { 49 | display: none !important; 50 | } 51 | 52 | .visible-tablet { 53 | display: none !important; 54 | } 55 | 56 | .hidden-desktop { 57 | display: none !important; 58 | } 59 | 60 | @media (max-width: 767px) { 61 | .visible-phone { 62 | display: inherit !important; 63 | } 64 | .hidden-phone { 65 | display: none !important; 66 | } 67 | .hidden-desktop { 68 | display: inherit !important; 69 | } 70 | .visible-desktop { 71 | display: none !important; 72 | } 73 | } 74 | 75 | @media (min-width: 768px) and (max-width: 979px) { 76 | .visible-tablet { 77 | display: inherit !important; 78 | } 79 | .hidden-tablet { 80 | display: none !important; 81 | } 82 | .hidden-desktop { 83 | display: inherit !important; 84 | } 85 | .visible-desktop { 86 | display: none !important ; 87 | } 88 | } 89 | 90 | @media (max-width: 480px) { 91 | .nav-collapse { 92 | -webkit-transform: translate3d(0, 0, 0); 93 | } 94 | .page-header h1 small { 95 | display: block; 96 | line-height: 18px; 97 | } 98 | input[type="checkbox"], 99 | input[type="radio"] { 100 | border: 1px solid #ccc; 101 | } 102 | .form-horizontal .control-group > label { 103 | float: none; 104 | width: auto; 105 | padding-top: 0; 106 | text-align: left; 107 | } 108 | .form-horizontal .controls { 109 | margin-left: 0; 110 | } 111 | .form-horizontal .control-list { 112 | padding-top: 0; 113 | } 114 | .form-horizontal .form-actions { 115 | padding-right: 10px; 116 | padding-left: 10px; 117 | } 118 | .modal { 119 | position: absolute; 120 | top: 10px; 121 | right: 10px; 122 | left: 10px; 123 | width: auto; 124 | margin: 0; 125 | } 126 | .modal.fade.in { 127 | top: auto; 128 | } 129 | .modal-header .close { 130 | padding: 10px; 131 | margin: -10px; 132 | } 133 | .carousel-caption { 134 | position: static; 135 | } 136 | } 137 | 138 | @media (max-width: 767px) { 139 | body { 140 | padding-right: 20px; 141 | padding-left: 20px; 142 | } 143 | .navbar-fixed-top, 144 | .navbar-fixed-bottom { 145 | margin-right: -20px; 146 | margin-left: -20px; 147 | } 148 | .container-fluid { 149 | padding: 0; 150 | } 151 | .dl-horizontal dt { 152 | float: none; 153 | width: auto; 154 | clear: none; 155 | text-align: left; 156 | } 157 | .dl-horizontal dd { 158 | margin-left: 0; 159 | } 160 | .container { 161 | width: auto; 162 | } 163 | .row-fluid { 164 | width: 100%; 165 | } 166 | .row, 167 | .thumbnails { 168 | margin-left: 0; 169 | } 170 | [class*="span"], 171 | .row-fluid [class*="span"] { 172 | display: block; 173 | float: none; 174 | width: auto; 175 | margin-left: 0; 176 | } 177 | .input-large, 178 | .input-xlarge, 179 | .input-xxlarge, 180 | input[class*="span"], 181 | select[class*="span"], 182 | textarea[class*="span"], 183 | .uneditable-input { 184 | display: block; 185 | width: 100%; 186 | min-height: 28px; 187 | -webkit-box-sizing: border-box; 188 | -moz-box-sizing: border-box; 189 | -ms-box-sizing: border-box; 190 | box-sizing: border-box; 191 | } 192 | .input-prepend input, 193 | .input-append input, 194 | .input-prepend input[class*="span"], 195 | .input-append input[class*="span"] { 196 | display: inline-block; 197 | width: auto; 198 | } 199 | } 200 | 201 | @media (min-width: 768px) and (max-width: 979px) { 202 | .row { 203 | margin-left: -20px; 204 | *zoom: 1; 205 | } 206 | .row:before, 207 | .row:after { 208 | display: table; 209 | content: ""; 210 | } 211 | .row:after { 212 | clear: both; 213 | } 214 | [class*="span"] { 215 | float: left; 216 | margin-left: 20px; 217 | } 218 | .container, 219 | .navbar-fixed-top .container, 220 | .navbar-fixed-bottom .container { 221 | width: 724px; 222 | } 223 | .span12 { 224 | width: 724px; 225 | } 226 | .span11 { 227 | width: 662px; 228 | } 229 | .span10 { 230 | width: 600px; 231 | } 232 | .span9 { 233 | width: 538px; 234 | } 235 | .span8 { 236 | width: 476px; 237 | } 238 | .span7 { 239 | width: 414px; 240 | } 241 | .span6 { 242 | width: 352px; 243 | } 244 | .span5 { 245 | width: 290px; 246 | } 247 | .span4 { 248 | width: 228px; 249 | } 250 | .span3 { 251 | width: 166px; 252 | } 253 | .span2 { 254 | width: 104px; 255 | } 256 | .span1 { 257 | width: 42px; 258 | } 259 | .offset12 { 260 | margin-left: 764px; 261 | } 262 | .offset11 { 263 | margin-left: 702px; 264 | } 265 | .offset10 { 266 | margin-left: 640px; 267 | } 268 | .offset9 { 269 | margin-left: 578px; 270 | } 271 | .offset8 { 272 | margin-left: 516px; 273 | } 274 | .offset7 { 275 | margin-left: 454px; 276 | } 277 | .offset6 { 278 | margin-left: 392px; 279 | } 280 | .offset5 { 281 | margin-left: 330px; 282 | } 283 | .offset4 { 284 | margin-left: 268px; 285 | } 286 | .offset3 { 287 | margin-left: 206px; 288 | } 289 | .offset2 { 290 | margin-left: 144px; 291 | } 292 | .offset1 { 293 | margin-left: 82px; 294 | } 295 | .row-fluid { 296 | width: 100%; 297 | *zoom: 1; 298 | } 299 | .row-fluid:before, 300 | .row-fluid:after { 301 | display: table; 302 | content: ""; 303 | } 304 | .row-fluid:after { 305 | clear: both; 306 | } 307 | .row-fluid [class*="span"] { 308 | display: block; 309 | float: left; 310 | width: 100%; 311 | min-height: 28px; 312 | margin-left: 2.762430939%; 313 | *margin-left: 2.709239449638298%; 314 | -webkit-box-sizing: border-box; 315 | -moz-box-sizing: border-box; 316 | -ms-box-sizing: border-box; 317 | box-sizing: border-box; 318 | } 319 | .row-fluid [class*="span"]:first-child { 320 | margin-left: 0; 321 | } 322 | .row-fluid .span12 { 323 | width: 99.999999993%; 324 | *width: 99.9468085036383%; 325 | } 326 | .row-fluid .span11 { 327 | width: 91.436464082%; 328 | *width: 91.38327259263829%; 329 | } 330 | .row-fluid .span10 { 331 | width: 82.87292817100001%; 332 | *width: 82.8197366816383%; 333 | } 334 | .row-fluid .span9 { 335 | width: 74.30939226%; 336 | *width: 74.25620077063829%; 337 | } 338 | .row-fluid .span8 { 339 | width: 65.74585634900001%; 340 | *width: 65.6926648596383%; 341 | } 342 | .row-fluid .span7 { 343 | width: 57.182320438000005%; 344 | *width: 57.129128948638304%; 345 | } 346 | .row-fluid .span6 { 347 | width: 48.618784527%; 348 | *width: 48.5655930376383%; 349 | } 350 | .row-fluid .span5 { 351 | width: 40.055248616%; 352 | *width: 40.0020571266383%; 353 | } 354 | .row-fluid .span4 { 355 | width: 31.491712705%; 356 | *width: 31.4385212156383%; 357 | } 358 | .row-fluid .span3 { 359 | width: 22.928176794%; 360 | *width: 22.874985304638297%; 361 | } 362 | .row-fluid .span2 { 363 | width: 14.364640883%; 364 | *width: 14.311449393638298%; 365 | } 366 | .row-fluid .span1 { 367 | width: 5.801104972%; 368 | *width: 5.747913482638298%; 369 | } 370 | input, 371 | textarea, 372 | .uneditable-input { 373 | margin-left: 0; 374 | } 375 | input.span12, 376 | textarea.span12, 377 | .uneditable-input.span12 { 378 | width: 714px; 379 | } 380 | input.span11, 381 | textarea.span11, 382 | .uneditable-input.span11 { 383 | width: 652px; 384 | } 385 | input.span10, 386 | textarea.span10, 387 | .uneditable-input.span10 { 388 | width: 590px; 389 | } 390 | input.span9, 391 | textarea.span9, 392 | .uneditable-input.span9 { 393 | width: 528px; 394 | } 395 | input.span8, 396 | textarea.span8, 397 | .uneditable-input.span8 { 398 | width: 466px; 399 | } 400 | input.span7, 401 | textarea.span7, 402 | .uneditable-input.span7 { 403 | width: 404px; 404 | } 405 | input.span6, 406 | textarea.span6, 407 | .uneditable-input.span6 { 408 | width: 342px; 409 | } 410 | input.span5, 411 | textarea.span5, 412 | .uneditable-input.span5 { 413 | width: 280px; 414 | } 415 | input.span4, 416 | textarea.span4, 417 | .uneditable-input.span4 { 418 | width: 218px; 419 | } 420 | input.span3, 421 | textarea.span3, 422 | .uneditable-input.span3 { 423 | width: 156px; 424 | } 425 | input.span2, 426 | textarea.span2, 427 | .uneditable-input.span2 { 428 | width: 94px; 429 | } 430 | input.span1, 431 | textarea.span1, 432 | .uneditable-input.span1 { 433 | width: 32px; 434 | } 435 | } 436 | 437 | @media (min-width: 1200px) { 438 | .row { 439 | margin-left: -30px; 440 | *zoom: 1; 441 | } 442 | .row:before, 443 | .row:after { 444 | display: table; 445 | content: ""; 446 | } 447 | .row:after { 448 | clear: both; 449 | } 450 | [class*="span"] { 451 | float: left; 452 | margin-left: 30px; 453 | } 454 | .container, 455 | .navbar-fixed-top .container, 456 | .navbar-fixed-bottom .container { 457 | width: 1170px; 458 | } 459 | .span12 { 460 | width: 1170px; 461 | } 462 | .span11 { 463 | width: 1070px; 464 | } 465 | .span10 { 466 | width: 970px; 467 | } 468 | .span9 { 469 | width: 870px; 470 | } 471 | .span8 { 472 | width: 770px; 473 | } 474 | .span7 { 475 | width: 670px; 476 | } 477 | .span6 { 478 | width: 570px; 479 | } 480 | .span5 { 481 | width: 470px; 482 | } 483 | .span4 { 484 | width: 370px; 485 | } 486 | .span3 { 487 | width: 270px; 488 | } 489 | .span2 { 490 | width: 170px; 491 | } 492 | .span1 { 493 | width: 70px; 494 | } 495 | .offset12 { 496 | margin-left: 1230px; 497 | } 498 | .offset11 { 499 | margin-left: 1130px; 500 | } 501 | .offset10 { 502 | margin-left: 1030px; 503 | } 504 | .offset9 { 505 | margin-left: 930px; 506 | } 507 | .offset8 { 508 | margin-left: 830px; 509 | } 510 | .offset7 { 511 | margin-left: 730px; 512 | } 513 | .offset6 { 514 | margin-left: 630px; 515 | } 516 | .offset5 { 517 | margin-left: 530px; 518 | } 519 | .offset4 { 520 | margin-left: 430px; 521 | } 522 | .offset3 { 523 | margin-left: 330px; 524 | } 525 | .offset2 { 526 | margin-left: 230px; 527 | } 528 | .offset1 { 529 | margin-left: 130px; 530 | } 531 | .row-fluid { 532 | width: 100%; 533 | *zoom: 1; 534 | } 535 | .row-fluid:before, 536 | .row-fluid:after { 537 | display: table; 538 | content: ""; 539 | } 540 | .row-fluid:after { 541 | clear: both; 542 | } 543 | .row-fluid [class*="span"] { 544 | display: block; 545 | float: left; 546 | width: 100%; 547 | min-height: 28px; 548 | margin-left: 2.564102564%; 549 | *margin-left: 2.510911074638298%; 550 | -webkit-box-sizing: border-box; 551 | -moz-box-sizing: border-box; 552 | -ms-box-sizing: border-box; 553 | box-sizing: border-box; 554 | } 555 | .row-fluid [class*="span"]:first-child { 556 | margin-left: 0; 557 | } 558 | .row-fluid .span12 { 559 | width: 100%; 560 | *width: 99.94680851063829%; 561 | } 562 | .row-fluid .span11 { 563 | width: 91.45299145300001%; 564 | *width: 91.3997999636383%; 565 | } 566 | .row-fluid .span10 { 567 | width: 82.905982906%; 568 | *width: 82.8527914166383%; 569 | } 570 | .row-fluid .span9 { 571 | width: 74.358974359%; 572 | *width: 74.30578286963829%; 573 | } 574 | .row-fluid .span8 { 575 | width: 65.81196581200001%; 576 | *width: 65.7587743226383%; 577 | } 578 | .row-fluid .span7 { 579 | width: 57.264957265%; 580 | *width: 57.2117657756383%; 581 | } 582 | .row-fluid .span6 { 583 | width: 48.717948718%; 584 | *width: 48.6647572286383%; 585 | } 586 | .row-fluid .span5 { 587 | width: 40.170940171000005%; 588 | *width: 40.117748681638304%; 589 | } 590 | .row-fluid .span4 { 591 | width: 31.623931624%; 592 | *width: 31.5707401346383%; 593 | } 594 | .row-fluid .span3 { 595 | width: 23.076923077%; 596 | *width: 23.0237315876383%; 597 | } 598 | .row-fluid .span2 { 599 | width: 14.529914530000001%; 600 | *width: 14.4767230406383%; 601 | } 602 | .row-fluid .span1 { 603 | width: 5.982905983%; 604 | *width: 5.929714493638298%; 605 | } 606 | input, 607 | textarea, 608 | .uneditable-input { 609 | margin-left: 0; 610 | } 611 | input.span12, 612 | textarea.span12, 613 | .uneditable-input.span12 { 614 | width: 1160px; 615 | } 616 | input.span11, 617 | textarea.span11, 618 | .uneditable-input.span11 { 619 | width: 1060px; 620 | } 621 | input.span10, 622 | textarea.span10, 623 | .uneditable-input.span10 { 624 | width: 960px; 625 | } 626 | input.span9, 627 | textarea.span9, 628 | .uneditable-input.span9 { 629 | width: 860px; 630 | } 631 | input.span8, 632 | textarea.span8, 633 | .uneditable-input.span8 { 634 | width: 760px; 635 | } 636 | input.span7, 637 | textarea.span7, 638 | .uneditable-input.span7 { 639 | width: 660px; 640 | } 641 | input.span6, 642 | textarea.span6, 643 | .uneditable-input.span6 { 644 | width: 560px; 645 | } 646 | input.span5, 647 | textarea.span5, 648 | .uneditable-input.span5 { 649 | width: 460px; 650 | } 651 | input.span4, 652 | textarea.span4, 653 | .uneditable-input.span4 { 654 | width: 360px; 655 | } 656 | input.span3, 657 | textarea.span3, 658 | .uneditable-input.span3 { 659 | width: 260px; 660 | } 661 | input.span2, 662 | textarea.span2, 663 | .uneditable-input.span2 { 664 | width: 160px; 665 | } 666 | input.span1, 667 | textarea.span1, 668 | .uneditable-input.span1 { 669 | width: 60px; 670 | } 671 | .thumbnails { 672 | margin-left: -30px; 673 | } 674 | .thumbnails > li { 675 | margin-left: 30px; 676 | } 677 | .row-fluid .thumbnails { 678 | margin-left: 0; 679 | } 680 | } 681 | 682 | @media (max-width: 979px) { 683 | body { 684 | padding-top: 0; 685 | } 686 | .navbar-fixed-top { 687 | position: static; 688 | margin-bottom: 18px; 689 | } 690 | .navbar-fixed-top .navbar-inner { 691 | padding: 5px; 692 | } 693 | .navbar .container { 694 | width: auto; 695 | padding: 0; 696 | } 697 | .navbar .brand { 698 | padding-right: 10px; 699 | padding-left: 10px; 700 | margin: 0 0 0 -5px; 701 | } 702 | .nav-collapse { 703 | clear: both; 704 | } 705 | .nav-collapse .nav { 706 | float: none; 707 | margin: 0 0 9px; 708 | } 709 | .nav-collapse .nav > li { 710 | float: none; 711 | } 712 | .nav-collapse .nav > li > a { 713 | margin-bottom: 2px; 714 | } 715 | .nav-collapse .nav > .divider-vertical { 716 | display: none; 717 | } 718 | .nav-collapse .nav .nav-header { 719 | color: #999999; 720 | text-shadow: none; 721 | } 722 | .nav-collapse .nav > li > a, 723 | .nav-collapse .dropdown-menu a { 724 | padding: 6px 15px; 725 | font-weight: bold; 726 | color: #999999; 727 | -webkit-border-radius: 3px; 728 | -moz-border-radius: 3px; 729 | border-radius: 3px; 730 | } 731 | .nav-collapse .btn { 732 | padding: 4px 10px 4px; 733 | font-weight: normal; 734 | -webkit-border-radius: 4px; 735 | -moz-border-radius: 4px; 736 | border-radius: 4px; 737 | } 738 | .nav-collapse .dropdown-menu li + li a { 739 | margin-bottom: 2px; 740 | } 741 | .nav-collapse .nav > li > a:hover, 742 | .nav-collapse .dropdown-menu a:hover { 743 | background-color: #222222; 744 | } 745 | .nav-collapse.in .btn-group { 746 | padding: 0; 747 | margin-top: 5px; 748 | } 749 | .nav-collapse .dropdown-menu { 750 | position: static; 751 | top: auto; 752 | left: auto; 753 | display: block; 754 | float: none; 755 | max-width: none; 756 | padding: 0; 757 | margin: 0 15px; 758 | background-color: transparent; 759 | border: none; 760 | -webkit-border-radius: 0; 761 | -moz-border-radius: 0; 762 | border-radius: 0; 763 | -webkit-box-shadow: none; 764 | -moz-box-shadow: none; 765 | box-shadow: none; 766 | } 767 | .nav-collapse .dropdown-menu:before, 768 | .nav-collapse .dropdown-menu:after { 769 | display: none; 770 | } 771 | .nav-collapse .dropdown-menu .divider { 772 | display: none; 773 | } 774 | .nav-collapse .navbar-form, 775 | .nav-collapse .navbar-search { 776 | float: none; 777 | padding: 9px 15px; 778 | margin: 9px 0; 779 | border-top: 1px solid #222222; 780 | border-bottom: 1px solid #222222; 781 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); 782 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); 783 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); 784 | } 785 | .navbar .nav-collapse .nav.pull-right { 786 | float: none; 787 | margin-left: 0; 788 | } 789 | .nav-collapse, 790 | .nav-collapse.collapse { 791 | height: 0; 792 | overflow: hidden; 793 | } 794 | .navbar .btn-navbar { 795 | display: block; 796 | } 797 | .navbar-static .navbar-inner { 798 | padding-right: 10px; 799 | padding-left: 10px; 800 | } 801 | } 802 | 803 | @media (min-width: 980px) { 804 | .nav-collapse.collapse { 805 | height: auto !important; 806 | overflow: visible !important; 807 | } 808 | } 809 | -------------------------------------------------------------------------------- /public/libs/bootstrap/css/bootstrap-responsive.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Responsive v2.0.3 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}@media(max-width:767px){.visible-phone{display:inherit!important}.hidden-phone{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(min-width:768px) and (max-width:979px){.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:18px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.modal{position:absolute;top:10px;right:10px;left:10px;width:auto;margin:0}.modal.fade.in{top:auto}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:auto;margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.762430939%;*margin-left:2.709239449638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.999999993%;*width:99.9468085036383%}.row-fluid .span11{width:91.436464082%;*width:91.38327259263829%}.row-fluid .span10{width:82.87292817100001%;*width:82.8197366816383%}.row-fluid .span9{width:74.30939226%;*width:74.25620077063829%}.row-fluid .span8{width:65.74585634900001%;*width:65.6926648596383%}.row-fluid .span7{width:57.182320438000005%;*width:57.129128948638304%}.row-fluid .span6{width:48.618784527%;*width:48.5655930376383%}.row-fluid .span5{width:40.055248616%;*width:40.0020571266383%}.row-fluid .span4{width:31.491712705%;*width:31.4385212156383%}.row-fluid .span3{width:22.928176794%;*width:22.874985304638297%}.row-fluid .span2{width:14.364640883%;*width:14.311449393638298%}.row-fluid .span1{width:5.801104972%;*width:5.747913482638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:714px}input.span11,textarea.span11,.uneditable-input.span11{width:652px}input.span10,textarea.span10,.uneditable-input.span10{width:590px}input.span9,textarea.span9,.uneditable-input.span9{width:528px}input.span8,textarea.span8,.uneditable-input.span8{width:466px}input.span7,textarea.span7,.uneditable-input.span7{width:404px}input.span6,textarea.span6,.uneditable-input.span6{width:342px}input.span5,textarea.span5,.uneditable-input.span5{width:280px}input.span4,textarea.span4,.uneditable-input.span4{width:218px}input.span3,textarea.span3,.uneditable-input.span3{width:156px}input.span2,textarea.span2,.uneditable-input.span2{width:94px}input.span1,textarea.span1,.uneditable-input.span1{width:32px}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:30px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.564102564%;*margin-left:2.510911074638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145300001%;*width:91.3997999636383%}.row-fluid .span10{width:82.905982906%;*width:82.8527914166383%}.row-fluid .span9{width:74.358974359%;*width:74.30578286963829%}.row-fluid .span8{width:65.81196581200001%;*width:65.7587743226383%}.row-fluid .span7{width:57.264957265%;*width:57.2117657756383%}.row-fluid .span6{width:48.717948718%;*width:48.6647572286383%}.row-fluid .span5{width:40.170940171000005%;*width:40.117748681638304%}.row-fluid .span4{width:31.623931624%;*width:31.5707401346383%}.row-fluid .span3{width:23.076923077%;*width:23.0237315876383%}.row-fluid .span2{width:14.529914530000001%;*width:14.4767230406383%}.row-fluid .span1{width:5.982905983%;*width:5.929714493638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:1160px}input.span11,textarea.span11,.uneditable-input.span11{width:1060px}input.span10,textarea.span10,.uneditable-input.span10{width:960px}input.span9,textarea.span9,.uneditable-input.span9{width:860px}input.span8,textarea.span8,.uneditable-input.span8{width:760px}input.span7,textarea.span7,.uneditable-input.span7{width:660px}input.span6,textarea.span6,.uneditable-input.span6{width:560px}input.span5,textarea.span5,.uneditable-input.span5{width:460px}input.span4,textarea.span4,.uneditable-input.span4{width:360px}input.span3,textarea.span3,.uneditable-input.span3{width:260px}input.span2,textarea.span2,.uneditable-input.span2{width:160px}input.span1,textarea.span1,.uneditable-input.span1{width:60px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top{position:static;margin-bottom:18px}.navbar-fixed-top .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 9px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#999;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#222}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222;border-bottom:1px solid #222;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} 10 | -------------------------------------------------------------------------------- /public/libs/bootstrap/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/searchly/searchly-nodejs-sample/9077a4d7c29ccec3f1934048c2954eed600f52ab/public/libs/bootstrap/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /public/libs/bootstrap/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/searchly/searchly-nodejs-sample/9077a4d7c29ccec3f1934048c2954eed600f52ab/public/libs/bootstrap/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /public/libs/bootstrap/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | /* =================================================== 2 | * bootstrap-transition.js v2.0.3 3 | * http://twitter.github.com/bootstrap/javascript.html#transitions 4 | * =================================================== 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ========================================================== */ 19 | 20 | 21 | !function ($) { 22 | 23 | $(function () { 24 | 25 | "use strict"; // jshint ;_; 26 | 27 | 28 | /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) 29 | * ======================================================= */ 30 | 31 | $.support.transition = (function () { 32 | 33 | var transitionEnd = (function () { 34 | 35 | var el = document.createElement('bootstrap') 36 | , transEndEventNames = { 37 | 'WebkitTransition' : 'webkitTransitionEnd' 38 | , 'MozTransition' : 'transitionend' 39 | , 'OTransition' : 'oTransitionEnd' 40 | , 'msTransition' : 'MSTransitionEnd' 41 | , 'transition' : 'transitionend' 42 | } 43 | , name 44 | 45 | for (name in transEndEventNames){ 46 | if (el.style[name] !== undefined) { 47 | return transEndEventNames[name] 48 | } 49 | } 50 | 51 | }()) 52 | 53 | return transitionEnd && { 54 | end: transitionEnd 55 | } 56 | 57 | })() 58 | 59 | }) 60 | 61 | }(window.jQuery);/* ========================================================== 62 | * bootstrap-alert.js v2.0.3 63 | * http://twitter.github.com/bootstrap/javascript.html#alerts 64 | * ========================================================== 65 | * Copyright 2012 Twitter, Inc. 66 | * 67 | * Licensed under the Apache License, Version 2.0 (the "License"); 68 | * you may not use this file except in compliance with the License. 69 | * You may obtain a copy of the License at 70 | * 71 | * http://www.apache.org/licenses/LICENSE-2.0 72 | * 73 | * Unless required by applicable law or agreed to in writing, software 74 | * distributed under the License is distributed on an "AS IS" BASIS, 75 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 76 | * See the License for the specific language governing permissions and 77 | * limitations under the License. 78 | * ========================================================== */ 79 | 80 | 81 | !function ($) { 82 | 83 | "use strict"; // jshint ;_; 84 | 85 | 86 | /* ALERT CLASS DEFINITION 87 | * ====================== */ 88 | 89 | var dismiss = '[data-dismiss="alert"]' 90 | , Alert = function (el) { 91 | $(el).on('click', dismiss, this.close) 92 | } 93 | 94 | Alert.prototype.close = function (e) { 95 | var $this = $(this) 96 | , selector = $this.attr('data-target') 97 | , $parent 98 | 99 | if (!selector) { 100 | selector = $this.attr('href') 101 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 102 | } 103 | 104 | $parent = $(selector) 105 | 106 | e && e.preventDefault() 107 | 108 | $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) 109 | 110 | $parent.trigger(e = $.Event('close')) 111 | 112 | if (e.isDefaultPrevented()) return 113 | 114 | $parent.removeClass('in') 115 | 116 | function removeElement() { 117 | $parent 118 | .trigger('closed') 119 | .remove() 120 | } 121 | 122 | $.support.transition && $parent.hasClass('fade') ? 123 | $parent.on($.support.transition.end, removeElement) : 124 | removeElement() 125 | } 126 | 127 | 128 | /* ALERT PLUGIN DEFINITION 129 | * ======================= */ 130 | 131 | $.fn.alert = function (option) { 132 | return this.each(function () { 133 | var $this = $(this) 134 | , data = $this.data('alert') 135 | if (!data) $this.data('alert', (data = new Alert(this))) 136 | if (typeof option == 'string') data[option].call($this) 137 | }) 138 | } 139 | 140 | $.fn.alert.Constructor = Alert 141 | 142 | 143 | /* ALERT DATA-API 144 | * ============== */ 145 | 146 | $(function () { 147 | $('body').on('click.alert.data-api', dismiss, Alert.prototype.close) 148 | }) 149 | 150 | }(window.jQuery);/* ============================================================ 151 | * bootstrap-button.js v2.0.3 152 | * http://twitter.github.com/bootstrap/javascript.html#buttons 153 | * ============================================================ 154 | * Copyright 2012 Twitter, Inc. 155 | * 156 | * Licensed under the Apache License, Version 2.0 (the "License"); 157 | * you may not use this file except in compliance with the License. 158 | * You may obtain a copy of the License at 159 | * 160 | * http://www.apache.org/licenses/LICENSE-2.0 161 | * 162 | * Unless required by applicable law or agreed to in writing, software 163 | * distributed under the License is distributed on an "AS IS" BASIS, 164 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 165 | * See the License for the specific language governing permissions and 166 | * limitations under the License. 167 | * ============================================================ */ 168 | 169 | 170 | !function ($) { 171 | 172 | "use strict"; // jshint ;_; 173 | 174 | 175 | /* BUTTON PUBLIC CLASS DEFINITION 176 | * ============================== */ 177 | 178 | var Button = function (element, options) { 179 | this.$element = $(element) 180 | this.options = $.extend({}, $.fn.button.defaults, options) 181 | } 182 | 183 | Button.prototype.setState = function (state) { 184 | var d = 'disabled' 185 | , $el = this.$element 186 | , data = $el.data() 187 | , val = $el.is('input') ? 'val' : 'html' 188 | 189 | state = state + 'Text' 190 | data.resetText || $el.data('resetText', $el[val]()) 191 | 192 | $el[val](data[state] || this.options[state]) 193 | 194 | // push to event loop to allow forms to submit 195 | setTimeout(function () { 196 | state == 'loadingText' ? 197 | $el.addClass(d).attr(d, d) : 198 | $el.removeClass(d).removeAttr(d) 199 | }, 0) 200 | } 201 | 202 | Button.prototype.toggle = function () { 203 | var $parent = this.$element.parent('[data-toggle="buttons-radio"]') 204 | 205 | $parent && $parent 206 | .find('.active') 207 | .removeClass('active') 208 | 209 | this.$element.toggleClass('active') 210 | } 211 | 212 | 213 | /* BUTTON PLUGIN DEFINITION 214 | * ======================== */ 215 | 216 | $.fn.button = function (option) { 217 | return this.each(function () { 218 | var $this = $(this) 219 | , data = $this.data('button') 220 | , options = typeof option == 'object' && option 221 | if (!data) $this.data('button', (data = new Button(this, options))) 222 | if (option == 'toggle') data.toggle() 223 | else if (option) data.setState(option) 224 | }) 225 | } 226 | 227 | $.fn.button.defaults = { 228 | loadingText: 'loading...' 229 | } 230 | 231 | $.fn.button.Constructor = Button 232 | 233 | 234 | /* BUTTON DATA-API 235 | * =============== */ 236 | 237 | $(function () { 238 | $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) { 239 | var $btn = $(e.target) 240 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') 241 | $btn.button('toggle') 242 | }) 243 | }) 244 | 245 | }(window.jQuery);/* ========================================================== 246 | * bootstrap-carousel.js v2.0.3 247 | * http://twitter.github.com/bootstrap/javascript.html#carousel 248 | * ========================================================== 249 | * Copyright 2012 Twitter, Inc. 250 | * 251 | * Licensed under the Apache License, Version 2.0 (the "License"); 252 | * you may not use this file except in compliance with the License. 253 | * You may obtain a copy of the License at 254 | * 255 | * http://www.apache.org/licenses/LICENSE-2.0 256 | * 257 | * Unless required by applicable law or agreed to in writing, software 258 | * distributed under the License is distributed on an "AS IS" BASIS, 259 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 260 | * See the License for the specific language governing permissions and 261 | * limitations under the License. 262 | * ========================================================== */ 263 | 264 | 265 | !function ($) { 266 | 267 | "use strict"; // jshint ;_; 268 | 269 | 270 | /* CAROUSEL CLASS DEFINITION 271 | * ========================= */ 272 | 273 | var Carousel = function (element, options) { 274 | this.$element = $(element) 275 | this.options = options 276 | this.options.slide && this.slide(this.options.slide) 277 | this.options.pause == 'hover' && this.$element 278 | .on('mouseenter', $.proxy(this.pause, this)) 279 | .on('mouseleave', $.proxy(this.cycle, this)) 280 | } 281 | 282 | Carousel.prototype = { 283 | 284 | cycle: function (e) { 285 | if (!e) this.paused = false 286 | this.options.interval 287 | && !this.paused 288 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) 289 | return this 290 | } 291 | 292 | , to: function (pos) { 293 | var $active = this.$element.find('.active') 294 | , children = $active.parent().children() 295 | , activePos = children.index($active) 296 | , that = this 297 | 298 | if (pos > (children.length - 1) || pos < 0) return 299 | 300 | if (this.sliding) { 301 | return this.$element.one('slid', function () { 302 | that.to(pos) 303 | }) 304 | } 305 | 306 | if (activePos == pos) { 307 | return this.pause().cycle() 308 | } 309 | 310 | return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) 311 | } 312 | 313 | , pause: function (e) { 314 | if (!e) this.paused = true 315 | clearInterval(this.interval) 316 | this.interval = null 317 | return this 318 | } 319 | 320 | , next: function () { 321 | if (this.sliding) return 322 | return this.slide('next') 323 | } 324 | 325 | , prev: function () { 326 | if (this.sliding) return 327 | return this.slide('prev') 328 | } 329 | 330 | , slide: function (type, next) { 331 | var $active = this.$element.find('.active') 332 | , $next = next || $active[type]() 333 | , isCycling = this.interval 334 | , direction = type == 'next' ? 'left' : 'right' 335 | , fallback = type == 'next' ? 'first' : 'last' 336 | , that = this 337 | , e = $.Event('slide') 338 | 339 | this.sliding = true 340 | 341 | isCycling && this.pause() 342 | 343 | $next = $next.length ? $next : this.$element.find('.item')[fallback]() 344 | 345 | if ($next.hasClass('active')) return 346 | 347 | if ($.support.transition && this.$element.hasClass('slide')) { 348 | this.$element.trigger(e) 349 | if (e.isDefaultPrevented()) return 350 | $next.addClass(type) 351 | $next[0].offsetWidth // force reflow 352 | $active.addClass(direction) 353 | $next.addClass(direction) 354 | this.$element.one($.support.transition.end, function () { 355 | $next.removeClass([type, direction].join(' ')).addClass('active') 356 | $active.removeClass(['active', direction].join(' ')) 357 | that.sliding = false 358 | setTimeout(function () { that.$element.trigger('slid') }, 0) 359 | }) 360 | } else { 361 | this.$element.trigger(e) 362 | if (e.isDefaultPrevented()) return 363 | $active.removeClass('active') 364 | $next.addClass('active') 365 | this.sliding = false 366 | this.$element.trigger('slid') 367 | } 368 | 369 | isCycling && this.cycle() 370 | 371 | return this 372 | } 373 | 374 | } 375 | 376 | 377 | /* CAROUSEL PLUGIN DEFINITION 378 | * ========================== */ 379 | 380 | $.fn.carousel = function (option) { 381 | return this.each(function () { 382 | var $this = $(this) 383 | , data = $this.data('carousel') 384 | , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) 385 | if (!data) $this.data('carousel', (data = new Carousel(this, options))) 386 | if (typeof option == 'number') data.to(option) 387 | else if (typeof option == 'string' || (option = options.slide)) data[option]() 388 | else if (options.interval) data.cycle() 389 | }) 390 | } 391 | 392 | $.fn.carousel.defaults = { 393 | interval: 5000 394 | , pause: 'hover' 395 | } 396 | 397 | $.fn.carousel.Constructor = Carousel 398 | 399 | 400 | /* CAROUSEL DATA-API 401 | * ================= */ 402 | 403 | $(function () { 404 | $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) { 405 | var $this = $(this), href 406 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 407 | , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data()) 408 | $target.carousel(options) 409 | e.preventDefault() 410 | }) 411 | }) 412 | 413 | }(window.jQuery);/* ============================================================= 414 | * bootstrap-collapse.js v2.0.3 415 | * http://twitter.github.com/bootstrap/javascript.html#collapse 416 | * ============================================================= 417 | * Copyright 2012 Twitter, Inc. 418 | * 419 | * Licensed under the Apache License, Version 2.0 (the "License"); 420 | * you may not use this file except in compliance with the License. 421 | * You may obtain a copy of the License at 422 | * 423 | * http://www.apache.org/licenses/LICENSE-2.0 424 | * 425 | * Unless required by applicable law or agreed to in writing, software 426 | * distributed under the License is distributed on an "AS IS" BASIS, 427 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 428 | * See the License for the specific language governing permissions and 429 | * limitations under the License. 430 | * ============================================================ */ 431 | 432 | 433 | !function ($) { 434 | 435 | "use strict"; // jshint ;_; 436 | 437 | 438 | /* COLLAPSE PUBLIC CLASS DEFINITION 439 | * ================================ */ 440 | 441 | var Collapse = function (element, options) { 442 | this.$element = $(element) 443 | this.options = $.extend({}, $.fn.collapse.defaults, options) 444 | 445 | if (this.options.parent) { 446 | this.$parent = $(this.options.parent) 447 | } 448 | 449 | this.options.toggle && this.toggle() 450 | } 451 | 452 | Collapse.prototype = { 453 | 454 | constructor: Collapse 455 | 456 | , dimension: function () { 457 | var hasWidth = this.$element.hasClass('width') 458 | return hasWidth ? 'width' : 'height' 459 | } 460 | 461 | , show: function () { 462 | var dimension 463 | , scroll 464 | , actives 465 | , hasData 466 | 467 | if (this.transitioning) return 468 | 469 | dimension = this.dimension() 470 | scroll = $.camelCase(['scroll', dimension].join('-')) 471 | actives = this.$parent && this.$parent.find('> .accordion-group > .in') 472 | 473 | if (actives && actives.length) { 474 | hasData = actives.data('collapse') 475 | if (hasData && hasData.transitioning) return 476 | actives.collapse('hide') 477 | hasData || actives.data('collapse', null) 478 | } 479 | 480 | this.$element[dimension](0) 481 | this.transition('addClass', $.Event('show'), 'shown') 482 | this.$element[dimension](this.$element[0][scroll]) 483 | } 484 | 485 | , hide: function () { 486 | var dimension 487 | if (this.transitioning) return 488 | dimension = this.dimension() 489 | this.reset(this.$element[dimension]()) 490 | this.transition('removeClass', $.Event('hide'), 'hidden') 491 | this.$element[dimension](0) 492 | } 493 | 494 | , reset: function (size) { 495 | var dimension = this.dimension() 496 | 497 | this.$element 498 | .removeClass('collapse') 499 | [dimension](size || 'auto') 500 | [0].offsetWidth 501 | 502 | this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') 503 | 504 | return this 505 | } 506 | 507 | , transition: function (method, startEvent, completeEvent) { 508 | var that = this 509 | , complete = function () { 510 | if (startEvent.type == 'show') that.reset() 511 | that.transitioning = 0 512 | that.$element.trigger(completeEvent) 513 | } 514 | 515 | this.$element.trigger(startEvent) 516 | 517 | if (startEvent.isDefaultPrevented()) return 518 | 519 | this.transitioning = 1 520 | 521 | this.$element[method]('in') 522 | 523 | $.support.transition && this.$element.hasClass('collapse') ? 524 | this.$element.one($.support.transition.end, complete) : 525 | complete() 526 | } 527 | 528 | , toggle: function () { 529 | this[this.$element.hasClass('in') ? 'hide' : 'show']() 530 | } 531 | 532 | } 533 | 534 | 535 | /* COLLAPSIBLE PLUGIN DEFINITION 536 | * ============================== */ 537 | 538 | $.fn.collapse = function (option) { 539 | return this.each(function () { 540 | var $this = $(this) 541 | , data = $this.data('collapse') 542 | , options = typeof option == 'object' && option 543 | if (!data) $this.data('collapse', (data = new Collapse(this, options))) 544 | if (typeof option == 'string') data[option]() 545 | }) 546 | } 547 | 548 | $.fn.collapse.defaults = { 549 | toggle: true 550 | } 551 | 552 | $.fn.collapse.Constructor = Collapse 553 | 554 | 555 | /* COLLAPSIBLE DATA-API 556 | * ==================== */ 557 | 558 | $(function () { 559 | $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { 560 | var $this = $(this), href 561 | , target = $this.attr('data-target') 562 | || e.preventDefault() 563 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 564 | , option = $(target).data('collapse') ? 'toggle' : $this.data() 565 | $(target).collapse(option) 566 | }) 567 | }) 568 | 569 | }(window.jQuery);/* ============================================================ 570 | * bootstrap-dropdown.js v2.0.3 571 | * http://twitter.github.com/bootstrap/javascript.html#dropdowns 572 | * ============================================================ 573 | * Copyright 2012 Twitter, Inc. 574 | * 575 | * Licensed under the Apache License, Version 2.0 (the "License"); 576 | * you may not use this file except in compliance with the License. 577 | * You may obtain a copy of the License at 578 | * 579 | * http://www.apache.org/licenses/LICENSE-2.0 580 | * 581 | * Unless required by applicable law or agreed to in writing, software 582 | * distributed under the License is distributed on an "AS IS" BASIS, 583 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 584 | * See the License for the specific language governing permissions and 585 | * limitations under the License. 586 | * ============================================================ */ 587 | 588 | 589 | !function ($) { 590 | 591 | "use strict"; // jshint ;_; 592 | 593 | 594 | /* DROPDOWN CLASS DEFINITION 595 | * ========================= */ 596 | 597 | var toggle = '[data-toggle="dropdown"]' 598 | , Dropdown = function (element) { 599 | var $el = $(element).on('click.dropdown.data-api', this.toggle) 600 | $('html').on('click.dropdown.data-api', function () { 601 | $el.parent().removeClass('open') 602 | }) 603 | } 604 | 605 | Dropdown.prototype = { 606 | 607 | constructor: Dropdown 608 | 609 | , toggle: function (e) { 610 | var $this = $(this) 611 | , $parent 612 | , selector 613 | , isActive 614 | 615 | if ($this.is('.disabled, :disabled')) return 616 | 617 | selector = $this.attr('data-target') 618 | 619 | if (!selector) { 620 | selector = $this.attr('href') 621 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 622 | } 623 | 624 | $parent = $(selector) 625 | $parent.length || ($parent = $this.parent()) 626 | 627 | isActive = $parent.hasClass('open') 628 | 629 | clearMenus() 630 | 631 | if (!isActive) $parent.toggleClass('open') 632 | 633 | return false 634 | } 635 | 636 | } 637 | 638 | function clearMenus() { 639 | $(toggle).parent().removeClass('open') 640 | } 641 | 642 | 643 | /* DROPDOWN PLUGIN DEFINITION 644 | * ========================== */ 645 | 646 | $.fn.dropdown = function (option) { 647 | return this.each(function () { 648 | var $this = $(this) 649 | , data = $this.data('dropdown') 650 | if (!data) $this.data('dropdown', (data = new Dropdown(this))) 651 | if (typeof option == 'string') data[option].call($this) 652 | }) 653 | } 654 | 655 | $.fn.dropdown.Constructor = Dropdown 656 | 657 | 658 | /* APPLY TO STANDARD DROPDOWN ELEMENTS 659 | * =================================== */ 660 | 661 | $(function () { 662 | $('html').on('click.dropdown.data-api', clearMenus) 663 | $('body') 664 | .on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() }) 665 | .on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) 666 | }) 667 | 668 | }(window.jQuery);/* ========================================================= 669 | * bootstrap-modal.js v2.0.3 670 | * http://twitter.github.com/bootstrap/javascript.html#modals 671 | * ========================================================= 672 | * Copyright 2012 Twitter, Inc. 673 | * 674 | * Licensed under the Apache License, Version 2.0 (the "License"); 675 | * you may not use this file except in compliance with the License. 676 | * You may obtain a copy of the License at 677 | * 678 | * http://www.apache.org/licenses/LICENSE-2.0 679 | * 680 | * Unless required by applicable law or agreed to in writing, software 681 | * distributed under the License is distributed on an "AS IS" BASIS, 682 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 683 | * See the License for the specific language governing permissions and 684 | * limitations under the License. 685 | * ========================================================= */ 686 | 687 | 688 | !function ($) { 689 | 690 | "use strict"; // jshint ;_; 691 | 692 | 693 | /* MODAL CLASS DEFINITION 694 | * ====================== */ 695 | 696 | var Modal = function (content, options) { 697 | this.options = options 698 | this.$element = $(content) 699 | .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) 700 | } 701 | 702 | Modal.prototype = { 703 | 704 | constructor: Modal 705 | 706 | , toggle: function () { 707 | return this[!this.isShown ? 'show' : 'hide']() 708 | } 709 | 710 | , show: function () { 711 | var that = this 712 | , e = $.Event('show') 713 | 714 | this.$element.trigger(e) 715 | 716 | if (this.isShown || e.isDefaultPrevented()) return 717 | 718 | $('body').addClass('modal-open') 719 | 720 | this.isShown = true 721 | 722 | escape.call(this) 723 | backdrop.call(this, function () { 724 | var transition = $.support.transition && that.$element.hasClass('fade') 725 | 726 | if (!that.$element.parent().length) { 727 | that.$element.appendTo(document.body) //don't move modals dom position 728 | } 729 | 730 | that.$element 731 | .show() 732 | 733 | if (transition) { 734 | that.$element[0].offsetWidth // force reflow 735 | } 736 | 737 | that.$element.addClass('in') 738 | 739 | transition ? 740 | that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : 741 | that.$element.trigger('shown') 742 | 743 | }) 744 | } 745 | 746 | , hide: function (e) { 747 | e && e.preventDefault() 748 | 749 | var that = this 750 | 751 | e = $.Event('hide') 752 | 753 | this.$element.trigger(e) 754 | 755 | if (!this.isShown || e.isDefaultPrevented()) return 756 | 757 | this.isShown = false 758 | 759 | $('body').removeClass('modal-open') 760 | 761 | escape.call(this) 762 | 763 | this.$element.removeClass('in') 764 | 765 | $.support.transition && this.$element.hasClass('fade') ? 766 | hideWithTransition.call(this) : 767 | hideModal.call(this) 768 | } 769 | 770 | } 771 | 772 | 773 | /* MODAL PRIVATE METHODS 774 | * ===================== */ 775 | 776 | function hideWithTransition() { 777 | var that = this 778 | , timeout = setTimeout(function () { 779 | that.$element.off($.support.transition.end) 780 | hideModal.call(that) 781 | }, 500) 782 | 783 | this.$element.one($.support.transition.end, function () { 784 | clearTimeout(timeout) 785 | hideModal.call(that) 786 | }) 787 | } 788 | 789 | function hideModal(that) { 790 | this.$element 791 | .hide() 792 | .trigger('hidden') 793 | 794 | backdrop.call(this) 795 | } 796 | 797 | function backdrop(callback) { 798 | var that = this 799 | , animate = this.$element.hasClass('fade') ? 'fade' : '' 800 | 801 | if (this.isShown && this.options.backdrop) { 802 | var doAnimate = $.support.transition && animate 803 | 804 | this.$backdrop = $('