diff --git a/.gitignore b/.gitignore index c489503..2efcfbf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,12 @@ -node_modules -bower_components +node_modules/ +.idea/ package-lock.json +**/.DS_Store +.yo-rc.json +public/dist/ +**/*.css +**/*.map +logs/ +settings.json +.vscode +webpack-stats.json diff --git a/index.js b/index.js new file mode 100644 index 0000000..e69de29 diff --git a/legacy/.gitignore b/legacy/.gitignore new file mode 100644 index 0000000..c489503 --- /dev/null +++ b/legacy/.gitignore @@ -0,0 +1,3 @@ +node_modules +bower_components +package-lock.json diff --git a/.hound.yml b/legacy/.hound.yml similarity index 100% rename from .hound.yml rename to legacy/.hound.yml diff --git a/.jshintrc b/legacy/.jshintrc similarity index 100% rename from .jshintrc rename to legacy/.jshintrc diff --git a/.travis.yml b/legacy/.travis.yml similarity index 100% rename from .travis.yml rename to legacy/.travis.yml diff --git a/README.md b/legacy/README.md similarity index 100% rename from README.md rename to legacy/README.md diff --git a/app.js b/legacy/app.js similarity index 100% rename from app.js rename to legacy/app.js diff --git a/demo/css/style.css b/legacy/demo/css/style.css similarity index 100% rename from demo/css/style.css rename to legacy/demo/css/style.css diff --git a/demo/index.html b/legacy/demo/index.html similarity index 100% rename from demo/index.html rename to legacy/demo/index.html diff --git a/demo/js/jquery.ui.mouse.js b/legacy/demo/js/jquery.ui.mouse.js similarity index 100% rename from demo/js/jquery.ui.mouse.js rename to legacy/demo/js/jquery.ui.mouse.js diff --git a/demo/js/jquery.ui.slider.js b/legacy/demo/js/jquery.ui.slider.js similarity index 100% rename from demo/js/jquery.ui.slider.js rename to legacy/demo/js/jquery.ui.slider.js diff --git a/demo/js/jquery.ui.widget.js b/legacy/demo/js/jquery.ui.widget.js similarity index 100% rename from demo/js/jquery.ui.widget.js rename to legacy/demo/js/jquery.ui.widget.js diff --git a/demo/search_auto.html b/legacy/demo/search_auto.html similarity index 100% rename from demo/search_auto.html rename to legacy/demo/search_auto.html diff --git a/images/facet_block.png b/legacy/images/facet_block.png similarity index 100% rename from images/facet_block.png rename to legacy/images/facet_block.png diff --git a/images/loader.gif b/legacy/images/loader.gif similarity index 100% rename from images/loader.gif rename to legacy/images/loader.gif diff --git a/images/result_block.png b/legacy/images/result_block.png similarity index 100% rename from images/result_block.png rename to legacy/images/result_block.png diff --git a/images/search-icon-demo.png b/legacy/images/search-icon-demo.png similarity index 100% rename from images/search-icon-demo.png rename to legacy/images/search-icon-demo.png diff --git a/images/search_layout.png b/legacy/images/search_layout.png similarity index 100% rename from images/search_layout.png rename to legacy/images/search_layout.png diff --git a/images/search_template_basic.png b/legacy/images/search_template_basic.png similarity index 100% rename from images/search_template_basic.png rename to legacy/images/search_template_basic.png diff --git a/images/selected_facet_layout.png b/legacy/images/selected_facet_layout.png similarity index 100% rename from images/selected_facet_layout.png rename to legacy/images/selected_facet_layout.png diff --git a/images/tick-demo.png b/legacy/images/tick-demo.png similarity index 100% rename from images/tick-demo.png rename to legacy/images/tick-demo.png diff --git a/index.html b/legacy/index.html similarity index 100% rename from index.html rename to legacy/index.html diff --git a/karma.conf.js b/legacy/karma.conf.js similarity index 100% rename from karma.conf.js rename to legacy/karma.conf.js diff --git a/mock/bannerResponse.json b/legacy/mock/bannerResponse.json similarity index 100% rename from mock/bannerResponse.json rename to legacy/mock/bannerResponse.json diff --git a/mock/redirect.json b/legacy/mock/redirect.json similarity index 100% rename from mock/redirect.json rename to legacy/mock/redirect.json diff --git a/mock/searchTestResponse.json b/legacy/mock/searchTestResponse.json similarity index 100% rename from mock/searchTestResponse.json rename to legacy/mock/searchTestResponse.json diff --git a/mock/spellCheckWithResults.json b/legacy/mock/spellCheckWithResults.json similarity index 100% rename from mock/spellCheckWithResults.json rename to legacy/mock/spellCheckWithResults.json diff --git a/mock/spellCheckWithZeroResults.json b/legacy/mock/spellCheckWithZeroResults.json similarity index 100% rename from mock/spellCheckWithZeroResults.json rename to legacy/mock/spellCheckWithZeroResults.json diff --git a/mock/userInfo.json b/legacy/mock/userInfo.json similarity index 100% rename from mock/userInfo.json rename to legacy/mock/userInfo.json diff --git a/mock/zeroResult.json b/legacy/mock/zeroResult.json similarity index 100% rename from mock/zeroResult.json rename to legacy/mock/zeroResult.json diff --git a/legacy/package-lock.json b/legacy/package-lock.json new file mode 100644 index 0000000..4e6a721 --- /dev/null +++ b/legacy/package-lock.json @@ -0,0 +1,3301 @@ +{ + "name": "js-sdk", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "addressparser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-0.3.2.tgz", + "integrity": "sha1-WYc/Nej89sc2HBAjkmHXbhU0i7I=" + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "dev": true + }, + "buildmail": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-2.0.0.tgz", + "integrity": "sha1-8LewpZ6aShtQZrv6BR0kjzgy7s4=", + "requires": { + "addressparser": "0.3.2", + "libbase64": "0.1.0", + "libmime": "1.2.0", + "libqp": "1.1.0", + "needle": "0.10.0" + }, + "dependencies": { + "needle": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-0.10.0.tgz", + "integrity": "sha1-FqJNY/KmEVLrdMzh0Sr4XFB1d9Q=", + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.23" + } + } + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "deep-eql": "0.1.3", + "type-detect": "1.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.4", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "colors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", + "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==" + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "4.17.10" + }, + "dependencies": { + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + } + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "1.1.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "1.3.2", + "utils-merge": "1.0.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "optional": true + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.1", + "void-elements": "2.0.1" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" + }, + "dependencies": { + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "0.1.1" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "0.1.1", + "repeat-string": "0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.4" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.0.0", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "follow-redirects": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz", + "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==", + "dev": true, + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "formatio": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", + "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", + "dev": true, + "requires": { + "samsam": "1.1.2" + } + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "pinkie-promise": "2.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "3.1.0", + "follow-redirects": "1.5.0", + "requires-port": "1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jquery": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-1.9.1.tgz", + "integrity": "sha1-5M1INfqu+63lNYV2E8D8P/KtrzQ=", + "dev": true + }, + "jquery-ui": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.0.tgz", + "integrity": "sha1-WcYDei2cV+miUhqbeklxFtQbQkY=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "karma": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", + "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "body-parser": "1.18.3", + "chokidar": "1.7.0", + "colors": "1.3.0", + "combine-lists": "1.0.1", + "connect": "3.6.6", + "core-js": "2.5.7", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "http-proxy": "1.17.0", + "isbinaryfile": "3.0.2", + "lodash": "3.10.1", + "log4js": "0.6.38", + "mime": "1.6.0", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.2.0", + "range-parser": "1.2.0", + "rimraf": "2.6.2", + "safe-buffer": "5.1.2", + "socket.io": "1.7.3", + "source-map": "0.5.7", + "tmp": "0.0.31", + "useragent": "2.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "karma-chai": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", + "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=", + "dev": true + }, + "karma-fixture": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/karma-fixture/-/karma-fixture-0.2.6.tgz", + "integrity": "sha1-lxzqjCFtc/BwQ5ZMtz8Q4IMAGO8=", + "dev": true + }, + "karma-handlebars-preprocessor": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/karma-handlebars-preprocessor/-/karma-handlebars-preprocessor-0.3.0.tgz", + "integrity": "sha1-wTXmwhVKBVj5es/AKo29jF7yiUs=", + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "karma-html2js-preprocessor": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-html2js-preprocessor/-/karma-html2js-preprocessor-1.1.0.tgz", + "integrity": "sha1-/Ant8Eu+K7bu6boZaPgmtziAIL0=", + "dev": true + }, + "karma-jquery": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/karma-jquery/-/karma-jquery-0.1.0.tgz", + "integrity": "sha1-fcRzfY2kKNfTxkVcQgER3MAhf7Y=", + "dev": true + }, + "karma-json-fixtures-preprocessor": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/karma-json-fixtures-preprocessor/-/karma-json-fixtures-preprocessor-0.0.6.tgz", + "integrity": "sha1-T3ii6800OH+OVaur/2NGVRZMTHY=", + "dev": true + }, + "karma-mocha": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-0.1.10.tgz", + "integrity": "sha1-Ke1R1LEhrxNzRE7FVbIKkFv0K5I=", + "dev": true + }, + "karma-phantomjs-launcher": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", + "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", + "dev": true, + "requires": { + "lodash": "4.17.10", + "phantomjs-prebuilt": "2.1.16" + }, + "dependencies": { + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + } + } + }, + "karma-sinon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", + "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=", + "dev": true + }, + "karma-spec-reporter": { + "version": "0.0.26", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.26.tgz", + "integrity": "sha1-v1VhN33OG2PPLJdcGvPjXxmeImU=", + "dev": true, + "requires": { + "colors": "0.6.2" + }, + "dependencies": { + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + } + } + }, + "karma-verbose-reporter": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/karma-verbose-reporter/-/karma-verbose-reporter-0.0.3.tgz", + "integrity": "sha1-iSUel/bW5HDcVcdZ5oFTBDwHAxw=", + "dev": true, + "requires": { + "colors": "1.3.0" + } + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "libbase64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=" + }, + "libmime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-1.2.0.tgz", + "integrity": "sha1-jYS087Ils3BEECNu9JSQZDa6dCs=", + "requires": { + "iconv-lite": "0.4.23", + "libbase64": "0.1.0", + "libqp": "1.1.0" + } + }, + "libqp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=" + }, + "linerstream": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/linerstream/-/linerstream-0.1.4.tgz", + "integrity": "sha1-Xee/afqisPnYXoMyCZtw5BmoRdU=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "semver": "4.3.6" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "lolex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", + "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "mailcomposer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-2.1.0.tgz", + "integrity": "sha1-plMYIomWFP7omckiJtgeK5y7GD0=", + "requires": { + "buildmail": "2.0.0", + "libmime": "1.2.0" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mocha": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.8", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "he": "1.1.1", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, + "needle": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-0.11.0.tgz", + "integrity": "sha1-AqcbAI6vfVWuifuf12hbe4jXvCk=", + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.23" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "nodemailer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-1.11.0.tgz", + "integrity": "sha1-TmnLObAwFbHR7wx4qBVBK56Xb3k=", + "requires": { + "libmime": "1.2.0", + "mailcomposer": "2.1.0", + "needle": "0.11.0", + "nodemailer-direct-transport": "1.1.0", + "nodemailer-smtp-transport": "1.1.0" + } + }, + "nodemailer-direct-transport": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-1.1.0.tgz", + "integrity": "sha1-oveHCO5vFuoFc/yClJ0Tj/Fy9iQ=", + "requires": { + "smtp-connection": "1.3.8" + } + }, + "nodemailer-smtp-transport": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-1.1.0.tgz", + "integrity": "sha1-5sN/MYhaswgOfe089SjErX5pE5g=", + "requires": { + "clone": "1.0.4", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "1.3.8" + } + }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=" + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "phantom": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/phantom/-/phantom-2.1.21.tgz", + "integrity": "sha1-drd5D/Ys8J++kiroRLn7dFzouyg=", + "dev": true, + "requires": { + "linerstream": "0.1.4", + "phantomjs-prebuilt": "2.1.16", + "winston": "2.4.3" + } + }, + "phantomjs-prebuilt": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", + "dev": true, + "requires": { + "es6-promise": "4.2.4", + "extract-zip": "1.6.7", + "fs-extra": "1.0.0", + "hasha": "2.2.0", + "kew": "0.7.0", + "progress": "1.1.8", + "request": "2.87.0", + "request-progress": "2.0.1", + "which": "1.3.1" + } + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "1.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "samsam": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", + "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", + "dev": true + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sinon": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", + "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", + "dev": true, + "requires": { + "formatio": "1.1.1", + "lolex": "1.3.2", + "samsam": "1.1.2", + "util": "0.11.0" + } + }, + "smtp-connection": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-1.3.8.tgz", + "integrity": "sha1-VYMsIWDPswhuHc2H/RwZ+mG39TY=" + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "dev": true + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "tmp": "0.0.31" + } + }, + "util": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.0.tgz", + "integrity": "sha512-5n12uMzKCjvB2HPFHnbQSjaqAa98L5iIXmHrZCLavuZVe0qe/SJGbDGWlpaHk5lnBkWRDO+dRu1/PgmUYKPPTw==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "winston": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.3.tgz", + "integrity": "sha512-GYKuysPz2pxYAVJD2NPsDLP5Z79SDEzPm9/j4tCjkF/n89iBNGBMJcR+dMUqxgPNgoSs6fVygPi+Vl2oxIpBuw==", + "dev": true, + "requires": { + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "stack-trace": "0.0.10" + }, + "dependencies": { + "async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", + "dev": true + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/legacy/package.json b/legacy/package.json new file mode 100644 index 0000000..3c398de --- /dev/null +++ b/legacy/package.json @@ -0,0 +1,50 @@ +{ + "name": "js-sdk", + "version": "1.0.0", + "description": "Unbxd JavaScript Search library =============================== [![Build Status](https://secure.travis-ci.org/emberjs/ember-rails.svg?branch=master)](http://travis-ci.org/emberjs/ember-rails) unbxdSearch.js library can be used to integrated UNBXD search or browse on client side. It supports History API, so users can share the URI.", + "main": "unbxd-sdk.js", + "directories": { + "test": "tests" + }, + "dependencies": { + "colors": "^1.0.3", + "cryptiles": "^4.1.2", + "hoek": "^4.2.1", + "nodemailer": "^5.1.1", + "sshpk": "^1.13.2" + }, + "scripts": { + "test": "karma start" + }, + "repository": { + "type": "git", + "url": "https://github.com/unbxd/js-sdk.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/unbxd/js-sdk/issues" + }, + "homepage": "https://github.com/unbxd/js-sdk", + "devDependencies": { + "chai": "^4.2.0", + "handlebars": "^4.0.5", + "jquery": "^3.3.1", + "jquery-ui": "^1.12.1", + "karma": "^4.0.0", + "karma-chai": "^0.1.0", + "karma-fixture": "^0.2.6", + "karma-handlebars-preprocessor": "^0.3.0", + "karma-html2js-preprocessor": "^1.0.0", + "karma-jquery": "^0.2.3", + "karma-json-fixtures-preprocessor": "0.0.6", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "karma-sinon": "^1.0.5", + "karma-spec-reporter": "0.0.32", + "karma-verbose-reporter": "0.0.6", + "mocha": "^6.0.1", + "phantom": "^6.0.3", + "sinon": "^7.2.4" + } +} diff --git a/test/navigation/init.spec.js b/legacy/test/navigation/init.spec.js similarity index 100% rename from test/navigation/init.spec.js rename to legacy/test/navigation/init.spec.js diff --git a/test/search/autoscroll.spec.js b/legacy/test/search/autoscroll.spec.js similarity index 100% rename from test/search/autoscroll.spec.js rename to legacy/test/search/autoscroll.spec.js diff --git a/test/search/banner.spec.js b/legacy/test/search/banner.spec.js similarity index 100% rename from test/search/banner.spec.js rename to legacy/test/search/banner.spec.js diff --git a/test/search/clickNscroll.spec.js b/legacy/test/search/clickNscroll.spec.js similarity index 100% rename from test/search/clickNscroll.spec.js rename to legacy/test/search/clickNscroll.spec.js diff --git a/test/search/facets.spec.js b/legacy/test/search/facets.spec.js similarity index 100% rename from test/search/facets.spec.js rename to legacy/test/search/facets.spec.js diff --git a/test/search/init.spec.js b/legacy/test/search/init.spec.js similarity index 100% rename from test/search/init.spec.js rename to legacy/test/search/init.spec.js diff --git a/test/search/jqueryVersion.spec.js b/legacy/test/search/jqueryVersion.spec.js similarity index 100% rename from test/search/jqueryVersion.spec.js rename to legacy/test/search/jqueryVersion.spec.js diff --git a/test/search/noResult.spec.js b/legacy/test/search/noResult.spec.js similarity index 100% rename from test/search/noResult.spec.js rename to legacy/test/search/noResult.spec.js diff --git a/test/search/pageSize.spec.js b/legacy/test/search/pageSize.spec.js similarity index 100% rename from test/search/pageSize.spec.js rename to legacy/test/search/pageSize.spec.js diff --git a/test/search/pagination.spec.js b/legacy/test/search/pagination.spec.js similarity index 100% rename from test/search/pagination.spec.js rename to legacy/test/search/pagination.spec.js diff --git a/test/search/redirect.spec.js b/legacy/test/search/redirect.spec.js similarity index 100% rename from test/search/redirect.spec.js rename to legacy/test/search/redirect.spec.js diff --git a/test/search/sort.spec.js b/legacy/test/search/sort.spec.js similarity index 100% rename from test/search/sort.spec.js rename to legacy/test/search/sort.spec.js diff --git a/test/search/spellCheckWithResult.spec.js b/legacy/test/search/spellCheckWithResult.spec.js similarity index 100% rename from test/search/spellCheckWithResult.spec.js rename to legacy/test/search/spellCheckWithResult.spec.js diff --git a/test/search/spellCheckZeroResult.spec.js b/legacy/test/search/spellCheckZeroResult.spec.js similarity index 100% rename from test/search/spellCheckZeroResult.spec.js rename to legacy/test/search/spellCheckZeroResult.spec.js diff --git a/test/search/userinfo.spec.js b/legacy/test/search/userinfo.spec.js similarity index 100% rename from test/search/userinfo.spec.js rename to legacy/test/search/userinfo.spec.js diff --git a/test/search/viewType.spec.js b/legacy/test/search/viewType.spec.js similarity index 100% rename from test/search/viewType.spec.js rename to legacy/test/search/viewType.spec.js diff --git a/tests/tester.js b/legacy/tests/tester.js similarity index 100% rename from tests/tester.js rename to legacy/tests/tester.js diff --git a/unbxd-sdk.js b/legacy/unbxd-sdk.js similarity index 100% rename from unbxd-sdk.js rename to legacy/unbxd-sdk.js diff --git a/unbxdAutosuggest.css b/legacy/unbxdAutosuggest.css similarity index 100% rename from unbxdAutosuggest.css rename to legacy/unbxdAutosuggest.css diff --git a/legacy/unbxdSearch.js b/legacy/unbxdSearch.js new file mode 100644 index 0000000..f057c9c --- /dev/null +++ b/legacy/unbxdSearch.js @@ -0,0 +1,2106 @@ +//uglifyjs unbxdSearch.js -o unbxdSearch.min.js && gzip -c unbxdSearch.min.js > unbxdSearch.min.js.gz && aws s3 cp unbxdSearch.min.js.gz s3://unbxd/unbxdSearch.js --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-encoding gzip --cache-control max-age=3600 +var unbxdSearchInit = function(jQuery, Handlebars) { + window.Unbxd = window.Unbxd || {}; + Unbxd.jsSdkVersion = "2.0.2"; + + // Production steps of ECMA-262, Edition 5, 15.4.4.14 + // Reference: http://es5.github.io/#x15.4.4.14 + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement, fromIndex) { + + var k; + + // 1. Let O be the result of calling ToObject passing + // the this value as the argument. + if (this == null) { + throw new TypeError('"this" is null or not defined'); + } + + var O = Object(this); + + // 2. Let lenValue be the result of calling the Get + // internal method of O with the argument "length". + // 3. Let len be ToUint32(lenValue). + var len = O.length >>> 0; + + // 4. If len is 0, return -1. + if (len === 0) { + return -1; + } + + // 5. If argument fromIndex was passed let n be + // ToInteger(fromIndex); else let n be 0. + var n = +fromIndex || 0; + + if (Math.abs(n) === Infinity) { + n = 0; + } + + // 6. If n >= len, return -1. + if (n >= len) { + return -1; + } + + // 7. If n >= 0, then Let k be n. + // 8. Else, n<0, Let k be len - abs(n). + // If k is less than 0, then let k be 0. + k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + + // 9. Repeat, while k < len + while (k < len) { + // a. Let Pk be ToString(k). + // This is implicit for LHS operands of the in operator + // b. Let kPresent be the result of calling the + // HasProperty internal method of O with argument Pk. + // This step can be combined with c + // c. If kPresent is true, then + // i. Let elementK be the result of calling the Get + // internal method of O with the argument ToString(k). + // ii. Let same be the result of applying the + // Strict Equality Comparison Algorithm to + // searchElement and elementK. + // iii. If same is true, return k. + if (k in O && O[k] === searchElement) { + return k; + } + k++; + } + return -1; + }; + } + + /** + * Shim for "fixing" IE's lack of support (IE < 9) for applying slice + * on host objects like NamedNodeMap, NodeList, and HTMLCollection + * (technically, since host objects have been implementation-dependent, + * at least before ES6, IE hasn't needed to work this way). + * Also works on strings, fixes IE < 9 to allow an explicit undefined + * for the 2nd argument (as in Firefox), and prevents errors when + * called on other DOM objects. + */ + (function() { + 'use strict'; + var _slice = Array.prototype.slice; + + try { + // Can't be used with DOM elements in IE < 9 + _slice.call(document.documentElement); + } catch (e) { // Fails in IE < 9 + // This will work for genuine arrays, array-like objects, + // NamedNodeMap (attributes, entities, notations), + // NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes), + // and will not fail on other DOM objects (as do DOM elements in IE < 9) + Array.prototype.slice = function(begin, end) { + // IE < 9 gets unhappy with an undefined end argument + end = (typeof end !== 'undefined') ? end : this.length; + + // For native Array objects, we use the native slice function + if (Object.prototype.toString.call(this) === '[object Array]') { + return _slice.call(this, begin, end); + } + + // For array like object we handle it ourselves. + var i, cloned = [], + size, len = this.length; + + // Handle negative value for "begin" + var start = begin || 0; + start = (start >= 0) ? start : Math.max(0, len + start); + + // Handle negative value for "end" + var upTo = (typeof end == 'number') ? Math.min(end, len) : len; + if (end < 0) { + upTo = len + end; + } + + // Actual expected size of the slice + size = upTo - start; + + if (size > 0) { + cloned = new Array(size); + if (this.charAt) { + for (i = 0; i < size; i++) { + cloned[i] = this.charAt(start + i); + } + } else { + for (i = 0; i < size; i++) { + cloned[i] = this[start + i]; + } + } + } + + return cloned; + }; + } + }()); + + if (!Function.prototype.bind) { + Function.prototype.bind = function(oThis) { + if (typeof this !== "function") { + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function() {}, + fBound = function() { + return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; + }; + } + + // Production steps of ECMA-262, Edition 5, 15.4.4.19 + // Reference: http://es5.github.io/#x15.4.4.19 + if (!Array.prototype.map) { + + Array.prototype.map = function(callback, thisArg) { + + var T, A, k; + + if (this == null) { + throw new TypeError(' this is null or not defined'); + } + + // 1. Let O be the result of calling ToObject passing the |this| + // value as the argument. + var O = Object(this); + + // 2. Let lenValue be the result of calling the Get internal + // method of O with the argument "length". + // 3. Let len be ToUint32(lenValue). + var len = O.length >>> 0; + + // 4. If IsCallable(callback) is false, throw a TypeError exception. + // See: http://es5.github.com/#x9.11 + if (typeof callback !== 'function') { + throw new TypeError(callback + ' is not a function'); + } + + // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. + if (arguments.length > 1) { + T = thisArg; + } + + // 6. Let A be a new array created as if by the expression new Array(len) + // where Array is the standard built-in constructor with that name and + // len is the value of len. + A = new Array(len); + + // 7. Let k be 0 + k = 0; + + // 8. Repeat, while k < len + while (k < len) { + + var kValue, mappedValue; + + // a. Let Pk be ToString(k). + // This is implicit for LHS operands of the in operator + // b. Let kPresent be the result of calling the HasProperty internal + // method of O with argument Pk. + // This step can be combined with c + // c. If kPresent is true, then + if (k in O) { + + // i. Let kValue be the result of calling the Get internal + // method of O with argument Pk. + kValue = O[k]; + + // ii. Let mappedValue be the result of calling the Call internal + // method of callback with T as the this value and argument + // list containing kValue, k, and O. + mappedValue = callback.call(T, kValue, k, O); + + // iii. Call the DefineOwnProperty internal method of A with arguments + // Pk, Property Descriptor + // { Value: mappedValue, + // Writable: true, + // Enumerable: true, + // Configurable: true }, + // and false. + + // In browsers that support Object.defineProperty, use the following: + // Object.defineProperty(A, k, { + // value: mappedValue, + // writable: true, + // enumerable: true, + // configurable: true + // }); + + // For best browser support, use the following: + A[k] = mappedValue; + } + // d. Increase k by 1. + k++; + } + + // 9. return A + return A; + }; + } + + if (!Array.prototype.filter) { + Array.prototype.filter = function(fun /*, thisArg*/ ) { + 'use strict'; + + if (this === void 0 || this === null) { + throw new TypeError(); + } + + var t = Object(this); + var len = t.length >>> 0; + if (typeof fun !== 'function') { + throw new TypeError(); + } + + var res = []; + var thisArg = arguments.length >= 2 ? arguments[1] : void 0; + for (var i = 0; i < len; i++) { + if (i in t) { + var val = t[i]; + + // NOTE: Technically this should Object.defineProperty at + // the next index, as push can be affected by + // properties on Object.prototype and Array.prototype. + // But that method's new, and collisions should be + // rare, so use the more-compatible alternative. + if (fun.call(thisArg, val, i, t)) { + res.push(val); + } + } + } + + return res; + }; + } + + // Production steps of ECMA-262, Edition 5, 15.4.4.21 + // Reference: http://es5.github.io/#x15.4.4.21 + if (!Array.prototype.reduce) { + Array.prototype.reduce = function(callback /*, initialValue*/ ) { + 'use strict'; + if (this == null) { + throw new TypeError('Array.prototype.reduce called on null or undefined'); + } + if (typeof callback !== 'function') { + throw new TypeError(callback + ' is not a function'); + } + var t = Object(this), + len = t.length >>> 0, + k = 0, + value; + if (arguments.length == 2) { + value = arguments[1]; + } else { + while (k < len && !(k in t)) { + k++; + } + if (k >= len) { + throw new TypeError('Reduce of empty array with no initial value'); + } + value = t[k++]; + } + for (; k < len; k++) { + if (k in t) { + value = callback(value, t[k], k, t); + } + } + return value; + }; + } + + if (!Object.keys) Object.keys = function(o) { + if (o !== Object(o)) + throw new TypeError('Object.keys called on a non-object'); + var k = [], + p; + for (p in o) + if (Object.prototype.hasOwnProperty.call(o, p)) k.push(p); + return k; + }; + + Array.prototype.getUnique = function() { + var u = {}, + a = []; + for (var i = 0, l = this.length; i < l; ++i) { + if (u.hasOwnProperty(this[i])) { + continue; + } + a.push(this[i]); + u[this[i]] = 1; + } + return a; + } + + if (typeof String.prototype.trim !== 'function') { + String.prototype.trim = function() { + return this.replace(/^\s+|\s+$/g, ''); + }; + }; + + Unbxd.setSearch = function(options) { + this.options = jQuery.extend({}, this.defaultOptions, options); + + this.init(); + } + + var isTypeSearch = function isTypeSearch(type) { + return type === "search"; + }; + + var isTypeBrowse = function isTypeBrowse(type) { + return type === "browse"; + }; + + var isTypeCategory = function isTypeCategory(type) { + return type === "category"; + }; + + var isTypeBrowseOrCategory = function isTypeBrowseOrCategory(type) { + return isTypeBrowse(type) || isTypeCategory(type); + }; + + var isCategoryIdPresent = function isCategoryIdPresent(params) { + return ("categoryId" in params && params.categoryId.trim().length > 0); + }; + + var isQueryPresent = function isQueryPresent(params) { + return ("query" in params && params.query.trim().length > 0); + }; + + Handlebars.registerHelper('prepareFacetName', function(txt) { + txt = txt.replace("_fq", ""); + return txt.replace("_", " "); + }); + + Handlebars.registerHelper('prepareFacetValue', function(txt) { + return txt.trim().length > 0 ? txt : "   "; + }); + + Unbxd.setSearch.prototype.defaultOptions = { + inputSelector: '#search_query', + searchButtonSelector: '#search_button', + type: "search", + getCategoryId: "", + deferInitRender: [], + spellCheck: '' // + , + spellCheckTemp: '

Did you mean : {{suggestion}}

', + searchQueryDisplay: '', + searchQueryDisplayTemp: '

Search results for {{query}} - {{numberOfProducts}}

', + searchResultContainer: '', + searchResultSetTemp: '' //function or handlebars template, register any helpers if needed + , + isAutoScroll: false, + isClickNScroll: false, + isPagination: false, + setPagination: function(totalNumberOfProducts, pageSize, currentPage) {}, + paginationContainerSelector: '', + paginationTemp: [ + '{{#if hasFirst}}', + ' « ', + '{{/if}}', + '{{#if hasPrev}}', + ' < ', + '{{/if}}', + '{{#pages}}', + '{{#if current}}', + ' {{page}} ', + '{{else}}', + ' {{page}} ', + '{{/if}}', + '{{/pages}}', + ' of ', + '{{totalPages}}', + '{{#if hasNext}}', + ' > ', + '{{/if}}', + '{{#if hasLast}}', + '»', + '{{/if}}' + ].join(''), + clickNScrollElementSelector: '#load-more', + facetMultiSelect: true, + facetContainerSelector: '', + facetCheckBoxSelector: '', + selectedFacetTemp: ['{{#each filters}}', '
    ', '
  1. ', '{{prepareFacetName @key}}:', '{{#each this}}', '
    {{@key}}', '
    ', '{{/each}}', '
  2. ', '
', '{{/each}}'].join(''), + selectedFacetContainerSelector: "", + clearSelectedFacetsSelector: "", + removeSelectedFacetSelector: "", + loaderSelector: "", + onFacetLoad: "", + onIntialResultLoad: "", + onPageLoad: "", + sanitizeQueryString: function(q) { + return q; + }, + getFacetStats: "", + processFacetStats: function(obj) {}, + setDefaultFilters: function() {}, + fields: [], + onNoResult: function(obj) {}, + noEncoding: false, + heightDiffToTriggerNextPage: 100, + customReset: function() {}, + bannerSelector: "", + bannerTemp: '', + bannerCount: 1, + sortContainerSelector: '', + sortOptions: [{ + name: 'Relevancy' + }, { + name: 'Price: H-L', + field: 'price', + order: 'desc' + }, { + name: 'Price: L-H', + field: 'price', + order: 'asc' + }], + sortContainerType: 'select' /* value can be select or click */ , + sortContainerTemp: [ + '' + ].join(''), + pageSize: 12, + pageSizeContainerSelector: '', + pageSizeOptions: [{ + name: '12', + value: '12' + }, { + name: '24', + value: '24' + }], + pageSizeContainerType: 'select' /* value can be select or click */ , + pageSizeContainerTemp: [ + '' + ].join(''), + viewTypeContainerTemp: [ + '{{#options}}', + '
  • ', + '', + '', + '{{value}}', + '', + '', + '
  • ', + '{{/options}}' + ].join(''), + searchQueryParam: "q", + retainbaseParam: false, + baseParams: [], + requestHeaders: {} + }; + + jQuery.extend(Unbxd.setSearch.prototype, { + compiledResultTemp: false, + compiledSpellCheckTemp: false, + compiledSearchQueryTemp: false, + compiledFacetTemp: false, + compiledSelectedFacetTemp: false, + compiledBannerTemp: false, + compiledSortContainerTemp: false, + compiledPageSizeContainerTemp: false, + compiledPaginationTemp: false, + currentNumberOfProducts: 0, + totalNumberOfProducts: 0, + productStartIdx: 0, + productEndIdx: 0, + totalPages: 0, + isLoading: false, + params: { + query: '*', + filters: {}, + ranges: {}, + sort: {}, + categoryId: "", + extra: { + format: "json", + page: 1, + rows: 0 + } + }, + defaultParams: {}, + isHistory: !!(window.history && history.pushState), + popped: false //there is an edge case in Mozilla that fires popstate initially + , + initialURL: '', + isHashChange: false, + currentHash: "", + hashChangeInterval: null, + ajaxCall: null, + init: function() { + this.isHashChange = !!("onhashchange" in window.document.body); + + this.$input = jQuery(this.options.inputSelector); + this.$input.val(''); + this.input = this.$input[0]; + + this.setEvents(); + + this.reset(); + + var cur_url = this.getUrlSubstring(), + urlqueryparams = this.getQueryParams(cur_url) + // add test to check if the url is encoded, + // decode the query parameters only if url is encoded + // fixes SKU searches like writ0035/WRIT0035 & HSWD0015 + , + decodedParams = !(this.options.noEncoding && /[^A-Za-z0-9\+\/\=]/g.test(cur_url)) ? this.getQueryParams(this.decode(cur_url)) : {}, + queryparamcount = Object.keys(urlqueryparams).length, + decodedParamscount = Object.keys(decodedParams).length, + finalParams = null; + + if (!this.options.noEncoding && decodedParamscount > 0) { + finalParams = this._processURL(decodedParams); + } else { + finalParams = this._processURL(urlqueryparams); + } + + if (this.options.deferInitRender.indexOf('search') > -1 && + !this.isUsingPagination() && + finalParams.extra.hasOwnProperty('page') && + finalParams.extra.page >= 1) + finalParams.extra.page = finalParams.extra.page + 1; + + this.params = finalParams; + + this.params.categoryId = isTypeBrowseOrCategory(this.options.type) && + typeof this.options.getCategoryId == 'function' ? + this.options.getCategoryId() : + this.params.categoryId ? this.params.categoryId : ''; + + this.setPage("page" in finalParams.extra ? finalParams.extra.page : 1) + .setPageSize("rows" in finalParams.extra ? finalParams.extra.rows : this.options.pageSize); + + if (this.options.type == "search") { + if (this.input.value.trim().length) + this.params.query = this.$input.val().trim(); + else if (!("query" in this.params) || (this.params.query + "").trim().length == 0) + this.params.query = "*"; + + this.params.query = this.options.sanitizeQueryString.call(this, this.params.query); + + this.$input.val(this.params.query != "*" ? this.params.query : ""); + + if (this.options.deferInitRender.indexOf('search') === -1) + jQuery(this.options.searchResultContainer).html(''); + + } + + if (typeof this.options.setDefaultFilters == "function") + this.setDefaultParams(this.params); + + if ( + (isTypeSearch(this.options.type) && isQueryPresent(this.params)) || + (isTypeBrowseOrCategory(this.options.type) && isCategoryIdPresent(this.params)) + ) + this.callResults(this.paintResultSet); + }, + getClass: function(object) { + return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]; + }, + setEvents: function() { + var self = this; + + var changeViewType = function(e) { + e.preventDefault(); + var $t = jQuery(this); + var selected = $t.attr("unbxdviewtype"); + self.setViewType(selected); + if (selected && self.options.viewTypes.indexOf(selected) > -1) { + if (!self.isUsingPagination()) self.setPage(1); + if (self.options.deferInitRender.indexOf('search') > 0 && + !self.isUsingPagination()) self.setPage(2); + self.callResults(self.paintOnlyResultSet, true); + } + }; + + var changeSort = function(e) { + e.preventDefault(); + var $t = jQuery(this), + $selected = (e.type === 'change') ? $t.find(':selected') : + (e.currentTarget === e.target) ? $t : undefined, + field = $selected && $selected.attr('unbxdsortfield'), + value = $selected && $selected.attr('unbxdsortvalue'); + + if ($selected) { + self + .resetSort() + .setPage(1); + + if (field && value) + self.addSort(field, value); + + self.callResults(self.paintOnlyResultSet, true); + } + }; + + var changePageSize = function(e) { + e.preventDefault(); + var $t = jQuery(this), + $selected = (e.type === 'change') ? $t.find(':selected') : + (e.currentTarget === e.target) ? $t : undefined, + pageSize = $selected && $selected.attr('unbxdpagesize'); + + if ($selected && pageSize) { + self + .setPage(1) + .setPageSize(pageSize) + .callResults(self.paintOnlyResultSet, true); + } + }; + + if (this.options.type == "search") { + if ("form" in this.input && this.input.form) { + jQuery(this.input.form).bind("submit", function(e) { + e.preventDefault(); + + self.reset(); + + self.params.query = self.options.sanitizeQueryString.call(self, self.input.value); + + if (self.options.deferInitRender.indexOf('search') === -1) + jQuery(self.options.searchResultContainer).html(''); + + self.setPage(1) + .setPageSize(self.options.pageSize) + + if (self.params.query) + self.callResults(self.paintResultSet, true); + }); + } else { + this.$input.bind('keydown', function(e) { + if (e.which == 13) { + e.preventDefault(); + + self.reset(); + + self.params.query = self.options.sanitizeQueryString.call(self, this.value); + + if (self.options.deferInitRender.indexOf('search') === -1) + jQuery(self.options.searchResultContainer).html(''); + + self.clearFilters(true).setPage(1) + .setPageSize(self.options.pageSize) + + if (self.params.query) + self.callResults(self.paintResultSet, true); + } + }); + + if (this.options.searchButtonSelector.length) { + jQuery(this.options.searchButtonSelector).bind("click", function(e) { + e.preventDefault(); + + self.reset(); + + self.params.query = self.options.sanitizeQueryString.call(self, self.input.value); + + if (self.options.deferInitRender.indexOf('search') === -1) + jQuery(self.options.searchResultContainer).html(''); + + self.clearFilters(true).setPage(1) + .setPageSize(self.options.pageSize) + + if (self.params.query) + self.callResults(self.paintResultSet, true); + }); + } + } + } + + //click on somthing like "Load more results" to fetch next page + if (this.options.isClickNScroll) { + jQuery(this.options.clickNScrollElementSelector).bind('click', function(e) { + e.preventDefault(); + + self.setPage(self.getPage() + 1); + + if (self.params.query) + self.callResults(self.paintProductPage); + }); + } + + //to load results on scrolling down + if (this.options.isAutoScroll) { + jQuery(window).scroll(function() { + var wind = jQuery(window), + docu = jQuery(document); + if ((wind.scrollTop()) > (docu.height() - wind.height() - self.options.heightDiffToTriggerNextPage) && self.currentNumberOfProducts < self.totalNumberOfProducts && !self.isLoading) { + self.setPage(self.getPage() + 1) + .callResults(self.paintProductPage); + } + }); + } + + //click on facet checkboxes + if (this.options.facetContainerSelector.length > 0) { + jQuery(this.options.facetContainerSelector).delegate(self.options.facetCheckBoxSelector, 'change', function(e) { + var box = jQuery(this), + el = box.parents(self.options.facetElementSelector), + facetName = box.attr('unbxdParam_facetName'), + facetValue = box.attr('unbxdParam_facetValue'), + vals = facetValue.split(' TO '); + + if (box.is(':checked') && typeof self.options.facetOnSelect == "function") { + self.options.facetOnSelect(el); + } + + if (!box.is(':checked') && typeof self.options.facetOnDeselect == "function") { + self.options.facetOnDeselect(el); + } + + if (vals.length > 1) + self[box.is(':checked') ? 'addRangeFilter' : 'removeRangeFilter'](facetName, vals[0], vals[1]); + else + self[box.is(':checked') ? 'addFilter' : 'removeFilter'](facetName, facetValue); + + self.setPage(1) + .callResults(self.paintResultSet, true); + }); + } + + if (this.options.clearSelectedFacetsSelector.length > 0) { + jQuery('body').delegate(this.options.clearSelectedFacetsSelector, 'click', function(e) { + e.preventDefault(); + + self.clearFilters(true).setPage(1) + .callResults(self.paintResultSet, true); + }); + } + + if (this.options.removeSelectedFacetSelector.length > 0) { + jQuery(this.options.selectedFacetContainerSelector).delegate(this.options.removeSelectedFacetSelector, 'click', function(e) { + e.preventDefault(); + var $t = jQuery(this), + name = $t.attr("unbxdParam_facetName"), + val = $t.attr("unbxdParam_facetValue"), + vals = val.split(' TO '), + checkbox_sel = self.options.facetCheckBoxSelector + "[unbxdParam_facetName=\"" + name + "\"][unbxdParam_facetValue=\"" + val + "\"]"; + + jQuery(checkbox_sel).removeAttr("checked"); + + if (typeof self.options.facetOnDeselect == "function") { + self.options.facetOnDeselect(jQuery(checkbox_sel).parents(self.options.facetElementSelector)); + } + + if (vals.length > 1) + self.removeRangeFilter(name, vals[0], vals[1]); + else + self.removeFilter(name, val); + + self.setPage(1) + .callResults(self.paintResultSet, true); + }); + } + + if (this.options.sortContainerSelector.length > 0) { + if (this.options.sortContainerType === 'select') { + jQuery(this.options.sortContainerSelector).on({ + change: changeSort + }, '*'); + } else if (this.options.sortContainerType === 'click') { + jQuery(this.options.sortContainerSelector).on({ + click: changeSort + }, '[unbxdsortfield]'); + } + } + + if (this.options.pageSizeContainerSelector.length > 0) { + if (this.options.pageSizeContainerType === 'select') { + jQuery(this.options.pageSizeContainerSelector).on({ + change: changePageSize + }, '*'); + } else if (this.options.pageSizeContainerType === 'click') { + jQuery(this.options.pageSizeContainerSelector).on({ + click: changePageSize + }, '[unbxdpagesize]'); + } + jQuery(this.options.pageSizeContainerSelector).delegate('*', 'change', function(e) { + + }); + } + + if (this.options.paginationContainerSelector.length > 0) { + jQuery(this.options.paginationContainerSelector).delegate('*', 'click', function(e) { + e.preventDefault(); + var $t = jQuery(this), + keys = { + first: 1, + prev: self.getPage() - 1, + next: self.getPage() + 1, + last: self.totalPages + }, + action = $t.attr('unbxdaction') || ''; + + if (action) { + if (keys[action]) { + self.setPage(keys[action]); + } else if (!isNaN(parseInt(action, 10))) { + self.setPage(parseInt(action, 10)); + } + self.callResults(self.paintOnlyResultSet, true); + } + + }); + } + + if (this.isHistory) { + self.popped = ('state' in window.history); + self.initialURL = location.href; + + jQuery(window).bind('popstate', function(e) { + var initialPop = self.popped && location.href == self.initialURL; + self.popped = false; + + if (initialPop || !e.originalEvent.state) { + self.init(); + return; + } + + var old_params = e.originalEvent.state; + + old_params.query = self.options.type == "search" ? self.options.sanitizeQueryString.call(self, old_params.query) : ""; + + self.reset(); + + self.setPage(1); + + if ((old_params.query) || (old_params.categoryId)) { + self.params = old_params; + self.callResults(self.paintResultSet); + } + }); + } else if (this.isHashChange) { + jQuery(window).bind("hashchange", function(e) { + var newhash = window.location.hash.substring(1); + if (newhash && newhash != self.currentHash) { + self.reset(); + var old_params = self._processURL(self.options.noEncoding ? newhash : self.decode(newhash)); + + old_params.query = self.options.type == "search" ? self.options.sanitizeQueryString.call(self, old_params.query) : ""; + + self.currentHash = newhash; + + if ((old_params.query) || (old_params.categoryId)) { + self.params = old_params; + self.callResults(self.paintResultSet); + } + } else { + self.init(); + } + }); + } else { + self.hashChangeInterval = setInterval(function() { + var newhash = location.hash.substring(1); + + if (newhash && newhash != self.currentHash) { + self.reset(); + var old_params = self._processURL(self.options.noEncoding ? newhash : self.decode(newhash)); + + old_params.query = self.options.type == "search" ? self.options.sanitizeQueryString.call(self, old_params.query) : ""; + + self.currentHash = newhash; + + if ((old_params.query) || (old_params.categoryId)) { + self.params = old_params; + self.callResults(self.paintResultSet); + } + } + }, 3000); + } + + if (this.options.searchResultSetTemp !== null && typeof this.options.searchResultSetTemp === 'object') { + jQuery(this.options.viewTypeContainerSelector).on("click", '[unbxdviewtype]', changeViewType); + } + }, + addSort: function(field, dir) { + this.params.sort[field] = dir || "desc"; + return this; + }, + removeSort: function(field) { + if (field in this.params.sort) + delete this.params.sort[field]; + + return this; + }, + resetSort: function() { + this.params.sort = {}; + return this; + }, + addFilter: function(field, value) { + if (!(field in this.params.filters)) + this.params.filters[field] = {}; + + this.params.filters[field][value] = field; + + return this; + }, + removeFilter: function(field, value) { + if (value in this.params.filters[field]) + delete this.params.filters[field][value]; + + if (Object.keys(this.params.filters[field]).length == 0) + delete this.params.filters[field]; + + return this; + }, + clearFilters: function(clearRanges) { + this.params.filters = {} + + if (clearRanges) { + this.clearRangeFiltes(); + } + return this; + }, + addRangeFilter: function(field, lb, ub) { + if (!(field in this.params.ranges)) + this.params.ranges[field] = {}; + + this.params.ranges[field][lb + ' TO ' + ub] = { + lb: lb || '*', + ub: ub || '*' + }; + + return this; + }, + removeRangeFilter: function(field, lb, ub) { + if (!lb && !ub && field in this.params.ranges) + delete this.params.ranges[field]; + + if (lb && ub && field in this.params.ranges && (lb + ' TO ' + ub in this.params.ranges[field])) + delete this.params.ranges[field][lb + ' TO ' + ub]; + + if (Object.keys(this.params.ranges[field]).length == 0) + delete this.params.ranges[field]; + + return this; + }, + clearRangeFiltes: function() { + this.params.ranges = {}; + + return this; + }, + setPage: function(pageNo) { + this.params.extra.page = pageNo; + return this; + }, + getPage: function() { + return this.params.extra.page; + }, + setPageSize: function(pageSize) { + this.params.extra.rows = pageSize; + return this; + }, + getPageSize: function() { + return this.params.extra.rows; + } + + , + setViewType: function(viewType) { + this.params.extra.view = viewType; + return this; + }, + getViewType: function() { + return this.params.extra.view; + } + + , + addQueryParam: function(key, value, dontOverried) { + if (!(key in this.params.extra) || !dontOverried) { + this.params.extra[key] = value; + } else { + if (this.getClass(this.params.extra[key]) != "Array") + this.params.extra[key] = [this.params.extra[key]]; + + this.params.extra[key].push(value); + } + + return this; + }, + isUsingPagination: function() { + return !this.options.isAutoScroll && this.options.isPagination; + }, + getHostNPath: function() { + var handler = "search"; + if (isTypeBrowseOrCategory(this.options.type)) { + handler = this.options.type; + } + return "//search.unbxdapi.com/" + this.options.APIKey + "/" + this.options.siteName + "/" + handler; + }, + getUrlSubstring: function() { + return window.location.search.substring(1) || window.location.hash.substring(1); + }, + url: function() { + var host_path = this.getHostNPath(); + + var url = ""; + var nonhistoryPath = ""; + // To Retain the fields which are are required from the params of the base URL + var cur_url = this.getUrlSubstring(); + var urlParams = this.getQueryParams(cur_url); + var baseParams = {}; + if (typeof(this.options.baseParams) == "object" && this.options.baseParams.length > 0) { + for (i in urlParams) { + if ((urlParams.hasOwnProperty(i)) && !(i in this.params)) { + for (param in this.options.baseParams) { + if (i == this.options.baseParams[param]) { + baseParams[i] = urlParams[i] + } + } + } + } + } + + if (this.options.type == "search" && this.params['query'] != undefined) { + url += '&' + this.options.searchQueryParam + '=' + encodeURIComponent(this.params.query); + } else if (this.options.type == "browse" && this.params['categoryId'] != undefined) { + url += '&category-id=' + encodeURIComponent(this.params.categoryId); + } else if (isTypeCategory(this.options.type) && this.params.categoryId !== undefined) { + url += "&p=" + encodeURIComponent(this.params.categoryId); + } + + for (var x in this.params.filters) { + if (this.params.filters.hasOwnProperty(x)) { + var a = []; + var b = []; + for (var y in this.params.filters[x]) { + if (this.defaultParams.hasOwnProperty('filters') && + this.defaultParams.filters.hasOwnProperty(x) && + this.defaultParams.filters[x].hasOwnProperty(y) && + this.params.filters[x].hasOwnProperty(y)) { + b.push((x + ':\"' + encodeURIComponent(y.replace(/\"/g, "\\\"")) + '\"').replace(/\"{2,}/g, '"')); + } else if (this.params.filters[x].hasOwnProperty(y)) { + a.push((x + ':\"' + encodeURIComponent(y.replace(/\"/g, "\\\"")) + '\"').replace(/\"{2,}/g, '"')); + } + } + + if (a.length > 0) + url += '&filter=' + a.join(' OR ') + b.join(' OR '); + else if (b.length > 0) + nonhistoryPath += '&filter=' + b.join(' OR '); + } + } + + for (var x in this.params.ranges) { + var a = []; + var b = []; + for (var y in this.params.ranges[x]) { + if (this.defaultParams.hasOwnProperty('ranges') && + this.defaultParams.ranges.hasOwnProperty(x) && + this.defaultParams.ranges[x].hasOwnProperty(y) && + this.params.ranges[x].hasOwnProperty(y)) { + b.push(x + ':[' + this.params.ranges[x][y].lb + " TO " + this.params.ranges[x][y].ub + ']'); + } else if (this.params.ranges[x].hasOwnProperty(y)) { + a.push(x + ':[' + this.params.ranges[x][y].lb + " TO " + this.params.ranges[x][y].ub + ']'); + } + } + + if (a.length > 0) + url += '&filter=' + a.join(' OR ') + b.join(' OR '); + else if (b.length > 0) + nonhistoryPath += '&filter=' + b.join(' OR '); + } + + var a = []; + var b = []; + for (var field in this.params.sort) { + if (this.defaultParams.hasOwnProperty('sort') && + this.defaultParams.sort.hasOwnProperty(field) && + this.params.sort.hasOwnProperty(field)) { + var dir = this.params.sort[field] || 'desc'; + b.push(field + " " + dir); + } else if (this.params.sort.hasOwnProperty(field)) { + var dir = this.params.sort[field] || 'desc'; + a.push(field + " " + dir); + } + } + + if (a.length) + url += '&sort=' + a.join(','); + + if (b.length) + nonhistoryPath += '&sort=' + b.join(','); + + + for (var key in this.params.extra) { + if (this.params.extra.hasOwnProperty(key) && key != 'page') { + var value = this.params.extra[key]; + if (this.getClass(value) == "Array") { + value = value.getUnique(); + for (var i = 0; i < value.length; i++) { + url += '&' + key + '=' + encodeURIComponent(value[i]); + } + } else if (key === 'wt' || key === 'format') { + nonhistoryPath += '&' + key + '=' + encodeURIComponent(value); + } else if ((this.isUsingPagination() && key === 'rows') || key === "view") { + url += '&' + key + '=' + encodeURIComponent(value); + } else if (this.defaultParams.hasOwnProperty('extra') && this.defaultParams.extra.hasOwnProperty(key)) { + nonhistoryPath += '&' + key + '=' + encodeURIComponent(value); + } else + url += '&' + key + '=' + encodeURIComponent(value); + } + } + + if (this.isUsingPagination()) + url += '&start=' + (this.params.extra.page <= 1 ? 0 : (this.params.extra.page - 1) * this.params.extra.rows); + else + nonhistoryPath += '&start=' + (this.params.extra.page <= 1 ? 0 : (this.params.extra.page - 1) * this.params.extra.rows); + + nonhistoryPath += this.options.getFacetStats.length > 0 ? "&stats=" + this.options.getFacetStats : ""; + + if (this.options.fields.length) { + nonhistoryPath += '&fields=' + this.options.fields.join(','); + } + + if (this.options.facetMultiSelect) + nonhistoryPath += '&facet.multiselect=true'; + + nonhistoryPath += '&indent=off'; + + return { + url: host_path + "?" + url + nonhistoryPath, + query: url, + host: host_path, + baseParams: baseParams + }; + }, + callResults: function(callback, doPush) { + if (this.isLoading) { + this.ajaxCall.abort(); + } + + this.isLoading = true; + + if (this.options.loaderSelector.length > 0) + jQuery(this.options.loaderSelector).show(); + + var self = this, + modifiedCB = callback.bind(self), + cb = function(data) { + this.isLoading = false; + if (this.options.loaderSelector.length > 0) + jQuery(this.options.loaderSelector).hide(); + + if ("error" in data) + return false; + + modifiedCB(data); + }, + urlobj = self.url(), + requestHeaders = this.serializeRequestHeaders(jQuery.extend({}, this.getDefaultRequestHeaders(), this.options.requestHeaders)); + + if (doPush) { + var finalquery = this.options.noEncoding ? urlobj.query : this.encode(urlobj.query); + if (this.isHistory) { + if (self.options.retainbaseParam == true) { + var finalBaseParams = ''; + for (i in urlobj.baseParams) { + if (urlobj.baseParams.hasOwnProperty(i)) { + finalBaseParams += "&" + i + "=" + urlobj.baseParams[i]; + } + } + finalquery += finalquery + this.options.noEncoding ? finalBaseParams : this.encode(finalBaseParams); + } + history.pushState(this.params, null, location.protocol + "//" + location.host + location.pathname + "?" + finalquery); + } else { + window.location.hash = finalquery; + this.currentHash = finalquery; + } + } + if (requestHeaders) { + urlobj.url += '&' + requestHeaders + } + this.ajaxCall = jQuery.ajax({ + url: urlobj.url.replace(this.options.searchQueryParam + "=", "q="), + dataType: "jsonp", + jsonp: 'json.wrf', + success: cb.bind(self) + }); + }, + reset: function() { + this.totalNumberOfProducts = 0; + this.currentNumberOfProducts = 0; + jQuery(this.options.spellCheck).hide(); + jQuery(this.options.searchQueryDisplay).empty(); + if (this.options.deferInitRender.indexOf('search') === -1) + jQuery(this.options.searchResultContainer).empty(); + + jQuery(this.options.facetContainerSelector).empty(); + + this.options.selectedFacetHolderSelector && jQuery(this.options.selectedFacetHolderSelector).hide(); + + this.options.loaderSelector.length > 0 && jQuery(this.options.loaderSelector).hide(); + + this.params = { + query: '*', + filters: {}, + sort: {}, + ranges: {}, + categoryId: "", + extra: { + format: "json", + page: 1, + rows: 12 + } + }; + + if (this.options.viewTypes && this.options.viewTypes.length > 0) + this.params.extra.view = this.options.viewTypes[0]; + + if (typeof this.options.customReset == "function") + this.options.customReset.call(this); + + if (typeof this.options.setDefaultFilters == "function") + this.setDefaultParams(this.params); + + return this; + }, + setDefaultParams: function(params) { + var newparams, diff; + var oldparams = JSON.stringify(params); + this.options.setDefaultFilters.call(this); + newparams = JSON.stringify(this.params); + + if (Object.keys(this.defaultParams).length === 0) + this.defaultParams = JSON.parse(newparams); + }, + _processURL: function(url) { + var obj = typeof url == "string" ? this.getQueryParams(url) : url, + params = { + query: '', + filters: {}, + sort: {}, + ranges: {}, + extra: { + format: "json", + page: 1, + rows: 12 + } + }; + + //lets get filters + if ("filter" in obj) { + if (this.getClass(obj.filter) == "String") + obj.filter = Array(obj.filter); + + for (var i = 0; i < obj.filter.length; i++) { + + var filterStrArr = obj.filter[i].split(" OR "); + + for (var x = 0; x < filterStrArr.length; x++) { + var arr = filterStrArr[x].split(":"); + if (arr.length == 2) { + arr[1] = arr[1].replace(/(^")|("$)/g, '').replace(/\"{2,}/g, '"').replace(/\\\"/g, '"').replace(/(^\[)|(\]$)/g, ''); + + var vals = arr[1].split(" TO "); + if (vals.length > 1) { + if (!(arr[0] in params.ranges)) + params.ranges[arr[0]] = {}; + + params.ranges[arr[0]][arr[1]] = { + lb: isNaN(parseFloat(vals[0])) ? '*' : parseFloat(vals[0]), + ub: isNaN(parseFloat(vals[1])) ? '*' : parseFloat(vals[1]) + }; + } else { + if (!(arr[0] in params.filters)) + params.filters[arr[0]] = {}; + + params.filters[arr[0]][arr[1]] = arr[0]; + } + } + } + } + } + + //lets get sort now + if ("sort" in obj) { + var sortarr = obj.sort.split(","); + + for (var i = 0; i < sortarr.length; i++) { + var arr = sortarr[i].split(/\s+(?=\S+$)/); + if (arr.length == 2) { + params.sort[arr[0]] = arr[1] || "desc"; + } + } + } + + //lets get page size + if ("rows" in obj) + params.extra.rows = parseInt(obj.rows); + else + params.extra.rows = this.options.pageSize; + + //lets get query + if (this.options.searchQueryParam in obj) + params.query = obj[this.options.searchQueryParam]; + + //lets get category-id + if ("category-id" in obj) + params.categoryId = obj["category-id"]; + + //lets get categoryId(navigation) + if ("p" in obj) + params.categoryId = obj["p"]; + + //lets get boost + if ("boost" in obj) + params.extra.boost = obj.boost; + + //lets get pageNo + if ("start" in obj) + params.extra.page = (parseInt(obj.start) / parseInt(params.extra.rows)) + 1; + + if ("view" in obj) + params.extra.view = obj['view']; + else if (this.options.viewTypes && this.options.viewTypes.length > 0) + params.extra.view = this.options.viewTypes[0]; + + return params; + }, + paintResultSet: function(obj) { + this._internalPaintResultSet(obj, true); + }, + _internalPaintResultSet: function(obj, facetsAlso) { + if ("error" in obj) + return false; + + this.totalNumberOfProducts = 0; + + this.currentNumberOfProducts = 0; + + if (obj.hasOwnProperty('redirect')) { + window.location = obj['redirect']['value']; + return false; + } + + if (!obj.hasOwnProperty('banner')) { + this.options.bannerSelector.length && + jQuery(this.options.bannerSelector).empty(); + } else { + this.paintBanners(obj); + } + + if (obj.hasOwnProperty('didYouMean')) { + if (obj.response.numberOfProducts == 0) { //> this.options.pageSize){ + if (this.params.extra.page > 1) + this.params.extra.page = this.params.extra.page - 1; + + this.params.query = obj.didYouMean[0].suggestion; + + if (!this.compiledSpellCheckTemp) + this.compiledSpellCheckTemp = Handlebars.compile(this.options.spellCheckTemp); + + jQuery(this.options.spellCheck).html(this.compiledSpellCheckTemp({ + suggestion: obj.didYouMean[0].suggestion, + numberOfProducts: obj.response.numberOfProducts + })).show(); + + facetsAlso ? this.callResults(this.paintAfterSpellCheck) : this.callResults(this.paintOnlyResultSet); + + } else { + + this.params.query = obj.searchMetaData.queryParams.q; //obj.didYouMean[0].suggestion; + + if (!this.compiledSpellCheckTemp) + this.compiledSpellCheckTemp = Handlebars.compile(this.options.spellCheckTemp); + + jQuery(this.options.spellCheck).html(this.compiledSpellCheckTemp({ + suggestion: obj.didYouMean[0].suggestion, + numberOfProducts: obj.response.numberOfProducts + })).show(); + + facetsAlso ? this.callResults(this.paintAfterSpellCheck) : this.callResults(this.paintOnlyResultSet); + } + } else { + jQuery(this.options.spellCheck).hide(); + if (this.options.deferInitRender.indexOf('search') === -1) + jQuery(this.options.searchResultContainer).empty(); + this.paintProductPage(obj); + facetsAlso && this.paintFacets(obj); + } + }, + paintOnlyResultSet: function(obj) { + if (this.options.deferInitRender.indexOf('search') === -1) + jQuery(this.options.searchResultContainer).empty(); + this.paintProductPage(obj); + }, + paintAfterSpellCheck: function(obj) { + if (this.options.deferInitRender.indexOf('search') === -1) + jQuery(this.options.searchResultContainer).empty(); + this.paintProductPage(obj); + this.paintFacets(obj); + }, + paintAfterFacetChange: function(obj) { + if (this.options.deferInitRender.indexOf('search') === -1) + jQuery(this.options.searchResultContainer).empty(); + this.paintProductPage(obj); + this.paintSelectedFacets(); + }, + paintProductPage: function(obj) { + var start = 1; + if ("error" in obj) + return; + + if (!obj.response.numberOfProducts) { + this.reset(); + + this.options.onNoResult.call(this, obj); + + return this; + } + + if (!this.compiledSearchQueryTemp) + this.compiledSearchQueryTemp = Handlebars.compile(this.options.searchQueryDisplayTemp); + + this.productStartIdx = (this.isUsingPagination()) ? obj.response.start + 1 : 1; + this.productEndIdx = (this.getPage() * this.getPageSize() <= obj.response.numberOfProducts) ? + this.getPage() * this.getPageSize() : obj.response.numberOfProducts; + this.totalPages = Math.ceil(obj.response.numberOfProducts / this.getPageSize()); + var queryParams = { + numberOfProducts: obj.response.numberOfProducts, + start: this.productStartIdx, + end: this.productEndIdx + } + if (isTypeCategory(this.options.type)) { + queryParams.categoryId = obj.searchMetaData.queryParams.p + } else { + queryParams.query = obj.searchMetaData.queryParams.q + } + + jQuery(this.options.searchQueryDisplay).html(this.compiledSearchQueryTemp(queryParams)).show(); + + this.paintSort(obj); + this.paintPageSize(obj); + this.paintPagination(obj); + obj.response.products = obj.response.products.map(function(product) { + product['unbxdprank'] = obj.response.start + start; + start += 1; + return product; + }); + + if (this.getClass(this.options.searchResultSetTemp) == 'Function') { + this.options.searchResultSetTemp.call(this, obj); + } else if (this.options.searchResultSetTemp !== null && typeof this.options.searchResultSetTemp === 'object') { + this.paintViewTypes(obj); + var currentViewType = this.getViewType(); + if (!this.compiledResultTemp) { + this.compiledResultTemp = {}; + this.options.viewTypes.forEach(function(val) { + this.compiledResultTemp[val] = Handlebars.compile(this.options.searchResultSetTemp[val]); + }.bind(this)); + } + if (this.options.deferInitRender.indexOf('search') === -1 || !this.isUsingPagination()) { + jQuery(this.options.searchResultContainer).append(this.compiledResultTemp[currentViewType](obj.response)); + } + } else { + if (!this.compiledResultTemp) + this.compiledResultTemp = Handlebars.compile(this.options.searchResultSetTemp); + + if (this.options.deferInitRender.indexOf('search') === -1 || !this.isUsingPagination()) { + jQuery(this.options.searchResultContainer).append(this.compiledResultTemp(obj.response)); + } + } + + if (!this.currentNumberOfProducts && typeof this.options.onIntialResultLoad == "function") { + this.options.onIntialResultLoad.call(this, obj); + } + + if (this.currentNumberOfProducts && typeof this.options.onPageLoad == "function") { + this.options.onPageLoad.call(this, obj); + } + + this.totalNumberOfProducts = obj.response.numberOfProducts; + + this.currentNumberOfProducts = obj.response.start + obj.response.products.length; + + if (typeof this.options.setPagination == "function") { + this.options.setPagination.call(this, this.totalNumberOfProducts, this.getPageSize(), this.getPage()); + } + + if (this.options.isClickNScroll) + jQuery(this.options.clickNScrollElementSelector)[(this.currentNumberOfProducts < this.totalNumberOfProducts) ? 'show' : 'hide'](); + + }, + paintSort: function(obj) { + if ("error" in obj) + return; + if (this.options.sortContainerSelector.length <= 0) + return; + + if (!this.compiledSortContainerTemp) + this.compiledSortContainerTemp = Handlebars.compile(this.options.sortContainerTemp); + + var sortOptions = this.options.sortOptions.map(function(opt) { + opt['selected'] = (opt.hasOwnProperty('field') && opt.field in this.params.sort && this.params.sort[opt.field] === opt.order) ? + true : (!opt.hasOwnProperty('field') && Object.keys(this.params.sort).length === 0) ? true : false; + return opt; + }.bind(this)); + + jQuery(this.options.sortContainerSelector).html(this.compiledSortContainerTemp({ + options: sortOptions + })); + }, + paintPageSize: function(obj) { + if ("error" in obj) + return; + if (this.options.pageSizeContainerSelector.length <= 0) + return; + if (!this.isUsingPagination()) + return; + + if (!this.compiledPageSizeContainerTemp) + this.compiledPageSizeContainerTemp = Handlebars.compile(this.options.pageSizeContainerTemp); + + var pageSizeOptions = this.options.pageSizeOptions.map(function(opt) { + opt['selected'] = (this.getPageSize() == opt.value) ? true : false; + return opt; + }.bind(this)); + + jQuery(this.options.pageSizeContainerSelector).html(this.compiledPageSizeContainerTemp({ + options: pageSizeOptions + })); + } + + , + paintViewTypes: function(obj) { + if ("error" in obj || this.options.viewTypeContainerSelector.length <= 0) { + return; + } + if (!this.compiledViewTypesContainerTemp) { + this.compiledViewTypesContainerTemp = Handlebars.compile(this.options.viewTypeContainerTemp); + } + var viewTypeOptions = this.options.viewTypes.map(function(opt) { + + var values = {}; + values["value"] = opt; + values["selected"] = this.getViewType() == opt ? true : false; + return values; + + }.bind(this)); + jQuery(this.options.viewTypeContainerSelector).html(this.compiledViewTypesContainerTemp({ + options: viewTypeOptions + })); + return this.getViewType(); + } + + , + paintPagination: function(obj) { + if ("error" in obj) + return; + if (this.options.paginationContainerSelector.length <= 0) + return; + if (!this.isUsingPagination()) + return; + + if (!this.compiledPaginationTemp) + this.compiledPaginationTemp = Handlebars.compile(this.options.paginationTemp); + + var seq = [{ + page: this.getPage() - 2, + current: false + }, { + page: this.getPage() - 1, + current: false + }, { + page: this.getPage(), + current: true + }, { + page: this.getPage() + 1, + current: false + }, { + page: this.getPage() + 2, + current: false + }]; + + var pagesToShow = seq.filter(function(obj) { + return obj.page > 0 && obj.page <= this.totalPages; + }.bind(this)) + + + + jQuery(this.options.paginationContainerSelector).html(this.compiledPaginationTemp({ + hasFirst: this.getPage() > 1 ? true : false, + hasPrev: this.getPage() > 1 ? true : false, + pages: pagesToShow, + totalPages: this.totalPages, + hasNext: this.getPage() < this.totalPages ? true : false, + hasLast: this.getPage() < this.totalPages ? true : false + })); + }, + paintBanners: function(obj) { + if ("error" in obj) + return; + if (this.options.bannerCount <= 0) + return; + if (this.options.bannerSelector.length === 0) + return; + var banner = obj.banner; + var bannersToDraw = []; + + if (!this.compiledBannerTemp) + this.compiledBannerTemp = Handlebars.compile(this.options.bannerTemp); + + bannersToDraw = banner.banners.slice(0, this.options.bannerCount) + .reduce(function(prev, curr) { + if (curr.hasOwnProperty('bannerHtml') && curr['bannerHtml']) { + return prev.concat(curr.bannerHtml); + } else { + return prev.concat(this.compiledBannerTemp({ + landingUrl: curr.landingUrl, + imageUrl: curr.imageUrl + })); + } + }.bind(this), []); + + jQuery(this.options.bannerSelector).html(bannersToDraw.join('')); + + }, + paintFacets: function(obj) { + if ("error" in obj) + return; + + if (!obj.response.numberOfProducts) + return this; + + var facets = obj.facets, + facetKeys = Object.keys(facets), + textfacets = [], + rangefacets = [], + singlefacet = {}, + self = this, + facetVal = "", + facetValStart = "", + facetValEnd = "", + isSelected = false, + selectedOnly = []; + + var positionExists = false; + for (var x in facets) { + if ("position" in facets[x]) { + positionExists = true; + } + break; + } + var sortable = []; + for (var facet in facets) { + sortable.push(positionExists ? ([facet, facets[facet]["position"]]) : [facet]); + } + + if (positionExists) { + sortable.sort(function(a, b) { + return a[1] - b[1] + }); + } + for (var newI = 0; newI < sortable.length; newI++) { + + var x = sortable[newI][0]; + // for(var x in facets) { + singlefacet = { + name: self.prepareFacetName(x), + facet_name: x, + type: facets[x]['type'], + selected: [], + unselected: [], + unordered: [] + }; + + if (singlefacet.type !== 'facet_ranges') { + for (var i = 0, len = facets[x]['values'].length / 2; i < len; i++) { + facetVal = facets[x]['values'][2 * i]; + + if (facetVal.trim().length == 0) + continue; + + isSelected = x in self.params.filters && facetVal in self.params.filters[x] && self.params.filters[x][facetVal] == x ? true : false; + + singlefacet[isSelected ? "selected" : "unselected"].push({ + value: facetVal, + count: facets[x]['values'][2 * i + 1] + }); + singlefacet.unordered.push({ + value: facetVal, + count: facets[x]['values'][2 * i + 1], + isSelected: isSelected + }); + } + + if ((singlefacet.unordered.length) > 0) textfacets.push(singlefacet); + + } else { + for (var i = 0, len = facets[x]['values']['counts'].length / 2; i < len; i++) { + facetValStart = parseFloat(facets[x]['values']['counts'][2 * i]).toString(); + facetValEnd = (parseFloat(facetValStart) + facets[x]['values'].gap).toString(); + var y = facetValStart + ' TO ' + facetValEnd; + + isSelected = x in self.params.ranges && y in self.params.ranges[x] && self.params.ranges[x][y]['lb'] == facetValStart && self.params.ranges[x][y]['ub'] == facetValEnd ? true : false; + + singlefacet[isSelected ? "selected" : "unselected"].push({ + begin: facetValStart, + end: facetValEnd, + count: facets[x]['values']['counts'][2 * i + 1], + value: y + }); + singlefacet.unordered.push({ + begin: facetValStart, + end: facetValEnd, + count: facets[x]['values']['counts'][2 * i + 1], + value: y, + isSelected: isSelected + }); + } + + if ((singlefacet.unordered.length) > 0) rangefacets.push(singlefacet); + + } + } + + if (this.getClass(this.options.facetTemp) == 'Function') { + this.options.facetTemp.call(this, { + facets: textfacets, + rangefacets: rangefacets + }); + } else { + if (!this.compiledFacetTemp && this.options.facetTemp.length) + this.compiledFacetTemp = Handlebars.compile(this.options.facetTemp); + + this.options.facetContainerSelector.length && jQuery(this.options.facetContainerSelector).html(this.compiledFacetTemp({ + facets: textfacets, + rangefacets: rangefacets + })); + } + + this.paintSelectedFacets(); + + if (this.options.deferInitRender.indexOf('search') > -1) { + this.options.deferInitRender = []; + } + + if (typeof this.options.onFacetLoad == "function") { + this.options.onFacetLoad.call(this, obj); + } + + if (this.options.getFacetStats.length && + typeof this.options.processFacetStats == "function" && + "stats" in obj && obj.stats[this.options.getFacetStats] != null) { + + obj.stats[this.options.getFacetStats].values = { + min: obj.stats[this.options.getFacetStats].min, + max: obj.stats[this.options.getFacetStats].max + }; + if (this.options.getFacetStats in this.params.ranges) { + for (var x in this.params.ranges[this.options.getFacetStats]) { + obj.stats[this.options.getFacetStats].values = { + min: this.params.ranges[this.options.getFacetStats][x].lb != "*" ? + this.params.ranges[this.options.getFacetStats][x].lb : obj.stats[this.options.getFacetStats].min, + max: this.params.ranges[this.options.getFacetStats][x].ub != "*" ? + this.params.ranges[this.options.getFacetStats][x].ub : obj.stats[this.options.getFacetStats].max + }; + } + + } + + this.options.processFacetStats.call(this, obj.stats); + } + }, + paintSelectedFacets: function() { + var selFacetKeysLength = Math.max(Object.keys(this.params.filters).length, + Object.keys(this.params.ranges).length); + var selectedFacets = {}; + + if (selFacetKeysLength) { + selectedFacets.filters = this.params.filters; + selectedFacets.ranges = {}; + + for (var x in this.params.ranges) { + if (!selectedFacets.ranges.hasOwnProperty(x)) + selectedFacets.ranges[x] = {}; + + for (var y in this.params.ranges[x]) { + selectedFacets.ranges[x][y] = x; + } + } + + if (this.options.selectedFacetTemp && this.options.selectedFacetContainerSelector) { + if (!this.compiledSelectedFacetTemp) + this.compiledSelectedFacetTemp = Handlebars.compile(this.options.selectedFacetTemp); + + jQuery(this.options.selectedFacetContainerSelector).html(this.compiledSelectedFacetTemp(selectedFacets)); + } + jQuery(this.options.selectedFacetHolderSelector).show(); + } else { + jQuery(this.options.selectedFacetContainerSelector).empty(); + jQuery(this.options.selectedFacetHolderSelector).hide(); + } + }, + prepareFacetName: function(txt) { + txt = txt.replace("_fq", ""); + return txt.replace("_", " "); + }, + getQueryParams: function(q) { + var e, //replace + character before decoding the URL + d = function(s) { + return decodeURIComponent(s.replace(/\+/g, " ")).trim(); + }, + //splits on equals + r = /([^&=]+)=?([^&]*)/g, + urlParams = {}; + + q = q || this.getUrlSubstring(); + + while (e = r.exec(q)) { + var e1 = e[1].indexOf("[") + //first group of regex match + , + k = e1 == "-1" ? e[1] : e[1].slice(0, e1), + i = e1 != "-1" ? d(e[1].slice(e1 + 1, e[1].indexOf("]", e1))) : "", + v = d(e[2]); + + if (v.length == 0) + continue; + + if (!(k in urlParams)) { + urlParams[k] = v + } else { + if (typeof urlParams[k] != "object") { + var old = urlParams[k]; + + urlParams[k] = Array(urlParams[k]); + + Array.prototype.push.call(urlParams[k], old); + } + + Array.prototype.push.call(urlParams[k], v); + } + } + return urlParams; + }, + _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + encode: function(e) { + var t = "", + n, r, i, s, o, u, a, f = 0; + e = this._utf8_encode(e); + while (f < e.length) { + n = e.charCodeAt(f++); + r = e.charCodeAt(f++); + i = e.charCodeAt(f++); + s = n >> 2; + o = (n & 3) << 4 | r >> 4; + u = (r & 15) << 2 | i >> 6; + a = i & 63; + if (isNaN(r)) { + u = a = 64; + } else if (isNaN(i)) { + a = 64; + } + t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a); + } + return t; + }, + decode: function(e) { + var t = "", + n, r, i, s, o, u, a, f = 0; + e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + while (f < e.length) { + s = this._keyStr.indexOf(e.charAt(f++)); + o = this._keyStr.indexOf(e.charAt(f++)); + u = this._keyStr.indexOf(e.charAt(f++)); + a = this._keyStr.indexOf(e.charAt(f++)); + n = s << 2 | o >> 4; + r = (o & 15) << 4 | u >> 2; + i = (u & 3) << 6 | a; + t = t + String.fromCharCode(n); + if (u != 64) { + t = t + String.fromCharCode(r); + } + if (a != 64) { + t = t + String.fromCharCode(i); + } + } + t = this._utf8_decode(t); + + return t; + }, + _utf8_encode: function(e) { + e = e.replace(/\r\n/g, "\n"); + var t = ""; + for (var n = 0; n < e.length; n++) { + var r = e.charCodeAt(n); + if (r < 128) { + t += String.fromCharCode(r) + } else if (r > 127 && r < 2048) { + t += String.fromCharCode(r >> 6 | 192); + t += String.fromCharCode(r & 63 | 128); + } else { + t += String.fromCharCode(r >> 12 | 224); + t += String.fromCharCode(r >> 6 & 63 | 128); + t += String.fromCharCode(r & 63 | 128); + } + } + return t; + }, + _utf8_decode: function(e) { + var t = "", + n = 0; + var r = c1 = c2 = 0; + while (n < e.length) { + r = e.charCodeAt(n); + if (r < 128) { + t += String.fromCharCode(r); + n++; + } else if (r > 191 && r < 224) { + c2 = e.charCodeAt(n + 1); + t += String.fromCharCode((r & 31) << 6 | c2 & 63); + n += 2; + } else { + c2 = e.charCodeAt(n + 1); + c3 = e.charCodeAt(n + 2); + t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63); + n += 3; + } + } + return t; + }, + log: function(str) { + if (this.readCookie("debug") === '1') { + console.log("Unbxd : " + str); + } + }, + decodeAndParse: function(s) { + if (s.indexOf('"') === 0) { + // This is a quoted cookie as according to RFC2068, unescape... + s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + } + + return this.decodeCookie(s); + }, + decodeCookie: function(s) { + var pluses = /\+/g; + return decodeURIComponent(s.replace(pluses, ' ')); + }, + cookie: function(key) { + // Read + var cookies = document.cookie.split('; '); + var result; + for (var i = 0, l = cookies.length; i < l; i++) { + var parts = cookies[i].split('='); + var name = this.decodeCookie(parts.shift()); + var cookie = parts.join('='); + + if (key && key === name) { + try { + result = this.decodeAndParse(cookie); + break; + } catch (e) { + this.log(e); + } + } + } + + return result; + }, + readCookie: function(name) { + try { + return this.cookie('unbxd.' + name); + } catch (e) { + this.log(e); + } + + return undefined; + }, + getDeviceInfo: function() { + var smallDeviceMaxWidth = 768, + mediumDeviceMaxWidth = 992; + if (window.outerWidth < smallDeviceMaxWidth) { + return "Mobile"; + } else if (window.outerWidth < mediumDeviceMaxWidth) { + return "Tablet"; + } else { + return "Desktop"; + } + }, + getUserType: function() { + return this.readCookie('visit') === "repeat" ? "repeat" : "new"; + }, + getUserId: function() { + return this.readCookie('userId'); + }, + getDefaultRequestHeaders: function() { + var self = this, + userId = this.getUserId(), + defaultRequestHeaders = { + "device-type": self.getDeviceInfo(), + "unbxd-url": document.URL, + "unbxd-referrer": document.referrer, + "user-type": self.getUserType(), + "api-key": self.options.APIKey + }; + if (userId) { + defaultRequestHeaders["uid"] = userId; + } + return defaultRequestHeaders; + }, + serializeRequestHeaders: function(headers) { + if (jQuery.param) { + return jQuery.param(headers) + } else { + var str = []; + for (var header in headers) + if (headers.hasOwnProperty(header)) { + str.push(encodeURIComponent(header) + "=" + encodeURIComponent(headers[header])); + } + return str.join("&"); + } + } + }); +}; + + +Unbxd = window.Unbxd || {}; + +Unbxd.isJqueryRequiredVersion = Unbxd.isJqueryRequiredVersion || + function isJqueryRequiredVersion(current) { + var jQueryVersion = current.split('.'); + jQueryVersion = jQueryVersion.map(function convertToNumber(version) { + return Number(version); + }); + if ( + jQueryVersion[0] > 1 || (jQueryVersion[0] === 1 && jQueryVersion[1] >= 7) + ) { + return true; + } + return false; + }; + +if (!window.jQuery || !window.Handlebars) { + console.error( + 'Please include jQuery & Handlebars libraries before loading unbxdSearch.js or You can pass custom jQuery & Handlebars by calling unbxdSeachInit(jQuery, Handlebars) ' + ); +} else if (!Unbxd.isJqueryRequiredVersion(jQuery.fn.jquery)) { + console.error( + 'jQuery version needs to be greater than 1.7 to use unbxdSearch.js. You can pass custom jQuery & Handlebars by calling unbxdSeachInit(jQuery, Handlebars)' + ); +} else { + unbxdSearchInit(jQuery, Handlebars); +} \ No newline at end of file diff --git a/unbxdSearchAuto.js b/legacy/unbxdSearchAuto.js similarity index 100% rename from unbxdSearchAuto.js rename to legacy/unbxdSearchAuto.js diff --git a/unbxdSearchNAuto.js b/legacy/unbxdSearchNAuto.js similarity index 100% rename from unbxdSearchNAuto.js rename to legacy/unbxdSearchNAuto.js diff --git a/yarn.lock b/legacy/yarn.lock similarity index 100% rename from yarn.lock rename to legacy/yarn.lock diff --git a/package.json b/package.json index 3c398de..9e62e53 100644 --- a/package.json +++ b/package.json @@ -1,50 +1,16 @@ { - "name": "js-sdk", + "name": "version2", "version": "1.0.0", - "description": "Unbxd JavaScript Search library =============================== [![Build Status](https://secure.travis-ci.org/emberjs/ember-rails.svg?branch=master)](http://travis-ci.org/emberjs/ember-rails) unbxdSearch.js library can be used to integrated UNBXD search or browse on client side. It supports History API, so users can share the URI.", - "main": "unbxd-sdk.js", - "directories": { - "test": "tests" - }, - "dependencies": { - "colors": "^1.0.3", - "cryptiles": "^4.1.2", - "hoek": "^4.2.1", - "nodemailer": "^5.1.1", - "sshpk": "^1.13.2" - }, + "description": "Asgard for ajax implementation", + "main": "src/main.js", "scripts": { - "test": "karma start" + "build": "webpack", + "test": "mocha" }, "repository": { "type": "git", "url": "https://github.com/unbxd/js-sdk.git" }, "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/unbxd/js-sdk/issues" - }, - "homepage": "https://github.com/unbxd/js-sdk", - "devDependencies": { - "chai": "^4.2.0", - "handlebars": "^4.0.5", - "jquery": "^3.3.1", - "jquery-ui": "^1.12.1", - "karma": "^4.0.0", - "karma-chai": "^0.1.0", - "karma-fixture": "^0.2.6", - "karma-handlebars-preprocessor": "^0.3.0", - "karma-html2js-preprocessor": "^1.0.0", - "karma-jquery": "^0.2.3", - "karma-json-fixtures-preprocessor": "0.0.6", - "karma-mocha": "^1.3.0", - "karma-phantomjs-launcher": "^1.0.2", - "karma-sinon": "^1.0.5", - "karma-spec-reporter": "0.0.32", - "karma-verbose-reporter": "0.0.6", - "mocha": "^6.0.1", - "phantom": "^6.0.3", - "sinon": "^7.2.4" - } + "license": "ISC" } diff --git a/src/common/constants.js b/src/common/constants.js new file mode 100644 index 0000000..e69de29 diff --git a/src/common/index.js b/src/common/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/common/utils.js b/src/common/utils.js new file mode 100644 index 0000000..34ba83b --- /dev/null +++ b/src/common/utils.js @@ -0,0 +1,86 @@ +/* eslint wrap-iife: ["error", "inside"] */ +/* eslint arrow-parens: ["error", "as-needed"] */ +const MAX_LISTENERS = 1; +const uiBuilder = document => { + debugger; + const listeners = []; + const getAllListeners = listeners => + listeners.map(listener => listener.eventName); + let matches; + + (function(doc) { + matches = + doc.matchesSelector || + doc.webkitMatchesSelector || + doc.mozMatchesSelector || + doc.oMatchesSelector || + doc.msMatchesSelector; + })(document.documentElement); + + const findParent = (el, elementString) => { + const matchFound = matches.call(el, elementString); + return matchFound ? el : findParent(el.parentNode, elementString); + }; + + const addEventListener = (eventName, handler) => { + if ( + listeners.filter(listener => listener.eventName === eventName).length <= + MAX_LISTENERS + ) { + const eventHandler = e => { + const els = listeners.filter( + listener => + matches.call(e.target, [ + listener.elementString, + `${listener.elementString} *` + ]) && listener.eventName === eventName + ); + if (els.length > 0) { + els.forEach(el => { + const target = findParent(e.target, el.elementString); + el.handler.call(target, e); + }); + } + }; + + if (document.addEventListener) { + document.addEventListener(eventName, eventHandler); + } else { + document.attachEvent('on' + eventName, eventHandler); + } + } + }; + + return { + find(elementString) { + return document.querySelector(elementString); + }, + findAll(elementString) { + return Array.prototype.slice.call( + document.querySelectorAll(elementString) + ); + }, + append(elementString, content) { + const els = this.findAll(elementString); + if (els.length > 0) { + els.forEach(el => { + if (typeof content === 'string') { + el.insertAdjacentHTML('afterend', content); + } else { + el.appendChild(content); + } + }); + } + }, + manageEvent(elementString, eventName, handler) { + listeners.push({ + eventName, + elementString, + handler + }); + addEventListener(eventName, handler); + } + }; +}; + +export default uiBuilder; diff --git a/src/components/Facets/Hierarchical/index.js b/src/components/Facets/Hierarchical/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Facets/RangeFacets/index.js b/src/components/Facets/RangeFacets/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Facets/TextFacets/index.js b/src/components/Facets/TextFacets/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Facets/index.js b/src/components/Facets/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/NoResults/index.js b/src/components/NoResults/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Pagination/AutoScroll/index.js b/src/components/Pagination/AutoScroll/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Pagination/ClickNScroll/index.js b/src/components/Pagination/ClickNScroll/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Pagination/Paginate/index.js b/src/components/Pagination/Paginate/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Products/ProductCard/ProductCard.js b/src/components/Products/ProductCard/ProductCard.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Products/ProductCard/Variants.js b/src/components/Products/ProductCard/Variants.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Products/ProductList/GridContainer.js b/src/components/Products/ProductList/GridContainer.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Products/ProductList/ListContainer.js b/src/components/Products/ProductList/ListContainer.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Products/ProductList/ProductList.js b/src/components/Products/ProductList/ProductList.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Products/Sort.js b/src/components/Products/Sort.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/SpellCheck/index.js b/src/components/SpellCheck/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/home.js b/src/components/home.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/search.js b/src/components/search.js new file mode 100644 index 0000000..e69de29 diff --git a/src/controller/index.js b/src/controller/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/templateBuilder.js b/src/lib/templateBuilder.js new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/uiBuilder.js b/src/lib/uiBuilder.js new file mode 100644 index 0000000..48f4fb9 --- /dev/null +++ b/src/lib/uiBuilder.js @@ -0,0 +1,80 @@ +/* eslint wrap-iife: ["error", "inside"] */ +/* eslint arrow-parens: ["error", "as-needed"] */ +const MAX_LISTENERS = 1; +const uiBuilder = document => { + debugger; + const listeners = []; + const getAllListeners = listeners => + listeners.map(listener => listener.eventName); + let matches; + + (function(doc) { + matches = + doc.matchesSelector || + doc.webkitMatchesSelector || + doc.mozMatchesSelector || + doc.oMatchesSelector || + doc.msMatchesSelector; + })(document.documentElement); + + const findParent = (el, elementString) => { + const matchFound = matches.call(el, elementString); + return matchFound ? el : findParent(el.parentNode, elementString); + }; + + const addEventListener = (eventName, handler) => { + if ( + listeners.filter(listener => listener.eventName === eventName).length <= + MAX_LISTENERS + ) { + const eventHandler = e => { + const els = listeners.filter( + listener => + matches.call(e.target, [ + listener.elementString, + `${listener.elementString} *` + ]) && listener.eventName === eventName + ); + if (els.length > 0) { + els.forEach(el => { + const target = findParent(e.target, el.elementString); + el.handler.call(target, e); + }); + } + }; + + if (document.addEventListener) { + document.addEventListener(eventName, eventHandler); + } else { + document.attachEvent('on' + eventName, eventHandler); + } + } + }; + + return { + find(elementString) { + return document.querySelector(elementString); + }, + findAll(elementString) { + return Array.prototype.slice.call( + document.querySelectorAll(elementString) + ); + }, + append(elementString, content) { + const els = this.findAll(elementString); + if (els.length > 0) { + els.forEach(el => { + if (typeof content === 'string') { + el.insertAdjacentHTML('afterend', content); + } else { + el.appendChild(content); + } + }); + } + }, + manageEvent(elementString, eventName, handler) { + listeners.push({ eventName, elementString, handler }); + addEventListener(eventName, handler); + } + }; +}; diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..e69de29 diff --git a/src/request.js b/src/request.js new file mode 100644 index 0000000..e69de29 diff --git a/tests/index.js b/tests/index.js new file mode 100644 index 0000000..e69de29 diff --git a/unbxdSearch.js b/unbxdSearch.js deleted file mode 100644 index 0f24aa0..0000000 --- a/unbxdSearch.js +++ /dev/null @@ -1,2054 +0,0 @@ -//uglifyjs unbxdSearch.js -o unbxdSearch.min.js && gzip -c unbxdSearch.min.js > unbxdSearch.min.js.gz && aws s3 cp unbxdSearch.min.js.gz s3://unbxd/unbxdSearch.js --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-encoding gzip --cache-control max-age=3600 -var unbxdSearchInit = function(jQuery, Handlebars){ - window.Unbxd = window.Unbxd || {}; - Unbxd.jsSdkVersion = "2.0.2"; - - // Production steps of ECMA-262, Edition 5, 15.4.4.14 - // Reference: http://es5.github.io/#x15.4.4.14 - if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function(searchElement, fromIndex) { - - var k; - - // 1. Let O be the result of calling ToObject passing - // the this value as the argument. - if (this == null) { - throw new TypeError('"this" is null or not defined'); - } - - var O = Object(this); - - // 2. Let lenValue be the result of calling the Get - // internal method of O with the argument "length". - // 3. Let len be ToUint32(lenValue). - var len = O.length >>> 0; - - // 4. If len is 0, return -1. - if (len === 0) { - return -1; - } - - // 5. If argument fromIndex was passed let n be - // ToInteger(fromIndex); else let n be 0. - var n = +fromIndex || 0; - - if (Math.abs(n) === Infinity) { - n = 0; - } - - // 6. If n >= len, return -1. - if (n >= len) { - return -1; - } - - // 7. If n >= 0, then Let k be n. - // 8. Else, n<0, Let k be len - abs(n). - // If k is less than 0, then let k be 0. - k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); - - // 9. Repeat, while k < len - while (k < len) { - // a. Let Pk be ToString(k). - // This is implicit for LHS operands of the in operator - // b. Let kPresent be the result of calling the - // HasProperty internal method of O with argument Pk. - // This step can be combined with c - // c. If kPresent is true, then - // i. Let elementK be the result of calling the Get - // internal method of O with the argument ToString(k). - // ii. Let same be the result of applying the - // Strict Equality Comparison Algorithm to - // searchElement and elementK. - // iii. If same is true, return k. - if (k in O && O[k] === searchElement) { - return k; - } - k++; - } - return -1; - }; - } - - /** - * Shim for "fixing" IE's lack of support (IE < 9) for applying slice - * on host objects like NamedNodeMap, NodeList, and HTMLCollection - * (technically, since host objects have been implementation-dependent, - * at least before ES6, IE hasn't needed to work this way). - * Also works on strings, fixes IE < 9 to allow an explicit undefined - * for the 2nd argument (as in Firefox), and prevents errors when - * called on other DOM objects. - */ - (function () { - 'use strict'; - var _slice = Array.prototype.slice; - - try { - // Can't be used with DOM elements in IE < 9 - _slice.call(document.documentElement); - } catch (e) { // Fails in IE < 9 - // This will work for genuine arrays, array-like objects, - // NamedNodeMap (attributes, entities, notations), - // NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes), - // and will not fail on other DOM objects (as do DOM elements in IE < 9) - Array.prototype.slice = function(begin, end) { - // IE < 9 gets unhappy with an undefined end argument - end = (typeof end !== 'undefined') ? end : this.length; - - // For native Array objects, we use the native slice function - if (Object.prototype.toString.call(this) === '[object Array]'){ - return _slice.call(this, begin, end); - } - - // For array like object we handle it ourselves. - var i, cloned = [], - size, len = this.length; - - // Handle negative value for "begin" - var start = begin || 0; - start = (start >= 0) ? start : Math.max(0, len + start); - - // Handle negative value for "end" - var upTo = (typeof end == 'number') ? Math.min(end, len) : len; - if (end < 0) { - upTo = len + end; - } - - // Actual expected size of the slice - size = upTo - start; - - if (size > 0) { - cloned = new Array(size); - if (this.charAt) { - for (i = 0; i < size; i++) { - cloned[i] = this.charAt(start + i); - } - } else { - for (i = 0; i < size; i++) { - cloned[i] = this[start + i]; - } - } - } - - return cloned; - }; - } - }()); - - if (!Function.prototype.bind) { - Function.prototype.bind = function (oThis) { - if (typeof this !== "function") { - throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); - } - - var aArgs = Array.prototype.slice.call(arguments, 1), - fToBind = this, - fNOP = function () {}, - fBound = function () { - return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); - }; - - fNOP.prototype = this.prototype; - fBound.prototype = new fNOP(); - - return fBound; - }; - } - - // Production steps of ECMA-262, Edition 5, 15.4.4.19 - // Reference: http://es5.github.io/#x15.4.4.19 - if (!Array.prototype.map) { - - Array.prototype.map = function(callback, thisArg) { - - var T, A, k; - - if (this == null) { - throw new TypeError(' this is null or not defined'); - } - - // 1. Let O be the result of calling ToObject passing the |this| - // value as the argument. - var O = Object(this); - - // 2. Let lenValue be the result of calling the Get internal - // method of O with the argument "length". - // 3. Let len be ToUint32(lenValue). - var len = O.length >>> 0; - - // 4. If IsCallable(callback) is false, throw a TypeError exception. - // See: http://es5.github.com/#x9.11 - if (typeof callback !== 'function') { - throw new TypeError(callback + ' is not a function'); - } - - // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. - if (arguments.length > 1) { - T = thisArg; - } - - // 6. Let A be a new array created as if by the expression new Array(len) - // where Array is the standard built-in constructor with that name and - // len is the value of len. - A = new Array(len); - - // 7. Let k be 0 - k = 0; - - // 8. Repeat, while k < len - while (k < len) { - - var kValue, mappedValue; - - // a. Let Pk be ToString(k). - // This is implicit for LHS operands of the in operator - // b. Let kPresent be the result of calling the HasProperty internal - // method of O with argument Pk. - // This step can be combined with c - // c. If kPresent is true, then - if (k in O) { - - // i. Let kValue be the result of calling the Get internal - // method of O with argument Pk. - kValue = O[k]; - - // ii. Let mappedValue be the result of calling the Call internal - // method of callback with T as the this value and argument - // list containing kValue, k, and O. - mappedValue = callback.call(T, kValue, k, O); - - // iii. Call the DefineOwnProperty internal method of A with arguments - // Pk, Property Descriptor - // { Value: mappedValue, - // Writable: true, - // Enumerable: true, - // Configurable: true }, - // and false. - - // In browsers that support Object.defineProperty, use the following: - // Object.defineProperty(A, k, { - // value: mappedValue, - // writable: true, - // enumerable: true, - // configurable: true - // }); - - // For best browser support, use the following: - A[k] = mappedValue; - } - // d. Increase k by 1. - k++; - } - - // 9. return A - return A; - }; - } - - if (!Array.prototype.filter) { - Array.prototype.filter = function(fun/*, thisArg*/) { - 'use strict'; - - if (this === void 0 || this === null) { - throw new TypeError(); - } - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun !== 'function') { - throw new TypeError(); - } - - var res = []; - var thisArg = arguments.length >= 2 ? arguments[1] : void 0; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; - - // NOTE: Technically this should Object.defineProperty at - // the next index, as push can be affected by - // properties on Object.prototype and Array.prototype. - // But that method's new, and collisions should be - // rare, so use the more-compatible alternative. - if (fun.call(thisArg, val, i, t)) { - res.push(val); - } - } - } - - return res; - }; - } - - // Production steps of ECMA-262, Edition 5, 15.4.4.21 - // Reference: http://es5.github.io/#x15.4.4.21 - if (!Array.prototype.reduce) { - Array.prototype.reduce = function(callback /*, initialValue*/) { - 'use strict'; - if (this == null) { - throw new TypeError('Array.prototype.reduce called on null or undefined'); - } - if (typeof callback !== 'function') { - throw new TypeError(callback + ' is not a function'); - } - var t = Object(this), len = t.length >>> 0, k = 0, value; - if (arguments.length == 2) { - value = arguments[1]; - } else { - while (k < len && !(k in t)) { - k++; - } - if (k >= len) { - throw new TypeError('Reduce of empty array with no initial value'); - } - value = t[k++]; - } - for (; k < len; k++) { - if (k in t) { - value = callback(value, t[k], k, t); - } - } - return value; - }; - } - - if (!Object.keys) Object.keys = function(o) { - if (o !== Object(o)) - throw new TypeError('Object.keys called on a non-object'); - var k=[],p; - for (p in o) if (Object.prototype.hasOwnProperty.call(o,p)) k.push(p); - return k; - }; - - Array.prototype.getUnique = function(){ - var u = {}, a = []; - for(var i = 0, l = this.length; i < l; ++i){ - if(u.hasOwnProperty(this[i])) { - continue; - } - a.push(this[i]); - u[this[i]] = 1; - } - return a; - } - - if(typeof String.prototype.trim !== 'function'){String.prototype.trim = function() {return this.replace(/^\s+|\s+$/g, '');};}; - - Unbxd.setSearch = function(options){ - this.options = jQuery.extend( {}, this.defaultOptions, options); - - this.init(); - } - - var isTypeSearch = function isTypeSearch(type) { - return type === "search"; - }; - - var isTypeBrowse = function isTypeBrowse(type) { - return type === "browse"; - }; - - var isTypeCategory = function isTypeCategory(type) { - return type === "category"; - }; - - var isTypeBrowseOrCategory = function isTypeBrowseOrCategory(type) { - return isTypeBrowse(type) || isTypeCategory(type); - }; - - var isCategoryIdPresent = function isCategoryIdPresent(params) { - return ("categoryId" in params && params.categoryId.trim().length > 0); - }; - - var isQueryPresent = function isQueryPresent(params) { - return ("query" in params && params.query.trim().length > 0); - }; - - Handlebars.registerHelper('prepareFacetName', function(txt){ - txt = txt.replace("_fq",""); - return txt.replace("_"," "); - }); - - Handlebars.registerHelper('prepareFacetValue', function(txt){ - return txt.trim().length > 0 ? txt : "   "; - }); - - Unbxd.setSearch.prototype.defaultOptions = { - inputSelector : '#search_query' - ,searchButtonSelector : '#search_button' - ,type : "search" - ,getCategoryId: "" - ,deferInitRender: [] - ,spellCheck : '' // - ,spellCheckTemp : '

    Did you mean : {{suggestion}}

    ' - ,searchQueryDisplay : '' - ,searchQueryDisplayTemp : '

    Search results for {{query}} - {{numberOfProducts}}

    ' - ,searchResultContainer : '' - ,searchResultSetTemp : '' //function or handlebars template, register any helpers if needed - ,isAutoScroll : false - ,isClickNScroll : false - ,isPagination : false - ,setPagination : function(totalNumberOfProducts,pageSize,currentPage){} - ,paginationContainerSelector: '' - ,paginationTemp:[ - '{{#if hasFirst}}', - ' « ', - '{{/if}}', - '{{#if hasPrev}}', - ' < ', - '{{/if}}', - '{{#pages}}', - '{{#if current}}', - ' {{page}} ', - '{{else}}', - ' {{page}} ', - '{{/if}}', - '{{/pages}}', - ' of ', - '{{totalPages}}', - '{{#if hasNext}}', - ' > ', - '{{/if}}', - '{{#if hasLast}}', - '»', - '{{/if}}' - ].join('') - ,clickNScrollElementSelector : '#load-more' - ,facetMultiSelect : true - ,facetContainerSelector : '' - ,facetCheckBoxSelector : '' - ,selectedFacetTemp : ['{{#each filters}}' - ,'
      ' - ,'
    1. ' - ,'{{prepareFacetName @key}}:' - ,'{{#each this}}' - ,'
      {{@key}}' - ,'
      ' - ,'{{/each}}' - ,'
    2. ' - ,'
    ' - ,'{{/each}}'].join('') - ,selectedFacetContainerSelector : "" - ,clearSelectedFacetsSelector : "" - ,removeSelectedFacetSelector : "" - ,loaderSelector : "" - ,onFacetLoad : "" - ,onIntialResultLoad : "" - ,onPageLoad : "" - ,sanitizeQueryString : function(q){ return q;} - ,getFacetStats : "" - ,processFacetStats : function(obj){} - ,setDefaultFilters : function(){} - ,fields : [] - ,onNoResult : function(obj){} - ,noEncoding : false - ,heightDiffToTriggerNextPage : 100 - ,customReset : function(){} - ,bannerSelector: "" - ,bannerTemp: '' - ,bannerCount: 1 - ,sortContainerSelector: '' - ,sortOptions: [{ - name: 'Relevancy' - },{ - name: 'Price: H-L', - field: 'price', - order: 'desc' - },{ - name: 'Price: L-H', - field: 'price', - order: 'asc' - }] - ,sortContainerType: 'select' /* value can be select or click */ - ,sortContainerTemp: [ - '' - ].join('') - ,pageSize : 12 - ,pageSizeContainerSelector: '' - ,pageSizeOptions: [{ - name: '12', - value: '12' - },{ - name: '24', - value: '24' - }] - ,pageSizeContainerType: 'select' /* value can be select or click */ - ,pageSizeContainerTemp: [ - '' - ].join(''), - viewTypeContainerTemp: [ - '{{#options}}', - '
  • ', - '', - '', - '{{value}}', - '', - '', - '
  • ', - '{{/options}}' - ].join('') - ,searchQueryParam:"q" - ,retainbaseParam: false - ,baseParams:[] - ,requestHeaders: {} - }; - - jQuery.extend(Unbxd.setSearch.prototype,{ - compiledResultTemp : false - ,compiledSpellCheckTemp : false - ,compiledSearchQueryTemp: false - ,compiledFacetTemp : false - ,compiledSelectedFacetTemp : false - ,compiledBannerTemp: false - ,compiledSortContainerTemp: false - ,compiledPageSizeContainerTemp: false - ,compiledPaginationTemp: false - ,currentNumberOfProducts : 0 - ,totalNumberOfProducts : 0 - ,productStartIdx: 0 - ,productEndIdx: 0 - ,totalPages: 0 - ,isLoading : false - ,params : { - query : '*' - ,filters : {} - ,ranges : {} - ,sort : {} - ,categoryId : "" - ,extra : { - format : "json" - ,page : 1 - ,rows : 0 - } - } - ,defaultParams: { - } - ,isHistory : !!(window.history && history.pushState) - ,popped : false //there is an edge case in Mozilla that fires popstate initially - ,initialURL : '' - ,isHashChange : false - ,currentHash : "" - ,hashChangeInterval : null - ,ajaxCall : null - ,init : function(){ - this.isHashChange = !!("onhashchange" in window.document.body); - - this.$input = jQuery(this.options.inputSelector); - this.$input.val(''); - this.input = this.$input[0]; - - this.setEvents(); - - this.reset(); - - var cur_url = this.getUrlSubstring() - , urlqueryparams = this.getQueryParams(cur_url) - // add test to check if the url is encoded, - // decode the query parameters only if url is encoded - // fixes SKU searches like writ0035/WRIT0035 & HSWD0015 - , decodedParams = !(this.options.noEncoding && /[^A-Za-z0-9\+\/\=]/g.test(cur_url)) ? this.getQueryParams(this.decode(cur_url)) : {} - , queryparamcount = Object.keys(urlqueryparams).length - , decodedParamscount = Object.keys(decodedParams).length - , finalParams = null; - - if (!this.options.noEncoding && decodedParamscount > 0) { - finalParams = this._processURL(decodedParams); - }else{ - finalParams = this._processURL(urlqueryparams); - } - - if(this.options.deferInitRender.indexOf('search') > -1 - && !this.isUsingPagination() - && finalParams.extra.hasOwnProperty('page') - && finalParams.extra.page >= 1) - finalParams.extra.page = finalParams.extra.page + 1; - - this.params = finalParams; - - this.params.categoryId = isTypeBrowseOrCategory(this.options.type) && - typeof this.options.getCategoryId == 'function' - ? this.options.getCategoryId() - : this.params.categoryId ? this.params.categoryId : ''; - - this.setPage("page" in finalParams.extra ? finalParams.extra.page : 1) - .setPageSize("rows" in finalParams.extra ? finalParams.extra.rows : this.options.pageSize); - - if(this.options.type == "search"){ - if(this.input.value.trim().length) - this.params.query = this.$input.val().trim(); - else if(!("query" in this.params) || (this.params.query + "").trim().length == 0) - this.params.query = "*"; - - this.params.query = this.options.sanitizeQueryString.call(this,this.params.query); - - this.$input.val(this.params.query != "*" ? this.params.query : ""); - - if(this.options.deferInitRender.indexOf('search') === -1) - jQuery(this.options.searchResultContainer).html(''); - - } - - if(typeof this.options.setDefaultFilters == "function") - this.setDefaultParams(this.params); - - if ( - (isTypeSearch(this.options.type) && isQueryPresent(this.params)) || - (isTypeBrowseOrCategory(this.options.type) && isCategoryIdPresent(this.params)) - ) - this.callResults(this.paintResultSet); - } - ,getClass : function(object){ - return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]; - } - ,setEvents : function(){ - var self = this; - - var changeViewType = function(e) { - e.preventDefault(); - var $t = jQuery(this); - var selected = $t.attr("unbxdviewtype"); - self.setViewType(selected); - if(selected && self.options.viewTypes.indexOf(selected) > -1) { - if(!self.isUsingPagination()) self.setPage(1); - if(self.options.deferInitRender.indexOf('search') > 0 - && !self.isUsingPagination()) self.setPage(2); - self.callResults(self.paintOnlyResultSet, true); - } - }; - - var changeSort = function(e){ - e.preventDefault(); - var $t = jQuery(this), - $selected = (e.type === 'change') ? $t.find(':selected') : - (e.currentTarget === e.target) ? $t : undefined, - field = $selected && $selected.attr('unbxdsortfield'), - value = $selected && $selected.attr('unbxdsortvalue'); - - if($selected){ - self - .resetSort() - .setPage(1); - - if(field && value) - self.addSort(field, value); - - self.callResults(self.paintOnlyResultSet, true); - } - }; - - var changePageSize = function(e){ - e.preventDefault(); - var $t = jQuery(this), - $selected = (e.type === 'change') ? $t.find(':selected') : - (e.currentTarget === e.target) ? $t : undefined, - pageSize = $selected && $selected.attr('unbxdpagesize'); - - if($selected && pageSize){ - self - .setPage(1) - .setPageSize(pageSize) - .callResults(self.paintOnlyResultSet, true); - } - }; - - if(this.options.type == "search"){ - if("form" in this.input && this.input.form){ - jQuery(this.input.form).bind("submit",function(e){ - e.preventDefault(); - - self.reset(); - - self.params.query = self.options.sanitizeQueryString.call(self, self.input.value); - - if(self.options.deferInitRender.indexOf('search') === -1) - jQuery(self.options.searchResultContainer).html(''); - - self.setPage(1) - .setPageSize(self.options.pageSize) - - if(self.params.query) - self.callResults(self.paintResultSet,true); - }); - }else{ - this.$input.bind('keydown',function(e){ - if(e.which == 13){ - e.preventDefault(); - - self.reset(); - - self.params.query = self.options.sanitizeQueryString.call(self, this.value ); - - if(self.options.deferInitRender.indexOf('search') === -1) - jQuery(self.options.searchResultContainer).html(''); - - self.clearFilters(true).setPage(1) - .setPageSize(self.options.pageSize) - - if(self.params.query) - self.callResults(self.paintResultSet,true); - } - }); - - if(this.options.searchButtonSelector.length){ - jQuery(this.options.searchButtonSelector).bind("click",function(e){ - e.preventDefault(); - - self.reset(); - - self.params.query = self.options.sanitizeQueryString.call(self, self.input.value); - - if(self.options.deferInitRender.indexOf('search') === -1) - jQuery(self.options.searchResultContainer).html(''); - - self.clearFilters(true).setPage(1) - .setPageSize(self.options.pageSize) - - if(self.params.query) - self.callResults(self.paintResultSet,true); - }); - } - } - } - - //click on somthing like "Load more results" to fetch next page - if(this.options.isClickNScroll){ - jQuery(this.options.clickNScrollElementSelector).bind('click',function(e){ - e.preventDefault(); - - self.setPage(self.getPage() + 1); - - if(self.params.query) - self.callResults(self.paintProductPage); - }); - } - - //to load results on scrolling down - if(this.options.isAutoScroll){ - jQuery(window).scroll(function() { - var wind = jQuery(window),docu = jQuery(document); - if((wind.scrollTop()) > (docu.height() - wind.height() - self.options.heightDiffToTriggerNextPage) && self.currentNumberOfProducts < self.totalNumberOfProducts && !self.isLoading){ - self.setPage(self.getPage() + 1) - .callResults(self.paintProductPage); - } - }); - } - - //click on facet checkboxes - if(this.options.facetContainerSelector.length > 0){ - jQuery(this.options.facetContainerSelector).delegate(self.options.facetCheckBoxSelector,'change',function(e){ - var box = jQuery(this), - el = box.parents(self.options.facetElementSelector), - facetName = box.attr('unbxdParam_facetName'), - facetValue = box.attr('unbxdParam_facetValue'), - vals = facetValue.split(' TO '); - - if(box.is(':checked') && typeof self.options.facetOnSelect == "function"){ - self.options.facetOnSelect(el); - } - - if(!box.is(':checked') && typeof self.options.facetOnDeselect == "function"){ - self.options.facetOnDeselect(el); - } - - if(vals.length > 1) - self[box.is(':checked') ? 'addRangeFilter' : 'removeRangeFilter'](facetName, vals[0], vals[1]); - else - self[box.is(':checked') ? 'addFilter' : 'removeFilter'](facetName, facetValue); - - self.setPage(1) - .callResults(self.paintResultSet,true); - }); - } - - if(this.options.clearSelectedFacetsSelector.length > 0){ - jQuery('body').delegate(this.options.clearSelectedFacetsSelector,'click',function(e){ - e.preventDefault(); - - self.clearFilters(true).setPage(1) - .callResults(self.paintResultSet,true); - }); - } - - if(this.options.removeSelectedFacetSelector.length > 0){ - jQuery(this.options.selectedFacetContainerSelector).delegate(this.options.removeSelectedFacetSelector,'click',function(e){ - e.preventDefault(); - var $t = jQuery(this) - ,name = $t.attr("unbxdParam_facetName") - ,val = $t.attr("unbxdParam_facetValue") - ,vals = val.split(' TO ') - ,checkbox_sel = self.options.facetCheckBoxSelector + "[unbxdParam_facetName=\""+ name +"\"][unbxdParam_facetValue=\"" + val + "\"]"; - - jQuery(checkbox_sel).removeAttr("checked"); - - if(typeof self.options.facetOnDeselect == "function"){ - self.options.facetOnDeselect(jQuery(checkbox_sel).parents(self.options.facetElementSelector)); - } - - if(vals.length > 1) - self.removeRangeFilter(name, vals[0], vals[1]); - else - self.removeFilter(name, val); - - self.setPage(1) - .callResults(self.paintResultSet,true); - }); - } - - if(this.options.sortContainerSelector.length > 0){ - if(this.options.sortContainerType === 'select'){ - jQuery(this.options.sortContainerSelector).on({ - change: changeSort - }, '*'); - } else if(this.options.sortContainerType === 'click'){ - jQuery(this.options.sortContainerSelector).on({ - click: changeSort - }, '[unbxdsortfield]'); - } - } - - if(this.options.pageSizeContainerSelector.length > 0){ - if(this.options.pageSizeContainerType === 'select'){ - jQuery(this.options.pageSizeContainerSelector).on({ - change: changePageSize - }, '*'); - } else if(this.options.pageSizeContainerType === 'click'){ - jQuery(this.options.pageSizeContainerSelector).on({ - click: changePageSize - }, '[unbxdpagesize]'); - } - jQuery(this.options.pageSizeContainerSelector).delegate('*', 'change', function(e){ - - }); - } - - if(this.options.paginationContainerSelector.length > 0){ - jQuery(this.options.paginationContainerSelector).delegate('*', 'click', function(e) { - e.preventDefault(); - var $t = jQuery(this), - keys = { - first: 1, - prev: self.getPage() - 1, - next: self.getPage() + 1, - last: self.totalPages - }, - action = $t.attr('unbxdaction') || ''; - - if(action){ - if(keys[action]){ - self.setPage(keys[action]); - } else if(!isNaN(parseInt(action, 10))){ - self.setPage(parseInt(action, 10)); - } - self.callResults(self.paintOnlyResultSet, true); - } - - }); - } - - if(this.isHistory){ - self.popped = ('state' in window.history); - self.initialURL = location.href; - - jQuery(window).bind('popstate', function(e) { - var initialPop = self.popped && location.href == self.initialURL; - self.popped = false; - - if ( initialPop || !e.originalEvent.state ) { self.init(); return; } - - var old_params = e.originalEvent.state; - - old_params.query = self.options.type == "search" ? self.options.sanitizeQueryString.call(self, old_params.query) : ""; - - self.reset(); - - self.setPage(1); - - if((old_params.query) || (old_params.categoryId)){ - self.params = old_params; - self.callResults(self.paintResultSet); - } - }); - }else if(this.isHashChange){ - jQuery(window).bind("hashchange",function(e){ - var newhash = window.location.hash.substring(1); - if(newhash && newhash != self.currentHash){ - self.reset(); - var old_params = self._processURL(self.options.noEncoding ? newhash : self.decode(newhash)); - - old_params.query = self.options.type == "search" ? self.options.sanitizeQueryString.call(self,old_params.query) : ""; - - self.currentHash = newhash; - - if((old_params.query) || (old_params.categoryId)){ - self.params = old_params; - self.callResults(self.paintResultSet); - } - } else { - self.init(); - } - }); - }else{ - self.hashChangeInterval = setInterval(function() { - var newhash = location.hash.substring(1); - - if (newhash && newhash != self.currentHash) { - self.reset(); - var old_params = self._processURL(self.options.noEncoding ? newhash : self.decode(newhash)); - - old_params.query = self.options.type == "search" ? self.options.sanitizeQueryString.call(self, old_params.query) : ""; - - self.currentHash = newhash; - - if((old_params.query) || (old_params.categoryId)){ - self.params = old_params; - self.callResults(self.paintResultSet); - } - } - }, 3000); - } - - if (this.options.searchResultSetTemp !== null && typeof this.options.searchResultSetTemp === 'object') { - jQuery(this.options.viewTypeContainerSelector).on("click", '[unbxdviewtype]',changeViewType); - } - } - ,addSort : function(field, dir){ - this.params.sort[field] = dir || "desc"; - return this; - } - ,removeSort : function(field){ - if(field in this.params.sort) - delete this.params.sort[field]; - - return this; - } - ,resetSort : function(){ - this.params.sort = {}; - return this; - } - ,addFilter : function(field, value){ - if(!(field in this.params.filters)) - this.params.filters[field] = {}; - - this.params.filters[field][value] = field; - - return this; - } - ,removeFilter : function(field, value){ - if(value in this.params.filters[field]) - delete this.params.filters[field][value]; - - if(Object.keys(this.params.filters[field]).length == 0) - delete this.params.filters[field]; - - return this; - } - ,clearFilters : function(clearRanges){ - this.params.filters = {} - - if(clearRanges){ - this.clearRangeFiltes(); - } - return this; - } - ,addRangeFilter : function(field, lb, ub){ - if(!(field in this.params.ranges)) - this.params.ranges[field] = {}; - - this.params.ranges[field][lb + ' TO ' + ub] = {lb : lb || '*', ub : ub || '*'}; - - return this; - } - ,removeRangeFilter : function(field, lb, ub){ - if(!lb && !ub && field in this.params.ranges) - delete this.params.ranges[field]; - - if(lb && ub && field in this.params.ranges && (lb + ' TO ' + ub in this.params.ranges[field])) - delete this.params.ranges[field][lb + ' TO ' + ub]; - - if(Object.keys(this.params.ranges[field]).length == 0) - delete this.params.ranges[field]; - - return this; - } - ,clearRangeFiltes : function(){ - this.params.ranges = {}; - - return this; - } - ,setPage : function(pageNo){ - this.params.extra.page = pageNo; - return this; - } - ,getPage : function(){ - return this.params.extra.page; - } - ,setPageSize : function(pageSize){ - this.params.extra.rows = pageSize; - return this; - } - ,getPageSize : function(){ - return this.params.extra.rows; - } - - ,setViewType: function(viewType) { - this.params.extra.view = viewType; - return this; - } - ,getViewType: function() { - return this.params.extra.view; - } - - ,addQueryParam : function(key, value, dontOverried){ - if(!(key in this.params.extra) || !dontOverried){ - this.params.extra[key] = value; - }else{ - if(this.getClass(this.params.extra[key]) != "Array") - this.params.extra[key] = [this.params.extra[key]]; - - this.params.extra[key].push(value); - } - - return this; - } - ,isUsingPagination: function(){ - return !this.options.isAutoScroll && this.options.isPagination; - } - ,getHostNPath: function(){ - var handler = "search"; - if(isTypeBrowseOrCategory(this.options.type)) { - handler = this.options.type; - } - return "//search.unbxdapi.com/"+ this.options.APIKey + "/" + this.options.siteName + "/" + handler; - } - ,getUrlSubstring: function(){ - return window.location.search.substring(1) || window.location.hash.substring(1); - } - ,url : function(){ - var host_path = this.getHostNPath(); - - var url =""; - var nonhistoryPath = ""; - // To Retain the fields which are are required from the params of the base URL - var cur_url = this.getUrlSubstring(); - var urlParams = this.getQueryParams(cur_url); - var baseParams = {}; - if( typeof(this.options.baseParams) == "object" && this.options.baseParams.length > 0 ){ - for( i in urlParams ){ - if((urlParams.hasOwnProperty(i)) && !(i in this.params)){ - for( param in this.options.baseParams ){ - if(i == this.options.baseParams[param]){ - baseParams[i] = urlParams[i] - } - } - } - } - } - - if(this.options.type == "search" && this.params['query'] != undefined){ - url += '&'+ this.options.searchQueryParam +'='+ encodeURIComponent(this.params.query); - }else if(this.options.type == "browse" && this.params['categoryId'] != undefined){ - url += '&category-id=' + encodeURIComponent(this.params.categoryId); - } else if(isTypeCategory(this.options.type) && this.params.categoryId !== undefined) { - url += "&p=" + encodeURIComponent(this.params.categoryId); - } - - for(var x in this.params.filters){ - if(this.params.filters.hasOwnProperty(x)){ - var a = []; - var b = []; - for(var y in this.params.filters[x]){ - if(this.defaultParams.hasOwnProperty('filters') - && this.defaultParams.filters.hasOwnProperty(x) - && this.defaultParams.filters[x].hasOwnProperty(y) - && this.params.filters[x].hasOwnProperty(y)){ - b.push((x+':\"'+ encodeURIComponent(y.replace(/\"/g, "\\\"")) +'\"').replace(/\"{2,}/g, '"')); - } else if(this.params.filters[x].hasOwnProperty(y)){ - a.push((x+':\"'+ encodeURIComponent(y.replace(/\"/g, "\\\"")) +'\"').replace(/\"{2,}/g, '"')); - } - } - - if(a.length > 0) - url += '&filter='+a.join(' OR ') + b.join(' OR '); - else if(b.length > 0) - nonhistoryPath += '&filter='+b.join(' OR '); - } - } - - for(var x in this.params.ranges){ - var a = []; - var b = []; - for(var y in this.params.ranges[x]){ - if(this.defaultParams.hasOwnProperty('ranges') - && this.defaultParams.ranges.hasOwnProperty(x) - && this.defaultParams.ranges[x].hasOwnProperty(y) - && this.params.ranges[x].hasOwnProperty(y)){ - b.push(x + ':[' + this.params.ranges[x][y].lb + " TO " + this.params.ranges[x][y].ub + ']'); - }else if(this.params.ranges[x].hasOwnProperty(y)){ - a.push(x + ':[' + this.params.ranges[x][y].lb + " TO " + this.params.ranges[x][y].ub + ']'); - } - } - - if(a.length > 0) - url += '&filter='+a.join(' OR ') + b.join(' OR '); - else if(b.length > 0) - nonhistoryPath += '&filter='+b.join(' OR '); - } - - var a = []; - var b = []; - for(var field in this.params.sort){ - if(this.defaultParams.hasOwnProperty('sort') - && this.defaultParams.sort.hasOwnProperty(field) - && this.params.sort.hasOwnProperty(field)){ - var dir = this.params.sort[field] || 'desc'; - b.push(field + " " + dir); - } else if (this.params.sort.hasOwnProperty(field)) { - var dir = this.params.sort[field] || 'desc'; - a.push(field + " " + dir); - } - } - - if(a.length) - url += '&sort='+a.join(','); - - if(b.length) - nonhistoryPath += '&sort='+b.join(','); - - - for(var key in this.params.extra){ - if (this.params.extra.hasOwnProperty(key) && key != 'page') { - var value = this.params.extra[key]; - if(this.getClass(value) == "Array"){ - value = value.getUnique(); - for(var i = 0;i < value.length; i++){ - url += '&' + key + '=' + encodeURIComponent(value[i]); - } - } else if(key === 'wt' || key === 'format') { - nonhistoryPath += '&' + key + '=' + encodeURIComponent(value); - } else if((this.isUsingPagination() && key === 'rows') || key === "view"){ - url += '&' + key + '=' + encodeURIComponent(value); - } else if(this.defaultParams.hasOwnProperty('extra') && this.defaultParams.extra.hasOwnProperty(key)){ - nonhistoryPath += '&' + key + '=' + encodeURIComponent(value); - } else - url += '&' + key + '=' + encodeURIComponent(value); - } - } - - if(this.isUsingPagination()) - url += '&start=' + (this.params.extra.page <= 1 ? 0 : (this.params.extra.page - 1) * this.params.extra.rows); - else - nonhistoryPath += '&start=' + (this.params.extra.page <= 1 ? 0 : (this.params.extra.page - 1) * this.params.extra.rows); - - nonhistoryPath += this.options.getFacetStats.length > 0 ? "&stats=" + this.options.getFacetStats : ""; - - if(this.options.fields.length){ - nonhistoryPath += '&fields=' + this.options.fields.join(','); - } - - if(this.options.facetMultiSelect) - nonhistoryPath += '&facet.multiselect=true'; - - nonhistoryPath += '&indent=off'; - - return { - url : host_path + "?" + url + nonhistoryPath - ,query : url - ,host : host_path - ,baseParams : baseParams - }; - } - ,callResults : function(callback, doPush){ - if(this.isLoading){ - this.ajaxCall.abort(); - } - - this.isLoading = true; - - if(this.options.loaderSelector.length > 0) - jQuery(this.options.loaderSelector).show(); - - var self = this - ,modifiedCB = callback.bind(self) - ,cb = function(data){ - this.isLoading = false; - if(this.options.loaderSelector.length > 0) - jQuery(this.options.loaderSelector).hide(); - - if("error" in data) - return false; - - modifiedCB(data); - } - ,urlobj = self.url() - ,requestHeaders = this.serializeRequestHeaders(jQuery.extend({} - ,this.getDefaultRequestHeaders(), this.options.requestHeaders)); - - if(doPush){ - var finalquery = this.options.noEncoding ? urlobj.query : this.encode( urlobj.query ); - if(this.isHistory){ - if( self.options.retainbaseParam == true ){ - var finalBaseParams = ''; - for( i in urlobj.baseParams){ - if(urlobj.baseParams.hasOwnProperty(i)){ - finalBaseParams += "&" + i + "=" + urlobj.baseParams[i]; - } - } - finalquery += finalquery + this.options.noEncoding ? finalBaseParams : this.encode(finalBaseParams); - } - history.pushState(this.params,null,location.protocol + "//" + location.host + location.pathname + "?" + finalquery); - }else{ - window.location.hash = finalquery; - this.currentHash = finalquery; - } - } - if(requestHeaders){ - urlobj.url += '&' + requestHeaders - } - this.ajaxCall = jQuery.ajax({ - url: urlobj.url.replace(this.options.searchQueryParam+"=", "q=") - ,dataType: "jsonp" - ,jsonp: 'json.wrf' - ,success: cb.bind(self) - }); - } - ,reset: function(){ - this.totalNumberOfProducts = 0; - this.currentNumberOfProducts = 0; - jQuery(this.options.spellCheck).hide(); - jQuery(this.options.searchQueryDisplay).empty(); - if(this.options.deferInitRender.indexOf('search') === -1) - jQuery(this.options.searchResultContainer).empty(); - - jQuery(this.options.facetContainerSelector).empty(); - - this.options.selectedFacetHolderSelector && jQuery(this.options.selectedFacetHolderSelector).hide(); - - this.options.loaderSelector.length > 0 && jQuery(this.options.loaderSelector).hide(); - - this.params = { - query : '*' - ,filters : {} - ,sort : {} - ,ranges : {} - ,categoryId : "" - ,extra : { - format: "json" - ,page: 1 - ,rows: 12 - } - }; - - if( this.options.viewTypes && this.options.viewTypes.length > 0) - this.params.extra.view = this.options.viewTypes[0]; - - if(typeof this.options.customReset == "function") - this.options.customReset.call(this); - - if(typeof this.options.setDefaultFilters == "function") - this.setDefaultParams(this.params); - - return this; - } - ,setDefaultParams: function(params){ - var newparams, diff; - var oldparams = JSON.stringify(params); - this.options.setDefaultFilters.call(this); - newparams = JSON.stringify(this.params); - - if(Object.keys(this.defaultParams).length === 0) - this.defaultParams = JSON.parse(newparams); - } - ,_processURL: function(url){ - var obj = typeof url == "string" ? this.getQueryParams(url) : url - ,params = { - query : '' - ,filters : {} - ,sort : {} - ,ranges : {} - ,extra : { - format : "json" - ,page : 1 - ,rows : 12 - } - }; - - //lets get filters - if("filter" in obj){ - if (this.getClass(obj.filter) == "String") - obj.filter = Array(obj.filter); - - for (var i = 0; i < obj.filter.length; i++) { - - var filterStrArr = obj.filter[i].split(" OR "); - - for(var x = 0; x < filterStrArr.length; x++){ - var arr = filterStrArr[x].split(":"); - if(arr.length == 2){ - arr[1] = arr[1].replace(/(^")|("$)/g, '').replace(/\"{2,}/g, '"').replace(/\\\"/g, '"').replace(/(^\[)|(\]$)/g, ''); - - var vals = arr[1].split(" TO "); - if(vals.length > 1){ - if(!(arr[0] in params.ranges)) - params.ranges[arr[0]] = {}; - - params.ranges[arr[0]][arr[1]] = {lb : isNaN(parseFloat(vals[0])) ? '*' : parseFloat(vals[0]), ub : isNaN(parseFloat(vals[1])) ? '*' : parseFloat(vals[1])}; - } else { - if(!(arr[0] in params.filters)) - params.filters[arr[0]] = {}; - - params.filters[arr[0]][arr[1]] = arr[0]; - } - } - } - } - } - - //lets get sort now - if("sort" in obj){ - var sortarr = obj.sort.split(","); - - for (var i = 0; i < sortarr.length; i++) { - var arr = sortarr[i].split(/\s+(?=\S+$)/); - if(arr.length == 2){ - params.sort[arr[0]] = arr[1] || "desc"; - } - } - } - - //lets get page size - if("rows" in obj) - params.extra.rows = parseInt(obj.rows); - else - params.extra.rows = this.options.pageSize; - - //lets get query - if(this.options.searchQueryParam in obj) - params.query = obj[this.options.searchQueryParam]; - - //lets get category-id - if("category-id" in obj) - params.categoryId = obj["category-id"]; - - //lets get categoryId(navigation) - if("p" in obj) - params.categoryId = obj["p"]; - - //lets get boost - if("boost" in obj) - params.extra.boost = obj.boost; - - //lets get pageNo - if("start" in obj) - params.extra.page = (parseInt(obj.start) / parseInt(params.extra.rows)) + 1; - - if("view" in obj) - params.extra.view = obj['view']; - else if(this.options.viewTypes && this.options.viewTypes.length > 0) - params.extra.view = this.options.viewTypes[0]; - - return params; - } - ,paintResultSet: function(obj){ - this._internalPaintResultSet(obj,true); - } - ,_internalPaintResultSet: function(obj, facetsAlso){ - if("error" in obj) - return false; - - this.totalNumberOfProducts = 0; - - this.currentNumberOfProducts = 0; - - if(obj.hasOwnProperty('redirect')) { - window.location = obj['redirect']['value']; - return false; - } - - if (!obj.hasOwnProperty('banner')){ - this.options.bannerSelector.length - && jQuery(this.options.bannerSelector).empty(); - }else{ - this.paintBanners(obj); - } - - if(obj.hasOwnProperty('didYouMean')){ - if(obj.response.numberOfProducts == 0 ) { //> this.options.pageSize){ - if(this.params.extra.page > 1) - this.params.extra.page = this.params.extra.page - 1; - - this.params.query = obj.didYouMean[0].suggestion; - - if(!this.compiledSpellCheckTemp) - this.compiledSpellCheckTemp = Handlebars.compile(this.options.spellCheckTemp); - - jQuery(this.options.spellCheck).html(this.compiledSpellCheckTemp({suggestion : obj.didYouMean[0].suggestion , numberOfProducts : obj.response.numberOfProducts })).show(); - - facetsAlso ? this.callResults(this.paintAfterSpellCheck) : this.callResults(this.paintOnlyResultSet) ; - - }else{ - - this.params.query = obj.searchMetaData.queryParams.q; //obj.didYouMean[0].suggestion; - - if(!this.compiledSpellCheckTemp) - this.compiledSpellCheckTemp = Handlebars.compile(this.options.spellCheckTemp); - - jQuery(this.options.spellCheck).html(this.compiledSpellCheckTemp({suggestion : obj.didYouMean[0].suggestion , numberOfProducts : obj.response.numberOfProducts })).show(); - - facetsAlso ? this.callResults(this.paintAfterSpellCheck) : this.callResults(this.paintOnlyResultSet) ; - } - }else{ - jQuery(this.options.spellCheck).hide(); - if(this.options.deferInitRender.indexOf('search') === -1) - jQuery(this.options.searchResultContainer).empty(); - this.paintProductPage(obj); - facetsAlso && this.paintFacets(obj); - } - } - ,paintOnlyResultSet : function(obj){ - if(this.options.deferInitRender.indexOf('search') === -1) - jQuery(this.options.searchResultContainer).empty(); - this.paintProductPage(obj); - } - ,paintAfterSpellCheck : function(obj){ - if(this.options.deferInitRender.indexOf('search') === -1) - jQuery(this.options.searchResultContainer).empty(); - this.paintProductPage(obj); - this.paintFacets(obj); - } - ,paintAfterFacetChange : function(obj){ - if(this.options.deferInitRender.indexOf('search') === -1) - jQuery(this.options.searchResultContainer).empty(); - this.paintProductPage(obj); - this.paintSelectedFacets(); - } - ,paintProductPage : function(obj){ - var start = 1; - if("error" in obj) - return; - - if(!obj.response.numberOfProducts){ - this.reset(); - - this.options.onNoResult.call(this,obj); - - return this; - } - - if(!this.compiledSearchQueryTemp) - this.compiledSearchQueryTemp = Handlebars.compile(this.options.searchQueryDisplayTemp); - - this.productStartIdx = (this.isUsingPagination()) ? obj.response.start + 1 : 1; - this.productEndIdx = (this.getPage() * this.getPageSize() <= obj.response.numberOfProducts) ? - this.getPage() * this.getPageSize() : obj.response.numberOfProducts; - this.totalPages = Math.ceil(obj.response.numberOfProducts/this.getPageSize()); - var queryParams = { - numberOfProducts : obj.response.numberOfProducts - ,start: this.productStartIdx - ,end: this.productEndIdx - } - if (isTypeCategory(this.options.type)) { - queryParams.categoryId = obj.searchMetaData.queryParams.p - } else { - queryParams.query = obj.searchMetaData.queryParams.q - } - - jQuery(this.options.searchQueryDisplay).html(this.compiledSearchQueryTemp(queryParams)).show(); - - this.paintSort(obj); - this.paintPageSize(obj); - this.paintPagination(obj); - obj.response.products = obj.response.products.map(function(product){ - product['unbxdprank'] = obj.response.start + start; - start += 1; - return product; - }); - - if(this.getClass(this.options.searchResultSetTemp) == 'Function'){ - this.options.searchResultSetTemp.call(this,obj); - } else if (this.options.searchResultSetTemp !== null && typeof this.options.searchResultSetTemp === 'object') { - this.paintViewTypes(obj); - var currentViewType = this.getViewType(); - if (!this.compiledResultTemp) { - this.compiledResultTemp = {}; - this.options.viewTypes.forEach(function(val) { - this.compiledResultTemp[val] = Handlebars.compile(this.options.searchResultSetTemp[val]); - }.bind(this)); - } - if (this.options.deferInitRender.indexOf('search') === -1 || !this.isUsingPagination()) { - jQuery(this.options.searchResultContainer).append(this.compiledResultTemp[currentViewType](obj.response)); - } - }else{ - if(!this.compiledResultTemp) - this.compiledResultTemp = Handlebars.compile(this.options.searchResultSetTemp); - - if(this.options.deferInitRender.indexOf('search') === -1 || !this.isUsingPagination()){ - jQuery(this.options.searchResultContainer).append(this.compiledResultTemp(obj.response)); - } - } - - if(!this.currentNumberOfProducts && typeof this.options.onIntialResultLoad == "function") { - this.options.onIntialResultLoad.call(this, obj); - } - - if(this.currentNumberOfProducts && typeof this.options.onPageLoad == "function") { - this.options.onPageLoad.call(this, obj); - } - - this.totalNumberOfProducts = obj.response.numberOfProducts; - - this.currentNumberOfProducts = obj.response.start + obj.response.products.length; - - if(typeof this.options.setPagination == "function"){ - this.options.setPagination.call(this,this.totalNumberOfProducts,this.getPageSize(),this.getPage()); - } - - if(this.options.isClickNScroll) - jQuery(this.options.clickNScrollElementSelector)[(this.currentNumberOfProducts < this.totalNumberOfProducts) ? 'show' : 'hide'](); - - } - ,paintSort: function(obj) { - if("error" in obj) - return; - if(this.options.sortContainerSelector.length <= 0) - return; - - if(!this.compiledSortContainerTemp) - this.compiledSortContainerTemp = Handlebars.compile(this.options.sortContainerTemp); - - var sortOptions = this.options.sortOptions.map(function(opt){ - opt['selected'] = (opt.hasOwnProperty('field') && opt.field in this.params.sort && this.params.sort[opt.field] === opt.order) ? - true : (!opt.hasOwnProperty('field') && Object.keys(this.params.sort).length === 0) ? true: false; - return opt; - }.bind(this)); - - jQuery(this.options.sortContainerSelector).html(this.compiledSortContainerTemp({ - options: sortOptions - })); - } - ,paintPageSize: function(obj) { - if("error" in obj) - return; - if(this.options.pageSizeContainerSelector.length <= 0) - return; - if(!this.isUsingPagination()) - return; - - if(!this.compiledPageSizeContainerTemp) - this.compiledPageSizeContainerTemp = Handlebars.compile(this.options.pageSizeContainerTemp); - - var pageSizeOptions = this.options.pageSizeOptions.map(function(opt){ - opt['selected'] = (this.getPageSize() == opt.value) ? true : false; - return opt; - }.bind(this)); - - jQuery(this.options.pageSizeContainerSelector).html(this.compiledPageSizeContainerTemp({ - options: pageSizeOptions - })); - } - - ,paintViewTypes: function(obj) { - if ("error" in obj || this.options.viewTypeContainerSelector.length <= 0) { - return; - } - if (!this.compiledViewTypesContainerTemp) { - this.compiledViewTypesContainerTemp = Handlebars.compile(this.options.viewTypeContainerTemp); - } - var viewTypeOptions = this.options.viewTypes.map(function(opt) { - - var values = {}; - values["value"] = opt; - values["selected"] = this.getViewType() == opt ? true : false; - return values; - - }.bind(this)); - jQuery(this.options.viewTypeContainerSelector).html(this.compiledViewTypesContainerTemp({ - options: viewTypeOptions - })); - return this.getViewType(); - } - - ,paintPagination: function(obj) { - if("error" in obj) - return; - if(this.options.paginationContainerSelector.length <= 0) - return; - if(!this.isUsingPagination()) - return; - - if(!this.compiledPaginationTemp) - this.compiledPaginationTemp = Handlebars.compile(this.options.paginationTemp); - - var seq = [{ - page: this.getPage() - 2, - current: false - },{ - page: this.getPage() - 1, - current: false - },{ - page: this.getPage(), - current: true - },{ - page: this.getPage() + 1, - current: false - },{ - page: this.getPage() + 2, - current: false - }]; - - var pagesToShow = seq.filter(function(obj){ - return obj.page > 0 && obj.page <= this.totalPages; - }.bind(this)) - - - - jQuery(this.options.paginationContainerSelector).html(this.compiledPaginationTemp({ - hasFirst: this.getPage() > 1 ? true : false, - hasPrev: this.getPage() > 1 ? true : false, - pages: pagesToShow, - totalPages: this.totalPages, - hasNext: this.getPage() < this.totalPages ? true : false, - hasLast: this.getPage() < this.totalPages ? true : false - })); - } - ,paintBanners : function(obj){ - if("error" in obj) - return; - if(this.options.bannerCount <= 0) - return; - if(this.options.bannerSelector.length === 0 ) - return; - var banner = obj.banner; - var bannersToDraw = []; - - if(!this.compiledBannerTemp) - this.compiledBannerTemp = Handlebars.compile(this.options.bannerTemp); - - bannersToDraw = banner.banners.slice(0, this.options.bannerCount) - .reduce(function(prev, curr){ - if(curr.hasOwnProperty('bannerHtml') && curr['bannerHtml']) { - return prev.concat(curr.bannerHtml); - } else { - return prev.concat(this.compiledBannerTemp( - { - landingUrl: curr.landingUrl, - imageUrl: curr.imageUrl - } - )); - } - }.bind(this), []); - - jQuery(this.options.bannerSelector).html(bannersToDraw.join('')); - - } - ,paintFacets: function(obj){ - if("error" in obj) - return; - - if(!obj.response.numberOfProducts) - return this; - - var facets = obj.facets - ,facetKeys = Object.keys(facets) - ,textfacets = [] - ,rangefacets = [] - ,singlefacet = {} - ,self = this - ,facetVal = "" - ,facetValStart = "" - ,facetValEnd = "" - ,isSelected = false - ,selectedOnly = []; - - var positionExists = false; - for(var x in facets) { - if("position" in facets[x]) { - positionExists = true; - } - break; - } - var sortable = []; - for(var facet in facets) { - sortable.push(positionExists ? ([facet, facets[facet]["position"]]) : [facet]); - } - - if(positionExists) { - sortable.sort(function(a, b) {return a[1] - b[1]}); - } - for(var newI = 0; newI < sortable.length; newI++) { - - var x = sortable[newI][0]; - // for(var x in facets) { - singlefacet = { - name : self.prepareFacetName(x) - ,facet_name : x - ,type : facets[x]['type'] - ,selected : [] - ,unselected : [] - ,unordered : [] - }; - - if(singlefacet.type !== 'facet_ranges'){ - for(var i = 0, len = facets[x]['values'].length/2; i < len;i++){ - facetVal = facets[x]['values'][2 * i]; - - if(facetVal.trim().length == 0) - continue; - - isSelected = x in self.params.filters && facetVal in self.params.filters[x] && self.params.filters[x][facetVal] == x ? true : false; - - singlefacet[isSelected ? "selected" : "unselected" ].push({value : facetVal , count : facets[x]['values'][2 * i + 1]}); - singlefacet.unordered.push({value : facetVal , count : facets[x]['values'][2 * i + 1], isSelected : isSelected}); - } - - if((singlefacet.unordered.length) > 0) textfacets.push(singlefacet); - - } else { - for(var i = 0, len = facets[x]['values']['counts'].length/2; i < len; i++){ - facetValStart = parseFloat(facets[x]['values']['counts'][2 * i]).toString(); - facetValEnd = (parseFloat(facetValStart) + facets[x]['values'].gap).toString(); - var y = facetValStart + ' TO ' + facetValEnd; - - isSelected = x in self.params.ranges && y in self.params.ranges[x] && self.params.ranges[x][y]['lb'] == facetValStart && self.params.ranges[x][y]['ub'] == facetValEnd ? true : false; - - singlefacet[isSelected ? "selected" : "unselected" ].push({begin: facetValStart, end: facetValEnd, count: facets[x]['values']['counts'][2 * i + 1], value: y}); - singlefacet.unordered.push({begin: facetValStart, end: facetValEnd, count: facets[x]['values']['counts'][2 * i + 1], value: y, isSelected : isSelected}); - } - - if((singlefacet.unordered.length) > 0) rangefacets.push(singlefacet); - - } - } - - if(this.getClass(this.options.facetTemp) == 'Function'){ - this.options.facetTemp.call(this,{facets: textfacets, rangefacets: rangefacets}); - }else{ - if(!this.compiledFacetTemp && this.options.facetTemp.length) - this.compiledFacetTemp = Handlebars.compile(this.options.facetTemp); - - this.options.facetContainerSelector.length && jQuery(this.options.facetContainerSelector).html(this.compiledFacetTemp({facets: textfacets, rangefacets: rangefacets})); - } - - this.paintSelectedFacets(); - - if (this.options.deferInitRender.indexOf('search') > -1){ - this.options.deferInitRender = []; - } - - if (typeof this.options.onFacetLoad == "function") { - this.options.onFacetLoad.call(this, obj); - } - - if(this.options.getFacetStats.length && - typeof this.options.processFacetStats == "function" && - "stats" in obj && obj.stats[this.options.getFacetStats] != null){ - - obj.stats[this.options.getFacetStats].values = { - min: obj.stats[this.options.getFacetStats].min, - max: obj.stats[this.options.getFacetStats].max - }; - if(this.options.getFacetStats in this.params.ranges){ - for (var x in this.params.ranges[this.options.getFacetStats]){ - obj.stats[this.options.getFacetStats].values = { - min: this.params.ranges[this.options.getFacetStats][x].lb != "*" ? - this.params.ranges[this.options.getFacetStats][x].lb : - obj.stats[this.options.getFacetStats].min - ,max: this.params.ranges[this.options.getFacetStats][x].ub != "*" ? - this.params.ranges[this.options.getFacetStats][x].ub : - obj.stats[this.options.getFacetStats].max - }; - } - - } - - this.options.processFacetStats.call(this,obj.stats); - } - } - ,paintSelectedFacets : function(){ - var selFacetKeysLength = Math.max(Object.keys(this.params.filters).length, - Object.keys(this.params.ranges).length); - var selectedFacets = {}; - - if(selFacetKeysLength){ - selectedFacets.filters = this.params.filters; - selectedFacets.ranges = {}; - - for (var x in this.params.ranges){ - if(!selectedFacets.ranges.hasOwnProperty(x)) - selectedFacets.ranges[x] = {}; - - for (var y in this.params.ranges[x]){ - selectedFacets.ranges[x][y] = x; - } - } - - if(this.options.selectedFacetTemp && this.options.selectedFacetContainerSelector){ - if(!this.compiledSelectedFacetTemp) - this.compiledSelectedFacetTemp = Handlebars.compile(this.options.selectedFacetTemp); - - jQuery(this.options.selectedFacetContainerSelector).html(this.compiledSelectedFacetTemp(selectedFacets)); - } - jQuery(this.options.selectedFacetHolderSelector).show(); - }else{ - jQuery(this.options.selectedFacetContainerSelector).empty(); - jQuery(this.options.selectedFacetHolderSelector).hide(); - } - } - ,prepareFacetName : function (txt){ - txt = txt.replace("_fq",""); - return txt.replace("_"," "); - } - ,getQueryParams : function (q){ - var e, //replace + character before decoding the URL - d = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")).trim(); }, - //splits on equals - r = /([^&=]+)=?([^&]*)/g - ,urlParams = {}; - - q = q || this.getUrlSubstring(); - - while (e = r.exec(q)) { - var e1 = e[1].indexOf("[") - //first group of regex match - ,k = e1 == "-1" ? e[1] : e[1].slice(0, e1) - ,i = e1 != "-1" ? d(e[1].slice(e1+1, e[1].indexOf("]", e1))) : "" - ,v = d(e[2]); - - if( v.length == 0 ) - continue; - - if (!(k in urlParams)) { - urlParams[k] = v - }else{ - if (typeof urlParams[k] != "object"){ - var old = urlParams[k]; - - urlParams[k] = Array(urlParams[k]); - - Array.prototype.push.call(urlParams[k], old); - } - - Array.prototype.push.call(urlParams[k], v); - } - } - return urlParams; - } - ,_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" - ,encode: function (e) { - var t = "",n, r, i, s, o, u, a,f = 0; - e = this._utf8_encode(e); - while (f < e.length) { - n = e.charCodeAt(f++); - r = e.charCodeAt(f++); - i = e.charCodeAt(f++); - s = n >> 2; - o = (n & 3) << 4 | r >> 4; - u = (r & 15) << 2 | i >> 6; - a = i & 63; - if (isNaN(r)) { - u = a = 64; - } else if (isNaN(i)) { - a = 64; - } - t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a); - } - return t; - } - ,decode: function (e) { - var t = "",n, r, i,s, o, u, a,f = 0; - e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - while (f < e.length) { - s = this._keyStr.indexOf(e.charAt(f++)); - o = this._keyStr.indexOf(e.charAt(f++)); - u = this._keyStr.indexOf(e.charAt(f++)); - a = this._keyStr.indexOf(e.charAt(f++)); - n = s << 2 | o >> 4; - r = (o & 15) << 4 | u >> 2; - i = (u & 3) << 6 | a; - t = t + String.fromCharCode(n); - if (u != 64) { - t = t + String.fromCharCode(r); - } - if (a != 64) { - t = t + String.fromCharCode(i); - } - } - t = this._utf8_decode(t); - - return t; - } - ,_utf8_encode: function (e) { - e = e.replace(/\r\n/g, "\n"); - var t = ""; - for (var n = 0; n < e.length; n++) { - var r = e.charCodeAt(n); - if (r < 128) { - t += String.fromCharCode(r) - } else if (r > 127 && r < 2048) { - t += String.fromCharCode(r >> 6 | 192); - t += String.fromCharCode(r & 63 | 128); - } else { - t += String.fromCharCode(r >> 12 | 224); - t += String.fromCharCode(r >> 6 & 63 | 128); - t += String.fromCharCode(r & 63 | 128); - } - } - return t; - } - ,_utf8_decode: function (e) { - var t = "",n = 0; - var r = c1 = c2 = 0; - while (n < e.length) { - r = e.charCodeAt(n); - if (r < 128) { - t += String.fromCharCode(r); - n++; - } else if (r > 191 && r < 224) { - c2 = e.charCodeAt(n + 1); - t += String.fromCharCode((r & 31) << 6 | c2 & 63); - n += 2; - } else { - c2 = e.charCodeAt(n + 1); - c3 = e.charCodeAt(n + 2); - t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63); - n += 3; - } - } - return t; - } - ,log : function(str){ - if(this.readCookie("debug") === '1'){ - console.log("Unbxd : " + str); - } - } - ,decodeAndParse : function(s) { - if (s.indexOf('"') === 0) { - // This is a quoted cookie as according to RFC2068, unescape... - s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); - } - - return this.decodeCookie(s); - } - ,decodeCookie : function(s) { - var pluses = /\+/g; - return decodeURIComponent(s.replace(pluses, ' ')); - } - ,cookie : function (key) { - // Read - var cookies = document.cookie.split('; '); - var result; - for (var i = 0, l = cookies.length; i < l; i++) { - var parts = cookies[i].split('='); - var name = this.decodeCookie(parts.shift()); - var cookie = parts.join('='); - - if (key && key === name) { - try{ - result = this.decodeAndParse(cookie); - break; - }catch(e){ - this.log(e); - } - } - } - - return result; - } - ,readCookie : function(name){ - try{ - return this.cookie('unbxd.' + name); - }catch(e){ - this.log(e); - } - - return undefined; - } - ,getDeviceInfo : function(){ - var smallDeviceMaxWidth = 768, - mediumDeviceMaxWidth = 992; - if(window.outerWidth < smallDeviceMaxWidth){ - return "Mobile"; - } else if(window.outerWidth < mediumDeviceMaxWidth){ - return "Tablet"; - } else { - return "Desktop"; - } - } - ,getUserType : function(){ - return this.readCookie('visit') === "repeat" ? "repeat" : "new"; - } - ,getUserId : function(){ - return this.readCookie('userId'); - } - ,getDefaultRequestHeaders : function(){ - var self = this, - userId = this.getUserId(), - defaultRequestHeaders = { - "device-type": self.getDeviceInfo() - ,"unbxd-url": document.URL - ,"unbxd-referrer": document.referrer - ,"user-type": self.getUserType() - ,"api-key": self.options.APIKey - }; - if(userId){ - defaultRequestHeaders["uid"] = userId; - } - return defaultRequestHeaders; - } - ,serializeRequestHeaders : function(headers){ - if(jQuery.param){ - return jQuery.param(headers) - } else { - var str = []; - for(var header in headers) - if (headers.hasOwnProperty(header)) { - str.push(encodeURIComponent(header) + "=" + encodeURIComponent(headers[header])); - } - return str.join("&"); - } - } - }); -}; - - -Unbxd = window.Unbxd || {}; - -Unbxd.isJqueryRequiredVersion = Unbxd.isJqueryRequiredVersion || - function isJqueryRequiredVersion(current) { - var jQueryVersion = current.split('.'); - jQueryVersion = jQueryVersion.map(function convertToNumber(version) { - return Number(version); - }); - if ( - jQueryVersion[0] > 1 || (jQueryVersion[0] === 1 && jQueryVersion[1] >= 7) - ) { - return true; - } - return false; - }; - -if (!window.jQuery || !window.Handlebars) { - console.error( - 'Please include jQuery & Handlebars libraries before loading unbxdSearch.js or You can pass custom jQuery & Handlebars by calling unbxdSeachInit(jQuery, Handlebars) ' - ); -} else if (!Unbxd.isJqueryRequiredVersion(jQuery.fn.jquery)) { - console.error( - 'jQuery version needs to be greater than 1.7 to use unbxdSearch.js. You can pass custom jQuery & Handlebars by calling unbxdSeachInit(jQuery, Handlebars)' - ); -} else { - unbxdSearchInit(jQuery, Handlebars); -} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..ac5cd88 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,22 @@ +const path = require('path'); + +module.exports = { + entry: path.resolve(__dirname, 'app'), + output: { + path: path.resolve(__dirname, 'build'), + filename: 'bundle.js' + }, + devServer: { + port: 3000, + contentBase: path.resolve(__dirname, 'build') + }, + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + use: ['babel-loader'] + } + ] + } +};