1var card = 2/******/ (function(modules) { // webpackBootstrap 3/******/ // The module cache 4/******/ var installedModules = {}; 5 6/******/ // The require function 7/******/ function __webpack_require__(moduleId) { 8 9/******/ // Check if module is in cache 10/******/ if(installedModules[moduleId]) 11/******/ return installedModules[moduleId].exports; 12 13/******/ // Create a new module (and put it into the cache) 14/******/ var module = installedModules[moduleId] = { 15/******/ exports: {}, 16/******/ id: moduleId, 17/******/ loaded: false 18/******/ }; 19 20/******/ // Execute the module function 21/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 22 23/******/ // Flag the module as loaded 24/******/ module.loaded = true; 25 26/******/ // Return the exports of the module 27/******/ return module.exports; 28/******/ } 29 30 31/******/ // expose the modules object (__webpack_modules__) 32/******/ __webpack_require__.m = modules; 33 34/******/ // expose the module cache 35/******/ __webpack_require__.c = installedModules; 36 37/******/ // __webpack_public_path__ 38/******/ __webpack_require__.p = ""; 39 40/******/ // Load entry module and return exports 41/******/ return __webpack_require__(0); 42/******/ }) 43/************************************************************************/ 44/******/ ([ 45/* 0 */ 46/***/ function(module, exports, __webpack_require__) { 47 48 /* WEBPACK VAR INJECTION */(function(global) {var Card, QJ, extend, payment, 49 __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; 50 51 __webpack_require__(1); 52 53 QJ = __webpack_require__(5); 54 55 payment = __webpack_require__(6); 56 57 extend = __webpack_require__(7); 58 59 Card = (function() { 60 var bindVal; 61 62 Card.prototype.initializedDataAttr = "data-jp-card-initialized"; 63 64 Card.prototype.cardTemplate = '' + '<div class="jp-card-container">' + '<div class="jp-card">' + '<div class="jp-card-front">' + '<div class="jp-card-logo jp-card-elo">' + '<div class="e">e</div>' + '<div class="l">l</div>' + '<div class="o">o</div>' + '</div>' + '<div class="jp-card-logo jp-card-visa">visa</div>' + '<div class="jp-card-logo jp-card-mastercard">MasterCard</div>' + '<div class="jp-card-logo jp-card-maestro">Maestro</div>' + '<div class="jp-card-logo jp-card-amex"></div>' + '<div class="jp-card-logo jp-card-discover">discover</div>' + '<div class="jp-card-logo jp-card-dankort"><div class="dk"><div class="d"></div><div class="k"></div></div></div>' + '<div class="jp-card-lower">' + '<div class="jp-card-shiny"></div>' + '<div class="jp-card-cvc jp-card-display">{{cvc}}</div>' + '<div class="jp-card-number jp-card-display">{{number}}</div>' + '<div class="jp-card-name jp-card-display">{{name}}</div>' + '<div class="jp-card-expiry jp-card-display" data-before="{{monthYear}}" data-after="{{validDate}}">{{expiry}}</div>' + '</div>' + '</div>' + '<div class="jp-card-back">' + '<div class="jp-card-bar"></div>' + '<div class="jp-card-cvc jp-card-display">{{cvc}}</div>' + '<div class="jp-card-shiny"></div>' + '</div>' + '</div>' + '</div>'; 65 66 Card.prototype.template = function(tpl, data) { 67 return tpl.replace(/\{\{(.*?)\}\}/g, function(match, key, str) { 68 return data[key]; 69 }); 70 }; 71 72 Card.prototype.cardTypes = ['jp-card-amex', 'jp-card-dankort', 'jp-card-dinersclub', 'jp-card-discover', 'jp-card-jcb', 'jp-card-laser', 'jp-card-maestro', 'jp-card-mastercard', 'jp-card-unionpay', 'jp-card-visa', 'jp-card-visaelectron', 'jp-card-elo']; 73 74 Card.prototype.defaults = { 75 formatting: true, 76 formSelectors: { 77 numberInput: 'input[name="number"]', 78 expiryInput: 'input[name="expiry"]', 79 cvcInput: 'input[name="cvc"]', 80 nameInput: 'input[name="name"]' 81 }, 82 cardSelectors: { 83 cardContainer: '.jp-card-container', 84 card: '.jp-card', 85 numberDisplay: '.jp-card-number', 86 expiryDisplay: '.jp-card-expiry', 87 cvcDisplay: '.jp-card-cvc', 88 nameDisplay: '.jp-card-name' 89 }, 90 messages: { 91 validDate: 'valid\nthru', 92 monthYear: 'month/year' 93 }, 94 placeholders: { 95 number: '•••• •••• •••• ••••', 96 cvc: '•••', 97 expiry: '••/••', 98 name: 'Full Name' 99 }, 100 masks: { 101 cardNumber: false 102 }, 103 classes: { 104 valid: 'jp-card-valid', 105 invalid: 'jp-card-invalid' 106 }, 107 debug: false 108 }; 109 110 function Card(opts) { 111 this.maskCardNumber = __bind(this.maskCardNumber, this); 112 var toInitialize; 113 this.options = extend(true, this.defaults, opts); 114 if (!this.options.form) { 115 console.log("Please provide a form"); 116 return; 117 } 118 this.$el = QJ(this.options.form); 119 if (!this.options.container) { 120 console.log("Please provide a container"); 121 return; 122 } 123 this.$container = QJ(this.options.container); 124 toInitialize = QJ.isDOMElement(this.$container) ? this.$container : this.$container[0]; 125 if (toInitialize.getAttribute(this.initializedDataAttr)) { 126 return; 127 } 128 toInitialize.setAttribute(this.initializedDataAttr, true); 129 this.render(); 130 this.attachHandlers(); 131 this.handleInitialPlaceholders(); 132 } 133 134 Card.prototype.render = function() { 135 var $cardContainer, baseWidth, name, obj, selector, ua, _ref, _ref1; 136 QJ.append(this.$container, this.template(this.cardTemplate, extend({}, this.options.messages, this.options.placeholders))); 137 _ref = this.options.cardSelectors; 138 for (name in _ref) { 139 selector = _ref[name]; 140 this["$" + name] = QJ.find(this.$container, selector); 141 } 142 _ref1 = this.options.formSelectors; 143 for (name in _ref1) { 144 selector = _ref1[name]; 145 selector = this.options[name] ? this.options[name] : selector; 146 obj = QJ.find(this.$el, selector); 147 if (!obj.length && this.options.debug) { 148 console.error("Card can't find a " + name + " in your form."); 149 } 150 this["$" + name] = obj; 151 } 152 if (this.options.formatting) { 153 Payment.formatCardNumber(this.$numberInput); 154 Payment.formatCardCVC(this.$cvcInput); 155 Payment.formatCardExpiry(this.$expiryInput); 156 } 157 if (this.options.width) { 158 $cardContainer = QJ(this.options.cardSelectors.cardContainer)[0]; 159 baseWidth = parseInt($cardContainer.clientWidth || window.getComputedStyle($cardContainer).width); 160 $cardContainer.style.transform = "scale(" + (this.options.width / baseWi
160dth) + ")"; 161 } 162 if (typeof navigator !== "undefined" && navigator !== null ? navigator.userAgent : void 0) { 163 ua = navigator.userAgent.toLowerCase(); 164 if (ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1) { 165 QJ.addClass(this.$card, 'jp-card-safari'); 166 } 167 } 168 if (/MSIE 10\./i.test(navigator.userAgent)) { 169 QJ.addClass(this.$card, 'jp-card-ie-10'); 170 } 171 if (/rv:11.0/i.test(navigator.userAgent)) { 172 return QJ.addClass(this.$card, 'jp-card-ie-11'); 173 } 174 }; 175 176 Card.prototype.attachHandlers = function() { 177 var expiryFilters, numberInputFilters; 178 numberInputFilters = [this.validToggler('cardNumber')]; 179 if (this.options.masks.cardNumber) { 180 numberInputFilters.push(this.maskCardNumber); 181 } 182 bindVal(this.$numberInput, this.$numberDisplay, { 183 fill: false, 184 filters: numberInputFilters 185 }); 186 QJ.on(this.$numberInput, 'payment.cardType', this.handle('setCardType')); 187 expiryFilters = [ 188 function(val) { 189 return val.replace(/(\s+)/g, ''); 190 } 191 ]; 192 expiryFilters.push(this.validToggler('cardExpiry')); 193 bindVal(this.$expiryInput, this.$expiryDisplay, { 194 join: function(text) { 195 if (text[0].length === 2 || text[1]) { 196 return "/"; 197 } else { 198 return ""; 199 } 200 }, 201 filters: expiryFilters 202 }); 203 bindVal(this.$cvcInput, this.$cvcDisplay, { 204 filters: this.validToggler('cardCVC') 205 }); 206 QJ.on(this.$cvcInput, 'focus', this.handle('flipCard')); 207 QJ.on(this.$cvcInput, 'blur', this.handle('unflipCard')); 208 return bindVal(this.$nameInput, this.$nameDisplay, { 209 fill: false, 210 filters: this.validToggler('cardHolderName'), 211 join: ' ' 212 }); 213 }; 214 215 Card.prototype.handleInitialPlaceholders = function() { 216 var el, name, selector, _ref, _results; 217 _ref = this.options.formSelectors; 218 _results = []; 219 for (name in _ref) { 220 selector = _ref[name]; 221 el = this["$" + name]; 222 if (QJ.val(el)) { 223 QJ.trigger(el, 'paste'); 224 _results.push(setTimeout(function() { 225 return QJ.trigger(el, 'keyup'); 226 })); 227 } else { 228 _results.push(void 0); 229 } 230 } 231 return _results; 232 }; 233 234 Card.prototype.handle = function(fn) { 235 return (function(_this) { 236 return function(e) { 237 var args; 238 args = Array.prototype.slice.call(arguments); 239 args.unshift(e.target); 240 return _this.handlers[fn].apply(_this, args); 241 }; 242 })(this); 243 }; 244 245 Card.prototype.validToggler = function(validatorName) { 246 var isValid; 247 if (validatorName === "cardExpiry") { 248 isValid = function(val) { 249 var objVal; 250 objVal = Payment.fns.cardExpiryVal(val); 251 return Payment.fns.validateCardExpiry(objVal.month, objVal.year); 252 }; 253 } else if (validatorName === "cardCVC") { 254 isValid = (function(_this) { 255 return function(val) { 256 return Payment.fns.validateCardCVC(val, _this.cardType); 257 }; 258 })(this); 259 } else if (validatorName === "cardNumber") { 260 isValid = function(val) { 261 return Payment.fns.validateCardNumber(val); 262 }; 263 } else if (validatorName === "cardHolderName") { 264 isValid = function(val) { 265 return val !== ""; 266 }; 267 } 268 return (function(_this) { 269 return function(val, $in, $out) { 270 var result; 271 result = isValid(val); 272 _this.toggleValidClass($in, result); 273 _this.toggleValidClass($out, result); 274 return val; 275 }; 276 })(this); 277 }; 278 279 Card.prototype.toggleValidClass = function(el, test) { 280 QJ.toggleClass(el, this.options.classes.valid, test); 281 return QJ.toggleClass(el, this.options.classes.invalid, !test); 282 }; 283 284 Card.prototype.maskCardNumber = function(val, el, out) { 285 var mask, numbers; 286 mask = this.options.masks.cardNumber; 287 numbers = val.split(' '); 288 if (numbers.length >= 3) { 289 numbers.forEach(function(item, idx) { 290 if (idx !== numbers.length - 1) { 291 return numbers[idx] = numbers[idx].replace(/\d/g, mask); 292 } 293 }); 294 return numbers.join(' '); 295 } else { 296 return val.replace(/\d/g, mask); 297 } 298 }; 299 300 Card.prototype.handlers = { 301 setCardType: function($el, e) { 302 var cardType; 303 cardType = e.data; 304 if (!QJ.hasClass(this.$card, cardType)) { 305 QJ.removeClass(this.$card, 'jp-card-unknown'); 306 QJ.removeClass(this.$card, this.cardTypes.join(' ')); 307 QJ.addClass(this.$card, "jp-card-" + cardType); 308 QJ.toggleClass(this.$card, 'jp-card-identified', cardType !== 'unknown'); 309 return this.cardType = cardType; 310 } 311 }, 312 flipCard: function() { 313 return QJ.addClass(this.$card, 'jp-card-flipped'); 314 }, 315 unflipCard: function() { 316 return QJ.removeClass(this.$card, 'jp-card-flipped'); 317 } 318 }; 319 320 bindVal = function(el, out, opts) { 321 var joiner, o, outDefaults; 322 if (opts == null) { 323 opts = {}; 324 } 325 opts.fill = opts.fill || false; 326 opts.filters = opts.filters || []; 327 if (!(opts.filters instanceof Array)) { 328 opts.filters = [opts.filters]; 329 } 330 opts.join = opts.join || ""; 331 if (!(typeof opts.join === "function")) { 332 joiner = opts.join; 333 opts.join = function() { 334 return joiner; 335 }; 336 } 337 outDefaults = (function() { 338 var _i, _len, _results; 339 _results = []; 340 for (_i = 0, _len = out.length; _i < _len; _i++) { 341 o = out[_i]; 342 _results.push(o.textContent); 343 } 344 return _results; 345 })(); 346 QJ.on(el, 'focus', function() { 347 return QJ.addClass(out, 'jp-card-focused'); 348 }); 349 QJ.on(el, 'blur', function() { 350 return QJ.removeClass(out, 'jp-card-focused'); 351 }); 352 QJ.on(el, 'keyup change paste', function(e) { 353 var elem, filter, i, join, outEl, outVal, val, _i, _j, _len, _len1, _ref, _results; 354 val = (function() { 355 var _i, _len, _results; 356 _results = []; 357 for (_i = 0, _len = el.length; _i < _len; _i++) { 358 elem = el[_i]; 359 _results.push(QJ.val(elem)); 360 } 361 return _results; 362 })(); 363 join = opts.join(val); 364 val = val.join(join); 365 if (val === join) { 366 val = ""; 367 } 368 _ref = opts.filters; 369 for (_i = 0, _len = _ref.length; _i < _len; _i++) { 370 filter = _ref[_i];
371 val = filter(val, el, out); 372 } 373 _results = []; 374 for (i = _j = 0, _len1 = out.length; _j < _len1; i = ++_j) { 375 outEl = out[i]; 376 if (opts.fill) { 377 outVal = val + outDefaults[i].substring(val.length); 378 } else { 379 outVal = val || outDefaults[i]; 380 } 381 _results.push(outEl.textContent = outVal); 382 } 383 return _results; 384 }); 385 return el; 386 }; 387 388 return Card; 389 390 })(); 391 392 module.exports = Card; 393 394 global.Card = Card; 395 396 /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) 397 398/***/ }, 399/* 1 */ 400/***/ function(module, exports, __webpack_require__) { 401 402 // style-loader: Adds some css to the DOM by adding a <style> tag 403 404 // load the styles 405 var content = __webpack_require__(2); 406 if(typeof content === 'string') content = [[module.id, content, '']]; 407 // add the styles to the DOM 408 var update = __webpack_require__(4)(content, {}); 409 if(content.locals) module.exports = content.locals; 410 // Hot Module Replacement 411 if(false) { 412 // When the styles change, update the <style> tags 413 if(!content.locals) { 414 module.hot.accept("!!./../../node_modules/css-loader/index.js!./../../node_modules/sass-loader/index.js!./card.scss", function() { 415 var newContent = require("!!./../../node_modules/css-loader/index.js!./../../node_modules/sass-loader/index.js!./card.scss"); 416 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']]; 417 update(newContent); 418 }); 419 } 420 // When the module is disposed, remove the <style> tags 421 module.hot.dispose(function() { update(); }); 422 } 423 424/***/ }, 425/* 2 */ 426/***/ function(module, exports, __webpack_require__) { 427 428 exports = module.exports = __webpack_require__(3)(); 429 // imports 430 431 432 // module 433 exports.push([module.id, ".jp-card.jp-card-safari.jp-card-identified .jp-card-front:before, .jp-card.jp-card-safari.jp-card-identified .jp-card-back:before {\n background-image: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.05) 1px, rgba(255, 255, 255, 0) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.03) 4px), repeating-linear-gradient(90deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(210deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), -webkit-linear-gradient(-245deg, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.2) 70%, rgba(255, 255, 255, 0) 90%);\n background-image: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.05) 1px, rgba(255, 255, 255, 0) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.03) 4px), repeating-linear-gradient(90deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(210deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), linear-gradient(-25deg, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.2) 70%, rgba(255, 255, 255, 0) 90%); }\n\n.jp-card.jp-card-ie-10.jp-card-flipped, .jp-card.jp-card-ie-11.jp-card-flipped {\n -webkit-transform: 0deg;\n -moz-transform: 0deg;\n -ms-transform: 0deg;\n -o-transform: 0deg;\n transform: 0deg; }\n .jp-card.jp-card-ie-10.jp-card-flipped .jp-card-front, .jp-card.jp-card-ie-11.jp-card-flipped .jp-card-front {\n -webkit-transform: rotateY(0deg);\n -moz-transform: rotateY(0deg);\n -ms-transform: rotateY(0deg);\n -o-transform: rotateY(0deg);\n transform: rotateY(0deg); }\n .jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back, .jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back {\n -webkit-transform: rotateY(0deg);\n -moz-transform: rotateY(0deg);\n -ms-transform: rotateY(0deg);\n -o-transform: rotateY(0deg);\n transform: rotateY(0deg); }\n .jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back:after, .jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back:after {\n left: 18%; }\n .jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-cvc, .jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-cvc {\n -webkit-transform: rotateY(180deg);\n -moz-transform: rotateY(180deg);\n -ms-transform: rotateY(180deg);\n -o-transform: rotateY(180deg);\n transform: rotateY(180deg);\n left: 5%; }\n .jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny, .jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny {\n left: 84%; }\n .jp-card.jp-card-ie-10.jp-card-flipped .jp-card-back .jp-card-shiny:after, .jp-card.jp-card-ie-11.jp-card-flipped .jp-card-back .jp-card-shiny:after {\n left: -480%;\n -webkit-transform: rotateY(180deg);\n -moz-transform: rotateY(180deg);\n -ms-transform: rotateY(180deg);\n -o-transform: rotateY(180deg);\n transform: rotateY(180deg); }\n\n.jp-card.jp-card-ie-10.jp-card-amex .jp-card-back, .jp-card.jp-card-ie-11.jp-card-amex .jp-card-back {\n display: none; }\n\n.jp-card-logo {\n height: 36px;\n width: 60px;\n font-style: italic; }\n .jp-card-logo, .jp-card-logo:before, .jp-card-logo:after {\n box-sizing: border-box; }\n\n.jp-card-logo.jp-card-amex {\n text-transform: uppercase;\n font-size: 4px;\n font-weight: bold;\n color: white;\n background-image: repeating-radial-gradient(circle at center, #FFF 1px, #999 2px);\n background-image: repeating-radial-gradient(circle at center, #FFF 1px, #999 2px);\n border: 1px solid #EEE; }\n .jp-card-logo.jp-card-amex:before, .jp-card-logo.jp-card-amex:after {\n width: 28px;\n display: block;\n position: absolute;\n left: 16px; }\n .jp-card-logo.jp-card-amex:before {\n height: 28px;\n content: \"american\";\n top: 3px;\n text-align: left;\n padding-left: 2px;\n padding-top: 11px;\n background: #267AC3; }\n .jp-card-logo.jp-card-amex:after {\n content: \"express\";\n bottom: 11px;\n text-align: right;\n padding-right: 2px; }\n\n.jp-card.jp-card-amex.jp-card-flipped {\n -webkit-transform: none;\n -moz-transform: none;\n -ms-transform: none;\n -o-transform: none;\n transform: none; }\n\n.jp-card.jp-card-amex.jp-card-identified .jp-card-front:before, .jp-card.jp-card-amex.jp-card-identified .jp-card-back:before {\n background-color: #108168; }\n\n.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-logo.jp-card-amex {\n opacity: 1; }\n\n.jp-card.jp-card-amex.jp-card-identified .jp-card-front .jp-card-cvc {\n visibility: visible; }\n\n.jp-card.jp-card-amex.jp-card-identified .jp-card-front:after {\n opacity: 1; }\n\n.jp-card-logo.jp-card-discover {\n background: #FF6600;\n color: #111;\n text-transform: uppercase;\n font-style: normal;\n font-weight: bold;\n font-size: 10px;\n text-align: center;\n overflow: hidden;\n z-index: 1;\n padding-top: 9px;\n letter-spacing: .03em;\n border: 1px solid #EEE; }\n .jp-card-logo.jp-card-discover:before, .jp-card-logo.jp-card-discover:after {\n content: \" \";\n display: block;\n position: absolute; }\n .jp-card-logo.jp-card-discover:before {\n background: white;\n width: 200px;\n height: 200px;\n border-radius: 200px;\n bottom: -5%;\n right: -80%;\n z-index: -1; }\n .jp-card-logo.jp-card-discover:after {\n width: 8px;\n height: 8px;\n border-radius: 4px;\n top: 10px;\n left: 27px;\n background-color: #FF6600;\n background-image: -webkit-radial-gradient(#FF6600, #fff);\n background-image: radial-gradient( #FF6600, #fff);\n content: \"network\";\n font-size: 4px;\n line-height: 24px;\n text-indent: -7px; }\n\n.jp-card .jp-card-front .jp-card-logo.jp-card-discover {\n right: 12%;\n top: 18%; }\n\n.jp-card.jp-card-discover.jp-card-identified .jp-card-front:before, .jp-card.jp-card-discover.jp-card-identified .jp-card-back:before {\n background-color: #86B8CF; }\n\n.jp-card.jp-card-discover.jp-card-identified .jp-card-logo.jp-card-discover {\n opacity: 1; }\n\n.jp-card.jp-card-discover.jp-card-identified .jp-card-front:after {\n -webkit-transition: 400ms;\n -moz-transition: 400ms;\n transition: 400ms;\n content: \" \";\n display: block;\n background-color: #FF6600;\n background-image: -webkit-linear-gradient(#FF6600, #ffa366, #FF6600);\n background-image: linear-gradient(#FF6600, #ffa366, #FF6600);\n height: 50px;\n width: 50px;\n border-radius: 25px;\n position: absolute;\n left: 100%;\n top: 15%;\n margin-left: -25px;\n box-shadow: inset 1px 1px 3px 1px rgba(0, 0, 0, 0.5); }
433\n\n.jp-card-logo.jp-card-visa {\n background: white;\n text-transform: uppercase;\n color: #1A1876;\n text-align: center;\n font-weight: bold;\n font-size: 15px;\n line-height: 18px; }\n .jp-card-logo.jp-card-visa:before, .jp-card-logo.jp-card-visa:after {\n content: \" \";\n display: block;\n width: 100%;\n height: 25%; }\n .jp-card-logo.jp-card-visa:before {\n background: #1A1876; }\n .jp-card-logo.jp-card-visa:after {\n background: #E79800; }\n\n.jp-card.jp-card-visa.jp-card-identified .jp-card-front:before, .jp-card.jp-card-visa.jp-card-identified .jp-card-back:before {\n background-color: #191278; }\n\n.jp-card.jp-card-visa.jp-card-identified .jp-card-logo.jp-card-visa {\n opacity: 1; }\n\n.jp-card-logo.jp-card-mastercard {\n color: white;\n font-weight: bold;\n text-align: center;\n font-size: 9px;\n line-height: 36px;\n z-index: 1;\n text-shadow: 1px 1px rgba(0, 0, 0, 0.6); }\n .jp-card-logo.jp-card-mastercard:before, .jp-card-logo.jp-card-mastercard:after {\n content: \" \";\n display: block;\n width: 36px;\n top: 0;\n position: absolute;\n height: 36px;\n border-radius: 18px; }\n .jp-card-logo.jp-card-mastercard:before {\n left: 0;\n background: #FF0000;\n z-index: -1; }\n .jp-card-logo.jp-card-mastercard:after {\n right: 0;\n background: #FFAB00;\n z-index: -2; }\n\n.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front .jp-card-logo.jp-card-mastercard, .jp-card.jp-card-mastercard.jp-card-identified .jp-card-back .jp-card-logo.jp-card-mastercard {\n box-shadow: none; }\n\n.jp-card.jp-card-mastercard.jp-card-identified .jp-card-front:before, .jp-card.jp-card-mastercard.jp-card-identified .jp-card-back:before {\n background-color: #0061A8; }\n\n.jp-card.jp-card-mastercard.jp-card-identified .jp-card-logo.jp-card-mastercard {\n opacity: 1; }\n\n.jp-card-logo.jp-card-maestro {\n color: white;\n font-weight: bold;\n text-align: center;\n font-size: 14px;\n line-height: 36px;\n z-index: 1;\n text-shadow: 1px 1px rgba(0, 0, 0, 0.6); }\n .jp-card-logo.jp-card-maestro:before, .jp-card-logo.jp-card-maestro:after {\n content: \" \";\n display: block;\n width: 36px;\n top: 0;\n position: absolute;\n height: 36px;\n border-radius: 18px; }\n .jp-card-logo.jp-card-maestro:before {\n left: 0;\n background: #0064CB;\n z-index: -1; }\n .jp-card-logo.jp-card-maestro:after {\n right: 0;\n background: #CC0000;\n z-index: -2; }\n\n.jp-card.jp-card-maestro.jp-card-identified .jp-card-front .jp-card-logo.jp-card-maestro, .jp-card.jp-card-maestro.jp-card-identified .jp-card-back .jp-card-logo.jp-card-maestro {\n box-shadow: none; }\n\n.jp-card.jp-card-maestro.jp-card-identified .jp-card-front:before, .jp-card.jp-card-maestro.jp-card-identified .jp-card-back:before {\n background-color: #0B2C5F; }\n\n.jp-card.jp-card-maestro.jp-card-identified .jp-card-logo.jp-card-maestro {\n opacity: 1; }\n\n.jp-card-logo.jp-card-dankort {\n width: 60px;\n height: 36px;\n padding: 3px;\n border-radius: 8px;\n border: #000000 1px solid;\n background-color: #FFFFFF; }\n .jp-card-logo.jp-card-dankort .dk {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden; }\n .jp-card-logo.jp-card-dankort .dk:before {\n background-color: #ED1C24;\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n display: block;\n border-radius: 6px; }\n .jp-card-logo.jp-card-dankort .dk:after {\n content: '';\n position: absolute;\n top: 50%;\n margin-top: -7.7px;\n right: 0;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 7px 7px 10px 0;\n border-color: transparent #ED1C24 transparent transparent;\n z-index: 1; }\n .jp-card-logo.jp-card-dankort .d, .jp-card-logo.jp-card-dankort .k {\n position: absolute;\n top: 50%;\n width: 50%;\n display: block;\n height: 15.4px;\n margin-top: -7.7px;\n background: white; }\n .jp-card-logo.jp-card-dankort .d {\n left: 0;\n border-radius: 0 8px 10px 0; }\n .jp-card-logo.jp-card-dankort .d:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n display: block;\n background: #ED1C24;\n border-radius: 2px 4px 6px 0px;\n height: 5px;\n width: 7px;\n margin: -3px 0 0 -4px; }\n .jp-card-logo.jp-card-dankort .k {\n right: 0; }\n .jp-card-logo.jp-card-dankort .k:before, .jp-card-logo.jp-card-dankort .k:after {\n content: '';\n position: absolute;\n right: 50%;\n width: 0;\n height: 0;\n border-style: solid;\n margin-right: -1px; }\n .jp-card-logo.jp-card-dankort .k:before {\n top: 0;\n border-width: 8px 5px 0 0;\n border-color: #ED1C24 transparent transparent transparent; }\n .jp-card-logo.jp-card-dankort .k:after {\n bottom: 0;\n border-width: 0 5px 8px 0;\n border-color: transparent transparent #ED1C24 transparent; }\n\n.jp-card.jp-card-dankort.jp-card-identified .jp-card-front:before, .jp-card.jp-card-dankort.jp-card-identified .jp-card-back:before {\n background-color: #0055C7; }\n\n.jp-card.jp-card-dankort.jp-card-identified .jp-card-logo.jp-card-dankort {\n opacity: 1; }\n\n.jp-card-logo.jp-card-elo {\n height: 50px;\n width: 50px;\n border-radius: 100%;\n background: black;\n color: white;\n text-align: center;\n text-transform: lowercase;\n font-size: 21px;\n font-style: normal;\n letter-spacing: 1px;\n font-weight: bold;\n padding-top: 13px; }\n .jp-card-logo.jp-card-elo .e, .jp-card-logo.jp-card-elo .l, .jp-card-logo.jp-card-elo .o {\n display: inline-block;\n position: relative; }\n .jp-card-logo.jp-card-elo .e {\n -webkit-transform: rotate(-15deg);\n -moz-transform: rotate(-15deg);\n -ms-transform: rotate(-15deg);\n -o-transform: rotate(-15deg);\n transform: rotate(-15deg); }\n .jp-card-logo.jp-card-elo .o {\n position: relative;\n display: inline-block;\n width: 12px;\n height: 12px;\n right: 0;\n top: 7px;\n border-radius: 100%;\n background-image: -webkit-linear-gradient( yellow 50%, red 50%);\n background-image: linear-gradient( yellow 50%, red 50%);\n -webkit-transform: rotate(40deg);\n -moz-transform: rotate(40deg);\n -ms-transform: rotate(40deg);\n -o-transform: rotate(40deg);\n transform: rotate(40deg);\n text-indent: -9999px; }\n .jp-card-logo.jp-card-elo .o:before {\n content: \"\";\n position: absolute;\n width: 49%;\n height: 49%;\n background: black;\n border-radius: 100%;\n text-indent: -99999px;\n top: 25%;\n left: 25%; }\n\n.jp-card.jp-card-elo.jp-card-identified .jp-card-front:before, .jp-card.jp-card-elo.jp-card-identified .jp-card-back:before {\n background-color: #6F6969; }\n\n.jp-card.jp-card-elo.jp-card-identified .jp-card-logo.jp-card-elo {\n opacity: 1; }\n\n.jp-card-container {\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n width: 350px;\n max-width: 100%;\n height: 200px;\n margin: auto;\n z-index: 1;\n position: relative; }\n\n.jp-card {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n line-height: 1;\n position: relative;\n width: 100%;\n height: 100%;\n min-width: 315px;\n border-radius: 10px;\n -webkit-transform-style: preserve-3d;\n -moz-transform-style: preserve-3d;\n -ms-transform-style: preserve-3d;\n -o-transform-style: preserve-3d;\n transform-style: preserve-3d;\n -webkit-transition: all 400ms linear;\n -moz-transition: all 400ms linear;\n transition: all 400ms linear; }\n .jp-card > *, .jp-card > *:before, .jp-card > *:after {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n font-family: inherit; }\n .jp-card.jp-card-flipped {\n -webkit-transform: rotateY(180deg);\n -moz-transform: rotateY(180deg);\n -ms-transform: rotateY(180deg);\n -o-transform: rotateY(180deg);\n transform: rotateY(180deg);\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden; }\n .jp-card .jp-card-front, .jp-card .jp-card-back {\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-transform-style: preserve-3d;\n -moz-transform-style: preserve-3d;\n -ms-transform-style: preserve-3d;\n -o-transform-style: preserve-3d;\n transform-style: preserve-3d;\n -webkit-transition: all 400ms linear;\n -moz-transition: all 400ms linear;\n transition: all 400ms linear;\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n overflow: hidden;\n border-radius: 10px;\n background: #DDD; }\n .jp-card .jp-card-front:before, .jp-card .jp-card-back:before {\n content: \" \";\n display: block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n opacity: 0;\n border-radius: 10px;\n -webkit-transition: all 400ms ease;\n -moz-transition: all 400ms ease;\n transition: all 400ms ease; }\n .jp-card .jp-card-front:after, .jp-card .jp-card-back:after {\n content: \" \";\n display: block; }\n .jp-card .jp-card-front .jp-card-display, .jp-card .jp-card-back .jp-card-display {\n color: white;\n font-weight: normal;\n opacity: 0.5;\n -webkit-transition: opacity 400ms linear;\n -moz-transition: opacity 400ms linear;\n transition: opacity 400ms linear; }\n .jp-card .jp-card-front .jp-card-display.jp-card-focused, .jp-card .jp-card-back .jp-card-display.jp-card-focused {\n opacity: 1;\n font-weight: 700; }\n .jp-card .jp-card-front .jp-card-cvc, .jp-card .jp-card-back .jp-card-cvc {\n font-family: \"Bitstream Vera S
433ans Mono\", Consolas, Courier, monospace;\n font-size: 14px; }\n .jp-card .jp-card-front .jp-card-shiny, .jp-card .jp-card-back .jp-card-shiny {\n width: 50px;\n height: 35px;\n border-radius: 5px;\n background: #CCC;\n position: relative; }\n .jp-card .jp-card-front .jp-card-shiny:before, .jp-card .jp-card-back .jp-card-shiny:before {\n content: \" \";\n display: block;\n width: 70%;\n height: 60%;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n background: #d9d9d9;\n position: absolute;\n top: 20%; }\n .jp-card .jp-card-front .jp-card-logo {\n position: absolute;\n opacity: 0;\n right: 5%;\n top: 8%;\n -webkit-transition: 400ms;\n -moz-transition: 400ms;\n transition: 400ms; }\n .jp-card .jp-card-front .jp-card-lower {\n width: 80%;\n position: absolute;\n left: 10%;\n bottom: 30px; }\n @media only screen and (max-width: 480px) {\n .jp-card .jp-card-front .jp-card-lower {\n width: 90%;\n left: 5%; } }\n .jp-card .jp-card-front .jp-card-lower .jp-card-cvc {\n visibility: hidden;\n float: right;\n position: relative;\n bottom: 5px; }\n .jp-card .jp-card-front .jp-card-lower .jp-card-number {\n font-family: \"Bitstream Vera Sans Mono\", Consolas, Courier, monospace;\n font-size: 24px;\n clear: both;\n margin-bottom: 30px; }\n .jp-card .jp-card-front .jp-card-lower .jp-card-expiry {\n font-family: \"Bitstream Vera Sans Mono\", Consolas, Courier, monospace;\n letter-spacing: 0em;\n position: relative;\n float: right;\n width: 25%; }\n .jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before, .jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-weight: bold;\n font-size: 7px;\n white-space: pre;\n display: block;\n opacity: .5; }\n .jp-card .jp-card-front .jp-card-lower .jp-card-expiry:before {\n content: attr(data-before);\n margin-bottom: 2px;\n font-size: 7px;\n text-transform: uppercase; }\n .jp-card .jp-card-front .jp-card-lower .jp-card-expiry:after {\n position: absolute;\n content: attr(data-after);\n text-align: right;\n right: 100%;\n margin-right: 5px;\n margin-top: 2px;\n bottom: 0; }\n .jp-card .jp-card-front .jp-card-lower .jp-card-name {\n text-transform: uppercase;\n font-family: \"Bitstream Vera Sans Mono\", Consolas, Courier, monospace;\n font-size: 20px;\n max-height: 45px;\n position: absolute;\n bottom: 0;\n width: 190px;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: horizontal;\n overflow: hidden;\n text-overflow: ellipsis; }\n .jp-card .jp-card-back {\n -webkit-transform: rotateY(180deg);\n -moz-transform: rotateY(180deg);\n -ms-transform: rotateY(180deg);\n -o-transform: rotateY(180deg);\n transform: rotateY(180deg); }\n .jp-card .jp-card-back .jp-card-bar {\n background-color: #444;\n background-image: -webkit-linear-gradient(#444, #333);\n background-image: linear-gradient(#444, #333);\n width: 100%;\n height: 20%;\n position: absolute;\n top: 10%; }\n .jp-card .jp-card-back:after {\n content: \" \";\n display: block;\n background-color: #FFF;\n background-image: -webkit-linear-gradient(#FFF, #FFF);\n background-image: linear-gradient(#FFF, #FFF);\n width: 80%;\n height: 16%;\n position: absolute;\n top: 40%;\n left: 2%; }\n .jp-card .jp-card-back .jp-card-cvc {\n position: absolute;\n top: 40%;\n left: 85%;\n -webkit-transition-delay: 600ms;\n -moz-transition-delay: 600ms;\n transition-delay: 600ms; }\n .jp-card .jp-card-back .jp-card-shiny {\n position: absolute;\n top: 66%;\n left: 2%; }\n .jp-card .jp-card-back .jp-card-shiny:after {\n content: \"This card has been issued by Jesse Pollak and is licensed for anyone to use anywhere for free.AIt comes with no warranty.A For support issues, please visit: github.com/jessepollak/card.\";\n position: absolute;\n left: 120%;\n top: 5%;\n color: white;\n font-size: 7px;\n width: 230px;\n opacity: .5; }\n .jp-card.jp-card-identified {\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); }\n .jp-card.jp-card-identified .jp-card-front, .jp-card.jp-card-identified .jp-card-back {\n background-color: #000;\n background-color: rgba(0, 0, 0, 0.5); }\n .jp-card.jp-card-identified .jp-card-front:before, .jp-card.jp-card-identified .jp-card-back:before {\n -webkit-transition: all 400ms ease;\n -moz-transition: all 400ms ease;\n transition: all 400ms ease;\n background-image: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.05) 1px, rgba(255, 255, 255, 0) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.03) 4px), repeating-linear-gradient(90deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(210deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-radial-gradient(circle at 70% 70%, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-radial-gradient(circle at 90% 20%, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-radial-gradient(circle at 15% 80%, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), -webkit-linear-gradient(-245deg, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.2) 70%, rgba(255, 255, 255, 0) 90%);\n background-image: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.05) 1px, rgba(255, 255, 255, 0) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.03) 4px), repeating-linear-gradient(90deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(210deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-radial-gradient(circle at 70% 70%, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-radial-gradient(circle at 90% 20%, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-radial-gradient(circle at 15% 80%, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), linear-gradient(-25deg, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.2) 70%, rgba(255, 255, 255, 0) 90%);\n opacity: 1; }\n .jp-card.jp-card-identified .jp-card-front .jp-card-logo, .jp-card.jp-card-identified .jp-card-back .jp-card-logo {\n box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.3); }\n .jp-card.jp-card-identified.no-radial-gradient .jp-card-front:before, .jp-card.jp-card-identified.no-radial-gradient .jp-card-back:before {\n background-image: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.05) 1px, rgba(255, 255, 255, 0) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.03) 4px), repeating-linear-gradient(90deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(210deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), -webkit-linear-gradient(-245deg, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.2) 70%, rgba(255, 255, 255, 0) 90%);\n background-image: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.05) 1px, rgba(255, 255, 255, 0) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.03) 4px), repeating-linear-gradient(90deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), repeating-linear-gradient(210deg, rgba(255, 255, 255, 0) 1px, rgba(255, 255, 255, 0.03) 2px, rgba(255, 255, 255, 0.04) 3px, rgba(255, 255, 255, 0.05) 4px), linear-gradient(-25deg, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.2) 70%, rgba(255, 255, 255, 0) 90%); }\n", ""]); 434 435 // exports 436 437 438/***/ }, 439/* 3 */
vendor: 8,601 bytes, lines 440-728
440/***/ function(module, exports) { 441 442 /* 443 MIT License http://www.opensource.org/licenses/mit-license.php 444 Author Tobias Koppers @sokra 445 */ 446 // css base code, injected by the css-loader 447 module.exports = function() { 448 var list = []; 449 450 // return the list of modules as css string 451 list.toString = function toString() { 452 var result = []; 453 for(var i = 0; i < this.length; i++) { 454 var item = this[i]; 455 if(item[2]) { 456 result.push("@media " + item[2] + "{" + item[1] + "}"); 457 } else { 458 result.push(item[1]); 459 } 460 } 461 return result.join(""); 462 }; 463 464 // import a list of modules into the list 465 list.i = function(modules, mediaQuery) { 466 if(typeof modules === "string") 467 modules = [[null, modules, ""]]; 468 var alreadyImportedModules = {}; 469 for(var i = 0; i < this.length; i++) { 470 var id = this[i][0]; 471 if(typeof id === "number") 472 alreadyImportedModules[id] = true; 473 } 474 for(i = 0; i < modules.length; i++) { 475 var item = modules[i]; 476 // skip already imported module 477 // this implementation is not 100% perfect for weird media query combinations 478 // when a module is imported multiple times with different media queries. 479 // I hope this will never occur (Hey this way we have smaller bundles) 480 if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) { 481 if(mediaQuery && !item[2]) { 482 item[2] = mediaQuery; 483 } else if(mediaQuery) { 484 item[2] = "(" + item[2] + ") and (" + mediaQuery + ")"; 485 } 486 list.push(item); 487 } 488 } 489 }; 490 return list; 491 }; 492 493 494/***/ }, 495/* 4 */ 496/***/ function(module, exports, __webpack_require__) { 497 498 /* 499 MIT License http://www.opensource.org/licenses/mit-license.php 500 Author Tobias Koppers @sokra 501 */ 502 var stylesInDom = {}, 503 memoize = function(fn) { 504 var memo; 505 return function () { 506 if (typeof memo === "undefined") memo = fn.apply(this, arguments); 507 return memo; 508 }; 509 }, 510 isOldIE = memoize(function() { 511 return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase()); 512 }), 513 getHeadElement = memoize(function () { 514 return document.head || document.getElementsByTagName("head")[0]; 515 }), 516 singletonElement = null, 517 singletonCounter = 0, 518 styleElementsInsertedAtTop = []; 519 520 module.exports = function(list, options) { 521 if(false) { 522 if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); 523 } 524 525 options = options || {}; 526 // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> 527 // tags it will allow on a page 528 if (typeof options.singleton === "undefined") options.singleton = isOldIE(); 529 530 // By default, add <style> tags to the bottom of <head>. 531 if (typeof options.insertAt === "undefined") options.insertAt = "bottom"; 532 533 var styles = listToStyles(list); 534 addStylesToDom(styles, options); 535 536 return function update(newList) { 537 var mayRemove = []; 538 for(var i = 0; i < styles.length; i++) { 539 var item = styles[i]; 540 var domStyle = stylesInDom[item.id]; 541 domStyle.refs--; 542 mayRemove.push(domStyle); 543 } 544 if(newList) { 545 var newStyles = listToStyles(newList); 546 addStylesToDom(newStyles, options); 547 } 548 for(var i = 0; i < mayRemove.length; i++) { 549 var domStyle = mayRemove[i]; 550 if(domStyle.refs === 0) { 551 for(var j = 0; j < domStyle.parts.length; j++) 552 domStyle.parts[j](); 553 delete stylesInDom[domStyle.id]; 554 } 555 } 556 }; 557 } 558 559 function addStylesToDom(styles, options) { 560 for(var i = 0; i < styles.length; i++) { 561 var item = styles[i]; 562 var domStyle = stylesInDom[item.id]; 563 if(domStyle) { 564 domStyle.refs++; 565 for(var j = 0; j < domStyle.parts.length; j++) { 566 domStyle.parts[j](item.parts[j]); 567 } 568 for(; j < item.parts.length; j++) { 569 domStyle.parts.push(addStyle(item.parts[j], options)); 570 } 571 } else { 572 var parts = []; 573 for(var j = 0; j < item.parts.length; j++) { 574 parts.push(addStyle(item.parts[j], options)); 575 } 576 stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts}; 577 } 578 } 579 } 580 581 function listToStyles(list) { 582 var styles = []; 583 var newStyles = {}; 584 for(var i = 0; i < list.length; i++) { 585 var item = list[i]; 586 var id = item[0]; 587 var css = item[1]; 588 var media = item[2]; 589 var sourceMap = item[3]; 590 var part = {css: css, media: media, sourceMap: sourceMap}; 591 if(!newStyles[id]) 592 styles.push(newStyles[id] = {id: id, parts: [part]}); 593 else 594 newStyles[id].parts.push(part); 595 } 596 return styles; 597 } 598 599 function insertStyleElement(options, styleElement) { 600 var head = getHeadElement(); 601 var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1]; 602 if (options.insertAt === "top") { 603 if(!lastStyleElementInsertedAtTop) { 604 head.insertBefore(styleElement, head.firstChild); 605 } else if(lastStyleElementInsertedAtTop.nextSibling) { 606 head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling); 607 } else { 608 head.appendChild(styleElement); 609 } 610 styleElementsInsertedAtTop.push(styleElement); 611 } else if (options.insertAt === "bottom") { 612 head.appendChild(styleElement); 613 } else { 614 throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'."); 615 } 616 } 617 618 function removeStyleElement(styleElement) { 619 styleElement.parentNode.removeChild(styleElement); 620 var idx = styleElementsInsertedAtTop.indexOf(styleElement); 621 if(idx >= 0) { 622 styleElementsInsertedAtTop.splice(idx, 1); 623 } 624 } 625 626 function createStyleElement(options) { 627 var styleElement = document.createElement("style"); 628 styleElement.type = "text/css"; 629 insertStyleElement(options, styleElement); 630 return styleElement; 631 } 632 633 function createLinkElement(options) { 634 var linkElement = document.createElement("link"); 635 linkElement.rel = "stylesheet"; 636 insertStyleElement(options, linkElement); 637 return linkElement; 638 } 639 640 function addStyle(obj, options) { 641 var styleElement, update, remove; 642 643 if (options.singleton) { 644 var styleIndex = singletonCounter++; 645 styleElement = singletonElement || (singletonElement = createStyleElement(options)); 646 update = applyToSingletonTag.bind(null, styleElement, styleIndex, false); 647 remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true); 648 } else if(obj.sourceMap && 649 typeof URL === "function" && 650 typeof URL.createObjectURL === "function" && 651 typeof URL.revokeObjectURL === "function" && 652 typeof Blob === "function" && 653 typeof btoa === "function") { 654 styleElement = createLinkElement(options); 655 update = updateLink.bind(null, styleElement); 656 remove = function() { 657 removeStyleElement(styleElement); 658 if(styleElement.href) 659 URL.revokeObjectURL(styleElement.href); 660 }; 661 } else { 662 styleElement = createStyleElement(options); 663 update = applyToTag.bind(null, styleElement); 664 remove = function() { 665 removeStyleElement(styleElement); 666 }; 667 } 668 669 update(obj); 670 671 return function updateStyle(newObj) { 672 if(newObj) { 673 if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) 674 return; 675 update(obj = newObj); 676 } else { 677 remove(); 678 } 679 }; 680 } 681 682 var replaceText = (function () { 683 var textStore = []; 684 685 return function (index, replacement) { 686 textStore[index] = replacement; 687 return textStore.filter(Boolean).join('\n'); 688 }; 689 })(); 690 691 function applyToSingletonTag(styleElement, index, remove, obj) { 692 var css = remove ? "" : obj.css; 693 694 if (styleElement.styleSheet) { 695 styleElement.styleSheet.cssText = replaceText(index, css); 696 } else { 697 var cssNode = document.createTextNode(css); 698 var childNodes = styleElement.childNodes; 699 if (childNodes[index]) styleElement.removeChild(childNodes[index]); 700 if (childNodes.length) { 701 styleElement.insertBefore(cssNode, childNodes[index]); 702 } else { 703 styleElement.appendChild(cssNode); 704 } 705 } 706 } 707 708 function applyToTag(styleElement, obj) { 709 var css = obj.css; 710 var media = obj.media; 711 712 if(media) { 713 styleElement.setAttribute("media", media) 714 } 715 716 if(styleElement.styleSheet) { 717 styleElement.styleSheet.cssText = css; 718 } else { 719 while(styleElement.firstChild) { 720 styleElement.removeChild(styleElement.firstChild); 721 } 722 styleElement.appendChild(document.createTextNode(css)); 723 } 724 } 725 726 function updateLink(linkElement, obj) { 727 var css = obj.css; 728 var sourceMap = obj.sourceMap;
729 730 if(sourceMap) { 731 // http://stackoverflow.com/a/26603875 732 css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */"; 733 } 734 735 var blob = new Blob([css], { type: "text/css" }); 736 737 var oldSrc = linkElement.href; 738 739 linkElement.href = URL.createObjectURL(blob); 740 741 if(oldSrc) 742 URL.revokeObjectURL(oldSrc); 743 } 744 745 746/***/ }, 747/* 5 */ 748/***/ function(module, exports) { 749 750 // Generated by CoffeeScript 1.10.0 751 (function() { 752 var QJ, rreturn, rtrim; 753 754 QJ = function(selector) { 755 if (QJ.isDOMElement(selector)) { 756 return selector; 757 } 758 return document.querySelectorAll(selector); 759 }; 760 761 QJ.isDOMElement = function(el) { 762 return el && (el.nodeName != null); 763 }; 764 765 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; 766 767 QJ.trim = function(text) { 768 if (text === null) { 769 return ""; 770 } else { 771 return (text + "").replace(rtrim, ""); 772 } 773 }; 774 775 rreturn = /\r/g; 776 777 QJ.val = function(el, val) { 778 var ret; 779 if (arguments.length > 1) { 780 return el.value = val; 781 } else { 782 ret = el.value; 783 if (typeof ret === "string") { 784 return ret.replace(rreturn, ""); 785 } else { 786 if (ret === null) { 787 return ""; 788 } else { 789 return ret; 790 } 791 } 792 } 793 }; 794 795 QJ.preventDefault = function(eventObject) { 796 if (typeof eventObject.preventDefault === "function") { 797 eventObject.preventDefault(); 798 return; 799 } 800 eventObject.returnValue = false; 801 return false; 802 }; 803 804 QJ.normalizeEvent = function(e) { 805 var original; 806 original = e; 807 e = { 808 which: original.which != null ? original.which : void 0, 809 target: original.target || original.srcElement, 810 preventDefault: function() { 811 return QJ.preventDefault(original); 812 }, 813 originalEvent: original, 814 data: original.data || original.detail 815 }; 816 if (e.which == null) { 817 e.which = original.charCode != null ? original.charCode : original.keyCode; 818 } 819 return e; 820 }; 821 822 QJ.on = function(element, eventName, callback) { 823 var el, i, j, len, len1, multEventName, originalCallback, ref; 824 if (element.length) { 825 for (i = 0, len = element.length; i < len; i++) { 826 el = element[i]; 827 QJ.on(el, eventName, callback); 828 } 829 return; 830 } 831 if (eventName.match(" ")) { 832 ref = eventName.split(" "); 833 for (j = 0, len1 = ref.length; j < len1; j++) { 834 multEventName = ref[j]; 835 QJ.on(element, multEventName, callback); 836 } 837 return; 838 } 839 originalCallback = callback; 840 callback = function(e) { 841 e = QJ.normalizeEvent(e); 842 return originalCallback(e); 843 }; 844 if (element.addEventListener) { 845 return element.addEventListener(eventName, callback, false); 846 } 847 if (element.attachEvent) { 848 eventName = "on" + eventName; 849 return element.attachEvent(eventName, callback); 850 } 851 element['on' + eventName] = callback; 852 }; 853 854 QJ.addClass = function(el, className) { 855 var e; 856 if (el.length) { 857 return (function() { 858 var i, len, results; 859 results = []; 860 for (i = 0, len = el.length; i < len; i++) { 861 e = el[i]; 862 results.push(QJ.addClass(e, className)); 863 } 864 return results; 865 })(); 866 } 867 if (el.classList) { 868 return el.classList.add(className); 869 } else { 870 return el.className += ' ' + className; 871 } 872 }; 873 874 QJ.hasClass = function(el, className) { 875 var e, hasClass, i, len; 876 if (el.length) { 877 hasClass = true; 878 for (i = 0, len = el.length; i < len; i++) { 879 e = el[i]; 880 hasClass = hasClass && QJ.hasClass(e, className); 881 } 882 return hasClass; 883 } 884 if (el.classList) { 885 return el.classList.contains(className); 886 } else { 887 return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className); 888 } 889 }; 890 891 QJ.removeClass = function(el, className) { 892 var cls, e, i, len, ref, results; 893 if (el.length) { 894 return (function() { 895 var i, len, results; 896 results = []; 897 for (i = 0, len = el.length; i < len; i++) { 898 e = el[i]; 899 results.push(QJ.removeClass(e, className)); 900 } 901 return results; 902 })(); 903 } 904 if (el.classList) { 905 ref = className.split(' '); 906 results = []; 907 for (i = 0, len = ref.length; i < len; i++) { 908 cls = ref[i]; 909 results.push(el.classList.remove(cls)); 910 } 911 return results; 912 } else { 913 return el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); 914 } 915 }; 916 917 QJ.toggleClass = function(el, className, bool) { 918 var e; 919 if (el.length) { 920 return (function() { 921 var i, len, results; 922 results = []; 923 for (i = 0, len = el.length; i < len; i++) { 924 e = el[i]; 925 results.push(QJ.toggleClass(e, className, bool)); 926 } 927 return results; 928 })(); 929 } 930 if (bool) { 931 if (!QJ.hasClass(el, className)) { 932 return QJ.addClass(el, className); 933 } 934 } else { 935 return QJ.removeClass(el, className); 936 } 937 }; 938 939 QJ.append = function(el, toAppend) { 940 var e; 941 if (el.length) { 942 return (function() { 943 var i, len, results; 944 results = []; 945 for (i = 0, len = el.length; i < len; i++) { 946 e = el[i]; 947 results.push(QJ.append(e, toAppend)); 948 } 949 return results; 950 })(); 951 } 952 return el.insertAdjacentHTML('beforeend', toAppend); 953 }; 954 955 QJ.find = function(el, selector) { 956 if (el instanceof NodeList || el instanceof Array) { 957 el = el[0]; 958 } 959 return el.querySelectorAll(selector); 960 }; 961 962 QJ.trigger = function(el, name, data) { 963 var e, error, ev; 964 try { 965 ev = new CustomEvent(name, { 966 detail: data 967 }); 968 } catch (error) { 969 e = error; 970 ev = document.createEvent('CustomEvent'); 971 if (ev.initCustomEvent) { 972 ev.initCustomEvent(name, true, true, data); 973 } else { 974 ev.initEvent(name, true, true, data); 975 } 976 } 977 return el.dispatchEvent(ev); 978 }; 979 980 module.exports = QJ; 981 982 }).call(this); 983 984 985/***/ }, 986/* 6 */ 987/***/ function(module, exports, __webpack_require__) { 988 989 /* WEBPACK VAR INJECTION */(function(global) {// Generated by CoffeeScript 1.10.0 990 (function() {
991 var Payment, QJ, cardFromNumber, cardFromType, cards, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardNumber, formatExpiry, formatForwardExpiry, formatForwardSlash, formatMonthExpiry, hasTextSelected, luhnCheck, reFormatCardNumber, restrictCVC, restrictCardNumber, restrictCombinedExpiry, restrictExpiry, restrictMonthExpiry, restrictNumeric, restrictYearExpiry, setCardType, 992 indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; 993 994 QJ = __webpack_require__(5); 995 996 defaultFormat = /(\d{1,4})/g; 997 998 cards = [ 999 { 1000 type: 'amex', 1001 pattern: /^3[47]/, 1002 format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/, 1003 length: [15], 1004 cvcLength: [4], 1005 luhn: true 1006 }, { 1007 type: 'dankort', 1008 pattern: /^5019/, 1009 format: defaultFormat, 1010 length: [16], 1011 cvcLength: [3], 1012 luhn: true 1013 }, { 1014 type: 'dinersclub', 1015 pattern: /^(36|38|30[0-5])/, 1016 format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/, 1017 length: [14], 1018 cvcLength: [3], 1019 luhn: true 1020 }, { 1021 type: 'discover', 1022 pattern: /^(6011|65|64[4-9]|622)/, 1023 format: defaultFormat, 1024 length: [16], 1025 cvcLength: [3], 1026 luhn: true 1027 }, { 1028 type: 'jcb', 1029 pattern: /^35/, 1030 format: defaultFormat, 1031 length: [16], 1032 cvcLength: [3], 1033 luhn: true 1034 }, { 1035 type: 'laser', 1036 pattern: /^(6706|6771|6709)/, 1037 format: defaultFormat, 1038 length: [16, 17, 18, 19], 1039 cvcLength: [3], 1040 luhn: true 1041 }, { 1042 type: 'maestro', 1043 pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/, 1044 format: defaultFormat, 1045 length: [12, 13, 14, 15, 16, 17, 18, 19], 1046 cvcLength: [3], 1047 luhn: true 1048 }, { 1049 type: 'mastercard', 1050 pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/, 1051 format: defaultFormat, 1052 length: [16], 1053 cvcLength: [3], 1054 luhn: true 1055 }, { 1056 type: 'unionpay', 1057 pattern: /^62/, 1058 format: defaultFormat, 1059 length: [16, 17, 18, 19], 1060 cvcLength: [3], 1061 luhn: false 1062 }, { 1063 type: 'visaelectron', 1064 pattern: /^4(026|17500|405|508|844|91[37])/, 1065 format: defaultFormat, 1066 length: [16], 1067 cvcLength: [3], 1068 luhn: true 1069 }, { 1070 type: 'elo', 1071 pattern: /^(4011|438935|45(1416|76|7393)|50(4175|6699|67|90[4-7])|63(6297|6368))/, 1072 format: defaultFormat, 1073 length: [16], 1074 cvcLength: [3], 1075 luhn: true 1076 }, { 1077 type: 'visa', 1078 pattern: /^4/, 1079 format: defaultFormat, 1080 length: [13, 16, 19], 1081 cvcLength: [3], 1082 luhn: true 1083 } 1084 ]; 1085 1086 cardFromNumber = function(num) { 1087 var card, i, len; 1088 num = (num + '').replace(/\D/g, ''); 1089 for (i = 0, len = cards.length; i < len; i++) { 1090 card = cards[i]; 1091 if (card.pattern.test(num)) { 1092 return card; 1093 } 1094 } 1095 }; 1096 1097 cardFromType = function(type) { 1098 var card, i, len; 1099 for (i = 0, len = cards.length; i < len; i++) { 1100 card = cards[i]; 1101 if (card.type === type) { 1102 return card; 1103 } 1104 } 1105 }; 1106 1107 luhnCheck = function(num) { 1108 var digit, digits, i, len, odd, sum; 1109 odd = true; 1110 sum = 0; 1111 digits = (num + '').split('').reverse(); 1112 for (i = 0, len = digits.length; i < len; i++) { 1113 digit = digits[i]; 1114 digit = parseInt(digit, 10); 1115 if ((odd = !odd)) { 1116 digit *= 2; 1117 } 1118 if (digit > 9) { 1119 digit -= 9; 1120 } 1121 sum += digit; 1122 } 1123 return sum % 10 === 0; 1124 }; 1125 1126 hasTextSelected = function(target) { 1127 var e, error, ref; 1128 try { 1129 if ((target.selectionStart != null) && target.selectionStart !== target.selectionEnd) { 1130 return true; 1131 } 1132 if ((typeof document !== "undefined" && document !== null ? (ref = document.selection) != null ? ref.createRange : void 0 : void 0) != null) { 1133 if (document.selection.createRange().text) { 1134 return true; 1135 } 1136 } 1137 } catch (error) { 1138 e = error; 1139 } 1140 return false;
1141 }; 1142 1143 reFormatCardNumber = function(e) { 1144 return setTimeout((function(_this) { 1145 return function() { 1146 var target, value; 1147 target = e.target; 1148 value = QJ.val(target); 1149 value = Payment.fns.formatCardNumber(value); 1150 QJ.val(target, value); 1151 return QJ.trigger(target, 'change'); 1152 }; 1153 })(this)); 1154 }; 1155 1156 formatCardNumber = function(e) { 1157 var card, digit, length, re, target, upperLength, value; 1158 digit = String.fromCharCode(e.which); 1159 if (!/^\d+$/.test(digit)) { 1160 return; 1161 } 1162 target = e.target; 1163 value = QJ.val(target); 1164 card = cardFromNumber(value + digit); 1165 length = (value.replace(/\D/g, '') + digit).length; 1166 upperLength = 16; 1167 if (card) { 1168 upperLength = card.length[card.length.length - 1]; 1169 } 1170 if (length >= upperLength) { 1171 return; 1172 } 1173 if (hasTextSelected(target)) { 1174 return; 1175 } 1176 if (card && card.type === 'amex') { 1177 re = /^(\d{4}|\d{4}\s\d{6})$/; 1178 } else { 1179 re = /(?:^|\s)(\d{4})$/; 1180 } 1181 if (re.test(value)) { 1182 e.preventDefault(); 1183 QJ.val(target, value + ' ' + digit); 1184 return QJ.trigger(target, 'change'); 1185 } else if (re.test(value + digit)) { 1186 e.preventDefault(); 1187 QJ.val(target, value + digit + ' '); 1188 return QJ.trigger(target, 'change'); 1189 } 1190 }; 1191 1192 formatBackCardNumber = function(e) { 1193 var target, value; 1194 target = e.target; 1195 value = QJ.val(target); 1196 if (e.meta) { 1197 return; 1198 } 1199 if (e.which !== 8) { 1200 return; 1201 } 1202 if (hasTextSelected(target)) { 1203 return; 1204 } 1205 if (/\d\s$/.test(value)) { 1206 e.preventDefault(); 1207 return QJ.val(target, value.replace(/\d\s$/, '')); 1208 } else if (/\s\d?$/.test(value)) { 1209 e.preventDefault(); 1210 return QJ.val(target, value.replace(/\s\d?$/, '')); 1211 } 1212 }; 1213 1214 formatExpiry = function(e) { 1215 var digit, target, val; 1216 digit = String.fromCharCode(e.which); 1217 if (!/^\d+$/.test(digit)) { 1218 return; 1219 } 1220 target = e.target; 1221 val = QJ.val(target) + digit; 1222 if (/^\d$/.test(val) && (val !== '0' && val !== '1')) { 1223 e.preventDefault(); 1224 return QJ.val(target, "0" + val + " / "); 1225 } else if (/^\d\d$/.test(val)) { 1226 e.preventDefault(); 1227 return QJ.val(target, val + " / "); 1228 } 1229 }; 1230 1231 formatMonthExpiry = function(e) { 1232 var digit, target, val; 1233 digit = String.fromCharCode(e.which); 1234 if (!/^\d+$/.test(digit)) { 1235 return; 1236 } 1237 target = e.target; 1238 val = QJ.val(target) + digit; 1239 if (/^\d$/.test(val) && (val !== '0' && val !== '1')) { 1240 e.preventDefault(); 1241 return QJ.val(target, "0" + val); 1242 } else if (/^\d\d$/.test(val)) { 1243 e.preventDefault(); 1244 return QJ.val(target, "" + val); 1245 } 1246 }; 1247 1248 formatForwardExpiry = function(e) { 1249 var digit, target, val; 1250 digit = String.fromCharCode(e.which); 1251 if (!/^\d+$/.test(digit)) { 1252 return; 1253 } 1254 target = e.target; 1255 val = QJ.val(target); 1256 if (/^\d\d$/.test(val)) { 1257 return QJ.val(target, val + " / "); 1258 } 1259 }; 1260 1261 formatForwardSlash = function(e) { 1262 var slash, target, val; 1263 slash = String.fromCharCode(e.which); 1264 if (slash !== '/') { 1265 return; 1266 } 1267 target = e.target; 1268 val = QJ.val(target); 1269 if (/^\d$/.test(val) && val !== '0') { 1270 return QJ.val(target, "0" + val + " / "); 1271 } 1272 }; 1273 1274 formatBackExpiry = function(e) { 1275 var target, value; 1276 if (e.metaKey) { 1277 return; 1278 } 1279 target = e.target; 1280 value = QJ.val(target); 1281 if (e.which !== 8) { 1282 return; 1283 } 1284 if (hasTextSelected(target)) { 1285 return; 1286 } 1287 if (/\d(\s|\/)+$/.test(value)) { 1288 e.preventDefault(); 1289 return QJ.val(target, value.replace(/\d(\s|\/)*$/, '')); 1290 } else if (/\s\/\s?\d?$/.test(value)) { 1291 e.preventDefault(); 1292 return QJ.val(target, value.replace(/\s\/\s?\d?$/, '')); 1293 } 1294 }; 1295 1296 restrictNumeric = function(e) { 1297 var input; 1298 if (e.metaKey || e.ctrlKey) { 1299 return true; 1300 } 1301 if (e.which === 32) { 1302 return e.preventDefault(); 1303 } 1304 if (e.which === 0) { 1305 return true; 1306 } 1307 if (e.which < 33) { 1308 return true; 1309 } 1310 input = String.fromCharCode(e.which); 1311 if (!/[\d\s]/.test(input)) { 1312 return e.preventDefault(); 1313 } 1314 }; 1315 1316 restrictCardNumber = function(e) { 1317 var card, digit, target, value; 1318 target = e.target; 1319 digit = String.fromCharCode(e.which); 1320 if (!/^\d+$/.test(digit)) { 1321 return; 1322 } 1323 if (hasTextSelected(target)) { 1324 return; 1325 } 1326 value = (QJ.val(target) + digit).replace(/\D/g, ''); 1327 card = cardFromNumber(value); 1328 if (card) { 1329 if (!(value.length <= card.length[card.length.length - 1])) { 1330 return e.preventDefault(); 1331 } 1332 } else { 1333 if (!(value.length <= 16)) { 1334 return e.preventDefault(); 1335 } 1336 } 1337 }; 1338 1339 restrictExpiry = function(e, length) { 1340 var digit, target, value; 1341 target = e.target; 1342 digit = String.fromCharCode(e.which); 1343 if (!/^\d+$/.test(digit)) { 1344 return; 1345 } 1346 if (hasTextSelected(target)) { 1347 return; 1348 } 1349 value = QJ.val(target) + digit; 1350 value = value.replace(/\D/g, ''); 1351 if (value.length > length) { 1352 return e.preventDefault(); 1353 } 1354 }; 1355 1356 restrictCombinedExpiry = function(e) { 1357 return restrictExpiry(e, 6); 1358 }; 1359 1360 restrictMonthExpiry = function(e) { 1361 return restrictExpiry(e, 2); 1362 }; 1363 1364 restrictYearExpiry = function(e) { 1365 return restrictExpiry(e, 4); 1366 }; 1367 1368 restrictCVC = function(e) { 1369 var digit, target, val; 1370 target = e.target; 1371 digit = String.fromCharCode(e.which); 1372 if (!/^\d+$/.test(digit)) { 1373 return; 1374 } 1375 if (hasTextSelected(target)) { 1376 return; 1377 } 1378 val = QJ.val(target) + digit; 1379 if (!(val.length <= 4)) { 1380 return e.preventDefault(); 1381 } 1382 }; 1383 1384 setCardType = function(e) { 1385 var allTypes, card, cardType, target, val; 1386 target = e.target; 1387 val = QJ.val(target); 1388 cardType = Payment.fns.cardType(val) || 'unknown'; 1389 if (!QJ.hasClass(target, cardType)) { 1390 allTypes = (function() { 1391 var i, len, results; 1392 results = []; 1393 for (i = 0, len = cards.length; i < len; i++) { 1394 card = cards[i]; 1395 results.push(card.type); 1396 } 1397 return results; 1398 })(); 1399 QJ.removeClass(target, 'unknown'); 1400 QJ.removeClass(target, allTypes.join(' ')); 1401 QJ.addClass(target, cardType); 1402 QJ.toggleClass(target, 'identified', cardType !== 'unknown'); 1403 return QJ.trigger(target, 'payment.cardType', cardType); 1404 } 1405 }; 1406 1407 Payment = (function() { 1408 function Payment() {} 1409 1410 Payment.fns = { 1411 cardExpiryVal: function(value) { 1412 var month, prefix, ref, year; 1413 value = value.replace(/\s/g, '');
1414 ref = value.split('/', 2), month = ref[0], year = ref[1]; 1415 if ((year != null ? year.length : void 0) === 2 && /^\d+$/.test(year)) { 1416 prefix = (new Date).getFullYear(); 1417 prefix = prefix.toString().slice(0, 2); 1418 year = prefix + year; 1419 } 1420 month = parseInt(month, 10); 1421 year = parseInt(year, 10); 1422 return { 1423 month: month, 1424 year: year 1425 }; 1426 }, 1427 validateCardNumber: function(num) { 1428 var card, ref; 1429 num = (num + '').replace(/\s+|-/g, ''); 1430 if (!/^\d+$/.test(num)) { 1431 return false; 1432 } 1433 card = cardFromNumber(num); 1434 if (!card) { 1435 return false; 1436 } 1437 return (ref = num.length, indexOf.call(card.length, ref) >= 0) && (card.luhn === false || luhnCheck(num)); 1438 }, 1439 validateCardExpiry: function(month, year) { 1440 var currentTime, expiry, prefix, ref, ref1; 1441 if (typeof month === 'object' && 'month' in month) { 1442 ref = month, month = ref.month, year = ref.year; 1443 } else if (typeof month === 'string' && indexOf.call(month, '/') >= 0) { 1444 ref1 = Payment.fns.cardExpiryVal(month), month = ref1.month, year = ref1.year; 1445 } 1446 if (!(month && year)) { 1447 return false; 1448 } 1449 month = QJ.trim(month); 1450 year = QJ.trim(year); 1451 if (!/^\d+$/.test(month)) { 1452 return false; 1453 } 1454 if (!/^\d+$/.test(year)) { 1455 return false; 1456 } 1457 month = parseInt(month, 10); 1458 if (!(month && month <= 12)) { 1459 return false; 1460 } 1461 if (year.length === 2) { 1462 prefix = (new Date).getFullYear(); 1463 prefix = prefix.toString().slice(0, 2); 1464 year = prefix + year; 1465 } 1466 expiry = new Date(year, month); 1467 currentTime = new Date; 1468 expiry.setMonth(expiry.getMonth() - 1); 1469 expiry.setMonth(expiry.getMonth() + 1, 1); 1470 return expiry > currentTime; 1471 }, 1472 validateCardCVC: function(cvc, type) { 1473 var ref, ref1; 1474 cvc = QJ.trim(cvc); 1475 if (!/^\d+$/.test(cvc)) { 1476 return false; 1477 } 1478 if (type && cardFromType(type)) { 1479 return ref = cvc.length, indexOf.call((ref1 = cardFromType(type)) != null ? ref1.cvcLength : void 0, ref) >= 0; 1480 } else { 1481 return cvc.length >= 3 && cvc.length <= 4; 1482 } 1483 }, 1484 cardType: function(num) { 1485 var ref; 1486 if (!num) { 1487 return null; 1488 } 1489 return ((ref = cardFromNumber(num)) != null ? ref.type : void 0) || null; 1490 }, 1491 formatCardNumber: function(num) { 1492 var card, groups, ref, upperLength; 1493 card = cardFromNumber(num); 1494 if (!card) { 1495 return num; 1496 } 1497 upperLength = card.length[card.length.length - 1]; 1498 num = num.replace(/\D/g, ''); 1499 num = num.slice(0, upperLength); 1500 if (card.format.global) { 1501 return (ref = num.match(card.format)) != null ? ref.join(' ') : void 0; 1502 } else { 1503 groups = card.format.exec(num); 1504 if (groups != null) { 1505 groups.shift(); 1506 } 1507 return groups != null ? groups.join(' ') : void 0; 1508 } 1509 } 1510 }; 1511 1512 Payment.restrictNumeric = function(el) { 1513 return QJ.on(el, 'keypress', restrictNumeric); 1514 }; 1515 1516 Payment.cardExpiryVal = function(el) { 1517 return Payment.fns.cardExpiryVal(QJ.val(el)); 1518 }; 1519 1520 Payment.formatCardCVC = function(el) { 1521 Payment.restrictNumeric(el); 1522 QJ.on(el, 'keypress', restrictCVC); 1523 return el; 1524 }; 1525 1526 Payment.formatCardExpiry = function(el) { 1527 var month, year; 1528 Payment.restrictNumeric(el); 1529 if (el.length && el.length === 2) { 1530 month = el[0], year = el[1]; 1531 this.formatCardExpiryMultiple(month, year); 1532 } else { 1533 QJ.on(el, 'keypress', restrictCombinedExpiry); 1534 QJ.on(el, 'keypress', formatExpiry); 1535 QJ.on(el, 'keypress', formatForwardSlash); 1536 QJ.on(el, 'keypress', formatForwardExpiry); 1537 QJ.on(el, 'keydown', formatBackExpiry); 1538 } 1539 return el; 1540 }; 1541 1542 Payment.formatCardExpiryMultiple = function(month, year) { 1543 QJ.on(month, 'keypress', restrictMonthExpiry); 1544 QJ.on(month, 'keypress', formatMonthExpiry); 1545 return QJ.on(year, 'keypress', restrictYearExpiry); 1546 }; 1547 1548 Payment.formatCardNumber = function(el) { 1549 Payment.restrictNumeric(el); 1550 QJ.on(el, 'keypress', restrictCardNumber); 1551 QJ.on(el, 'keypress', formatCardNumber); 1552 QJ.on(el, 'keydown', formatBackCardNumber); 1553 QJ.on(el, 'keyup', setCardType); 1554 QJ.on(el, 'paste', reFormatCardNumber); 1555 return el; 1556 }; 1557 1558 Payment.getCardArray = function() { 1559 return cards; 1560 }; 1561 1562 Payment.setCardArray = function(cardArray) { 1563 cards = cardArray; 1564 return true; 1565 }; 1566 1567 Payment.addToCardArray = function(cardObject) { 1568 return cards.push(cardObject); 1569 }; 1570 1571 Payment.removeFromCardArray = function(type) { 1572 var key, value; 1573 for (key in cards) { 1574 value = cards[key]; 1575 if (value.type === type) { 1576 cards.splice(key, 1); 1577 } 1578 } 1579 return true; 1580 }; 1581 1582 return Payment; 1583 1584 })(); 1585 1586 module.exports = Payment; 1587 1588 global.Payment = Payment; 1589 1590 }).call(this); 1591 1592 /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) 1593 1594/***/ }, 1595/* 7 */ 1596/***/ function(module, exports, __webpack_require__) { 1597 1598 'use strict'; 1599 1600 module.exports = __webpack_require__(8); 1601 1602 1603/***/ }, 1604/* 8 */ 1605/***/ function(module, exports, __webpack_require__) { 1606 1607 'use strict'; 1608 1609 /*! 1610 * node.extend 1611 * Copyright 2011, John Resig 1612 * Dual licensed under the MIT or GPL Version 2 licenses. 1613 * http://jquery.org/license 1614 * 1615 * @fileoverview 1616 * Port of jQuery.extend that actually works on node.js 1617 */ 1618 var is = __webpack_require__(9); 1619 1620 var extend = function extend() { 1621 var target = arguments[0] || {}; 1622 var i = 1; 1623 var length = arguments.length; 1624 var deep = false;
1625 var options, name, src, copy, copyIsArray, clone; 1626 1627 // Handle a deep copy situation 1628 if (typeof target === 'boolean') { 1629 deep = target; 1630 target = arguments[1] || {}; 1631 // skip the boolean and the target 1632 i = 2; 1633 } 1634 1635 // Handle case when target is a string or something (possible in deep copy) 1636 if (typeof target !== 'object' && !is.fn(target)) { 1637 target = {}; 1638 } 1639 1640 for (; i < length; i++) { 1641 // Only deal with non-null/undefined values 1642 options = arguments[i]; 1643 if (options != null) { 1644 if (typeof options === 'string') { 1645 options = options.split(''); 1646 } 1647 // Extend the base object 1648 for (name in options) { 1649 src = target[name]; 1650 copy = options[name]; 1651 1652 // Prevent never-ending loop 1653 if (target === copy) { 1654 continue; 1655 } 1656 1657 // Recurse if we're merging plain objects or arrays 1658 if (deep && copy && (is.hash(copy) || (copyIsArray = is.array(copy)))) { 1659 if (copyIsArray) { 1660 copyIsArray = false; 1661 clone = src && is.array(src) ? src : []; 1662 } else { 1663 clone = src && is.hash(src) ? src : {}; 1664 } 1665 1666 // Never move original objects, clone them 1667 target[name] = extend(deep, clone, copy); 1668 1669 // Don't bring in undefined values 1670 } else if (typeof copy !== 'undefined') { 1671 target[name] = copy; 1672 } 1673 } 1674 } 1675 } 1676 1677 // Return the modified object 1678 return target; 1679 }; 1680 1681 /** 1682 * @public 1683 */ 1684 extend.version = '1.1.3'; 1685 1686 /** 1687 * Exports module. 1688 */ 1689 module.exports = extend; 1690 1691 1692/***/ }, 1693/* 9 */ 1694/***/ function(module, exports) { 1695 1696 /* globals window, HTMLElement */ 1697 1698 'use strict'; 1699 1700 /**! 1701 * is 1702 * the definitive JavaScript type testing library 1703 * 1704 * @copyright 2013-2014 Enrico Marino / Jordan Harband 1705 * @license MIT 1706 */ 1707 1708 var objProto = Object.prototype; 1709 var owns = objProto.hasOwnProperty; 1710 var toStr = objProto.toString; 1711 var symbolValueOf; 1712 if (typeof Symbol === 'function') { 1713 symbolValueOf = Symbol.prototype.valueOf; 1714 } 1715 var isActualNaN = function (value) { 1716 return value !== value; 1717 }; 1718 var NON_HOST_TYPES = { 1719 'boolean': 1, 1720 number: 1, 1721 string: 1, 1722 undefined: 1 1723 }; 1724 1725 var base64Regex = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/; 1726 var hexRegex = /^[A-Fa-f0-9]+$/; 1727 1728 /** 1729 * Expose `is` 1730 */ 1731 1732 var is = {}; 1733 1734 /** 1735 * Test general. 1736 */ 1737 1738 /** 1739 * is.type 1740 * Test if `value` is a type of `type`. 1741 * 1742 * @param {Mixed} value value to test 1743 * @param {String} type type 1744 * @return {Boolean} true if `value` is a type of `type`, false otherwise 1745 * @api public 1746 */ 1747 1748 is.a = is.type = function (value, type) { 1749 return typeof value === type; 1750 }; 1751 1752 /** 1753 * is.defined 1754 * Test if `value` is defined. 1755 * 1756 * @param {Mixed} value value to test 1757 * @return {Boolean} true if 'value' is defined, false otherwise 1758 * @api public 1759 */ 1760 1761 is.defined = function (value) { 1762 return typeof value !== 'undefined'; 1763 }; 1764 1765 /** 1766 * is.empty 1767 * Test if `value` is empty. 1768 * 1769 * @param {Mixed} value value to test 1770 * @return {Boolean} true if `value` is empty, false otherwise 1771 * @api public 1772 */ 1773 1774 is.empty = function (value) { 1775 var type = toStr.call(value); 1776 var key; 1777 1778 if (type === '[object Array]' || type === '[object Arguments]' || type === '[object String]') { 1779 return value.length === 0; 1780 } 1781 1782 if (type === '[object Object]') { 1783 for (key in value) { 1784 if (owns.call(value, key)) { 1785 return false; 1786 } 1787 } 1788 return true; 1789 } 1790 1791 return !value; 1792 }; 1793 1794 /** 1795 * is.equal 1796 * Test if `value` is equal to `other`. 1797 * 1798 * @param {Mixed} value value to test 1799 * @param {Mixed} other value to compare with 1800 * @return {Boolean} true if `value` is equal to `other`, false otherwise 1801 */ 1802 1803 is.equal = function equal(value, other) { 1804 if (value === other) { 1805 return true; 1806 } 1807 1808 var type = toStr.call(value); 1809 var key; 1810 1811 if (type !== toStr.call(other)) { 1812 return false; 1813 } 1814 1815 if (type === '[object Object]') { 1816 for (key in value) { 1817 if (!is.equal(value[key], other[key]) || !(key in other)) { 1818 return false;
1819 } 1820 } 1821 for (key in other) { 1822 if (!is.equal(value[key], other[key]) || !(key in value)) { 1823 return false; 1824 } 1825 } 1826 return true; 1827 } 1828 1829 if (type === '[object Array]') { 1830 key = value.length; 1831 if (key !== other.length) { 1832 return false; 1833 } 1834 while (key--) { 1835 if (!is.equal(value[key], other[key])) { 1836 return false; 1837 } 1838 } 1839 return true; 1840 } 1841 1842 if (type === '[object Function]') { 1843 return value.prototype === other.prototype; 1844 } 1845 1846 if (type === '[object Date]') { 1847 return value.getTime() === other.getTime(); 1848 } 1849 1850 return false; 1851 }; 1852 1853 /** 1854 * is.hosted 1855 * Test if `value` is hosted by `host`. 1856 * 1857 * @param {Mixed} value to test 1858 * @param {Mixed} host host to test with 1859 * @return {Boolean} true if `value` is hosted by `host`, false otherwise 1860 * @api public 1861 */ 1862 1863 is.hosted = function (value, host) { 1864 var type = typeof host[value]; 1865 return type === 'object' ? !!host[value] : !NON_HOST_TYPES[type]; 1866 }; 1867 1868 /** 1869 * is.instance 1870 * Test if `value` is an instance of `constructor`. 1871 * 1872 * @param {Mixed} value value to test 1873 * @return {Boolean} true if `value` is an instance of `constructor` 1874 * @api public 1875 */ 1876 1877 is.instance = is['instanceof'] = function (value, constructor) { 1878 return value instanceof constructor; 1879 }; 1880 1881 /** 1882 * is.nil / is.null 1883 * Test if `value` is null. 1884 * 1885 * @param {Mixed} value value to test 1886 * @return {Boolean} true if `value` is null, false otherwise 1887 * @api public 1888 */ 1889 1890 is.nil = is['null'] = function (value) { 1891 return value === null; 1892 }; 1893 1894 /** 1895 * is.undef / is.undefined 1896 * Test if `value` is undefined. 1897 * 1898 * @param {Mixed} value value to test 1899 * @return {Boolean} true if `value` is undefined, false otherwise 1900 * @api public 1901 */ 1902 1903 is.undef = is.undefined = function (value) { 1904 return typeof value === 'undefined'; 1905 }; 1906 1907 /** 1908 * Test arguments. 1909 */ 1910 1911 /** 1912 * is.args 1913 * Test if `value` is an arguments object. 1914 * 1915 * @param {Mixed} value value to test 1916 * @return {Boolean} true if `value` is an arguments object, false otherwise 1917 * @api public 1918 */ 1919 1920 is.args = is.arguments = function (value) { 1921 var isStandardArguments = toStr.call(value) === '[object Arguments]'; 1922 var isOldArguments = !is.array(value) && is.arraylike(value) && is.object(value) && is.fn(value.callee); 1923 return isStandardArguments || isOldArguments; 1924 }; 1925 1926 /** 1927 * Test array. 1928 */ 1929 1930 /** 1931 * is.array 1932 * Test if 'value' is an array. 1933 * 1934 * @param {Mixed} value value to test 1935 * @return {Boolean} true if `value` is an array, false otherwise 1936 * @api public 1937 */ 1938 1939 is.array = Array.isArray || function (value) { 1940 return toStr.call(value) === '[object Array]'; 1941 }; 1942 1943 /** 1944 * is.arguments.empty 1945 * Test if `value` is an empty arguments object. 1946 * 1947 * @param {Mixed} value value to test 1948 * @return {Boolean} true if `value` is an empty arguments object, false otherwise 1949 * @api public 1950 */ 1951 is.args.empty = function (value) { 1952 return is.args(value) && value.length === 0; 1953 }; 1954 1955 /** 1956 * is.array.empty 1957 * Test if `value` is an empty array. 1958 * 1959 * @param {Mixed} value value to test 1960 * @return {Boolean} true if `value` is an empty array, false otherwise 1961 * @api public 1962 */ 1963 is.array.empty = function (value) { 1964 return is.array(value) && value.length === 0; 1965 }; 1966 1967 /** 1968 * is.arraylike 1969 * Test if `value` is an arraylike object. 1970 * 1971 * @param {Mixed} value value to test 1972 * @return {Boolean} true if `value` is an arguments object, false otherwise 1973 * @api public 1974 */ 1975 1976 is.arraylike = function (value) { 1977 return !!value && !is.bool(value) 1978 && owns.call(value, 'length') 1979 && isFinite(value.length) 1980 && is.number(value.length) 1981 && value.length >= 0; 1982 }; 1983 1984 /** 1985 * Test boolean. 1986 */ 1987 1988 /** 1989 * is.bool 1990 * Test if `value` is a boolean. 1991 * 1992 * @param {Mixed} value value to test 1993 * @return {Boolean} true if `value` is a boolean, false otherwise 1994 * @api public 1995 */ 1996 1997 is.bool = is['boolean'] = function (value) { 1998 return toStr.call(value) === '[object Boolean]'; 1999 }; 2000 2001 /** 2002 * is.false 2003 * Test if `value` is false. 2004 * 2005 * @param {Mixed} value value to test 2006 * @return {Boolean} true if `value` is false, false otherwise 2007 * @api public 2008 */ 2009 2010 is['false'] = function (value) { 2011 return is.bool(value) && Boolean(Number(value)) === false; 2012 }; 2013 2014 /** 2015 * is.true 2016 * Test if `value` is true. 2017 * 2018 * @param {Mixed} value value to test 2019 * @return {Boolean} true if `value` is true, false otherwise 2020 * @api public 2021 */ 2022 2023 is['true'] = function (value) { 2024 return is.bool(value) && Boolean(Number(value)) === true; 2025 }; 2026 2027 /** 2028 * Test date. 2029 */ 2030 2031 /** 2032 * is.date 2033 * Test if `value` is a date. 2034 * 2035 * @param {Mixed} value value to test 2036 * @return {Boolean} true if `value` is a date, false otherwise 2037 * @api public 2038 */ 2039 2040 is.date = function (value) { 2041 return toStr.call(value) === '[object Date]'; 2042 }; 2043 2044 /** 2045 * is.date.valid 2046 * Test if `value` is a valid date. 2047 * 2048 * @param {Mixed} value value to test 2049 * @returns {Boolean} true if `value` is a valid date, false otherwise 2050 */ 2051 is.date.valid = function (value) { 2052 return is.date(value) && !isNaN(Number(value)); 2053 }; 2054 2055 /** 2056 * Test element. 2057 */ 2058 2059 /** 2060 * is.element 2061 * Test if `value` is an html element. 2062 * 2063 * @param {Mixed} value value to test 2064 * @return {Boolean} true if `value` is an HTML Element, false otherwise 2065 * @api public 2066 */ 2067 2068 is.element = function (value) { 2069 return value !== undefined 2070 && typeof HTMLElement !== 'undefined' 2071 && value instanceof HTMLElement 2072 && value.nodeType === 1; 2073 }; 2074 2075 /** 2076 * Test error. 2077 */ 2078 2079 /** 2080 * is.error 2081 * Test if `value` is an error object. 2082 * 2083 * @param {Mixed} value value to test 2084 * @return {Boolean} true if `value` is an error object, false otherwise 2085 * @api public 2086 */ 2087 2088 is.error = function (value) { 2089 return toStr.call(value) === '[object Error]'; 2090 }; 2091 2092 /** 2093 * Test function. 2094 */ 2095 2096 /** 2097 * is.fn / is.function (deprecated) 2098 * Test if `value` is a function. 2099 * 2100 * @param {Mixed} value value to test 2101 * @return {Boolean} true if `value` is a function, false otherwise 2102 * @api public 2103 */ 2104 2105 is.fn = is['function'] = function (value) { 2106 var isAlert = typeof window !== 'undefined' && value === window.alert; 2107 return isAlert || toStr.call(value) === '[object Function]'; 2108 }; 2109 2110 /** 2111 * Test number. 2112 */ 2113 2114 /** 2115 * is.number 2116 * Test if `value` is a number. 2117 * 2118 * @param {Mixed} value value to test 2119 * @return {Boolean} true if `value` is a number, false otherwise 2120 * @api public 2121 */ 2122 2123 is.number = function (value) { 2124 return toStr.call(value) === '[object Number]'; 2125 }; 2126 2127 /** 2128 * is.infinite 2129 * Test if `value` is positive or negative infinity. 2130 * 2131 * @param {Mixed} value value to test 2132 * @return {Boolean} true if `value` is positive or negative Infinity, false otherwise 2133 * @api public 2134 */ 2135 is.infinite = function (value) { 2136 return value === Infinity || value === -Infinity; 2137 }; 2138 2139 /** 2140 * is.decimal 2141 * Test if `value` is a decimal number. 2142 * 2143 * @param {Mixed} value value to test 2144 * @return {Boolean} true if `value` is a decimal number, false otherwise 2145 * @api public 2146 */ 2147 2148 is.decimal = function (value) { 2149 return is.number(value) && !isActualNaN(value) && !is.infinite(value) && value % 1 !== 0; 2150 }; 2151 2152 /** 2153 * is.divisibleBy 2154 * Test if `value` is divisible by `n`. 2155 * 2156 * @param {Number} value value to test 2157 * @param {Number} n dividend 2158 * @return {Boolean} true if `value` is divisible by `n`, false otherwise 2159 * @api public 2160 */ 2161 2162 is.divisibleBy = function (value, n) { 2163 var isDividendInfinite = is.infinite(value); 2164 var isDivisorInfinite = is.infinite(n); 2165 var isNonZeroNumber = is.number(value) && !isActualNaN(value) && is.number(n) && !isActualNaN(n) && n !== 0; 2166 return isDividendInfinite || isDivisorInfinite || (isNonZeroNumber && value % n === 0); 2167 }; 2168 2169 /** 2170 * is.integer 2171 * Test if `value` is an integer. 2172 * 2173 * @param value to test 2174 * @return {Boolean} true if `value` is an integer, false otherwise 2175 * @api public 2176 */ 2177 2178 is.integer = is['int'] = function (value) { 2179 return is.number(value) && !isActualNaN(value) && value % 1 === 0; 2180 }; 2181 2182 /** 2183 * is.maximum 2184 * Test if `value` is greater than 'others' values. 2185 * 2186 * @param {Number} value value to test 2187 * @param {Array} others values to compare with 2188 * @return {Boolean} true if `value` is greater than `others` values 2189 * @api public 2190 */ 2191 2192 is.maximum = function (value, others) { 2193 if (isActualNaN(value)) { 2194 throw new TypeError('NaN is not a valid value'); 2195 } else if (!is.arraylike(others)) { 2196 throw new TypeError('second argument must be array-like'); 2197 } 2198 var len = others.length; 2199 2200 while (--len >= 0) { 2201 if (value < others[len]) { 2202 return false;
2203 } 2204 } 2205 2206 return true; 2207 }; 2208 2209 /** 2210 * is.minimum 2211 * Test if `value` is less than `others` values. 2212 * 2213 * @param {Number} value value to test 2214 * @param {Array} others values to compare with 2215 * @return {Boolean} true if `value` is less than `others` values 2216 * @api public 2217 */ 2218 2219 is.minimum = function (value, others) { 2220 if (isActualNaN(value)) { 2221 throw new TypeError('NaN is not a valid value'); 2222 } else if (!is.arraylike(others)) { 2223 throw new TypeError('second argument must be array-like'); 2224 } 2225 var len = others.length; 2226 2227 while (--len >= 0) { 2228 if (value > others[len]) { 2229 return false; 2230 } 2231 } 2232 2233 return true; 2234 }; 2235 2236 /** 2237 * is.nan 2238 * Test if `value` is not a number. 2239 * 2240 * @param {Mixed} value value to test 2241 * @return {Boolean} true if `value` is not a number, false otherwise 2242 * @api public 2243 */ 2244 2245 is.nan = function (value) { 2246 return !is.number(value) || value !== value; 2247 }; 2248 2249 /** 2250 * is.even 2251 * Test if `value` is an even number. 2252 * 2253 * @param {Number} value value to test 2254 * @return {Boolean} true if `value` is an even number, false otherwise 2255 * @api public 2256 */ 2257 2258 is.even = function (value) { 2259 return is.infinite(value) || (is.number(value) && value === value && value % 2 === 0); 2260 }; 2261 2262 /** 2263 * is.odd 2264 * Test if `value` is an odd number. 2265 * 2266 * @param {Number} value value to test 2267 * @return {Boolean} true if `value` is an odd number, false otherwise 2268 * @api public 2269 */ 2270 2271 is.odd = function (value) { 2272 return is.infinite(value) || (is.number(value) && value === value && value % 2 !== 0); 2273 }; 2274 2275 /** 2276 * is.ge 2277 * Test if `value` is greater than or equal to `other`. 2278 * 2279 * @param {Number} value value to test 2280 * @param {Number} other value to compare with 2281 * @return {Boolean} 2282 * @api public 2283 */ 2284 2285 is.ge = function (value, other) { 2286 if (isActualNaN(value) || isActualNaN(other)) { 2287 throw new TypeError('NaN is not a valid value'); 2288 } 2289 return !is.infinite(value) && !is.infinite(other) && value >= other; 2290 }; 2291 2292 /** 2293 * is.gt 2294 * Test if `value` is greater than `other`. 2295 * 2296 * @param {Number} value value to test 2297 * @param {Number} other value to compare with 2298 * @return {Boolean} 2299 * @api public 2300 */ 2301 2302 is.gt = function (value, other) { 2303 if (isActualNaN(value) || isActualNaN(other)) { 2304 throw new TypeError('NaN is not a valid value'); 2305 } 2306 return !is.infinite(value) && !is.infinite(other) && value > other; 2307 }; 2308 2309 /** 2310 * is.le 2311 * Test if `value` is less than or equal to `other`. 2312 * 2313 * @param {Number} value value to test 2314 * @param {Number} other value to compare with 2315 * @return {Boolean} if 'value' is less than or equal to 'other' 2316 * @api public 2317 */ 2318 2319 is.le = function (value, other) { 2320 if (isActualNaN(value) || isActualNaN(other)) { 2321 throw new TypeError('NaN is not a valid value'); 2322 } 2323 return !is.infinite(value) && !is.infinite(other) && value <= other; 2324 }; 2325 2326 /** 2327 * is.lt 2328 * Test if `value` is less than `other`. 2329 * 2330 * @param {Number} value value to test 2331 * @param {Number} other value to compare with 2332 * @return {Boolean} if `value` is less than `other` 2333 * @api public 2334 */ 2335 2336 is.lt = function (value, other) { 2337 if (isActualNaN(value) || isActualNaN(other)) { 2338 throw new TypeError('NaN is not a valid value'); 2339 } 2340 return !is.infinite(value) && !is.infinite(other) && value < other; 2341 }; 2342 2343 /** 2344 * is.within 2345 * Test if `value` is within `start` and `finish`. 2346 * 2347 * @param {Number} value value to test 2348 * @param {Number} start lower bound 2349 * @param {Number} finish upper bound 2350 * @return {Boolean} true if 'value' is is within 'start' and 'finish' 2351 * @api public 2352 */ 2353 is.within = function (value, start, finish) { 2354 if (isActualNaN(value) || isActualNaN(start) || isActualNaN(finish)) { 2355 throw new TypeError('NaN is not a valid value'); 2356 } else if (!is.number(value) || !is.number(start) || !is.number(finish)) { 2357 throw new TypeError('all arguments must be numbers'); 2358 } 2359 var isAnyInfinite = is.infinite(value) || is.infinite(start) || is.infinite(finish); 2360 return isAnyInfinite || (value >= start && value <= finish); 2361 }; 2362 2363 /** 2364 * Test object. 2365 */ 2366 2367 /** 2368 * is.object 2369 * Test if `value` is an object. 2370 * 2371 * @param {Mixed} value value to test 2372 * @return {Boolean} true if `value` is an object, false otherwise 2373 * @api public 2374 */ 2375 is.object = function (value) { 2376 return toStr.call(value) === '[object Object]'; 2377 }; 2378 2379 /** 2380 * is.primitive 2381 * Test if `value` is a primitive. 2382 * 2383 * @param {Mixed} value value to test 2384 * @return {Boolean} true if `value` is a primitive, false otherwise 2385 * @api public 2386 */ 2387 is.primitive = function isPrimitive(value) { 2388 if (!value) { 2389 return true; 2390 } 2391 if (typeof value === 'object' || is.object(value) || is.fn(value) || is.array(value)) { 2392 return false;
2393 } 2394 return true; 2395 }; 2396 2397 /** 2398 * is.hash 2399 * Test if `value` is a hash - a plain object literal. 2400 * 2401 * @param {Mixed} value value to test 2402 * @return {Boolean} true if `value` is a hash, false otherwise 2403 * @api public 2404 */ 2405 2406 is.hash = function (value) { 2407 return is.object(value) && value.constructor === Object && !value.nodeType && !value.setInterval; 2408 }; 2409 2410 /** 2411 * Test regexp. 2412 */ 2413 2414 /** 2415 * is.regexp 2416 * Test if `value` is a regular expression. 2417 * 2418 * @param {Mixed} value value to test 2419 * @return {Boolean} true if `value` is a regexp, false otherwise 2420 * @api public 2421 */ 2422 2423 is.regexp = function (value) { 2424 return toStr.call(value) === '[object RegExp]'; 2425 }; 2426 2427 /** 2428 * Test string. 2429 */ 2430 2431 /** 2432 * is.string 2433 * Test if `value` is a string. 2434 * 2435 * @param {Mixed} value value to test 2436 * @return {Boolean} true if 'value' is a string, false otherwise 2437 * @api public 2438 */ 2439 2440 is.string = function (value) { 2441 return toStr.call(value) === '[object String]'; 2442 }; 2443 2444 /** 2445 * Test base64 string. 2446 */ 2447 2448 /** 2449 * is.base64 2450 * Test if `value` is a valid base64 encoded string. 2451 * 2452 * @param {Mixed} value value to test 2453 * @return {Boolean} true if 'value' is a base64 encoded string, false otherwise 2454 * @api public 2455 */ 2456 2457 is.base64 = function (value) { 2458 return is.string(value) && (!value.length || base64Regex.test(value)); 2459 }; 2460 2461 /** 2462 * Test base64 string. 2463 */ 2464 2465 /** 2466 * is.hex 2467 * Test if `value` is a valid hex encoded string. 2468 * 2469 * @param {Mixed} value value to test 2470 * @return {Boolean} true if 'value' is a hex encoded string, false otherwise 2471 * @api public 2472 */ 2473 2474 is.hex = function (value) { 2475 return is.string(value) && (!value.length || hexRegex.test(value)); 2476 }; 2477 2478 /** 2479 * is.symbol 2480 * Test if `value` is an ES6 Symbol 2481 * 2482 * @param {Mixed} value value to test 2483 * @return {Boolean} true if `value` is a Symbol, false otherise 2484 * @api public 2485 */ 2486 2487 is.symbol = function (value) { 2488 return typeof Symbol === 'function' && toStr.call(value) === '[object Symbol]' && typeof symbolValueOf.call(value) === 'symbol'; 2489 }; 2490 2491 module.exports = is; 2492 2493 2494/***/ } 2495/******/ ]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.